@eternalheart/angular-file-preview 1.6.5 → 1.6.6

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 (58) hide show
  1. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs} +39 -32
  2. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs.map +1 -0
  3. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs} +27 -8
  4. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs.map +1 -0
  5. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs} +2 -2
  6. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs.map} +1 -1
  7. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs} +2 -2
  8. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs.map} +1 -1
  9. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs} +2 -2
  10. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs.map} +1 -1
  11. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B-TVstXS-Dh1KMX_8.mjs} +2 -2
  12. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B-TVstXS-Dh1KMX_8.mjs.map} +1 -1
  13. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B4L1kfY--BHy3x_oj.mjs} +2 -2
  14. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B4L1kfY--BHy3x_oj.mjs.map} +1 -1
  15. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B56pscOG-ClsvukS5.mjs} +4 -5
  16. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B56pscOG-ClsvukS5.mjs.map +1 -0
  17. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BNU3NWQp-C5U5krn9.mjs} +2 -2
  18. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BNU3NWQp-C5U5krn9.mjs.map} +1 -1
  19. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BbRwLog8-B9Sw6HEr.mjs} +2 -2
  20. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BbRwLog8-B9Sw6HEr.mjs.map} +1 -1
  21. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeL4xzpS-eYswtncp.mjs} +2 -2
  22. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeL4xzpS-eYswtncp.mjs.map} +1 -1
  23. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeTNUne--CwUzGLn3.mjs} +2 -2
  24. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BeTNUne--CwUzGLn3.mjs.map} +1 -1
  25. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C3uCX4wD-CoZ795pn.mjs} +3 -3
  26. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C3uCX4wD-CoZ795pn.mjs.map} +1 -1
  27. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CBbnvps8-ClkiJKQ9.mjs} +2 -2
  28. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CBbnvps8-ClkiJKQ9.mjs.map} +1 -1
  29. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CMeATokn-iD-SSbnK.mjs} +2 -2
  30. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CMeATokn-iD-SSbnK.mjs.map} +1 -1
  31. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CZQnGY6g-DexFUJLU.mjs} +2 -2
  32. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CZQnGY6g-DexFUJLU.mjs.map} +1 -1
  33. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cjjsjooa-24Qg-LjD.mjs} +2 -2
  34. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cjjsjooa-24Qg-LjD.mjs.map} +1 -1
  35. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CpiK7yUb-T48dTv66.mjs} +3 -3
  36. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CpiK7yUb-T48dTv66.mjs.map} +1 -1
  37. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CyO8N29I-CMesNfcT.mjs} +2 -2
  38. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CyO8N29I-CMesNfcT.mjs.map} +1 -1
  39. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D6UfVKL_-CAqlAQIN.mjs} +2 -2
  40. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D6UfVKL_-CAqlAQIN.mjs.map} +1 -1
  41. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DWe1kVtU-CJlU6sOy.mjs +597 -0
  42. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DWe1kVtU-CJlU6sOy.mjs.map +1 -0
  43. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-QydIBtJH-Dw052TRv.mjs} +2 -2
  44. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-QydIBtJH-Dw052TRv.mjs.map} +1 -1
  45. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs → eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CE3FZF7D-BjdXRpvN.mjs} +2 -2
  46. package/lib/fesm2022/{eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map → eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CE3FZF7D-BjdXRpvN.mjs.map} +1 -1
  47. package/lib/fesm2022/eternalheart-angular-file-preview.mjs +1 -1
  48. package/lib/index.css +340 -60
  49. package/lib/index.d.ts +1 -1
  50. package/lib/renderers/Audio/index.d.ts +1 -18
  51. package/lib/renderers/Cad/index.d.ts +1 -0
  52. package/lib/version.d.ts +1 -0
  53. package/package.json +2 -1
  54. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +0 -1
  55. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +0 -823
  56. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +0 -1
  57. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +0 -1
  58. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +0 -1
@@ -6,7 +6,7 @@ import { DXFLoader } from 'three-dxf-loader';
6
6
  import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
7
7
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
8
8
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
9
- import { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
9
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs';
10
10
  import { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs';
11
11
  import { RotateCcw, Box, Grid3x3, Axis3d } from 'lucide-angular';
12
12
 
@@ -176,6 +176,30 @@ class CadRenderer {
176
176
  }
177
177
  this.toolbarEmitter.notify();
178
178
  }
179
+ // 根据模型包围盒调整参考物大小,避免 OBJ/STL 单位差异造成参考线比例失真
180
+ updateReferenceHelpers(maxDim) {
181
+ if (!this.scene)
182
+ return;
183
+ const safeMaxDim = Number.isFinite(maxDim) && maxDim > 0 ? maxDim : 1;
184
+ const axesSize = safeMaxDim * 0.5;
185
+ const gridSize = safeMaxDim * 2;
186
+ if (this.grid) {
187
+ this.grid.geometry.dispose();
188
+ this.grid.material.dispose();
189
+ this.scene.remove(this.grid);
190
+ }
191
+ if (this.axes) {
192
+ this.axes.geometry.dispose();
193
+ this.axes.material.dispose();
194
+ this.scene.remove(this.axes);
195
+ }
196
+ this.grid = new THREE.GridHelper(gridSize, 20, 0x444444, 0x222222);
197
+ this.grid.visible = this.showGrid();
198
+ this.scene.add(this.grid);
199
+ this.axes = new THREE.AxesHelper(axesSize);
200
+ this.axes.visible = this.showAxes();
201
+ this.scene.add(this.axes);
202
+ }
179
203
  disposeMaterial(material) {
180
204
  if (material.map)
181
205
  material.map.dispose();
@@ -235,12 +259,6 @@ class CadRenderer {
235
259
  const directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.4);
236
260
  directionalLight2.position.set(-1, -1, -1);
237
261
  this.scene.add(directionalLight2);
238
- this.grid = new THREE.GridHelper(200, 20, 0x444444, 0x222222);
239
- this.grid.visible = this.showGrid();
240
- this.scene.add(this.grid);
241
- this.axes = new THREE.AxesHelper(100);
242
- this.axes.visible = this.showAxes();
243
- this.scene.add(this.axes);
244
262
  this.loadModel();
245
263
  const animate = () => {
246
264
  if (this.isCleanedUp)
@@ -315,6 +333,7 @@ class CadRenderer {
315
333
  const center = box.getCenter(new THREE.Vector3());
316
334
  const size = box.getSize(new THREE.Vector3());
317
335
  const maxDim = Math.max(size.x, size.y, size.z);
336
+ this.updateReferenceHelpers(maxDim);
318
337
  const fov = this.camera.fov * (Math.PI / 180);
319
338
  let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));
320
339
  cameraZ *= 1.5;
@@ -489,4 +508,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
489
508
  }], ctorParameters: () => [] });
490
509
 
491
510
  export { CadRenderer };
