nxt-json-view 22.0.0 → 22.1.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.
@@ -1,227 +1,408 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, input, model, signal, effect, computed, inject, ViewEncapsulation, Component, linkedSignal } from '@angular/core';
3
-
4
- class ExpanderService {
5
- constructor() {
6
- this.items = new Set();
7
- }
8
- addItem(item) {
9
- this.items.add(item);
10
- }
11
- removeItem(item) {
12
- this.items.delete(item);
13
- }
14
- expandTo(level) {
15
- this.items.forEach(i => {
16
- if (i.level() <= level && !i.isOpen()) {
17
- i.levelOpen.set(level);
18
- i.toggle();
19
- }
20
- });
21
- }
22
- collapseTo(level) {
23
- this.items.forEach(i => {
24
- if (i.level() > level && i.isOpen())
25
- i.toggle();
26
- });
27
- }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ExpanderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ExpanderService, providedIn: 'root' }); }
30
- }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: ExpanderService, decorators: [{
32
- type: Injectable,
33
- args: [{
34
- providedIn: 'root'
35
- }]
36
- }] });
37
-
38
- /** @internal */
1
+ import * as i0 from "@angular/core";
2
+ import { Component, Injectable, ViewEncapsulation, computed, effect, inject, input, linkedSignal, model, signal } from "@angular/core";
3
+ var ExpanderService = class ExpanderService {
4
+ constructor() {
5
+ this.items = /* @__PURE__ */ new Set();
6
+ }
7
+ addItem(item) {
8
+ this.items.add(item);
9
+ }
10
+ removeItem(item) {
11
+ this.items.delete(item);
12
+ }
13
+ expandTo(level) {
14
+ this.items.forEach((i) => {
15
+ if (i.level() <= level && !i.isOpen()) {
16
+ i.levelOpen.set(level);
17
+ i.toggle();
18
+ }
19
+ });
20
+ }
21
+ collapseTo(level) {
22
+ this.items.forEach((i) => {
23
+ if (i.level() > level && i.isOpen()) i.toggle();
24
+ });
25
+ }
26
+ static {
27
+ this.ɵfac = i0.ɵɵngDeclareFactory({
28
+ minVersion: "12.0.0",
29
+ version: "22.2.5",
30
+ ngImport: i0,
31
+ type: ExpanderService,
32
+ deps: [],
33
+ target: i0.ɵɵFactoryTarget.Injectable
34
+ });
35
+ }
36
+ static {
37
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
38
+ minVersion: "12.0.0",
39
+ version: "22.2.5",
40
+ ngImport: i0,
41
+ type: ExpanderService,
42
+ providedIn: "root"
43
+ });
44
+ }
45
+ };
46
+ i0.ɵɵngDeclareClassMetadata({
47
+ minVersion: "12.0.0",
48
+ version: "22.2.5",
49
+ ngImport: i0,
50
+ type: ExpanderService,
51
+ decorators: [{
52
+ type: Injectable,
53
+ args: [{ providedIn: "root" }]
54
+ }]
55
+ });
39
56
  function isObject(value) {
40
- return value !== null && typeof value === 'object';
57
+ return value !== null && typeof value === "object";
41
58
  }
42
- /** @internal */
43
59
  function isArray(value) {
44
- return Array.isArray(value);
60
+ return Array.isArray(value);
45
61
  }
46
- /** @internal */
47
62
  function isUndefined(value) {
48
- return typeof value === 'undefined';
63
+ return typeof value === "undefined";
49
64
  }
50
- /** @internal */
51
65
  function isString(value) {
52
- return typeof value === 'string';
66
+ return typeof value === "string";
53
67
  }
54
- /** @internal */
55
68
  function isNumber(value) {
56
- return typeof value === 'number';
69
+ return typeof value === "number";
57
70
  }
