@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.
Files changed (119) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +879 -0
  3. package/README.zh-CN.md +876 -0
  4. package/lib/LICENSE +22 -0
  5. package/lib/README.md +879 -0
  6. package/lib/components/preview/file-preview-toolbar.d.ts +19 -0
  7. package/lib/components/preview/nav-arrows.d.ts +25 -0
  8. package/lib/components/preview/renderer-outlet.d.ts +23 -0
  9. package/lib/components/preview/toolbar-button.d.ts +12 -0
  10. package/lib/components/resizable-split.d.ts +32 -0
  11. package/lib/di/locale.service.d.ts +12 -0
  12. package/lib/di/request.service.d.ts +20 -0
  13. package/lib/di/theme-mode.d.ts +6 -0
  14. package/lib/di/theme.service.d.ts +9 -0
  15. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs +55 -0
  16. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map +1 -0
  17. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs +58 -0
  18. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map +1 -0
  19. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs +5835 -0
  20. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +1 -0
  21. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs +17 -0
  22. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs.map +1 -0
  23. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs +284 -0
  24. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map +1 -0
  25. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs +703 -0
  26. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map +1 -0
  27. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs +231 -0
  28. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map +1 -0
  29. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs +552 -0
  30. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map +1 -0
  31. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs +688 -0
  32. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map +1 -0
  33. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs +273 -0
  34. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map +1 -0
  35. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs +288 -0
  36. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map +1 -0
  37. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs +550 -0
  38. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map +1 -0
  39. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs +102 -0
  40. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map +1 -0
  41. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs +516 -0
  42. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map +1 -0
  43. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +823 -0
  44. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +1 -0
  45. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs +164 -0
  46. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map +1 -0
  47. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs +655 -0
  48. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map +1 -0
  49. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs +207 -0
  50. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map +1 -0
  51. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs +199 -0
  52. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map +1 -0
  53. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs +194 -0
  54. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +1 -0
  55. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs +94 -0
  56. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map +1 -0
  57. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs +468 -0
  58. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map +1 -0
  59. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs +193 -0
  60. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map +1 -0
  61. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs +184 -0
  62. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map +1 -0
  63. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs +492 -0
  64. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +1 -0
  65. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs +68 -0
  66. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map +1 -0
  67. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs +36 -0
  68. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs.map +1 -0
  69. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs +121 -0
  70. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs.map +1 -0
  71. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs +78 -0
  72. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map +1 -0
  73. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs +81 -0
  74. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map +1 -0
  75. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs +59 -0
  76. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map +1 -0
  77. package/lib/fesm2022/eternalheart-angular-file-preview.mjs +2 -0
  78. package/lib/fesm2022/eternalheart-angular-file-preview.mjs.map +1 -0
  79. package/lib/file-preview-content.d.ts +65 -0
  80. package/lib/file-preview-embed.d.ts +30 -0
  81. package/lib/file-preview-modal.d.ts +34 -0
  82. package/lib/fp-core.d.ts +1 -0
  83. package/lib/index.css +2119 -0
  84. package/lib/index.d.ts +11 -0
  85. package/lib/renderers/Audio/index.d.ts +74 -0
  86. package/lib/renderers/Cad/index.d.ts +45 -0
  87. package/lib/renderers/Cad/toolbar.d.ts +15 -0
  88. package/lib/renderers/Csv/index.d.ts +26 -0
  89. package/lib/renderers/Doc/index.d.ts +19 -0
  90. package/lib/renderers/Docx/index.d.ts +42 -0
  91. package/lib/renderers/Epub/index.d.ts +57 -0
  92. package/lib/renderers/Font/font-preview-line.d.ts +26 -0
  93. package/lib/renderers/Font/index.d.ts +52 -0
  94. package/lib/renderers/Image/index.d.ts +79 -0
  95. package/lib/renderers/Json/index.d.ts +61 -0
  96. package/lib/renderers/Markdown/index.d.ts +35 -0
  97. package/lib/renderers/Mobi/index.d.ts +51 -0
  98. package/lib/renderers/Msg/index.d.ts +47 -0
  99. package/lib/renderers/Pdf/index.d.ts +55 -0
  100. package/lib/renderers/Ppt/index.d.ts +19 -0
  101. package/lib/renderers/Pptx/index.d.ts +29 -0
  102. package/lib/renderers/RendererError.d.ts +9 -0
  103. package/lib/renderers/RendererLoading.d.ts +7 -0
  104. package/lib/renderers/Subtitle/index.d.ts +25 -0
  105. package/lib/renderers/Text/index.d.ts +29 -0
  106. package/lib/renderers/Unsupported/index.d.ts +15 -0
  107. package/lib/renderers/Video/index.d.ts +28 -0
  108. package/lib/renderers/Xlsx/index.d.ts +25 -0
  109. package/lib/renderers/Xml/index.d.ts +26 -0
  110. package/lib/renderers/Zip/index.d.ts +58 -0
  111. package/lib/renderers/Zip/tree-item.d.ts +29 -0
  112. package/lib/renderers/base.types.d.ts +10 -0
  113. package/lib/renderers/lazy.d.ts +23 -0
  114. package/lib/renderers/registry.d.ts +13 -0
  115. package/lib/renderers/toolbar.types.d.ts +19 -0
  116. package/lib/types.d.ts +26 -0
  117. package/lib/utils/audio-player.d.ts +20 -0
  118. package/lib/utils/shiki-highlight.d.ts +7 -0
  119. 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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"}