492
- //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map
511
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-3-0UYUJy-CD5hv6Xd.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-3-0UYUJy.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, viewChild, signal, afterNextRender, effect, untracked, DestroyRef, ChangeDetectionStrategy, Component } from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { DXFLoader } from 'three-dxf-loader';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-Dnuf7kun.mjs';\nimport { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport { RotateCcw, Box, Grid3x3, Axis3d } from 'lucide-angular';\n\nfunction getCadToolbarGroups(ctx) {\n return [\n {\n items: [\n {\n type: 'button',\n icon: RotateCcw,\n tooltip: ctx.t('toolbar.reset'),\n action: () => ctx.cadRef?.resetView(),\n },\n ],\n },\n {\n items: [\n {\n type: 'button',\n icon: Box,\n tooltip: ctx.wireframe ? ctx.t('cad.solid') : ctx.t('cad.wireframe'),\n active: ctx.wireframe,\n action: () => ctx.cadRef?.toggleWireframe(),\n },\n {\n type: 'button',\n icon: Grid3x3,\n tooltip: ctx.t('cad.grid'),\n active: ctx.showGrid,\n action: () => ctx.cadRef?.toggleGrid(),\n },\n {\n type: 'button',\n icon: Axis3d,\n tooltip: ctx.t('cad.axes'),\n active: ctx.showAxes,\n action: () => ctx.cadRef?.toggleAxes(),\n },\n ],\n },\n ];\n}\n\nclass CadRenderer {\n constructor() {\n this.url = input.required();\n this.file = input(undefined);\n this.fileName = input(undefined);\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.container = viewChild('containerRef');\n this.toolbarEmitter = new ToolbarEventEmitter();\n this.mounted = signal(false);\n this.loading = signal(true);\n this.error = signal(null);\n this.wireframe = signal(false);\n this.showGrid = signal(true);\n this.showAxes = signal(true);\n this.scene = null;\n this.camera = null;\n this.renderer = null;\n this.controls = null;\n this.model = null;\n this.grid = null;\n this.axes = null;\n this.animationId = null;\n this.abortController = null;\n this.isCleanedUp = false;\n this.getToolbarGroups = () => {\n return getCadToolbarGroups({\n cadRef: {\n resetView: () => this.resetView(),\n toggleWireframe: () => this.toggleWireframe(),\n toggleGrid: () => this.toggleGrid(),\n toggleAxes: () => this.toggleAxes(),\n },\n wireframe: this.wireframe(),\n showGrid: this.showGrid(),\n showAxes: this.showAxes(),\n t: this.t,\n });\n };\n this.onToolbarChange = (listener) => this.toolbarEmitter.subscribe(listener);\n this.handleResize = () => {\n const container = this.container()?.nativeElement;\n if (!container || !this.camera || !this.renderer || this.isCleanedUp)\n return;\n const newWidth = container.clientWidth;\n const newHeight = container.clientHeight;\n this.camera.aspect = newWidth / newHeight;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(newWidth, newHeight);\n };\n afterNextRender(() => this.mounted.set(true));\n effect(() => {\n const url = this.url();\n const mounted = this.mounted();\n if (!mounted || !url)\n return;\n untracked(() => {\n this.cleanup();\n this.loading.set(true);\n this.error.set(null);\n this.initScene();\n });\n });\n inject(DestroyRef).onDestroy(() => this.cleanup());\n }\n getExtension(url, fileName, file) {\n if (file?.name) {\n return file.name.split('.').pop()?.toLowerCase() || '';\n }\n if (fileName) {\n return fileName.split('.').pop()?.toLowerCase() || '';\n }\n return url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n }\n resetView() {\n if (!this.controls || !this.camera || !this.model)\n return;\n const box = new THREE.Box3().setFromObject(this.model);\n const center = box.getCenter(new THREE.Vector3());\n const size = box.getSize(new THREE.Vector3());\n const maxDim = Math.max(size.x, size.y, size.z);\n const fov = this.camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n cameraZ *= 1.5;\n this.camera.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n this.camera.lookAt(center);\n this.controls.target.copy(center);\n this.controls.update();\n }\n toggleWireframe() {\n this.wireframe.update((v) => !v);\n const wf = this.wireframe();\n if (this.model) {\n this.model.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n const material = child.material;\n if (material) {\n if (Array.isArray(material)) {\n material.forEach((mat) => {\n mat.wireframe = wf;\n });\n }\n else {\n material.wireframe = wf;\n }\n }\n }\n });\n }\n this.toolbarEmitter.notify();\n }\n toggleGrid() {\n this.showGrid.update((v) => !v);\n if (this.grid) {\n this.grid.visible = this.showGrid();\n }\n this.toolbarEmitter.notify();\n }\n toggleAxes() {\n this.showAxes.update((v) => !v);\n if (this.axes) {\n this.axes.visible = this.showAxes();\n }\n this.toolbarEmitter.notify();\n }\n // 根据模型包围盒调整参考物大小,避免 OBJ/STL 单位差异造成参考线比例失真\n updateReferenceHelpers(maxDim) {\n if (!this.scene)\n return;\n const safeMaxDim = Number.isFinite(maxDim) && maxDim > 0 ? maxDim : 1;\n const axesSize = safeMaxDim * 0.5;\n const gridSize = safeMaxDim * 2;\n if (this.grid) {\n this.grid.geometry.dispose();\n this.grid.material.dispose();\n this.scene.remove(this.grid);\n }\n if (this.axes) {\n this.axes.geometry.dispose();\n this.axes.material.dispose();\n this.scene.remove(this.axes);\n }\n this.grid = new THREE.GridHelper(gridSize, 20, 0x444444, 0x222222);\n this.grid.visible = this.showGrid();\n this.scene.add(this.grid);\n this.axes = new THREE.AxesHelper(axesSize);\n this.axes.visible = this.showAxes();\n this.scene.add(this.axes);\n }\n disposeMaterial(material) {\n if (material.map)\n material.map.dispose();\n if (material.lightMap)\n material.lightMap.dispose();\n if (material.bumpMap)\n material.bumpMap.dispose();\n if (material.normalMap)\n material.normalMap.dispose();\n if (material.specularMap)\n material.specularMap.dispose();\n if (material.envMap)\n material.envMap.dispose();\n material.dispose();\n }\n disposeThreeResources(obj) {\n obj.traverse((child) => {\n if (child.geometry) {\n child.geometry.dispose();\n }\n if (child.material) {\n if (Array.isArray(child.material)) {\n child.material.forEach((mat) => {\n this.disposeMaterial(mat);\n });\n }\n else {\n this.disposeMaterial(child.material);\n }\n }\n });\n }\n initScene() {\n const container = this.container()?.nativeElement;\n if (!container)\n return;\n this.isCleanedUp = false;\n this.abortController = new AbortController();\n const width = container.clientWidth;\n const height = container.clientHeight;\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0x1a1a1a);\n this.camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);\n this.camera.position.set(100, 100, 100);\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.renderer.setSize(width, height);\n this.renderer.setPixelRatio(window.devicePixelRatio);\n container.appendChild(this.renderer.domElement);\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.05;\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);\n this.scene.add(ambientLight);\n const directionalLight1 = new THREE.DirectionalLight(0xffffff, 0.8);\n directionalLight1.position.set(1, 1, 1);\n this.scene.add(directionalLight1);\n const directionalLight2 = new THREE.DirectionalLight(0xffffff, 0.4);\n directionalLight2.position.set(-1, -1, -1);\n this.scene.add(directionalLight2);\n this.loadModel();\n const animate = () => {\n if (this.isCleanedUp)\n return;\n this.animationId = requestAnimationFrame(animate);\n this.controls?.update();\n if (this.scene && this.camera && this.renderer) {\n this.renderer.render(this.scene, this.camera);\n }\n };\n animate();\n window.addEventListener('resize', this.handleResize);\n }\n loadModel() {\n if (!this.scene || !this.camera || !this.controls || this.isCleanedUp)\n return;\n const ext = this.getExtension(this.url(), this.fileName(), this.file());\n let loader;\n const manager = new THREE.LoadingManager();\n if (ext === 'dxf') {\n loader = new DXFLoader();\n }\n else if (ext === 'stl') {\n loader = new STLLoader(manager);\n }\n else if (ext === 'obj') {\n loader = new OBJLoader(manager);\n }\n else if (ext === 'gltf' || ext === 'glb') {\n loader = new GLTFLoader(manager);\n }\n else {\n this.error.set(this.t('cad.parse_failed'));\n this.loading.set(false);\n return;\n }\n const handleLoadSuccess = (object, loadedExt) => {\n if (this.isCleanedUp)\n return;\n if (!object) {\n this.error.set(this.t('cad.parse_failed'));\n this.loading.set(false);\n return;\n }\n let loadedModel;\n if (loadedExt === 'stl') {\n const geometry = object;\n const material = new THREE.MeshPhongMaterial({\n color: 0x888888,\n flatShading: true,\n side: THREE.DoubleSide,\n });\n loadedModel = new THREE.Mesh(geometry, material);\n }\n else if (loadedExt === 'gltf' || loadedExt === 'glb') {\n loadedModel = object.scene;\n }\n else {\n loadedModel = object;\n loadedModel.traverse((child) => {\n if (child instanceof THREE.Mesh && !child.material) {\n child.material = new THREE.MeshPhongMaterial({\n color: 0x888888,\n side: THREE.DoubleSide,\n });\n }\n });\n }\n this.scene.add(loadedModel);\n this.model = loadedModel;\n const box = new THREE.Box3().setFromObject(loadedModel);\n const center = box.getCenter(new THREE.Vector3());\n const size = box.getSize(new THREE.Vector3());\n const maxDim = Math.max(size.x, size.y, size.z);\n this.updateReferenceHelpers(maxDim);\n const fov = this.camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs(maxDim / 2 / Math.tan(fov / 2));\n cameraZ *= 1.5;\n this.camera.position.set(center.x + cameraZ, center.y + cameraZ, center.z + cameraZ);\n this.camera.lookAt(center);\n this.controls.target.copy(center);\n this.controls.update();\n this.loading.set(false);\n this.toolbarEmitter.notify();\n };\n const handleLoadError = (err) => {\n if (this.isCleanedUp)\n return;\n if (err.name === 'AbortError') {\n return;\n }\n this.error.set(this.t('cad.load_failed'));\n this.loading.set(false);\n };\n const file = this.file();\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const loadPromise = file\n ? file.arrayBuffer()\n : fetcher(this.url(), { signal: this.abortController?.signal }).then(response => {\n if (this.isCleanedUp)\n return undefined;\n if (!response.ok)\n throw new Error('Failed to fetch file');\n return response.arrayBuffer();\n });\n loadPromise\n .then((data) => {\n if (this.isCleanedUp || !data)\n return;\n if (ext === 'stl') {\n const object = loader.parse(data);\n handleLoadSuccess(object, ext);\n }\n else if (ext === 'obj') {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(data);\n const object = loader.parse(text);\n handleLoadSuccess(object, ext);\n }\n else if (ext === 'gltf' || ext === 'glb') {\n loader.parse(data, '', (gltf) => {\n if (!this.isCleanedUp) {\n handleLoadSuccess(gltf, ext);\n }\n }, (err) => handleLoadError(err));\n }\n else if (ext === 'dxf') {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(data);\n const origSetFromPoints = THREE.BufferGeometry.prototype.setFromPoints;\n THREE.BufferGeometry.prototype.setFromPoints = function (points) {\n const filtered = (points || []).filter((p) => p && p.x !== undefined && p.y !== undefined);\n return origSetFromPoints.call(this, filtered);\n };\n try {\n loader.loadString(text, (dxfData) => {\n if (!this.isCleanedUp) {\n const obj = dxfData?.entity || dxfData;\n handleLoadSuccess(obj, ext);\n }\n }, (err) => {\n handleLoadError(err);\n });\n }\n catch (err) {\n handleLoadError(err);\n }\n finally {\n THREE.BufferGeometry.prototype.setFromPoints = origSetFromPoints;\n }\n }\n })\n .catch((err) => {\n if (!this.isCleanedUp) {\n handleLoadError(err);\n }\n });\n }\n cleanup() {\n this.isCleanedUp = true;\n if (this.abortController) {\n this.abortController.abort();\n }\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n window.removeEventListener('resize', this.handleResize);\n if (this.model) {\n this.disposeThreeResources(this.model);\n this.scene?.remove(this.model);\n this.model = null;\n }\n if (this.grid) {\n this.grid.geometry.dispose();\n this.grid.material.dispose();\n this.scene?.remove(this.grid);\n this.grid = null;\n }\n if (this.axes) {\n this.axes.geometry.dispose();\n this.axes.material.dispose();\n this.scene?.remove(this.axes);\n this.axes = null;\n }\n this.controls?.dispose();\n this.renderer?.dispose();\n const container = this.container()?.nativeElement;\n if (container && this.renderer?.domElement && container.contains(this.renderer.domElement)) {\n container.removeChild(this.renderer.domElement);\n }\n this.scene = null;\n this.camera = null;\n this.renderer = null;\n this.controls = null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: CadRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: CadRenderer, isStandalone: true, selector: \"afp-cad-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null }, file: { classPropertyName: \"file\", publicName: \"file\", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: \"fileName\", publicName: \"fileName\", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"containerRef\"], descendants: true, isSignal: true }], ngImport: i0, template: `\n <div #containerRef class=\"afp-relative afp-w-full afp-h-full afp-bg-media-bg\">\n @if (error()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <p class=\"afp-text-fg-primary\">{{ error() }}</p>\n </div>\n </div>\n }\n\n @if (loading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-inline-block afp-w-8 afp-h-8 afp-border-4 afp-border-spinner-track afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n <p class=\"afp-mt-4 afp-text-fg-secondary\">{{ t('cad.loading') }}</p>\n </div>\n </div>\n }\n </div>\n `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: CadRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-cad-renderer',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'afp-block afp-w-full afp-h-full' },\n template: `\n <div #containerRef class=\"afp-relative afp-w-full afp-h-full afp-bg-media-bg\">\n @if (error()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <p class=\"afp-text-fg-primary\">{{ error() }}</p>\n </div>\n </div>\n }\n\n @if (loading()) {\n <div class=\"afp-absolute afp-inset-0 afp-flex afp-items-center afp-justify-center afp-bg-surface-3 afp-z-10\">\n <div class=\"afp-text-center\">\n <div class=\"afp-inline-block afp-w-8 afp-h-8 afp-border-4 afp-border-spinner-track afp-border-t-spinner-head afp-rounded-full afp-animate-spin\"></div>\n <p class=\"afp-mt-4 afp-text-fg-secondary\">{{ t('cad.loading') }}</p>\n </div>\n </div>\n }\n </div>\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { CadRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-3-0UYUJy.mjs.map\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { L as LocaleService, R as RequestService, g as getFallbackTranslator, M as Mg, $ as $0, e as e0 } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
3
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator, M as Mg, $ as $0, e as e0 } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs';
4
4
  import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
5
5
 
6
6
  const FORMAT_BY_EXT = {
@@ -196,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
196
196
  }], ctorParameters: () => [] });
197
197
 
198
198
  export { SubtitleRenderer };
199
- //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map
199
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-D35x1nwM.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { parseSubtitle, formatSubtitleTime, fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nconst FORMAT_BY_EXT = {\n srt: 'srt',\n vtt: 'vtt',\n lrc: 'lrc',\n elrc: 'elrc',\n ass: 'ass',\n ssa: 'ssa',\n ttml: 'ttml',\n dfxp: 'ttml',\n};\nclass SubtitleRenderer {\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.text = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.parsed = computed(() => {\n if (!this.text())\n return null;\n try {\n return parseSubtitle(this.text(), SubtitleRenderer.getFormat(this.fileName()));\n }\n catch (err) {\n console.error(err);\n return null;\n }\n });\n this.isLyric = computed(() => this.parsed()?.format === 'lrc' || this.parsed()?.format === 'elrc');\n this.meta = computed(() => this.parsed()?.metadata ?? {});\n this.getToolbarGroups = () => [];\n this.formatSubtitleTime = formatSubtitleTime;\n effect(() => {\n this.url();\n void this.load();\n });\n }\n wordTimeShort(time) {\n return formatSubtitleTime(time).slice(3, 8);\n }\n static getFormat(fileName) {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n return FORMAT_BY_EXT[ext];\n }\n async load() {\n this.loading.set(true);\n this.error.set(null);\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n this.text.set(await fetchTextUtf8(this.url(), { fetcher }));\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('subtitle.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: SubtitleRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: SubtitleRenderer, isStandalone: true, selector: \"afp-subtitle-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 afp-bg-[#0f0f12]\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error() || !parsed()) {\n <afp-renderer-error\n [message]=\"error() || t('subtitle.parse_failed')\"\n class=\"afp-bg-[#0f0f12]\"\n />\n } @else {\n <div\n class=\"afp-relative afp-w-full afp-h-full afp-bg-[#0f0f12]\"\n [class.flavor-lyric]=\"isLyric()\"\n [class.flavor-subtitle]=\"!isLyric()\"\n >\n <div class=\"content-scroll\">\n <div class=\"timeline\">\n <div class=\"timeline-line\"></div>\n <ol class=\"cues\">\n @for (cue of parsed()!.cues; track $index) {\n <li class=\"cue-row\">\n <div class=\"cue-dot\"></div>\n <div class=\"cue-meta\">\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.start) }}</span>\n <span class=\"cue-arrow\">→</span>\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.end) }}</span>\n <span class=\"cue-id\">#{{ cue.id ?? $index + 1 }}</span>\n @if (cue.style) {\n <span class=\"cue-style\">{{ cue.style }}</span>\n }\n </div>\n @if (cue.words && cue.words.length > 0) {\n <div class=\"cue-words\">\n @for (word of cue.words; track $index) {\n <span class=\"cue-word\" [title]=\"formatSubtitleTime(word.start)\">\n <span class=\"cue-word-time\">{{ wordTimeShort(word.start) }}</span>\n <span class=\"cue-word-text\">{{ word.text }}</span>\n </span>\n }\n </div>\n } @else {\n <p class=\"cue-text\" [class.lyric]=\"isLyric()\">{{ cue.text }}</p>\n }\n </li>\n }\n </ol>\n </div>\n </div>\n\n <div class=\"status-pill\">\n <span>{{ parsed()!.cues.length }} {{ isLyric() ? t('subtitle.lines') : t('subtitle.cues') }}</span>\n @if (meta()['length']) {\n <span class=\"dot\">·</span>\n <span>{{ meta()['length'] }}</span>\n }\n </div>\n </div>\n }\n `, isInline: true, styles: [\".content-scroll{width:100%;height:100%;overflow:auto;padding:1.5rem 1rem 4rem}.status-pill{pointer-events:none;position:absolute;bottom:.75rem;right:.75rem;display:flex;align-items:center;gap:.5rem;padding:.25rem .625rem;border-radius:9999px;background:#0006;backdrop-filter:blur(8px);border:1px solid var(--fp-line);font-size:.625rem;color:var(--fp-fg-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-variant-numeric:tabular-nums}.dot{color:var(--fp-fg-disabled)}.timeline{position:relative}.timeline-line{position:absolute;left:5px;top:.5rem;bottom:.5rem;width:1px;background:var(--fp-line-weak)}.cues{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.cue-row{position:relative;padding-left:1.5rem}.cue-dot{position:absolute;left:0;top:.4rem;width:.75rem;height:.75rem;border-radius:9999px;background:var(--fp-surface-3);border:2px solid #0f0f12;transition:background-color .2s}.flavor-lyric .cue-row:hover .cue-dot{background:#a78bfa}.flavor-subtitle .cue-row:hover .cue-dot{background:#38bdf8}.cue-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin-bottom:.375rem}.cue-time{font-size:.6875rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-muted);font-variant-numeric:tabular-nums}.cue-arrow{font-size:.6875rem;color:var(--fp-fg-disabled)}.cue-id{font-size:.625rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-disabled);font-variant-numeric:tabular-nums}.cue-style{font-size:.5625rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fp-fg-tertiary);padding:.125rem .375rem;border-radius:.25rem;background:var(--fp-line-weak);border:1px solid var(--fp-line)}.cue-text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.625;color:var(--fp-fg-primary);font-size:.875rem;min-height:1.25rem;transition:color .2s}.cue-text.lyric{font-size:1rem;font-weight:500}.cue-row:hover .cue-text{color:#fff}.cue-words{display:flex;flex-wrap:wrap;gap:.25rem .375rem;font-size:1rem;color:var(--fp-fg-primary);line-height:1.625;transition:color .2s}.cue-row:hover .cue-words{color:#fff}.cue-word{display:inline-flex;flex-direction:column;align-items:flex-start}.cue-word-time{font-size:.5625rem;color:var(--fp-fg-disabled);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1;font-variant-numeric:tabular-nums}.cue-word-text{line-height:1.4}\\n\"], dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: SubtitleRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-subtitle-renderer', standalone: true, imports: [RendererError], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full afp-bg-[#0f0f12]\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error() || !parsed()) {\n <afp-renderer-error\n [message]=\"error() || t('subtitle.parse_failed')\"\n class=\"afp-bg-[#0f0f12]\"\n />\n } @else {\n <div\n class=\"afp-relative afp-w-full afp-h-full afp-bg-[#0f0f12]\"\n [class.flavor-lyric]=\"isLyric()\"\n [class.flavor-subtitle]=\"!isLyric()\"\n >\n <div class=\"content-scroll\">\n <div class=\"timeline\">\n <div class=\"timeline-line\"></div>\n <ol class=\"cues\">\n @for (cue of parsed()!.cues; track $index) {\n <li class=\"cue-row\">\n <div class=\"cue-dot\"></div>\n <div class=\"cue-meta\">\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.start) }}</span>\n <span class=\"cue-arrow\">→</span>\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.end) }}</span>\n <span class=\"cue-id\">#{{ cue.id ?? $index + 1 }}</span>\n @if (cue.style) {\n <span class=\"cue-style\">{{ cue.style }}</span>\n }\n </div>\n @if (cue.words && cue.words.length > 0) {\n <div class=\"cue-words\">\n @for (word of cue.words; track $index) {\n <span class=\"cue-word\" [title]=\"formatSubtitleTime(word.start)\">\n <span class=\"cue-word-time\">{{ wordTimeShort(word.start) }}</span>\n <span class=\"cue-word-text\">{{ word.text }}</span>\n </span>\n }\n </div>\n } @else {\n <p class=\"cue-text\" [class.lyric]=\"isLyric()\">{{ cue.text }}</p>\n }\n </li>\n }\n </ol>\n </div>\n </div>\n\n <div class=\"status-pill\">\n <span>{{ parsed()!.cues.length }} {{ isLyric() ? t('subtitle.lines') : t('subtitle.cues') }}</span>\n @if (meta()['length']) {\n <span class=\"dot\">·</span>\n <span>{{ meta()['length'] }}</span>\n }\n </div>\n </div>\n }\n `, styles: [\".content-scroll{width:100%;height:100%;overflow:auto;padding:1.5rem 1rem 4rem}.status-pill{pointer-events:none;position:absolute;bottom:.75rem;right:.75rem;display:flex;align-items:center;gap:.5rem;padding:.25rem .625rem;border-radius:9999px;background:#0006;backdrop-filter:blur(8px);border:1px solid var(--fp-line);font-size:.625rem;color:var(--fp-fg-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-variant-numeric:tabular-nums}.dot{color:var(--fp-fg-disabled)}.timeline{position:relative}.timeline-line{position:absolute;left:5px;top:.5rem;bottom:.5rem;width:1px;background:var(--fp-line-weak)}.cues{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.cue-row{position:relative;padding-left:1.5rem}.cue-dot{position:absolute;left:0;top:.4rem;width:.75rem;height:.75rem;border-radius:9999px;background:var(--fp-surface-3);border:2px solid #0f0f12;transition:background-color .2s}.flavor-lyric .cue-row:hover .cue-dot{background:#a78bfa}.flavor-subtitle .cue-row:hover .cue-dot{background:#38bdf8}.cue-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin-bottom:.375rem}.cue-time{font-size:.6875rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-muted);font-variant-numeric:tabular-nums}.cue-arrow{font-size:.6875rem;color:var(--fp-fg-disabled)}.cue-id{font-size:.625rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-disabled);font-variant-numeric:tabular-nums}.cue-style{font-size:.5625rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fp-fg-tertiary);padding:.125rem .375rem;border-radius:.25rem;background:var(--fp-line-weak);border:1px solid var(--fp-line)}.cue-text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.625;color:var(--fp-fg-primary);font-size:.875rem;min-height:1.25rem;transition:color .2s}.cue-text.lyric{font-size:1rem;font-weight:500}.cue-row:hover .cue-text{color:#fff}.cue-words{display:flex;flex-wrap:wrap;gap:.25rem .375rem;font-size:1rem;color:var(--fp-fg-primary);line-height:1.625;transition:color .2s}.cue-row:hover .cue-words{color:#fff}.cue-word{display:inline-flex;flex-direction:column;align-items:flex-start}.cue-word-time{font-size:.5625rem;color:var(--fp-fg-disabled);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1;font-variant-numeric:tabular-nums}.cue-word-text{line-height:1.4}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { SubtitleRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-D35x1nwM.mjs.map\n"],"names":["parseSubtitle","formatSubtitleTime","fetchTextUtf8"],"mappings":"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"}
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-5zqP72gq-lAwuxCQV.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-5zqP72gq.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-Dnuf7kun.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { parseSubtitle, formatSubtitleTime, fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nconst FORMAT_BY_EXT = {\n srt: 'srt',\n vtt: 'vtt',\n lrc: 'lrc',\n elrc: 'elrc',\n ass: 'ass',\n ssa: 'ssa',\n ttml: 'ttml',\n dfxp: 'ttml',\n};\nclass SubtitleRenderer {\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.text = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.parsed = computed(() => {\n if (!this.text())\n return null;\n try {\n return parseSubtitle(this.text(), SubtitleRenderer.getFormat(this.fileName()));\n }\n catch (err) {\n console.error(err);\n return null;\n }\n });\n this.isLyric = computed(() => this.parsed()?.format === 'lrc' || this.parsed()?.format === 'elrc');\n this.meta = computed(() => this.parsed()?.metadata ?? {});\n this.getToolbarGroups = () => [];\n this.formatSubtitleTime = formatSubtitleTime;\n effect(() => {\n this.url();\n void this.load();\n });\n }\n wordTimeShort(time) {\n return formatSubtitleTime(time).slice(3, 8);\n }\n static getFormat(fileName) {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n return FORMAT_BY_EXT[ext];\n }\n async load() {\n this.loading.set(true);\n this.error.set(null);\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n this.text.set(await fetchTextUtf8(this.url(), { fetcher }));\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('subtitle.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: SubtitleRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: SubtitleRenderer, isStandalone: true, selector: \"afp-subtitle-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 afp-bg-[#0f0f12]\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error() || !parsed()) {\n <afp-renderer-error\n [message]=\"error() || t('subtitle.parse_failed')\"\n class=\"afp-bg-[#0f0f12]\"\n />\n } @else {\n <div\n class=\"afp-relative afp-w-full afp-h-full afp-bg-[#0f0f12]\"\n [class.flavor-lyric]=\"isLyric()\"\n [class.flavor-subtitle]=\"!isLyric()\"\n >\n <div class=\"content-scroll\">\n <div class=\"timeline\">\n <div class=\"timeline-line\"></div>\n <ol class=\"cues\">\n @for (cue of parsed()!.cues; track $index) {\n <li class=\"cue-row\">\n <div class=\"cue-dot\"></div>\n <div class=\"cue-meta\">\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.start) }}</span>\n <span class=\"cue-arrow\">→</span>\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.end) }}</span>\n <span class=\"cue-id\">#{{ cue.id ?? $index + 1 }}</span>\n @if (cue.style) {\n <span class=\"cue-style\">{{ cue.style }}</span>\n }\n </div>\n @if (cue.words && cue.words.length > 0) {\n <div class=\"cue-words\">\n @for (word of cue.words; track $index) {\n <span class=\"cue-word\" [title]=\"formatSubtitleTime(word.start)\">\n <span class=\"cue-word-time\">{{ wordTimeShort(word.start) }}</span>\n <span class=\"cue-word-text\">{{ word.text }}</span>\n </span>\n }\n </div>\n } @else {\n <p class=\"cue-text\" [class.lyric]=\"isLyric()\">{{ cue.text }}</p>\n }\n </li>\n }\n </ol>\n </div>\n </div>\n\n <div class=\"status-pill\">\n <span>{{ parsed()!.cues.length }} {{ isLyric() ? t('subtitle.lines') : t('subtitle.cues') }}</span>\n @if (meta()['length']) {\n <span class=\"dot\">·</span>\n <span>{{ meta()['length'] }}</span>\n }\n </div>\n </div>\n }\n `, isInline: true, styles: [\".content-scroll{width:100%;height:100%;overflow:auto;padding:1.5rem 1rem 4rem}.status-pill{pointer-events:none;position:absolute;bottom:.75rem;right:.75rem;display:flex;align-items:center;gap:.5rem;padding:.25rem .625rem;border-radius:9999px;background:#0006;backdrop-filter:blur(8px);border:1px solid var(--fp-line);font-size:.625rem;color:var(--fp-fg-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-variant-numeric:tabular-nums}.dot{color:var(--fp-fg-disabled)}.timeline{position:relative}.timeline-line{position:absolute;left:5px;top:.5rem;bottom:.5rem;width:1px;background:var(--fp-line-weak)}.cues{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.cue-row{position:relative;padding-left:1.5rem}.cue-dot{position:absolute;left:0;top:.4rem;width:.75rem;height:.75rem;border-radius:9999px;background:var(--fp-surface-3);border:2px solid #0f0f12;transition:background-color .2s}.flavor-lyric .cue-row:hover .cue-dot{background:#a78bfa}.flavor-subtitle .cue-row:hover .cue-dot{background:#38bdf8}.cue-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin-bottom:.375rem}.cue-time{font-size:.6875rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-muted);font-variant-numeric:tabular-nums}.cue-arrow{font-size:.6875rem;color:var(--fp-fg-disabled)}.cue-id{font-size:.625rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-disabled);font-variant-numeric:tabular-nums}.cue-style{font-size:.5625rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fp-fg-tertiary);padding:.125rem .375rem;border-radius:.25rem;background:var(--fp-line-weak);border:1px solid var(--fp-line)}.cue-text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.625;color:var(--fp-fg-primary);font-size:.875rem;min-height:1.25rem;transition:color .2s}.cue-text.lyric{font-size:1rem;font-weight:500}.cue-row:hover .cue-text{color:#fff}.cue-words{display:flex;flex-wrap:wrap;gap:.25rem .375rem;font-size:1rem;color:var(--fp-fg-primary);line-height:1.625;transition:color .2s}.cue-row:hover .cue-words{color:#fff}.cue-word{display:inline-flex;flex-direction:column;align-items:flex-start}.cue-word-time{font-size:.5625rem;color:var(--fp-fg-disabled);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1;font-variant-numeric:tabular-nums}.cue-word-text{line-height:1.4}\\n\"], dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: SubtitleRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-subtitle-renderer', standalone: true, imports: [RendererError], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full afp-bg-[#0f0f12]\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error() || !parsed()) {\n <afp-renderer-error\n [message]=\"error() || t('subtitle.parse_failed')\"\n class=\"afp-bg-[#0f0f12]\"\n />\n } @else {\n <div\n class=\"afp-relative afp-w-full afp-h-full afp-bg-[#0f0f12]\"\n [class.flavor-lyric]=\"isLyric()\"\n [class.flavor-subtitle]=\"!isLyric()\"\n >\n <div class=\"content-scroll\">\n <div class=\"timeline\">\n <div class=\"timeline-line\"></div>\n <ol class=\"cues\">\n @for (cue of parsed()!.cues; track $index) {\n <li class=\"cue-row\">\n <div class=\"cue-dot\"></div>\n <div class=\"cue-meta\">\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.start) }}</span>\n <span class=\"cue-arrow\">→</span>\n <span class=\"cue-time\">{{ formatSubtitleTime(cue.end) }}</span>\n <span class=\"cue-id\">#{{ cue.id ?? $index + 1 }}</span>\n @if (cue.style) {\n <span class=\"cue-style\">{{ cue.style }}</span>\n }\n </div>\n @if (cue.words && cue.words.length > 0) {\n <div class=\"cue-words\">\n @for (word of cue.words; track $index) {\n <span class=\"cue-word\" [title]=\"formatSubtitleTime(word.start)\">\n <span class=\"cue-word-time\">{{ wordTimeShort(word.start) }}</span>\n <span class=\"cue-word-text\">{{ word.text }}</span>\n </span>\n }\n </div>\n } @else {\n <p class=\"cue-text\" [class.lyric]=\"isLyric()\">{{ cue.text }}</p>\n }\n </li>\n }\n </ol>\n </div>\n </div>\n\n <div class=\"status-pill\">\n <span>{{ parsed()!.cues.length }} {{ isLyric() ? t('subtitle.lines') : t('subtitle.cues') }}</span>\n @if (meta()['length']) {\n <span class=\"dot\">·</span>\n <span>{{ meta()['length'] }}</span>\n }\n </div>\n </div>\n }\n `, styles: [\".content-scroll{width:100%;height:100%;overflow:auto;padding:1.5rem 1rem 4rem}.status-pill{pointer-events:none;position:absolute;bottom:.75rem;right:.75rem;display:flex;align-items:center;gap:.5rem;padding:.25rem .625rem;border-radius:9999px;background:#0006;backdrop-filter:blur(8px);border:1px solid var(--fp-line);font-size:.625rem;color:var(--fp-fg-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-variant-numeric:tabular-nums}.dot{color:var(--fp-fg-disabled)}.timeline{position:relative}.timeline-line{position:absolute;left:5px;top:.5rem;bottom:.5rem;width:1px;background:var(--fp-line-weak)}.cues{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.cue-row{position:relative;padding-left:1.5rem}.cue-dot{position:absolute;left:0;top:.4rem;width:.75rem;height:.75rem;border-radius:9999px;background:var(--fp-surface-3);border:2px solid #0f0f12;transition:background-color .2s}.flavor-lyric .cue-row:hover .cue-dot{background:#a78bfa}.flavor-subtitle .cue-row:hover .cue-dot{background:#38bdf8}.cue-meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin-bottom:.375rem}.cue-time{font-size:.6875rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-muted);font-variant-numeric:tabular-nums}.cue-arrow{font-size:.6875rem;color:var(--fp-fg-disabled)}.cue-id{font-size:.625rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-disabled);font-variant-numeric:tabular-nums}.cue-style{font-size:.5625rem;text-transform:uppercase;letter-spacing:.1em;color:var(--fp-fg-tertiary);padding:.125rem .375rem;border-radius:.25rem;background:var(--fp-line-weak);border:1px solid var(--fp-line)}.cue-text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.625;color:var(--fp-fg-primary);font-size:.875rem;min-height:1.25rem;transition:color .2s}.cue-text.lyric{font-size:1rem;font-weight:500}.cue-row:hover .cue-text{color:#fff}.cue-words{display:flex;flex-wrap:wrap;gap:.25rem .375rem;font-size:1rem;color:var(--fp-fg-primary);line-height:1.625;transition:color .2s}.cue-row:hover .cue-words{color:#fff}.cue-word{display:inline-flex;flex-direction:column;align-items:flex-start}.cue-word-time{font-size:.5625rem;color:var(--fp-fg-disabled);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1;font-variant-numeric:tabular-nums}.cue-word-text{line-height:1.4}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { SubtitleRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-5zqP72gq.mjs.map\n"],"names":["parseSubtitle","formatSubtitleTime","fetchTextUtf8"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, inject, signal, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { DomSanitizer } from '@angular/platform-browser';
4
- import { L as LocaleService, R as RequestService, g as getFallbackTranslator, k as Tg } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
4
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator, k as Tg } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs';
5
5
  import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
6
6
 
7
7
  class DocRenderer {
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
99
99
  }], ctorParameters: () => [] });