58
- /** @internal */
59
71
  function isBoolean(value) {
60
- return typeof value === 'boolean';
61
- }
62
-
63
- /** @internal */
64
- class JsonViewItemComponent {
65
- constructor() {
66
- this.data = input(/* @ts-ignore */
67
- ...(ngDevMode ? [undefined, { debugName: "data" }] : /* istanbul ignore next */ []));
68
- this.key = input(/* @ts-ignore */
69
- ...(ngDevMode ? [undefined, { debugName: "key" }] : /* istanbul ignore next */ []));
70
- this.level = input(0, /* @ts-ignore */
71
- ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
72
- this.levelOpen = model(/* @ts-ignore */
73
- ...(ngDevMode ? [undefined, { debugName: "levelOpen" }] : /* istanbul ignore next */ []));
74
- this.levelLabels = input(/* @ts-ignore */
75
- ...(ngDevMode ? [undefined, { debugName: "levelLabels" }] : /* istanbul ignore next */ []));
76
- this.isOpen = signal(false, /* @ts-ignore */
77
- ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
78
- this.effectRef = effect(() => {
79
- const levelOpen = this.levelOpen();
80
- this.isOpen.set(!isUndefined(levelOpen) && (this.level() <= levelOpen));
81
- this.effectRef.destroy();
82
- }, { ...(ngDevMode ? { debugName: "effectRef" } : /* istanbul ignore next */ {}), manualCleanup: true });
83
- this.childrenKeys = computed(() => {
84
- const data = this.data();
85
- if (isObject(data)) {
86
- return Object.keys(data);
87
- }
88
- return [];
89
- }, /* @ts-ignore */
90
- ...(ngDevMode ? [{ debugName: "childrenKeys" }] : /* istanbul ignore next */ []));
91
- this.hasChildren = computed(() => !!(this.childrenKeys().length), /* @ts-ignore */
92
- ...(ngDevMode ? [{ debugName: "hasChildren" }] : /* istanbul ignore next */ []));
93
- this._levelLabels = computed(() => {
94
- const levelLabels = this.levelLabels();
95
- return levelLabels?.[this.level()] || {};
96
- }, /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "_levelLabels" }] : /* istanbul ignore next */ []));
98
- this.dataType = computed(() => {
99
- let dataType;
100
- const data = this.data();
101
- if (isObject(data)) {
102
- dataType = 'Object';
103
- if (isArray(data)) {
104
- dataType = 'Array';
105
- }
106
- const key = this.key();
107
- if (key && this._levelLabels()[key]) {
108
- dataType = this._levelLabels()[key];
109
- }
110
- }
111
- return dataType;
112
- }, /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "dataType" }] : /* istanbul ignore next */ []));
114
- this.value = computed(() => {
115
- let value;
116
- const data = this.data();
117
- if (!isObject(data)) {
118
- value = data;
119
- if (null === data) {
120
- value = 'null';
121
- }
122
- }
123
- return value;
124
- }, /* @ts-ignore */
125
- ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
126
- this.valueType = computed(() => {
127
- const data = this.data();
128
- if (!isObject(data)) {
129
- if (isString(data)) {
130
- return 'string';
131
- }
132
- else if (isNumber(data)) {
133
- return 'number';
134
- }
135
- else if (isBoolean(data)) {
136
- return 'boolean';
137
- }
138
- else if (null === data) {
139
- return 'null';
140
- }
141
- }
142
- return;
143
- }, /* @ts-ignore */
144
- ...(ngDevMode ? [{ debugName: "valueType" }] : /* istanbul ignore next */ []));
145
- this.isObject = computed(() => isObject(this.data()), /* @ts-ignore */
146
- ...(ngDevMode ? [{ debugName: "isObject" }] : /* istanbul ignore next */ []));
147
- this.isArray = computed(() => isObject(this.data()) && isArray(this.data()), /* @ts-ignore */
148
- ...(ngDevMode ? [{ debugName: "isArray" }] : /* istanbul ignore next */ []));
149
- this.expanderService = inject(ExpanderService);
150
- }
151
- ngOnInit() {
152
- this.expanderService.addItem(this);
153
- }
154
- ngOnDestroy() {
155
- this.expanderService.removeItem(this);
156
- }
157
- toggle() {
158
- if (!(this.childrenKeys().length)) {
159
- return;
160
- }
161
- this.isOpen.set(!this.isOpen());
162
- }
163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: JsonViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
164
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", 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"] }] }); }
72
+ return typeof value === "boolean";
165
73
  }
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: JsonViewItemComponent, decorators: [{
167
- type: Component,
168
- 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"] }]
169
- }], 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
-
171
- class JsonViewComponent {
172
- constructor() {
173
- /** JSON data, any valid JSON object */
174
- this.data = input(/* @ts-ignore */
175
- ...(ngDevMode ? [undefined, { debugName: "data" }] : /* istanbul ignore next */ []));
176
- /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
177
- this.levelOpen = input(/* @ts-ignore */
178
- ...(ngDevMode ? [undefined, { debugName: "levelOpen" }] : /* istanbul ignore next */ []));
179
- /** Custom labels for elements within the hierarcy */
180
- this.levelLabels = input(/* @ts-ignore */
181
- ...(ngDevMode ? [undefined, { debugName: "levelLabels" }] : /* istanbul ignore next */ []));
182
- /** @internal */
183
- this._levelOpen = linkedSignal({ ...(ngDevMode ? { debugName: "_levelOpen" } : /* istanbul ignore next */ {}), source: () => this.levelOpen(),
184
- computation: level => level });
185
- this.expanderService = inject(ExpanderService);
186
- }
187
- ngAfterViewChecked() {
188
- if (this._levelOpen() != undefined) {
189
- // Reset levelOpen to keep nested items collapsed when toggling
190
- this._levelOpen.set(undefined);
191
- }
192
- }
193
- /** Expand all items up to the given level */
194
- expandTo(level) {
195
- this._levelOpen.set(level);
196
- this.expanderService.expandTo(level);
197
- }
198
- /** Collapse any open items above the given level */
199
- collapseTo(level) {
200
- this.expanderService.collapseTo(level);
201
- }
202
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: JsonViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.6", 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: [
204
- {
205
- provide: ExpanderService,
206
- useClass: ExpanderService
207
- }
208
- ], 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"] }] }); }
209
- }
210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: JsonViewComponent, decorators: [{
211
- type: Component,
212
- args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, providers: [
213
- {
214
- provide: ExpanderService,
215
- useClass: ExpanderService
216
- }
217
- ], imports: [
218
- JsonViewItemComponent
219
- ], 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" }]
220
- }], 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 }] }] } });
221
-
222
- /**
223
- * Generated bundle index. Do not edit.
224
- */
225
-
74
+ var JsonViewItemComponent = class JsonViewItemComponent {
75
+ constructor() {
76
+ this.data = input(...ngDevMode ? [void 0, { debugName: "data" }] : /* istanbul ignore next */ []);
77
+ this.key = input(...ngDevMode ? [void 0, { debugName: "key" }] : /* istanbul ignore next */ []);
78
+ this.level = input(0, ...ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []);
79
+ this.levelOpen = model(...ngDevMode ? [void 0, { debugName: "levelOpen" }] : /* istanbul ignore next */ []);
80
+ this.levelLabels = input(...ngDevMode ? [void 0, { debugName: "levelLabels" }] : /* istanbul ignore next */ []);
81
+ this.isOpen = signal(false, ...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
82
+ this.effectRef = effect(() => {
83
+ const levelOpen = this.levelOpen();
84
+ this.isOpen.set(!isUndefined(levelOpen) && this.level() <= levelOpen);
85
+ this.effectRef.destroy();
86
+ }, {
87
+ ...ngDevMode ? { debugName: "effectRef" } : /* istanbul ignore next */ {},
88
+ manualCleanup: true
89
+ });
90
+ this.childrenKeys = computed(() => {
91
+ const data = this.data();
92
+ if (isObject(data)) return Object.keys(data);
93
+ return [];
94
+ }, ...ngDevMode ? [{ debugName: "childrenKeys" }] : /* istanbul ignore next */ []);
95
+ this.hasChildren = computed(() => !!this.childrenKeys().length, ...ngDevMode ? [{ debugName: "hasChildren" }] : /* istanbul ignore next */ []);
96
+ this._levelLabels = computed(() => {
97
+ return this.levelLabels()?.[this.level()] || {};
98
+ }, ...ngDevMode ? [{ debugName: "_levelLabels" }] : /* istanbul ignore next */ []);
99
+ this.dataType = computed(() => {
100
+ let dataType;
101
+ const data = this.data();
102
+ if (isObject(data)) {
103
+ dataType = "Object";
104
+ if (isArray(data)) dataType = "Array";
105
+ const key = this.key();
106
+ if (key && this._levelLabels()[key]) dataType = this._levelLabels()[key];
107
+ }
108
+ return dataType;
109
+ }, ...ngDevMode ? [{ debugName: "dataType" }] : /* istanbul ignore next */ []);
110
+ this.value = computed(() => {
111
+ let value;
112
+ const data = this.data();
113
+ if (!isObject(data)) {
114
+ value = data;
115
+ if (null === data) value = "null";
116
+ }
117
+ return value;
118
+ }, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
119
+ this.valueType = computed(() => {
120
+ const data = this.data();
121
+ if (!isObject(data)) {
122
+ if (isString(data)) return "string";
123
+ else if (isNumber(data)) return "number";
124
+ else if (isBoolean(data)) return "boolean";
125
+ else if (null === data) return "null";
126
+ }
127
+ }, ...ngDevMode ? [{ debugName: "valueType" }] : /* istanbul ignore next */ []);
128
+ this.isObject = computed(() => isObject(this.data()), ...ngDevMode ? [{ debugName: "isObject" }] : /* istanbul ignore next */ []);
129
+ this.isArray = computed(() => isObject(this.data()) && isArray(this.data()), ...ngDevMode ? [{ debugName: "isArray" }] : /* istanbul ignore next */ []);
130
+ this.expanderService = inject(ExpanderService);
131
+ }
132
+ ngOnInit() {
133
+ this.expanderService.addItem(this);
134
+ }
135
+ ngOnDestroy() {
136
+ this.expanderService.removeItem(this);
137
+ }
138
+ toggle() {
139
+ if (!this.childrenKeys().length) return;
140
+ this.isOpen.set(!this.isOpen());
141
+ }
142
+ static {
143
+ this.ɵfac = i0.ɵɵngDeclareFactory({
144
+ minVersion: "12.0.0",
145
+ version: "22.2.5",
146
+ ngImport: i0,
147
+ type: JsonViewItemComponent,
148
+ deps: [],
149
+ target: i0.ɵɵFactoryTarget.Component
150
+ });
151
+ }
152
+ static {
153
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
154
+ minVersion: "17.0.0",
155
+ version: "22.2.5",
156
+ type: JsonViewItemComponent,
157
+ isStandalone: true,
158
+ selector: "nxt-json-view-item",
159
+ inputs: {
160
+ data: {
161
+ classPropertyName: "data",
162
+ publicName: "data",
163
+ isSignal: true,
164
+ isRequired: false,
165
+ transformFunction: null
166
+ },
167
+ key: {
168
+ classPropertyName: "key",
169
+ publicName: "key",
170
+ isSignal: true,
171
+ isRequired: false,
172
+ transformFunction: null
173
+ },
174
+ level: {
175
+ classPropertyName: "level",
176
+ publicName: "level",
177
+ isSignal: true,
178
+ isRequired: false,
179
+ transformFunction: null
180
+ },
181
+ levelOpen: {
182
+ classPropertyName: "levelOpen",
183
+ publicName: "levelOpen",
184
+ isSignal: true,
185
+ isRequired: false,
186
+ transformFunction: null
187
+ },
188
+ levelLabels: {
189
+ classPropertyName: "levelLabels",
190
+ publicName: "levelLabels",
191
+ isSignal: true,
192
+ isRequired: false,
193
+ transformFunction: null
194
+ }
195
+ },
196
+ outputs: { levelOpen: "levelOpenChange" },
197
+ ngImport: i0,
198
+ 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",
199
+ 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"],
200
+ dependencies: [{
201
+ kind: "component",
202
+ type: JsonViewItemComponent,
203
+ selector: "nxt-json-view-item",
204
+ inputs: [
205
+ "data",
206
+ "key",
207
+ "level",
208
+ "levelOpen",
209
+ "levelLabels"
210
+ ],
211
+ outputs: ["levelOpenChange"]
212
+ }]
213
+ });
214
+ }
215
+ };
216
+ i0.ɵɵngDeclareClassMetadata({
217
+ minVersion: "12.0.0",
218
+ version: "22.2.5",
219
+ ngImport: i0,
220
+ type: JsonViewItemComponent,
221
+ decorators: [{
222
+ type: Component,
223
+ args: [{
224
+ selector: "nxt-json-view-item",
225
+ encapsulation: ViewEncapsulation.Emulated,
226
+ 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",
227
+ 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"]
228
+ }]
229
+ }],
230
+ propDecorators: {
231
+ data: [{
232
+ type: i0.Input,
233
+ args: [{
234
+ isSignal: true,
235
+ alias: "data",
236
+ required: false
237
+ }]
238
+ }],
239
+ key: [{
240
+ type: i0.Input,
241
+ args: [{
242
+ isSignal: true,
243
+ alias: "key",
244
+ required: false
245
+ }]
246
+ }],
247
+ level: [{
248
+ type: i0.Input,
249
+ args: [{
250
+ isSignal: true,
251
+ alias: "level",
252
+ required: false
253
+ }]
254
+ }],
255
+ levelOpen: [{
256
+ type: i0.Input,
257
+ args: [{
258
+ isSignal: true,
259
+ alias: "levelOpen",
260
+ required: false
261
+ }]
262
+ }, {
263
+ type: i0.Output,
264
+ args: ["levelOpenChange"]
265
+ }],
266
+ levelLabels: [{
267
+ type: i0.Input,
268
+ args: [{
269
+ isSignal: true,
270
+ alias: "levelLabels",
271
+ required: false
272
+ }]
273
+ }]
274
+ }
275
+ });
276
+ var JsonViewComponent = class JsonViewComponent {
277
+ constructor() {
278
+ this.data = input(...ngDevMode ? [void 0, { debugName: "data" }] : /* istanbul ignore next */ []);
279
+ this.levelOpen = input(...ngDevMode ? [void 0, { debugName: "levelOpen" }] : /* istanbul ignore next */ []);
280
+ this.levelLabels = input(...ngDevMode ? [void 0, { debugName: "levelLabels" }] : /* istanbul ignore next */ []);
281
+ this._levelOpen = linkedSignal({
282
+ ...ngDevMode ? { debugName: "_levelOpen" } : /* istanbul ignore next */ {},
283
+ source: () => this.levelOpen(),
284
+ computation: (level) => level
285
+ });
286
+ this.expanderService = inject(ExpanderService);
287
+ }
288
+ ngAfterViewChecked() {
289
+ if (this._levelOpen() != void 0) this._levelOpen.set(void 0);
290
+ }
291
+ expandTo(level) {
292
+ this._levelOpen.set(level);
293
+ this.expanderService.expandTo(level);
294
+ }
295
+ collapseTo(level) {
296
+ this.expanderService.collapseTo(level);
297
+ }
298
+ static {
299
+ this.ɵfac = i0.ɵɵngDeclareFactory({
300
+ minVersion: "12.0.0",
301
+ version: "22.2.5",
302
+ ngImport: i0,
303
+ type: JsonViewComponent,
304
+ deps: [],
305
+ target: i0.ɵɵFactoryTarget.Component
306
+ });
307
+ }
308
+ static {
309
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
310
+ minVersion: "17.1.0",
311
+ version: "22.2.5",
312
+ type: JsonViewComponent,
313
+ isStandalone: true,
314
+ selector: "nxt-json-view",
315
+ inputs: {
316
+ data: {
317
+ classPropertyName: "data",
318
+ publicName: "data",
319
+ isSignal: true,
320
+ isRequired: false,
321
+ transformFunction: null
322
+ },
323
+ levelOpen: {
324
+ classPropertyName: "levelOpen",
325
+ publicName: "levelOpen",
326
+ isSignal: true,
327
+ isRequired: false,
328
+ transformFunction: null
329
+ },
330
+ levelLabels: {
331
+ classPropertyName: "levelLabels",
332
+ publicName: "levelLabels",
333
+ isSignal: true,
334
+ isRequired: false,
335
+ transformFunction: null
336
+ }
337
+ },
338
+ providers: [{
339
+ provide: ExpanderService,
340
+ useClass: ExpanderService
341
+ }],
342
+ ngImport: i0,
343
+ 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",
344
+ styles: [""],
345
+ dependencies: [{
346
+ kind: "component",
347
+ type: JsonViewItemComponent,
348
+ selector: "nxt-json-view-item",
349
+ inputs: [
350
+ "data",
351
+ "key",
352
+ "level",
353
+ "levelOpen",
354
+ "levelLabels"
355
+ ],
356
+ outputs: ["levelOpenChange"]
357
+ }]
358
+ });
359
+ }
360
+ };
361
+ i0.ɵɵngDeclareClassMetadata({
362
+ minVersion: "12.0.0",
363
+ version: "22.2.5",
364
+ ngImport: i0,
365
+ type: JsonViewComponent,
366
+ decorators: [{
367
+ type: Component,
368
+ args: [{
369
+ selector: "nxt-json-view",
370
+ encapsulation: ViewEncapsulation.Emulated,
371
+ providers: [{
372
+ provide: ExpanderService,
373
+ useClass: ExpanderService
374
+ }],
375
+ imports: [JsonViewItemComponent],
376
+ 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"
377
+ }]
378
+ }],
379
+ propDecorators: {
380
+ data: [{
381
+ type: i0.Input,
382
+ args: [{
383
+ isSignal: true,
384
+ alias: "data",
385
+ required: false
386
+ }]
387
+ }],
388
+ levelOpen: [{
389
+ type: i0.Input,
390
+ args: [{
391
+ isSignal: true,
392
+ alias: "levelOpen",
393
+ required: false
394
+ }]
395
+ }],
396
+ levelLabels: [{
397
+ type: i0.Input,
398
+ args: [{
399
+ isSignal: true,
400
+ alias: "levelLabels",
401
+ required: false
402
+ }]
403
+ }]
404
+ }
405
+ });
226
406
  export { JsonViewComponent };
