@eternalheart/angular-file-preview 1.6.5
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/LICENSE +22 -0
- package/README.md +879 -0
- package/README.zh-CN.md +876 -0
- package/lib/LICENSE +22 -0
- package/lib/README.md +879 -0
- package/lib/components/preview/file-preview-toolbar.d.ts +19 -0
- package/lib/components/preview/nav-arrows.d.ts +25 -0
- package/lib/components/preview/renderer-outlet.d.ts +23 -0
- package/lib/components/preview/toolbar-button.d.ts +12 -0
- package/lib/components/resizable-split.d.ts +32 -0
- package/lib/di/locale.service.d.ts +12 -0
- package/lib/di/request.service.d.ts +20 -0
- package/lib/di/theme-mode.d.ts +6 -0
- package/lib/di/theme.service.d.ts +9 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs +55 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs +58 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs +5835 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs +17 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs +284 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs +703 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs +231 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs +552 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs +688 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs +273 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs +288 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs +550 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs +102 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs +516 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +823 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs +164 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs +655 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs +207 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs +199 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs +194 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs +94 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs +468 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs +193 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs +184 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs +492 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs +68 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs +36 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs +121 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs +78 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs +81 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs +59 -0
- package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map +1 -0
- package/lib/fesm2022/eternalheart-angular-file-preview.mjs +2 -0
- package/lib/fesm2022/eternalheart-angular-file-preview.mjs.map +1 -0
- package/lib/file-preview-content.d.ts +65 -0
- package/lib/file-preview-embed.d.ts +30 -0
- package/lib/file-preview-modal.d.ts +34 -0
- package/lib/fp-core.d.ts +1 -0
- package/lib/index.css +2119 -0
- package/lib/index.d.ts +11 -0
- package/lib/renderers/Audio/index.d.ts +74 -0
- package/lib/renderers/Cad/index.d.ts +45 -0
- package/lib/renderers/Cad/toolbar.d.ts +15 -0
- package/lib/renderers/Csv/index.d.ts +26 -0
- package/lib/renderers/Doc/index.d.ts +19 -0
- package/lib/renderers/Docx/index.d.ts +42 -0
- package/lib/renderers/Epub/index.d.ts +57 -0
- package/lib/renderers/Font/font-preview-line.d.ts +26 -0
- package/lib/renderers/Font/index.d.ts +52 -0
- package/lib/renderers/Image/index.d.ts +79 -0
- package/lib/renderers/Json/index.d.ts +61 -0
- package/lib/renderers/Markdown/index.d.ts +35 -0
- package/lib/renderers/Mobi/index.d.ts +51 -0
- package/lib/renderers/Msg/index.d.ts +47 -0
- package/lib/renderers/Pdf/index.d.ts +55 -0
- package/lib/renderers/Ppt/index.d.ts +19 -0
- package/lib/renderers/Pptx/index.d.ts +29 -0
- package/lib/renderers/RendererError.d.ts +9 -0
- package/lib/renderers/RendererLoading.d.ts +7 -0
- package/lib/renderers/Subtitle/index.d.ts +25 -0
- package/lib/renderers/Text/index.d.ts +29 -0
- package/lib/renderers/Unsupported/index.d.ts +15 -0
- package/lib/renderers/Video/index.d.ts +28 -0
- package/lib/renderers/Xlsx/index.d.ts +25 -0
- package/lib/renderers/Xml/index.d.ts +26 -0
- package/lib/renderers/Zip/index.d.ts +58 -0
- package/lib/renderers/Zip/tree-item.d.ts +29 -0
- package/lib/renderers/base.types.d.ts +10 -0
- package/lib/renderers/lazy.d.ts +23 -0
- package/lib/renderers/registry.d.ts +13 -0
- package/lib/renderers/toolbar.types.d.ts +19 -0
- package/lib/types.d.ts +26 -0
- package/lib/utils/audio-player.d.ts +20 -0
- package/lib/utils/shiki-highlight.d.ts +7 -0
- package/package.json +119 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, inject, signal, effect, linkedSignal, computed, ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import * as i1 from 'lucide-angular';
|
|
4
|
+
import { ChevronRight, ChevronDown, LucideAngularModule } from 'lucide-angular';
|
|
5
|
+
import { parse } from 'jsonc-parser';
|
|
6
|
+
import { L as LocaleService, R as RequestService, g as getFallbackTranslator, e as e0, T as ThemeService } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
|
|
7
|
+
import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
|
|
8
|
+
|
|
9
|
+
const DARK_COLORS = {
|
|
10
|
+
key: '#9cdcfe',
|
|
11
|
+
string: '#ce9178',
|
|
12
|
+
number: '#b5cea8',
|
|
13
|
+
keyword: '#569cd6',
|
|
14
|
+
bracket: '#d4d4d4',
|
|
15
|
+
colon: 'rgb(255 255 255 / 0.6)',
|
|
16
|
+
collapsed: 'rgb(255 255 255 / 0.4)',
|
|
17
|
+
arrow: 'rgb(255 255 255 / 0.5)',
|
|
18
|
+
};
|
|
19
|
+
const LIGHT_COLORS = {
|
|
20
|
+
key: '#005cc5',
|
|
21
|
+
string: '#032f62',
|
|
22
|
+
number: '#005cc5',
|
|
23
|
+
keyword: '#d73a49',
|
|
24
|
+
bracket: '#24292e',
|
|
25
|
+
colon: 'rgb(23 23 23 / 0.6)',
|
|
26
|
+
collapsed: 'rgb(23 23 23 / 0.45)',
|
|
27
|
+
arrow: 'rgb(23 23 23 / 0.55)',
|
|
28
|
+
};
|
|
29
|
+
function pickColors(theme) {
|
|
30
|
+
return theme === 'light' ? LIGHT_COLORS : DARK_COLORS;
|
|
31
|
+
}
|
|
32
|
+
class JsonNode {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.keyName = input(undefined);
|
|
35
|
+
this.value = input.required();
|
|
36
|
+
this.depth = input.required();
|
|
37
|
+
this.defaultExpanded = input(false);
|
|
38
|
+
this.locale = inject(LocaleService, { optional: true });
|
|
39
|
+
this.themeService = inject(ThemeService, { optional: true });
|
|
40
|
+
this.t = this.locale?.t() ?? getFallbackTranslator();
|
|
41
|
+
this.chevronRight = ChevronRight;
|
|
42
|
+
this.chevronDown = ChevronDown;
|
|
43
|
+
this.expanded = linkedSignal(() => this.defaultExpanded());
|
|
44
|
+
this.colors = computed(() => pickColors(this.themeService?.theme() ?? 'dark'));
|
|
45
|
+
this.indent = computed(() => this.depth() * 20);
|
|
46
|
+
this.isComposite = computed(() => {
|
|
47
|
+
const v = this.value();
|
|
48
|
+
return v !== null && v !== undefined && typeof v === 'object';
|
|
49
|
+
});
|
|
50
|
+
this.isArr = computed(() => Array.isArray(this.value()));
|
|
51
|
+
this.count = computed(() => {
|
|
52
|
+
const v = this.value();
|
|
53
|
+
if (Array.isArray(v))
|
|
54
|
+
return v.length;
|
|
55
|
+
if (v !== null && typeof v === 'object')
|
|
56
|
+
return Object.keys(v).length;
|
|
57
|
+
return 0;
|
|
58
|
+
});
|
|
59
|
+
this.childEntries = computed(() => {
|
|
60
|
+
const v = this.value();
|
|
61
|
+
if (Array.isArray(v)) {
|
|
62
|
+
return v.map((item, i) => ({ track: i, keyName: undefined, value: item }));
|
|
63
|
+
}
|
|
64
|
+
return Object.entries(v).map(([k, val]) => ({
|
|
65
|
+
track: k,
|
|
66
|
+
keyName: k,
|
|
67
|
+
value: val,
|
|
68
|
+
}));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
openBracket() {
|
|
72
|
+
return this.isArr() ? '[' : '{';
|
|
73
|
+
}
|
|
74
|
+
closeBracket() {
|
|
75
|
+
return this.isArr() ? ']' : '}';
|
|
76
|
+
}
|
|
77
|
+
collapsedLabel() {
|
|
78
|
+
return this.isArr()
|
|
79
|
+
? `${this.count()} ${this.t('json.items')}`
|
|
80
|
+
: `${this.count()} ${this.t('json.keys')}`;
|
|
81
|
+
}
|
|
82
|
+
isNullish() {
|
|
83
|
+
const v = this.value();
|
|
84
|
+
return v === null || v === undefined;
|
|
85
|
+
}
|
|
86
|
+
primitiveColor() {
|
|
87
|
+
const v = this.value();
|
|
88
|
+
const c = this.colors();
|
|
89
|
+
if (v === null || v === undefined)
|
|
90
|
+
return c.keyword;
|
|
91
|
+
if (typeof v === 'boolean')
|
|
92
|
+
return c.keyword;
|
|
93
|
+
if (typeof v === 'number')
|
|
94
|
+
return c.number;
|
|
95
|
+
if (typeof v === 'string')
|
|
96
|
+
return c.string;
|
|
97
|
+
return c.bracket;
|
|
98
|
+
}
|
|
99
|
+
primitiveText() {
|
|
100
|
+
const v = this.value();
|
|
101
|
+
if (v === null)
|
|
102
|
+
return 'null';
|
|
103
|
+
if (v === undefined)
|
|
104
|
+
return 'undefined';
|
|
105
|
+
if (typeof v === 'string')
|
|
106
|
+
return `"${v}"`;
|
|
107
|
+
return String(v);
|
|
108
|
+
}
|
|
109
|
+
toggle() {
|
|
110
|
+
this.expanded.update((v) => !v);
|
|
111
|
+
}
|
|
112
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: JsonNode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
113
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: JsonNode, isStandalone: true, selector: "afp-json-node", inputs: { keyName: { classPropertyName: "keyName", publicName: "keyName", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, depth: { classPropertyName: "depth", publicName: "depth", isSignal: true, isRequired: true, transformFunction: null }, defaultExpanded: { classPropertyName: "defaultExpanded", publicName: "defaultExpanded", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
114
|
+
@if (!isComposite()) {
|
|
115
|
+
<div class="json-row" [style.paddingLeft.px]="indent()">
|
|
116
|
+
<span class="json-arrow-placeholder"></span>
|
|
117
|
+
@if (keyName() !== undefined) {
|
|
118
|
+
<span class="json-key" [style.color]="colors().key">
|
|
119
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
120
|
+
</span>
|
|
121
|
+
}
|
|
122
|
+
<span [style.color]="primitiveColor()" [class.json-null]="isNullish()">{{ primitiveText() }}</span>
|
|
123
|
+
</div>
|
|
124
|
+
} @else if (count() === 0) {
|
|
125
|
+
<div class="json-row" [style.paddingLeft.px]="indent()">
|
|
126
|
+
<span class="json-arrow-placeholder"></span>
|
|
127
|
+
@if (keyName() !== undefined) {
|
|
128
|
+
<span class="json-key" [style.color]="colors().key">
|
|
129
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
130
|
+
</span>
|
|
131
|
+
}
|
|
132
|
+
<span [style.color]="colors().bracket">{{ openBracket() }}{{ closeBracket() }}</span>
|
|
133
|
+
</div>
|
|
134
|
+
} @else {
|
|
135
|
+
<div class="json-row json-toggle" [style.paddingLeft.px]="indent()" (click)="toggle()">
|
|
136
|
+
<span class="json-arrow" [style.color]="colors().arrow">
|
|
137
|
+
<i-lucide [img]="expanded() ? chevronDown : chevronRight" class="afp-w-3.5 afp-h-3.5" />
|
|
138
|
+
</span>
|
|
139
|
+
@if (keyName() !== undefined) {
|
|
140
|
+
<span class="json-key" [style.color]="colors().key">
|
|
141
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
142
|
+
</span>
|
|
143
|
+
}
|
|
144
|
+
<span [style.color]="colors().bracket">{{ openBracket() }}</span>
|
|
145
|
+
@if (!expanded()) {
|
|
146
|
+
<span class="json-collapsed" [style.color]="colors().collapsed">
|
|
147
|
+
{{ collapsedLabel() }}<span [style.color]="colors().bracket"> {{ closeBracket() }}</span>
|
|
148
|
+
</span>
|
|
149
|
+
}
|
|
150
|
+
</div>
|
|
151
|
+
@if (expanded()) {
|
|
152
|
+
@for (entry of childEntries(); track entry.track) {
|
|
153
|
+
<afp-json-node
|
|
154
|
+
[keyName]="entry.keyName"
|
|
155
|
+
[value]="entry.value"
|
|
156
|
+
[depth]="depth() + 1"
|
|
157
|
+
[defaultExpanded]="depth() < 1"
|
|
158
|
+
/>
|
|
159
|
+
}
|
|
160
|
+
<div class="json-row" [style.paddingLeft.px]="indent() + 20">
|
|
161
|
+
<span [style.color]="colors().bracket">{{ closeBracket() }}</span>
|
|
162
|
+
</div>
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: JsonNode, selector: "afp-json-node", inputs: ["keyName", "value", "depth", "defaultExpanded"] }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
166
|
+
}
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: JsonNode, decorators: [{
|
|
168
|
+
type: Component,
|
|
169
|
+
args: [{ selector: 'afp-json-node', standalone: true, imports: [LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
170
|
+
@if (!isComposite()) {
|
|
171
|
+
<div class="json-row" [style.paddingLeft.px]="indent()">
|
|
172
|
+
<span class="json-arrow-placeholder"></span>
|
|
173
|
+
@if (keyName() !== undefined) {
|
|
174
|
+
<span class="json-key" [style.color]="colors().key">
|
|
175
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
176
|
+
</span>
|
|
177
|
+
}
|
|
178
|
+
<span [style.color]="primitiveColor()" [class.json-null]="isNullish()">{{ primitiveText() }}</span>
|
|
179
|
+
</div>
|
|
180
|
+
} @else if (count() === 0) {
|
|
181
|
+
<div class="json-row" [style.paddingLeft.px]="indent()">
|
|
182
|
+
<span class="json-arrow-placeholder"></span>
|
|
183
|
+
@if (keyName() !== undefined) {
|
|
184
|
+
<span class="json-key" [style.color]="colors().key">
|
|
185
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
186
|
+
</span>
|
|
187
|
+
}
|
|
188
|
+
<span [style.color]="colors().bracket">{{ openBracket() }}{{ closeBracket() }}</span>
|
|
189
|
+
</div>
|
|
190
|
+
} @else {
|
|
191
|
+
<div class="json-row json-toggle" [style.paddingLeft.px]="indent()" (click)="toggle()">
|
|
192
|
+
<span class="json-arrow" [style.color]="colors().arrow">
|
|
193
|
+
<i-lucide [img]="expanded() ? chevronDown : chevronRight" class="afp-w-3.5 afp-h-3.5" />
|
|
194
|
+
</span>
|
|
195
|
+
@if (keyName() !== undefined) {
|
|
196
|
+
<span class="json-key" [style.color]="colors().key">
|
|
197
|
+
"{{ keyName() }}"<span [style.color]="colors().colon">: </span>
|
|
198
|
+
</span>
|
|
199
|
+
}
|
|
200
|
+
<span [style.color]="colors().bracket">{{ openBracket() }}</span>
|
|
201
|
+
@if (!expanded()) {
|
|
202
|
+
<span class="json-collapsed" [style.color]="colors().collapsed">
|
|
203
|
+
{{ collapsedLabel() }}<span [style.color]="colors().bracket"> {{ closeBracket() }}</span>
|
|
204
|
+
</span>
|
|
205
|
+
}
|
|
206
|
+
</div>
|
|
207
|
+
@if (expanded()) {
|
|
208
|
+
@for (entry of childEntries(); track entry.track) {
|
|
209
|
+
<afp-json-node
|
|
210
|
+
[keyName]="entry.keyName"
|
|
211
|
+
[value]="entry.value"
|
|
212
|
+
[depth]="depth() + 1"
|
|
213
|
+
[defaultExpanded]="depth() < 1"
|
|
214
|
+
/>
|
|
215
|
+
}
|
|
216
|
+
<div class="json-row" [style.paddingLeft.px]="indent() + 20">
|
|
217
|
+
<span [style.color]="colors().bracket">{{ closeBracket() }}</span>
|
|
218
|
+
</div>
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
`, styles: [":host{display:block}\n"] }]
|
|
222
|
+
}] });
|
|
223
|
+
class JsonRenderer {
|
|
224
|
+
constructor() {
|
|
225
|
+
this.url = input.required();
|
|
226
|
+
this.fileName = input.required();
|
|
227
|
+
this.locale = inject(LocaleService, { optional: true });
|
|
228
|
+
this.request = inject(RequestService, { optional: true });
|
|
229
|
+
this.t = this.locale?.t() ?? getFallbackTranslator();
|
|
230
|
+
this.data = signal(null);
|
|
231
|
+
this.loading = signal(true);
|
|
232
|
+
this.error = signal(null);
|
|
233
|
+
this.getToolbarGroups = () => [];
|
|
234
|
+
effect(() => {
|
|
235
|
+
this.url();
|
|
236
|
+
void this.loadJson();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async loadJson() {
|
|
240
|
+
this.loading.set(true);
|
|
241
|
+
this.error.set(null);
|
|
242
|
+
try {
|
|
243
|
+
const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));
|
|
244
|
+
const text = await e0(this.url(), { fetcher });
|
|
245
|
+
this.data.set(parse(text));
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
console.error(err);
|
|
249
|
+
this.error.set(this.t('json.load_failed'));
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
this.loading.set(false);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: JsonRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
256
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: JsonRenderer, isStandalone: true, selector: "afp-json-renderer", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "afp-block afp-w-full afp-h-full" }, ngImport: i0, template: `
|
|
257
|
+
@if (loading()) {
|
|
258
|
+
<div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
|
|
259
|
+
<div class="afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin"></div>
|
|
260
|
+
</div>
|
|
261
|
+
} @else if (error()) {
|
|
262
|
+
<afp-renderer-error [message]="error()!" />
|
|
263
|
+
} @else {
|
|
264
|
+
<div class="afp-w-full afp-h-full afp-overflow-auto afp-bg-code-bg afp-py-6 afp-px-4">
|
|
265
|
+
<afp-json-node [value]="data()" [depth]="0" [defaultExpanded]="true" />
|
|
266
|
+
</div>
|
|
267
|
+
}
|
|
268
|
+
`, isInline: true, styles: [".afp-root .json-row{display:flex;align-items:flex-start;padding-top:1px;padding-bottom:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.4}.afp-root .json-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.afp-root .json-toggle:hover{background:var(--fp-surface-1)}.afp-root .json-arrow{width:16px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.afp-root .json-arrow-placeholder{width:16px;height:20px;flex-shrink:0}.afp-root .json-key{flex-shrink:0}.afp-root .json-collapsed{margin-left:4px}.afp-root .json-null{font-style:italic}\n"], dependencies: [{ kind: "component", type: RendererError, selector: "afp-renderer-error", inputs: ["message", "detail", "showIcon"] }, { kind: "component", type: JsonNode, selector: "afp-json-node", inputs: ["keyName", "value", "depth", "defaultExpanded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
269
|
+
}
|
|
270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: JsonRenderer, decorators: [{
|
|
271
|
+
type: Component,
|
|
272
|
+
args: [{ selector: 'afp-json-renderer', standalone: true, imports: [RendererError, JsonNode], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, encapsulation: ViewEncapsulation.None, template: `
|
|
273
|
+
@if (loading()) {
|
|
274
|
+
<div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
|
|
275
|
+
<div class="afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin"></div>
|
|
276
|
+
</div>
|
|
277
|
+
} @else if (error()) {
|
|
278
|
+
<afp-renderer-error [message]="error()!" />
|
|
279
|
+
} @else {
|
|
280
|
+
<div class="afp-w-full afp-h-full afp-overflow-auto afp-bg-code-bg afp-py-6 afp-px-4">
|
|
281
|
+
<afp-json-node [value]="data()" [depth]="0" [defaultExpanded]="true" />
|
|
282
|
+
</div>
|
|
283
|
+
}
|
|
284
|
+
`, styles: [".afp-root .json-row{display:flex;align-items:flex-start;padding-top:1px;padding-bottom:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.4}.afp-root .json-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.afp-root .json-toggle:hover{background:var(--fp-surface-1)}.afp-root .json-arrow{width:16px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.afp-root .json-arrow-placeholder{width:16px;height:20px;flex-shrink:0}.afp-root .json-key{flex-shrink:0}.afp-root .json-collapsed{margin-left:4px}.afp-root .json-null{font-style:italic}\n"] }]
|
|
285
|
+
}], ctorParameters: () => [] });
|
|
286
|
+
|
|
287
|
+
export { JsonNode, JsonRenderer };
|
|
288
|
+
//# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-C0McUoqT.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, linkedSignal, computed, ChangeDetectionStrategy, Component, signal, effect, ViewEncapsulation } from '@angular/core';\nimport * as i1 from 'lucide-angular';\nimport { ChevronRight, ChevronDown, LucideAngularModule } from 'lucide-angular';\nimport { parse } from 'jsonc-parser';\nimport { L as LocaleService, T as ThemeService, g as getFallbackTranslator, R as RequestService } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nconst DARK_COLORS = {\n key: '#9cdcfe',\n string: '#ce9178',\n number: '#b5cea8',\n keyword: '#569cd6',\n bracket: '#d4d4d4',\n colon: 'rgb(255 255 255 / 0.6)',\n collapsed: 'rgb(255 255 255 / 0.4)',\n arrow: 'rgb(255 255 255 / 0.5)',\n};\nconst LIGHT_COLORS = {\n key: '#005cc5',\n string: '#032f62',\n number: '#005cc5',\n keyword: '#d73a49',\n bracket: '#24292e',\n colon: 'rgb(23 23 23 / 0.6)',\n collapsed: 'rgb(23 23 23 / 0.45)',\n arrow: 'rgb(23 23 23 / 0.55)',\n};\nfunction pickColors(theme) {\n return theme === 'light' ? LIGHT_COLORS : DARK_COLORS;\n}\nclass JsonNode {\n constructor() {\n this.keyName = input(undefined);\n this.value = input.required();\n this.depth = input.required();\n this.defaultExpanded = input(false);\n this.locale = inject(LocaleService, { optional: true });\n this.themeService = inject(ThemeService, { optional: true });\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.chevronRight = ChevronRight;\n this.chevronDown = ChevronDown;\n this.expanded = linkedSignal(() => this.defaultExpanded());\n this.colors = computed(() => pickColors(this.themeService?.theme() ?? 'dark'));\n this.indent = computed(() => this.depth() * 20);\n this.isComposite = computed(() => {\n const v = this.value();\n return v !== null && v !== undefined && typeof v === 'object';\n });\n this.isArr = computed(() => Array.isArray(this.value()));\n this.count = computed(() => {\n const v = this.value();\n if (Array.isArray(v))\n return v.length;\n if (v !== null && typeof v === 'object')\n return Object.keys(v).length;\n return 0;\n });\n this.childEntries = computed(() => {\n const v = this.value();\n if (Array.isArray(v)) {\n return v.map((item, i) => ({ track: i, keyName: undefined, value: item }));\n }\n return Object.entries(v).map(([k, val]) => ({\n track: k,\n keyName: k,\n value: val,\n }));\n });\n }\n openBracket() {\n return this.isArr() ? '[' : '{';\n }\n closeBracket() {\n return this.isArr() ? ']' : '}';\n }\n collapsedLabel() {\n return this.isArr()\n ? `${this.count()} ${this.t('json.items')}`\n : `${this.count()} ${this.t('json.keys')}`;\n }\n isNullish() {\n const v = this.value();\n return v === null || v === undefined;\n }\n primitiveColor() {\n const v = this.value();\n const c = this.colors();\n if (v === null || v === undefined)\n return c.keyword;\n if (typeof v === 'boolean')\n return c.keyword;\n if (typeof v === 'number')\n return c.number;\n if (typeof v === 'string')\n return c.string;\n return c.bracket;\n }\n primitiveText() {\n const v = this.value();\n if (v === null)\n return 'null';\n if (v === undefined)\n return 'undefined';\n if (typeof v === 'string')\n return `\"${v}\"`;\n return String(v);\n }\n toggle() {\n this.expanded.update((v) => !v);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: JsonNode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: JsonNode, isStandalone: true, selector: \"afp-json-node\", inputs: { keyName: { classPropertyName: \"keyName\", publicName: \"keyName\", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: \"value\", publicName: \"value\", isSignal: true, isRequired: true, transformFunction: null }, depth: { classPropertyName: \"depth\", publicName: \"depth\", isSignal: true, isRequired: true, transformFunction: null }, defaultExpanded: { classPropertyName: \"defaultExpanded\", publicName: \"defaultExpanded\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n @if (!isComposite()) {\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent()\">\n <span class=\"json-arrow-placeholder\"></span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"primitiveColor()\" [class.json-null]=\"isNullish()\">{{ primitiveText() }}</span>\n </div>\n } @else if (count() === 0) {\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent()\">\n <span class=\"json-arrow-placeholder\"></span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"colors().bracket\">{{ openBracket() }}{{ closeBracket() }}</span>\n </div>\n } @else {\n <div class=\"json-row json-toggle\" [style.paddingLeft.px]=\"indent()\" (click)=\"toggle()\">\n <span class=\"json-arrow\" [style.color]=\"colors().arrow\">\n <i-lucide [img]=\"expanded() ? chevronDown : chevronRight\" class=\"afp-w-3.5 afp-h-3.5\" />\n </span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"colors().bracket\">{{ openBracket() }}</span>\n @if (!expanded()) {\n <span class=\"json-collapsed\" [style.color]=\"colors().collapsed\">\n {{ collapsedLabel() }}<span [style.color]=\"colors().bracket\"> {{ closeBracket() }}</span>\n </span>\n }\n </div>\n @if (expanded()) {\n @for (entry of childEntries(); track entry.track) {\n <afp-json-node\n [keyName]=\"entry.keyName\"\n [value]=\"entry.value\"\n [depth]=\"depth() + 1\"\n [defaultExpanded]=\"depth() < 1\"\n />\n }\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent() + 20\">\n <span [style.color]=\"colors().bracket\">{{ closeBracket() }}</span>\n </div>\n }\n }\n `, isInline: true, styles: [\":host{display:block}\\n\"], dependencies: [{ kind: \"component\", type: JsonNode, selector: \"afp-json-node\", inputs: [\"keyName\", \"value\", \"depth\", \"defaultExpanded\"] }, { kind: \"ngmodule\", type: LucideAngularModule }, { kind: \"component\", type: i1.LucideAngularComponent, selector: \"lucide-angular, lucide-icon, i-lucide, span-lucide\", inputs: [\"class\", \"name\", \"img\", \"color\", \"absoluteStrokeWidth\", \"size\", \"strokeWidth\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: JsonNode, decorators: [{\n type: Component,\n args: [{ selector: 'afp-json-node', standalone: true, imports: [LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `\n @if (!isComposite()) {\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent()\">\n <span class=\"json-arrow-placeholder\"></span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"primitiveColor()\" [class.json-null]=\"isNullish()\">{{ primitiveText() }}</span>\n </div>\n } @else if (count() === 0) {\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent()\">\n <span class=\"json-arrow-placeholder\"></span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"colors().bracket\">{{ openBracket() }}{{ closeBracket() }}</span>\n </div>\n } @else {\n <div class=\"json-row json-toggle\" [style.paddingLeft.px]=\"indent()\" (click)=\"toggle()\">\n <span class=\"json-arrow\" [style.color]=\"colors().arrow\">\n <i-lucide [img]=\"expanded() ? chevronDown : chevronRight\" class=\"afp-w-3.5 afp-h-3.5\" />\n </span>\n @if (keyName() !== undefined) {\n <span class=\"json-key\" [style.color]=\"colors().key\">\n \"{{ keyName() }}\"<span [style.color]=\"colors().colon\">: </span>\n </span>\n }\n <span [style.color]=\"colors().bracket\">{{ openBracket() }}</span>\n @if (!expanded()) {\n <span class=\"json-collapsed\" [style.color]=\"colors().collapsed\">\n {{ collapsedLabel() }}<span [style.color]=\"colors().bracket\"> {{ closeBracket() }}</span>\n </span>\n }\n </div>\n @if (expanded()) {\n @for (entry of childEntries(); track entry.track) {\n <afp-json-node\n [keyName]=\"entry.keyName\"\n [value]=\"entry.value\"\n [depth]=\"depth() + 1\"\n [defaultExpanded]=\"depth() < 1\"\n />\n }\n <div class=\"json-row\" [style.paddingLeft.px]=\"indent() + 20\">\n <span [style.color]=\"colors().bracket\">{{ closeBracket() }}</span>\n </div>\n }\n }\n `, styles: [\":host{display:block}\\n\"] }]\n }] });\nclass JsonRenderer {\n constructor() {\n this.url = input.required();\n this.fileName = input.required();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.data = signal(null);\n this.loading = signal(true);\n this.error = signal(null);\n this.getToolbarGroups = () => [];\n effect(() => {\n this.url();\n void this.loadJson();\n });\n }\n async loadJson() {\n this.loading.set(true);\n this.error.set(null);\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const text = await fetchTextUtf8(this.url(), { fetcher });\n this.data.set(parse(text));\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('json.load_failed'));\n }\n finally {\n this.loading.set(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: JsonRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: JsonRenderer, isStandalone: true, selector: \"afp-json-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, ngImport: i0, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-bg-code-bg afp-py-6 afp-px-4\">\n <afp-json-node [value]=\"data()\" [depth]=\"0\" [defaultExpanded]=\"true\" />\n </div>\n }\n `, isInline: true, styles: [\".afp-root .json-row{display:flex;align-items:flex-start;padding-top:1px;padding-bottom:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.4}.afp-root .json-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.afp-root .json-toggle:hover{background:var(--fp-surface-1)}.afp-root .json-arrow{width:16px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.afp-root .json-arrow-placeholder{width:16px;height:20px;flex-shrink:0}.afp-root .json-key{flex-shrink:0}.afp-root .json-collapsed{margin-left:4px}.afp-root .json-null{font-style:italic}\\n\"], dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }, { kind: \"component\", type: JsonNode, selector: \"afp-json-node\", inputs: [\"keyName\", \"value\", \"depth\", \"defaultExpanded\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: JsonRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-json-renderer', standalone: true, imports: [RendererError, JsonNode], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, encapsulation: ViewEncapsulation.None, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-w-12 afp-h-12 afp-border-4 afp-border-line-strong afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-bg-code-bg afp-py-6 afp-px-4\">\n <afp-json-node [value]=\"data()\" [depth]=\"0\" [defaultExpanded]=\"true\" />\n </div>\n }\n `, styles: [\".afp-root .json-row{display:flex;align-items:flex-start;padding-top:1px;padding-bottom:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.875rem;line-height:1.4}.afp-root .json-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.afp-root .json-toggle:hover{background:var(--fp-surface-1)}.afp-root .json-arrow{width:16px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.afp-root .json-arrow-placeholder{width:16px;height:20px;flex-shrink:0}.afp-root .json-key{flex-shrink:0}.afp-root .json-collapsed{margin-left:4px}.afp-root .json-null{font-style:italic}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { JsonNode, JsonRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-C0McUoqT.mjs.map\n"],"names":["fetchTextUtf8"],"mappings":"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"}
|