100
100
 
101
101
  export { DocRenderer };
102
- //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map
102
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-CDjKPqyW.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, signal, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { renderLegacyDocHtml } from '@eternalheart/file-preview-core';\n\nclass DocRenderer {\n constructor() {\n this.url = input.required();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.html = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.getToolbarGroups = () => [];\n effect(() => {\n const newUrl = this.url();\n if (newUrl) {\n untracked(() => {\n void this.loadDoc();\n });\n }\n });\n }\n trust(html) {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n async loadDoc() {\n this.loading.set(true);\n this.error.set(null);\n this.html.set('');\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const response = await fetcher(this.url());\n if (!response.ok)\n throw new Error('load failed');\n const buffer = await response.arrayBuffer();\n this.html.set(await renderLegacyDocHtml(buffer));\n }\n catch (err) {\n console.error('Doc 解析错误:', err);\n this.error.set(this.t('doc.parse_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: DocRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: DocRenderer, isStandalone: true, selector: \"afp-doc-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", 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\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-docx-container afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div class=\"afp-flex afp-flex-col afp-items-center\">\n <div class=\"afp-legacy-doc-paper\">\n <div [innerHTML]=\"trust(html())\"></div>\n </div>\n </div>\n </div>\n }\n `, isInline: true, dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: DocRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-doc-renderer',\n standalone: true,\n imports: [RendererError],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'afp-block afp-w-full afp-h-full' },\n template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-docx-container afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div class=\"afp-flex afp-flex-col afp-items-center\">\n <div class=\"afp-legacy-doc-paper\">\n <div [innerHTML]=\"trust(html())\"></div>\n </div>\n </div>\n </div>\n }\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { DocRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-CDjKPqyW.mjs.map\n"],"names":["renderLegacyDocHtml"],"mappings":"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"}
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-71x_jK0V-BwzFr9L0.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-71x_jK0V.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, signal, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-Dnuf7kun.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { renderLegacyDocHtml } from '@eternalheart/file-preview-core';\n\nclass DocRenderer {\n constructor() {\n this.url = input.required();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.html = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.getToolbarGroups = () => [];\n effect(() => {\n const newUrl = this.url();\n if (newUrl) {\n untracked(() => {\n void this.loadDoc();\n });\n }\n });\n }\n trust(html) {\n return this.sanitizer.bypassSecurityTrustHtml(html);\n }\n async loadDoc() {\n this.loading.set(true);\n this.error.set(null);\n this.html.set('');\n try {\n const fetcher = this.request?.fetcher() ?? ((u, init) => fetch(u, init));\n const response = await fetcher(this.url());\n if (!response.ok)\n throw new Error('load failed');\n const buffer = await response.arrayBuffer();\n this.html.set(await renderLegacyDocHtml(buffer));\n }\n catch (err) {\n console.error('Doc 解析错误:', err);\n this.error.set(this.t('doc.parse_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: DocRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: DocRenderer, isStandalone: true, selector: \"afp-doc-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", 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\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-docx-container afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div class=\"afp-flex afp-flex-col afp-items-center\">\n <div class=\"afp-legacy-doc-paper\">\n <div [innerHTML]=\"trust(html())\"></div>\n </div>\n </div>\n </div>\n }\n `, isInline: true, dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: DocRenderer, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-doc-renderer',\n standalone: true,\n imports: [RendererError],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'afp-block afp-w-full afp-h-full' },\n template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else {\n <div class=\"afp-docx-container afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div class=\"afp-flex afp-flex-col afp-items-center\">\n <div class=\"afp-legacy-doc-paper\">\n <div [innerHTML]=\"trust(html())\"></div>\n </div>\n </div>\n </div>\n }\n `,\n }]\n }], ctorParameters: () => [] });\n\nexport { DocRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-71x_jK0V.mjs.map\n"],"names":["renderLegacyDocHtml"],"mappings":"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"}
@@ -5,7 +5,7 @@ import MarkdownIt from 'markdown-it';
5
5
  import MarkdownItKatex from '@traptitech/markdown-it-katex';
6
6
  import { codeToHtml } from 'shiki';
7
7
  import { Code, Eye } from 'lucide-angular';
8
- import { L as LocaleService, R as RequestService, T as ThemeService, g as getFallbackTranslator, e as e0 } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
8
+ import { L as LocaleService, R as RequestService, T as ThemeService, g as getFallbackTranslator, e as e0 } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs';
9
9
  import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
10
10
  import { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs';
11
11
  import 'katex/dist/katex.min.css';
@@ -270,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
270
270
  }], ctorParameters: () => [] });
271
271
 
272
272
  export { MarkdownRenderer };
273
- //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map
273
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-Bv3JRXKn.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, Injector, signal, viewChild, computed, effect, untracked, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport MarkdownIt from 'markdown-it';\nimport MarkdownItKatex from '@traptitech/markdown-it-katex';\nimport { codeToHtml } from 'shiki';\nimport { Code, Eye } from 'lucide-angular';\nimport { L as LocaleService, R as RequestService, T as ThemeService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-DXwNhxAB.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport 'katex/dist/katex.min.css';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nclass MarkdownRenderer {\n constructor() {\n this.url = input.required();\n this.emitter = new ToolbarEventEmitter();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.themeService = inject(ThemeService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.injector = inject(Injector);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.viewMode = signal('preview');\n this.content = signal('');\n this.html = signal('');\n this.highlightedSource = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.container = viewChild('container');\n this.shikiTheme = computed(() => (this.themeService?.theme() ?? 'dark') === 'light' ? 'github-light' : 'github-dark');\n this.trustedHtml = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.html()));\n this.trustedSource = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.highlightedSource()));\n this.md = MarkdownRenderer.createMarkdownIt();\n this.themeWatchStarted = false;\n this.getToolbarGroups = () => {\n const groups = [];\n groups.push({\n items: [\n {\n type: 'button',\n icon: this.viewMode() === 'preview' ? Code : Eye,\n tooltip: this.viewMode() === 'preview' ? this.t('toolbar.source') : this.t('toolbar.preview'),\n action: () => {\n this.viewMode.set(this.viewMode() === 'preview' ? 'source' : 'preview');\n },\n active: this.viewMode() === 'source',\n },\n ],\n });\n return groups;\n };\n this.onToolbarChange = (listener) => this.emitter.subscribe(listener);\n effect(() => {\n this.url();\n void this.loadMarkdown();\n });\n effect(() => {\n this.shikiTheme();\n if (!this.themeWatchStarted) {\n this.themeWatchStarted = true;\n return;\n }\n untracked(() => {\n if (this.content())\n void this.loadMarkdown();\n });\n });\n effect(() => {\n this.viewMode();\n this.loading();\n this.emitter.notify();\n });\n effect(() => {\n const html = this.html();\n const mode = this.viewMode();\n const loading = this.loading();\n if (!html || loading || mode !== 'preview')\n return;\n afterNextRender(() => {\n void this.highlightAndInjectCopyButtons();\n }, { injector: this.injector });\n });\n }\n static createMarkdownIt() {\n const md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: false,\n breaks: false,\n });\n md.use(MarkdownItKatex);\n md.renderer.rules.fence = (tokens, idx) => {\n const token = tokens[idx];\n const info = token.info ? token.info.trim() : '';\n const code = token.content;\n if (!info) {\n return `<div class=\"code-block-wrapper\">\n <pre class=\"no-lang-pre\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n }\n return `<div class=\"code-block-wrapper\">\n <div class=\"code-block-header\">\n <span>${info}</span>\n </div>\n <pre data-shiki-pending=\"1\" data-lang=\"${info}\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n };\n md.renderer.rules.code_block = (tokens, idx) => {\n const code = tokens[idx].content;\n return `<div class=\"code-block-wrapper\">\n <pre class=\"no-lang-pre\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n };\n const defaultTableOpen = md.renderer.rules.table_open ||\n ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));\n md.renderer.rules.table_open = (tokens, idx, options, env, self) => {\n return '<div class=\"table-wrapper\">' + defaultTableOpen(tokens, idx, options, env, self);\n };\n const defaultTableClose = md.renderer.rules.table_close ||\n ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));\n md.renderer.rules.table_close = (tokens, idx, options, env, self) => {\n return defaultTableClose(tokens, idx, options, env, self) + '</div>';\n };\n return md;\n }\n async loadMarkdown() {\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.content.set(text);\n this.html.set(this.md.render(text));\n this.loading.set(false);\n try {\n this.highlightedSource.set(await codeToHtml(text, { lang: 'markdown', theme: this.shikiTheme() }));\n }\n catch {\n this.highlightedSource.set('');\n }\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('markdown.load_failed'));\n this.loading.set(false);\n }\n }\n createCopyButton(code, inline) {\n const COPY_SVG_SM = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`;\n const COPY_SVG_MD = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`;\n const CHECK_SVG_SM = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>`;\n const CHECK_SVG_MD = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>`;\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = inline ? 'code-copy-btn' : 'code-copy-btn code-copy-float';\n btn.title = this.t('markdown.copy_code');\n btn.innerHTML = inline ? COPY_SVG_SM : COPY_SVG_MD;\n btn.addEventListener('click', async (e) => {\n e.stopPropagation();\n try {\n await navigator.clipboard.writeText(code);\n }\n catch {\n const ta = document.createElement('textarea');\n ta.value = code;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n btn.innerHTML = inline ? CHECK_SVG_SM : CHECK_SVG_MD;\n btn.title = this.t('markdown.copied');\n setTimeout(() => {\n btn.innerHTML = inline ? COPY_SVG_SM : COPY_SVG_MD;\n btn.title = this.t('markdown.copy_code');\n }, 2000);\n });\n return btn;\n }\n async highlightAndInjectCopyButtons() {\n const el = this.container()?.nativeElement;\n if (!el)\n return;\n const pending = el.querySelectorAll('pre[data-shiki-pending=\"1\"]');\n for (const pre of pending) {\n const lang = pre.getAttribute('data-lang') || 'text';\n const code = pre.querySelector('code')?.textContent || '';\n try {\n const highlighted = await codeToHtml(code, { lang, theme: this.shikiTheme() });\n const tmp = document.createElement('div');\n tmp.innerHTML = highlighted;\n const newPre = tmp.firstElementChild;\n if (newPre)\n pre.replaceWith(newPre);\n }\n catch {\n pre.style.backgroundColor = 'var(--fp-code-bg)';\n pre.removeAttribute('data-shiki-pending');\n }\n }\n const wrappers = el.querySelectorAll('.code-block-wrapper');\n for (const wrapper of wrappers) {\n if (wrapper.querySelector('.code-copy-btn'))\n continue;\n const header = wrapper.querySelector('.code-block-header');\n const pre = wrapper.querySelector('pre');\n const code = pre?.querySelector('code')?.textContent ?? pre?.textContent ?? '';\n if (header) {\n header.appendChild(this.createCopyButton(code, true));\n }\n else {\n wrapper.appendChild(this.createCopyButton(code, false));\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: MarkdownRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: MarkdownRenderer, isStandalone: true, selector: \"afp-markdown-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, isSignal: true }], 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\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (viewMode() === 'source') {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n @if (!highlightedSource()) {\n <pre\n class=\"afp-p-6 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n } @else {\n <div class=\"shiki-wrapper\" [innerHTML]=\"trustedSource()\"></div>\n }\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div #container class=\"markdown-body\" [innerHTML]=\"trustedHtml()\"></div>\n </div>\n }\n `, isInline: true, styles: [\".markdown-body ::ng-deep .table-wrapper{overflow-x:auto;margin:1rem 0;border-radius:.375rem;border:1px solid var(--fp-surface-3)}.markdown-body ::ng-deep .table-wrapper>table{margin:0;border:0;border-radius:0}.markdown-body ::ng-deep .code-block-wrapper pre.shiki{margin:0;border-top-left-radius:0;border-top-right-radius:0;border-top:0}.markdown-body ::ng-deep .code-block-wrapper{overflow:visible}.markdown-body ::ng-deep .code-block-wrapper pre{overflow:visible}.markdown-body ::ng-deep .no-lang-pre{margin:0;padding:1rem;background:var(--fp-code-bg);border-radius:.375rem;border:1px solid var(--fp-line)}.markdown-body ::ng-deep .no-lang-pre code{display:block;font-size:.8125rem;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-primary);white-space:pre;overflow-x:auto}.markdown-body ::ng-deep pre.shiki code{display:block;padding:1rem;font-size:.8125rem;line-height:1.5;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.markdown-body ::ng-deep .katex{color:var(--fp-fg-primary)}.markdown-body ::ng-deep .katex-display{margin:1.25rem 0;overflow-x:auto;overflow-y:hidden}.shiki-wrapper ::ng-deep pre{margin:0;padding:1.5rem;background:transparent!important;font-size:.875rem;overflow-x:auto}.shiki-wrapper ::ng-deep code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\\n\"], dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: MarkdownRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-markdown-renderer', standalone: true, imports: [RendererError], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (viewMode() === 'source') {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n @if (!highlightedSource()) {\n <pre\n class=\"afp-p-6 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n } @else {\n <div class=\"shiki-wrapper\" [innerHTML]=\"trustedSource()\"></div>\n }\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div #container class=\"markdown-body\" [innerHTML]=\"trustedHtml()\"></div>\n </div>\n }\n `, styles: [\".markdown-body ::ng-deep .table-wrapper{overflow-x:auto;margin:1rem 0;border-radius:.375rem;border:1px solid var(--fp-surface-3)}.markdown-body ::ng-deep .table-wrapper>table{margin:0;border:0;border-radius:0}.markdown-body ::ng-deep .code-block-wrapper pre.shiki{margin:0;border-top-left-radius:0;border-top-right-radius:0;border-top:0}.markdown-body ::ng-deep .code-block-wrapper{overflow:visible}.markdown-body ::ng-deep .code-block-wrapper pre{overflow:visible}.markdown-body ::ng-deep .no-lang-pre{margin:0;padding:1rem;background:var(--fp-code-bg);border-radius:.375rem;border:1px solid var(--fp-line)}.markdown-body ::ng-deep .no-lang-pre code{display:block;font-size:.8125rem;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-primary);white-space:pre;overflow-x:auto}.markdown-body ::ng-deep pre.shiki code{display:block;padding:1rem;font-size:.8125rem;line-height:1.5;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.markdown-body ::ng-deep .katex{color:var(--fp-fg-primary)}.markdown-body ::ng-deep .katex-display{margin:1.25rem 0;overflow-x:auto;overflow-y:hidden}.shiki-wrapper ::ng-deep pre{margin:0;padding:1.5rem;background:transparent!important;font-size:.875rem;overflow-x:auto}.shiki-wrapper ::ng-deep code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { MarkdownRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-Bv3JRXKn.mjs.map\n"],"names":["fetchTextUtf8"],"mappings":"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"}
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-7KavuB8u-CFBWzMGm.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-index-7KavuB8u.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, inject, Injector, signal, viewChild, computed, effect, untracked, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport MarkdownIt from 'markdown-it';\nimport MarkdownItKatex from '@traptitech/markdown-it-katex';\nimport { codeToHtml } from 'shiki';\nimport { Code, Eye } from 'lucide-angular';\nimport { L as LocaleService, R as RequestService, T as ThemeService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-Dnuf7kun.mjs';\nimport { R as RendererError } from './eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs';\nimport { T as ToolbarEventEmitter } from './eternalheart-angular-file-preview-base.types-D5x7QPey.mjs';\nimport 'katex/dist/katex.min.css';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\n\nclass MarkdownRenderer {\n constructor() {\n this.url = input.required();\n this.emitter = new ToolbarEventEmitter();\n this.locale = inject(LocaleService, { optional: true });\n this.request = inject(RequestService, { optional: true });\n this.themeService = inject(ThemeService, { optional: true });\n this.sanitizer = inject(DomSanitizer);\n this.injector = inject(Injector);\n this.t = this.locale?.t() ?? getFallbackTranslator();\n this.viewMode = signal('preview');\n this.content = signal('');\n this.html = signal('');\n this.highlightedSource = signal('');\n this.loading = signal(true);\n this.error = signal(null);\n this.container = viewChild('container');\n this.shikiTheme = computed(() => (this.themeService?.theme() ?? 'dark') === 'light' ? 'github-light' : 'github-dark');\n this.trustedHtml = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.html()));\n this.trustedSource = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.highlightedSource()));\n this.md = MarkdownRenderer.createMarkdownIt();\n this.themeWatchStarted = false;\n this.getToolbarGroups = () => {\n const groups = [];\n groups.push({\n items: [\n {\n type: 'button',\n icon: this.viewMode() === 'preview' ? Code : Eye,\n tooltip: this.viewMode() === 'preview' ? this.t('toolbar.source') : this.t('toolbar.preview'),\n action: () => {\n this.viewMode.set(this.viewMode() === 'preview' ? 'source' : 'preview');\n },\n active: this.viewMode() === 'source',\n },\n ],\n });\n return groups;\n };\n this.onToolbarChange = (listener) => this.emitter.subscribe(listener);\n effect(() => {\n this.url();\n void this.loadMarkdown();\n });\n effect(() => {\n this.shikiTheme();\n if (!this.themeWatchStarted) {\n this.themeWatchStarted = true;\n return;\n }\n untracked(() => {\n if (this.content())\n void this.loadMarkdown();\n });\n });\n effect(() => {\n this.viewMode();\n this.loading();\n this.emitter.notify();\n });\n effect(() => {\n const html = this.html();\n const mode = this.viewMode();\n const loading = this.loading();\n if (!html || loading || mode !== 'preview')\n return;\n afterNextRender(() => {\n void this.highlightAndInjectCopyButtons();\n }, { injector: this.injector });\n });\n }\n static createMarkdownIt() {\n const md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: false,\n breaks: false,\n });\n md.use(MarkdownItKatex);\n md.renderer.rules.fence = (tokens, idx) => {\n const token = tokens[idx];\n const info = token.info ? token.info.trim() : '';\n const code = token.content;\n if (!info) {\n return `<div class=\"code-block-wrapper\">\n <pre class=\"no-lang-pre\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n }\n return `<div class=\"code-block-wrapper\">\n <div class=\"code-block-header\">\n <span>${info}</span>\n </div>\n <pre data-shiki-pending=\"1\" data-lang=\"${info}\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n };\n md.renderer.rules.code_block = (tokens, idx) => {\n const code = tokens[idx].content;\n return `<div class=\"code-block-wrapper\">\n <pre class=\"no-lang-pre\"><code>${md.utils.escapeHtml(code)}</code></pre>\n </div>`;\n };\n const defaultTableOpen = md.renderer.rules.table_open ||\n ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));\n md.renderer.rules.table_open = (tokens, idx, options, env, self) => {\n return '<div class=\"table-wrapper\">' + defaultTableOpen(tokens, idx, options, env, self);\n };\n const defaultTableClose = md.renderer.rules.table_close ||\n ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options));\n md.renderer.rules.table_close = (tokens, idx, options, env, self) => {\n return defaultTableClose(tokens, idx, options, env, self) + '</div>';\n };\n return md;\n }\n async loadMarkdown() {\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.content.set(text);\n this.html.set(this.md.render(text));\n this.loading.set(false);\n try {\n this.highlightedSource.set(await codeToHtml(text, { lang: 'markdown', theme: this.shikiTheme() }));\n }\n catch {\n this.highlightedSource.set('');\n }\n }\n catch (err) {\n console.error(err);\n this.error.set(this.t('markdown.load_failed'));\n this.loading.set(false);\n }\n }\n createCopyButton(code, inline) {\n const COPY_SVG_SM = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`;\n const COPY_SVG_MD = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>`;\n const CHECK_SVG_SM = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>`;\n const CHECK_SVG_MD = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"/></svg>`;\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = inline ? 'code-copy-btn' : 'code-copy-btn code-copy-float';\n btn.title = this.t('markdown.copy_code');\n btn.innerHTML = inline ? COPY_SVG_SM : COPY_SVG_MD;\n btn.addEventListener('click', async (e) => {\n e.stopPropagation();\n try {\n await navigator.clipboard.writeText(code);\n }\n catch {\n const ta = document.createElement('textarea');\n ta.value = code;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n btn.innerHTML = inline ? CHECK_SVG_SM : CHECK_SVG_MD;\n btn.title = this.t('markdown.copied');\n setTimeout(() => {\n btn.innerHTML = inline ? COPY_SVG_SM : COPY_SVG_MD;\n btn.title = this.t('markdown.copy_code');\n }, 2000);\n });\n return btn;\n }\n async highlightAndInjectCopyButtons() {\n const el = this.container()?.nativeElement;\n if (!el)\n return;\n const pending = el.querySelectorAll('pre[data-shiki-pending=\"1\"]');\n for (const pre of pending) {\n const lang = pre.getAttribute('data-lang') || 'text';\n const code = pre.querySelector('code')?.textContent || '';\n try {\n const highlighted = await codeToHtml(code, { lang, theme: this.shikiTheme() });\n const tmp = document.createElement('div');\n tmp.innerHTML = highlighted;\n const newPre = tmp.firstElementChild;\n if (newPre)\n pre.replaceWith(newPre);\n }\n catch {\n pre.style.backgroundColor = 'var(--fp-code-bg)';\n pre.removeAttribute('data-shiki-pending');\n }\n }\n const wrappers = el.querySelectorAll('.code-block-wrapper');\n for (const wrapper of wrappers) {\n if (wrapper.querySelector('.code-copy-btn'))\n continue;\n const header = wrapper.querySelector('.code-block-header');\n const pre = wrapper.querySelector('pre');\n const code = pre?.querySelector('code')?.textContent ?? pre?.textContent ?? '';\n if (header) {\n header.appendChild(this.createCopyButton(code, true));\n }\n else {\n wrapper.appendChild(this.createCopyButton(code, false));\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: MarkdownRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: MarkdownRenderer, isStandalone: true, selector: \"afp-markdown-renderer\", inputs: { url: { classPropertyName: \"url\", publicName: \"url\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"afp-block afp-w-full afp-h-full\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, isSignal: true }], 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\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (viewMode() === 'source') {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n @if (!highlightedSource()) {\n <pre\n class=\"afp-p-6 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n } @else {\n <div class=\"shiki-wrapper\" [innerHTML]=\"trustedSource()\"></div>\n }\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div #container class=\"markdown-body\" [innerHTML]=\"trustedHtml()\"></div>\n </div>\n }\n `, isInline: true, styles: [\".markdown-body ::ng-deep .table-wrapper{overflow-x:auto;margin:1rem 0;border-radius:.375rem;border:1px solid var(--fp-surface-3)}.markdown-body ::ng-deep .table-wrapper>table{margin:0;border:0;border-radius:0}.markdown-body ::ng-deep .code-block-wrapper pre.shiki{margin:0;border-top-left-radius:0;border-top-right-radius:0;border-top:0}.markdown-body ::ng-deep .code-block-wrapper{overflow:visible}.markdown-body ::ng-deep .code-block-wrapper pre{overflow:visible}.markdown-body ::ng-deep .no-lang-pre{margin:0;padding:1rem;background:var(--fp-code-bg);border-radius:.375rem;border:1px solid var(--fp-line)}.markdown-body ::ng-deep .no-lang-pre code{display:block;font-size:.8125rem;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-primary);white-space:pre;overflow-x:auto}.markdown-body ::ng-deep pre.shiki code{display:block;padding:1rem;font-size:.8125rem;line-height:1.5;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.markdown-body ::ng-deep .katex{color:var(--fp-fg-primary)}.markdown-body ::ng-deep .katex-display{margin:1.25rem 0;overflow-x:auto;overflow-y:hidden}.shiki-wrapper ::ng-deep pre{margin:0;padding:1.5rem;background:transparent!important;font-size:.875rem;overflow-x:auto}.shiki-wrapper ::ng-deep code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\\n\"], dependencies: [{ kind: \"component\", type: RendererError, selector: \"afp-renderer-error\", inputs: [\"message\", \"detail\", \"showIcon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: MarkdownRenderer, decorators: [{\n type: Component,\n args: [{ selector: 'afp-markdown-renderer', standalone: true, imports: [RendererError], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'afp-block afp-w-full afp-h-full' }, template: `\n @if (loading()) {\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div\n 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\"\n ></div>\n </div>\n } @else if (error()) {\n <afp-renderer-error [message]=\"error()!\" />\n } @else if (viewMode() === 'source') {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n @if (!highlightedSource()) {\n <pre\n class=\"afp-p-6 afp-text-fg-primary afp-font-mono afp-text-sm afp-whitespace-pre-wrap afp-break-words\"\n >{{ content() }}</pre>\n } @else {\n <div class=\"shiki-wrapper\" [innerHTML]=\"trustedSource()\"></div>\n }\n </div>\n } @else {\n <div class=\"afp-w-full afp-h-full afp-overflow-auto afp-py-6 afp-px-4\">\n <div #container class=\"markdown-body\" [innerHTML]=\"trustedHtml()\"></div>\n </div>\n }\n `, styles: [\".markdown-body ::ng-deep .table-wrapper{overflow-x:auto;margin:1rem 0;border-radius:.375rem;border:1px solid var(--fp-surface-3)}.markdown-body ::ng-deep .table-wrapper>table{margin:0;border:0;border-radius:0}.markdown-body ::ng-deep .code-block-wrapper pre.shiki{margin:0;border-top-left-radius:0;border-top-right-radius:0;border-top:0}.markdown-body ::ng-deep .code-block-wrapper{overflow:visible}.markdown-body ::ng-deep .code-block-wrapper pre{overflow:visible}.markdown-body ::ng-deep .no-lang-pre{margin:0;padding:1rem;background:var(--fp-code-bg);border-radius:.375rem;border:1px solid var(--fp-line)}.markdown-body ::ng-deep .no-lang-pre code{display:block;font-size:.8125rem;line-height:1.5;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:var(--fp-fg-primary);white-space:pre;overflow-x:auto}.markdown-body ::ng-deep pre.shiki code{display:block;padding:1rem;font-size:.8125rem;line-height:1.5;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.markdown-body ::ng-deep .katex{color:var(--fp-fg-primary)}.markdown-body ::ng-deep .katex-display{margin:1.25rem 0;overflow-x:auto;overflow-y:hidden}.shiki-wrapper ::ng-deep pre{margin:0;padding:1.5rem;background:transparent!important;font-size:.875rem;overflow-x:auto}.shiki-wrapper ::ng-deep code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}\\n\"] }]\n }], ctorParameters: () => [] });\n\nexport { MarkdownRenderer };\n//# sourceMappingURL=eternalheart-angular-file-preview-index-7KavuB8u.mjs.map\n"],"names":["fetchTextUtf8"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { DomSanitizer } from '@angular/platform-browser';
4
4
  import MsgReader from '@kenjiuno/msgreader';
5
5
  import * as i1 from 'lucide-angular';
6
6
  import { User, Users, Paperclip, Calendar, Mail, Tag, Clock, Hash, LucideAngularModule } from 'lucide-angular';
7
- import { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs';
7
+ import { L as LocaleService, R as RequestService, g as getFallbackTranslator } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RPRQhVCg.mjs';
8
8
  import { R as RendererError } from './eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs';
9
9
 
10
10
  function formatRecipients(recipients, type) {
@@ -465,4 +465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
465
465
  }], ctorParameters: () => [] });
466
466
 
467
467
  export { MsgRenderer };
468
- //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map
468
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B-TVstXS-Dh1KMX_8.mjs.map