227
- //# sourceMappingURL=nxt-json-view.mjs.map
407
+
408
+ //# sourceMappingURL=nxt-json-view.mjs.map
@@ -1 +1 @@
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/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'\nimport { ExpanderService } from '../expander/expander.service'\nimport { LevelLabels } from '../utils/interfaces'\nimport { isArray, isBoolean, isNumber, isObject, isString, isUndefined } from '../utils/utils'\n\n/** @internal */\n@Component({\n selector: 'nxt-json-view-item',\n templateUrl: './json-view-item.component.html',\n styleUrls: ['./json-view-item.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n\n})\nexport class JsonViewItemComponent implements OnInit, OnDestroy {\n\n readonly data = input<any>()\n\n readonly key = input<string>()\n readonly level = input<number>(0)\n readonly levelOpen = model<number>()\n readonly levelLabels = input<LevelLabels>()\n\n readonly isOpen = signal(false)\n private readonly effectRef = effect(() => {\n const levelOpen = this.levelOpen()\n this.isOpen.set(!isUndefined(levelOpen) && (this.level() <= levelOpen))\n this.effectRef.destroy()\n }, { manualCleanup: true })\n readonly childrenKeys = computed(() => {\n const data = this.data()\n if (isObject(data)) {\n return Object.keys(data)\n }\n return []\n })\n\n readonly hasChildren = computed(() => !!(this.childrenKeys().length))\n\n readonly _levelLabels = computed(() => {\n const levelLabels = this.levelLabels()\n return levelLabels?.[this.level()] || {}\n })\n\n readonly dataType = computed(() => {\n let dataType\n const data = this.data()\n if (isObject(data)) {\n dataType = 'Object'\n if (isArray(data)) {\n dataType = 'Array'\n }\n const key = this.key()\n if (key && this._levelLabels()[key]) {\n dataType = this._levelLabels()[key]\n }\n }\n return dataType\n })\n readonly value = computed(() => {\n let value\n const data = this.data()\n if (!isObject(data)) {\n value = data\n if (null === data) {\n value = 'null'\n }\n }\n return value\n })\n readonly valueType = computed(() => {\n const data = this.data()\n if (!isObject(data)) {\n if (isString(data)) {\n return 'string'\n } else if (isNumber(data)) {\n return 'number'\n } else if (isBoolean(data)) {\n return 'boolean'\n } else if (null === data) {\n return 'null'\n }\n }\n return\n })\n readonly isObject = computed(() => isObject(this.data()))\n readonly isArray = computed(() => isObject(this.data()) && isArray(this.data()))\n\n private readonly expanderService = inject(ExpanderService)\n\n ngOnInit() {\n this.expanderService.addItem(this)\n }\n\n ngOnDestroy() {\n this.expanderService.removeItem(this)\n }\n\n toggle() {\n if (!(this.childrenKeys().length)) {\n return\n }\n this.isOpen.set(!this.isOpen())\n }\n\n}\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'\nimport { LevelLabels } from '../utils/interfaces'\nimport { ExpanderService } from '../expander/expander.service'\nimport { JsonViewItemComponent } from '../json-view-item/json-view-item.component'\n\n@Component({\n selector: 'nxt-json-view',\n templateUrl: './json-view.component.html',\n styleUrls: ['./json-view.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n providers: [\n {\n provide: ExpanderService,\n useClass: ExpanderService\n }\n ],\n imports: [\n JsonViewItemComponent\n ]\n})\nexport class JsonViewComponent implements AfterViewChecked {\n /** JSON data, any valid JSON object */\n readonly data = input<any>()\n /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */\n readonly levelOpen = input<number>()\n /** Custom labels for elements within the hierarcy */\n readonly levelLabels = input<LevelLabels>()\n\n /** @internal */\n readonly _levelOpen = linkedSignal({\n source: () => this.levelOpen(),\n computation: level => level\n })\n\n private readonly expanderService = inject(ExpanderService)\n\n ngAfterViewChecked(): void {\n if (this._levelOpen() != undefined) {\n // Reset levelOpen to keep nested items collapsed when toggling\n this._levelOpen.set(undefined)\n }\n }\n\n /** Expand all items up to the given level */\n expandTo(level: number) {\n this._levelOpen.set(level)\n this.expanderService.expandTo(level)\n }\n\n /** Collapse any open items above the given level */\n collapseTo(level: number) {\n this.expanderService.collapseTo(level)\n }\n}\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nxt-json-view.mjs","names":[],"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"],"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 */\nexport function isObject(value: any): value is object {\n return value !== null && typeof value === 'object'\n}\n\n/** @internal */\nexport function isArray(value: any): value is unknown[] {\n return Array.isArray(value)\n}\n\n/** @internal */\nexport function isUndefined<T>(value?: T): value is undefined {\n return typeof value === 'undefined'\n}\n\n/** @internal */\nexport function isString(value: any): value is string {\n return typeof value === 'string'\n}\n\n/** @internal */\nexport function isNumber(value: any): value is number {\n return typeof value === 'number'\n}\n\n/** @internal */\nexport function isBoolean(value: any): value is boolean {\n return typeof value === 'boolean'\n}\n","import { Component, computed, effect, inject, input, model, OnDestroy, OnInit, signal, ViewEncapsulation } from '@angular/core'\nimport { ExpanderService } from '../expander/expander.service'\nimport { LevelLabels } from '../utils/interfaces'\nimport { isArray, isBoolean, isNumber, isObject, isString, isUndefined } from '../utils/utils'\n\n/** @internal */\n@Component({\n selector: 'nxt-json-view-item',\n templateUrl: './json-view-item.component.html',\n styleUrls: ['./json-view-item.component.scss'],\n encapsulation: ViewEncapsulation.Emulated\n\n})\nexport class JsonViewItemComponent implements OnInit, OnDestroy {\n\n readonly data = input<any>()\n\n readonly key = input<string>()\n readonly level = input<number>(0)\n readonly levelOpen = model<number>()\n readonly levelLabels = input<LevelLabels>()\n\n readonly isOpen = signal(false)\n private readonly effectRef = effect(() => {\n const levelOpen = this.levelOpen()\n this.isOpen.set(!isUndefined(levelOpen) && (this.level() <= levelOpen))\n this.effectRef.destroy()\n }, { manualCleanup: true })\n readonly childrenKeys = computed(() => {\n const data = this.data()\n if (isObject(data)) {\n return Object.keys(data)\n }\n return []\n })\n\n readonly hasChildren = computed(() => !!(this.childrenKeys().length))\n\n readonly _levelLabels = computed(() => {\n const levelLabels = this.levelLabels()\n return levelLabels?.[this.level()] || {}\n })\n\n readonly dataType = computed(() => {\n let dataType\n const data = this.data()\n if (isObject(data)) {\n dataType = 'Object'\n if (isArray(data)) {\n dataType = 'Array'\n }\n const key = this.key()\n if (key && this._levelLabels()[key]) {\n dataType = this._levelLabels()[key]\n }\n }\n return dataType\n })\n readonly value = computed(() => {\n let value\n const data = this.data()\n if (!isObject(data)) {\n value = data\n if (null === data) {\n value = 'null'\n }\n }\n return value\n })\n readonly valueType = computed(() => {\n const data = this.data()\n if (!isObject(data)) {\n if (isString(data)) {\n return 'string'\n } else if (isNumber(data)) {\n return 'number'\n } else if (isBoolean(data)) {\n return 'boolean'\n } else if (null === data) {\n return 'null'\n }\n }\n return\n })\n readonly isObject = computed(() => isObject(this.data()))\n readonly isArray = computed(() => isObject(this.data()) && isArray(this.data()))\n\n private readonly expanderService = inject(ExpanderService)\n\n ngOnInit() {\n this.expanderService.addItem(this)\n }\n\n ngOnDestroy() {\n this.expanderService.removeItem(this)\n }\n\n toggle() {\n if (!(this.childrenKeys().length)) {\n return\n }\n this.isOpen.set(!this.isOpen())\n }\n\n}\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'\nimport { LevelLabels } from '../utils/interfaces'\nimport { ExpanderService } from '../expander/expander.service'\nimport { JsonViewItemComponent } from '../json-view-item/json-view-item.component'\n\n@Component({\n selector: 'nxt-json-view',\n templateUrl: './json-view.component.html',\n styleUrls: ['./json-view.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n providers: [\n {\n provide: ExpanderService,\n useClass: ExpanderService\n }\n ],\n imports: [\n JsonViewItemComponent\n ]\n})\nexport class JsonViewComponent implements AfterViewChecked {\n /** JSON data, any valid JSON object */\n readonly data = input<any>()\n /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */\n readonly levelOpen = input<number>()\n /** Custom labels for elements within the hierarcy */\n readonly levelLabels = input<LevelLabels>()\n\n /** @internal */\n readonly _levelOpen = linkedSignal({\n source: () => this.levelOpen(),\n computation: level => level\n })\n\n private readonly expanderService = inject(ExpanderService)\n\n ngAfterViewChecked(): void {\n if (this._levelOpen() != undefined) {\n // Reset levelOpen to keep nested items collapsed when toggling\n this._levelOpen.set(undefined)\n }\n }\n\n /** Expand all items up to the given level */\n expandTo(level: number) {\n this._levelOpen.set(level)\n this.expanderService.expandTo(level)\n }\n\n /** Collapse any open items above the given level */\n collapseTo(level: number) {\n this.expanderService.collapseTo(level)\n }\n}\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"],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
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": "22.0.0",
5
+ "version": "22.1.0",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "repository": {
@@ -1,30 +1,41 @@
1
- import * as _angular_core 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: _angular_core.InputSignal<any>;
13
- /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
14
- readonly levelOpen: _angular_core.InputSignal<number | undefined>;
15
- /** Custom labels for elements within the hierarcy */
16
- readonly levelLabels: _angular_core.InputSignal<LevelLabels | undefined>;
17
- /** @internal */
18
- readonly _levelOpen: _angular_core.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: _angular_core.ɵɵFactoryDeclaration<JsonViewComponent, never>;
26
- static ɵcmp: _angular_core.ɵɵ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>;
1
+ import * as i0 from "@angular/core";
2
+ import { AfterViewChecked } from "@angular/core";
3
+ export interface LevelLabels {
4
+ [level: number]: {
5
+ [key: string]: string;
6
+ };
27
7
  }
28
-
29
- export { JsonViewComponent };
30
- export type { LevelLabels };
8
+ export declare class JsonViewComponent implements AfterViewChecked {
9
+ /** JSON data, any valid JSON object */
10
+ readonly data: import("@angular/core").InputSignal<any>;
11
+ /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
12
+ readonly levelOpen: import("@angular/core").InputSignal<number | undefined>;
13
+ /** Custom labels for elements within the hierarcy */
14
+ readonly levelLabels: import("@angular/core").InputSignal<LevelLabels | undefined>;
15
+ /** @internal */
16
+ readonly _levelOpen: import("@angular/core").WritableSignal<number | undefined>;
17
+ private readonly expanderService;
18
+ ngAfterViewChecked(): void;
19
+ /** Expand all items up to the given level */
20
+ expandTo(level: number): void;
21
+ /** Collapse any open items above the given level */
22
+ collapseTo(level: number): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<JsonViewComponent, "nxt-json-view", never, {
25
+ "data": {
26
+ "alias": "data";
27
+ "required": false;
28
+ "isSignal": true;
29
+ };
30
+ "levelOpen": {
31
+ "alias": "levelOpen";
32
+ "required": false;
33
+ "isSignal": true;
34
+ };
35
+ "levelLabels": {
36
+ "alias": "levelLabels";
37
+ "required": false;
38
+ "isSignal": true;
39
+ };
40
+ }, {}, never, never, true, never>;
41
+ }