@open-file-viewer/core 0.1.23 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4238,6 +4238,7 @@ var mimeLangMap = {
4238
4238
  };
4239
4239
  var MAX_HIGHLIGHT_CHARS = 18e4;
4240
4240
  var MAX_RENDER_CHARS = 6e5;
4241
+ var prismLanguageLoads = /* @__PURE__ */ new Map();
4241
4242
  function textPlugin() {
4242
4243
  return {
4243
4244
  name: "text",
@@ -4269,10 +4270,10 @@ function textPlugin() {
4269
4270
  ]);
4270
4271
  const parseMarkdown = markedModule.marked?.parse || markedModule.parse || markedModule.default?.parse;
4271
4272
  const Prism2 = PrismModule2.default || PrismModule2;
4272
- const DOMPurify4 = DOMPurifyModule.default || DOMPurifyModule;
4273
+ const DOMPurify3 = DOMPurifyModule.default || DOMPurifyModule;
4273
4274
  const container = document.createElement("div");
4274
4275
  container.className = "ofv-markdown-body";
4275
- container.innerHTML = DOMPurify4.sanitize(parseMarkdown(text), {
4276
+ container.innerHTML = DOMPurify3.sanitize(parseMarkdown(text), {
4276
4277
  USE_PROFILES: { html: true },
4277
4278
  ADD_ATTR: ["target"]
4278
4279
  });
@@ -4281,6 +4282,14 @@ function textPlugin() {
4281
4282
  try {
4282
4283
  const codeBlocks = container.querySelectorAll("pre code");
4283
4284
  if (codeBlocks.length > 0) {
4285
+ const languages = /* @__PURE__ */ new Set();
4286
+ codeBlocks.forEach((block) => {
4287
+ const language = getPrismLanguageFromElement(block) || getPrismLanguageFromElement(block.parentElement);
4288
+ if (language) {
4289
+ languages.add(language);
4290
+ }
4291
+ });
4292
+ await Promise.all([...languages].map((language) => loadPrismLanguage(language)));
4284
4293
  codeBlocks.forEach((block) => {
4285
4294
  const parent = block.parentElement;
4286
4295
  if (parent && !parent.className.includes("language-")) {
@@ -4309,97 +4318,7 @@ function textPlugin() {
4309
4318
  const Prism = PrismModule.default || PrismModule;
4310
4319
  if (lang !== "none") {
4311
4320
  try {
4312
- if (lang === "typescript" || lang === "tsx") {
4313
- await import("prismjs/components/prism-typescript");
4314
- } else if (lang === "python") {
4315
- await import("prismjs/components/prism-python");
4316
- } else if (lang === "json") {
4317
- await import("prismjs/components/prism-json");
4318
- } else if (lang === "json5") {
4319
- await import("prismjs/components/prism-json5");
4320
- } else if (lang === "yaml") {
4321
- await import("prismjs/components/prism-yaml");
4322
- } else if (lang === "toml") {
4323
- await import("prismjs/components/prism-toml");
4324
- } else if (lang === "ini") {
4325
- await import("prismjs/components/prism-ini");
4326
- } else if (lang === "properties") {
4327
- await import("prismjs/components/prism-properties");
4328
- } else if (lang === "editorconfig") {
4329
- await import("prismjs/components/prism-editorconfig");
4330
- } else if (lang === "ignore") {
4331
- await import("prismjs/components/prism-ignore");
4332
- } else if (lang === "protobuf") {
4333
- await import("prismjs/components/prism-protobuf");
4334
- } else if (lang === "hcl") {
4335
- await import("prismjs/components/prism-hcl");
4336
- } else if (lang === "latex") {
4337
- await import("prismjs/components/prism-latex");
4338
- } else if (lang === "dot") {
4339
- await import("prismjs/components/prism-dot");
4340
- } else if (lang === "http") {
4341
- await import("prismjs/components/prism-http");
4342
- } else if (lang === "bash") {
4343
- await import("prismjs/components/prism-bash");
4344
- } else if (lang === "powershell") {
4345
- await import("prismjs/components/prism-powershell");
4346
- } else if (lang === "batch") {
4347
- await import("prismjs/components/prism-batch");
4348
- } else if (lang === "docker") {
4349
- await import("prismjs/components/prism-docker");
4350
- } else if (lang === "makefile") {
4351
- await import("prismjs/components/prism-makefile");
4352
- } else if (lang === "ruby") {
4353
- await import("prismjs/components/prism-ruby");
4354
- } else if (lang === "nginx") {
4355
- await import("prismjs/components/prism-nginx");
4356
- } else if (lang === "groovy") {
4357
- await import("prismjs/components/prism-groovy");
4358
- } else if (lang === "graphql") {
4359
- await import("prismjs/components/prism-graphql");
4360
- } else if (lang === "csharp") {
4361
- await import("prismjs/components/prism-csharp");
4362
- } else if (lang === "rust") {
4363
- await import("prismjs/components/prism-rust");
4364
- } else if (lang === "go") {
4365
- await import("prismjs/components/prism-go");
4366
- } else if (lang === "ruby") {
4367
- await import("prismjs/components/prism-ruby");
4368
- } else if (lang === "swift") {
4369
- await import("prismjs/components/prism-swift");
4370
- } else if (lang === "kotlin") {
4371
- await import("prismjs/components/prism-kotlin");
4372
- } else if (lang === "scala") {
4373
- await import("prismjs/components/prism-scala");
4374
- } else if (lang === "lua") {
4375
- await import("prismjs/components/prism-lua");
4376
- } else if (lang === "r") {
4377
- await import("prismjs/components/prism-r");
4378
- } else if (lang === "dart") {
4379
- await import("prismjs/components/prism-dart");
4380
- } else if (lang === "elm") {
4381
- await import("prismjs/components/prism-elm");
4382
- } else if (lang === "elixir") {
4383
- await import("prismjs/components/prism-elixir");
4384
- } else if (lang === "clojure") {
4385
- await import("prismjs/components/prism-clojure");
4386
- } else if (lang === "erlang") {
4387
- await import("prismjs/components/prism-erlang");
4388
- } else if (lang === "fsharp") {
4389
- await import("prismjs/components/prism-fsharp");
4390
- } else if (lang === "haskell") {
4391
- await import("prismjs/components/prism-haskell");
4392
- } else if (lang === "sql") {
4393
- await import("prismjs/components/prism-sql");
4394
- } else if (lang === "cpp") {
4395
- await import("prismjs/components/prism-c");
4396
- await import("prismjs/components/prism-cpp");
4397
- } else if (lang === "java") {
4398
- await import("prismjs/components/prism-java");
4399
- } else if (lang === "php") {
4400
- await import("prismjs/components/prism-markup-templating");
4401
- await import("prismjs/components/prism-php");
4402
- }
4321
+ await loadPrismLanguage(lang);
4403
4322
  } catch (e) {
4404
4323
  console.warn(`Prism failed to load language component for: ${lang}`, e);
4405
4324
  }
@@ -4524,6 +4443,183 @@ function textPlugin() {
4524
4443
  }
4525
4444
  };
4526
4445
  }
4446
+ function getPrismLanguageFromElement(element) {
4447
+ if (!element) {
4448
+ return void 0;
4449
+ }
4450
+ for (const className of element.classList) {
4451
+ if (className.startsWith("language-") && className.length > 9) {
4452
+ return className.slice(9).toLowerCase();
4453
+ }
4454
+ }
4455
+ return void 0;
4456
+ }
4457
+ async function loadPrismLanguage(language) {
4458
+ if (["none", "plain", "plaintext", "text", "markup", "css", "clike", "javascript"].includes(language)) {
4459
+ return;
4460
+ }
4461
+ const existing = prismLanguageLoads.get(language);
4462
+ if (existing) {
4463
+ return existing;
4464
+ }
4465
+ const loading = loadPrismLanguageComponent(language).catch((error) => {
4466
+ prismLanguageLoads.delete(language);
4467
+ throw error;
4468
+ });
4469
+ prismLanguageLoads.set(language, loading);
4470
+ return loading;
4471
+ }
4472
+ async function loadPrismLanguageComponent(language) {
4473
+ switch (language) {
4474
+ case "typescript":
4475
+ await import("prismjs/components/prism-typescript");
4476
+ break;
4477
+ case "jsx":
4478
+ await import("prismjs/components/prism-jsx");
4479
+ break;
4480
+ case "tsx":
4481
+ await import("./tsx-A26VGWUK.js");
4482
+ break;
4483
+ case "python":
4484
+ await import("prismjs/components/prism-python");
4485
+ break;
4486
+ case "json":
4487
+ await import("prismjs/components/prism-json");
4488
+ break;
4489
+ case "json5":
4490
+ await import("./json5-EAGAEIPM.js");
4491
+ break;
4492
+ case "yaml":
4493
+ await import("prismjs/components/prism-yaml");
4494
+ break;
4495
+ case "toml":
4496
+ await import("prismjs/components/prism-toml");
4497
+ break;
4498
+ case "ini":
4499
+ await import("prismjs/components/prism-ini");
4500
+ break;
4501
+ case "properties":
4502
+ await import("prismjs/components/prism-properties");
4503
+ break;
4504
+ case "editorconfig":
4505
+ await import("prismjs/components/prism-editorconfig");
4506
+ break;
4507
+ case "ignore":
4508
+ await import("prismjs/components/prism-ignore");
4509
+ break;
4510
+ case "protobuf":
4511
+ await import("prismjs/components/prism-protobuf");
4512
+ break;
4513
+ case "hcl":
4514
+ await import("prismjs/components/prism-hcl");
4515
+ break;
4516
+ case "latex":
4517
+ await import("prismjs/components/prism-latex");
4518
+ break;
4519
+ case "dot":
4520
+ await import("prismjs/components/prism-dot");
4521
+ break;
4522
+ case "http":
4523
+ await import("prismjs/components/prism-http");
4524
+ break;
4525
+ case "bash":
4526
+ await import("prismjs/components/prism-bash");
4527
+ break;
4528
+ case "powershell":
4529
+ await import("prismjs/components/prism-powershell");
4530
+ break;
4531
+ case "batch":
4532
+ await import("prismjs/components/prism-batch");
4533
+ break;
4534
+ case "docker":
4535
+ await import("prismjs/components/prism-docker");
4536
+ break;
4537
+ case "makefile":
4538
+ await import("prismjs/components/prism-makefile");
4539
+ break;
4540
+ case "ruby":
4541
+ await import("prismjs/components/prism-ruby");
4542
+ break;
4543
+ case "nginx":
4544
+ await import("prismjs/components/prism-nginx");
4545
+ break;
4546
+ case "groovy":
4547
+ await import("prismjs/components/prism-groovy");
4548
+ break;
4549
+ case "graphql":
4550
+ await import("prismjs/components/prism-graphql");
4551
+ break;
4552
+ case "csharp":
4553
+ await import("prismjs/components/prism-csharp");
4554
+ break;
4555
+ case "rust":
4556
+ await import("prismjs/components/prism-rust");
4557
+ break;
4558
+ case "go":
4559
+ await import("prismjs/components/prism-go");
4560
+ break;
4561
+ case "swift":
4562
+ await import("prismjs/components/prism-swift");
4563
+ break;
4564
+ case "kotlin":
4565
+ await import("prismjs/components/prism-kotlin");
4566
+ break;
4567
+ case "java":
4568
+ await import("prismjs/components/prism-java");
4569
+ break;
4570
+ case "scala":
4571
+ await import("./scala-V5QQ35QA.js");
4572
+ break;
4573
+ case "lua":
4574
+ await import("prismjs/components/prism-lua");
4575
+ break;
4576
+ case "r":
4577
+ await import("prismjs/components/prism-r");
4578
+ break;
4579
+ case "dart":
4580
+ await import("prismjs/components/prism-dart");
4581
+ break;
4582
+ case "elm":
4583
+ await import("prismjs/components/prism-elm");
4584
+ break;
4585
+ case "elixir":
4586
+ await import("prismjs/components/prism-elixir");
4587
+ break;
4588
+ case "clojure":
4589
+ await import("prismjs/components/prism-clojure");
4590
+ break;
4591
+ case "erlang":
4592
+ await import("prismjs/components/prism-erlang");
4593
+ break;
4594
+ case "fsharp":
4595
+ await import("prismjs/components/prism-fsharp");
4596
+ break;
4597
+ case "haskell":
4598
+ await import("prismjs/components/prism-haskell");
4599
+ break;
4600
+ case "sql":
4601
+ await import("prismjs/components/prism-sql");
4602
+ break;
4603
+ case "c":
4604
+ await import("prismjs/components/prism-c");
4605
+ break;
4606
+ case "cpp":
4607
+ await import("./cpp-EDJNJWGR.js");
4608
+ break;
4609
+ case "scss":
4610
+ await import("prismjs/components/prism-scss");
4611
+ break;
4612
+ case "less":
4613
+ await import("prismjs/components/prism-less");
4614
+ break;
4615
+ case "markup-templating":
4616
+ await import("prismjs/components/prism-markup-templating");
4617
+ break;
4618
+ case "php":
4619
+ await import("./php-TTFBGZ5Q.js");
4620
+ break;
4621
+ }
4622
+ }
4527
4623
  function createTextZoomController(target, cssVariable, ctx) {
4528
4624
  let zoom = getInitialZoom(ctx, 0.5, 3);
4529
4625
  const apply = () => {
@@ -12935,9 +13031,9 @@ function getIcon(name, dir) {
12935
13031
  }
12936
13032
 
12937
13033
  // src/plugins/email.ts
12938
- import DOMPurify3 from "dompurify";
12939
13034
  var emailExtensions = /* @__PURE__ */ new Set(["eml", "msg", "mbox"]);
12940
13035
  var emailMimeTypes = /* @__PURE__ */ new Set(["message/rfc822", "application/vnd.ms-outlook", "application/mbox"]);
13036
+ var domPurifyLoader;
12941
13037
  var emailMimeFormatMap = {
12942
13038
  "message/rfc822": "eml",
12943
13039
  "application/vnd.ms-outlook": "msg",
@@ -12950,6 +13046,8 @@ function emailPlugin() {
12950
13046
  return emailExtensions.has(file.extension) || emailMimeTypes.has(file.mimeType);
12951
13047
  },
12952
13048
  async render(ctx) {
13049
+ const DOMPurifyModule = await (domPurifyLoader ||= import("dompurify"));
13050
+ const DOMPurify3 = DOMPurifyModule.default;
12953
13051
  const panel = createPanel("ofv-email");
12954
13052
  ctx.viewport.append(panel);
12955
13053
  const url = createObjectUrl(ctx.file);
@@ -13083,7 +13181,7 @@ function emailPlugin() {
13083
13181
  }
13084
13182
  });
13085
13183
  html = nextHtml;
13086
- const sanitizedHtml = sanitizeEmailHtml(html);
13184
+ const sanitizedHtml = sanitizeEmailHtml(html, DOMPurify3);
13087
13185
  const iframe = document.createElement("iframe");
13088
13186
  iframe.className = "ofv-email-body-iframe";
13089
13187
  iframe.setAttribute("sandbox", "allow-same-origin allow-popups allow-popups-to-escape-sandbox");
@@ -13376,8 +13474,8 @@ function getMimeType(name) {
13376
13474
  };
13377
13475
  return ext ? map[ext] || "application/octet-stream" : "application/octet-stream";
13378
13476
  }
13379
- function sanitizeEmailHtml(html) {
13380
- return DOMPurify3.sanitize(html, {
13477
+ function sanitizeEmailHtml(html, purifier) {
13478
+ return purifier.sanitize(html, {
13381
13479
  USE_PROFILES: { html: true },
13382
13480
  ADD_ATTR: ["target"],
13383
13481
  ALLOWED_URI_REGEXP: /^(?:(?:https?|mailto|tel|blob|cid):|[^a-z]|[a-z+.-]+(?:[^a-z+.-:]|$))/i