From 2f9f94dee0410a61aa20cd26f576ae85f4d5eee2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 31 Dec 2025 22:46:55 +0200 Subject: [PATCH 1/8] fix(server): pdfjs not available in dist --- apps/server/scripts/build.ts | 3 +++ apps/server/src/routes/assets.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/server/scripts/build.ts b/apps/server/scripts/build.ts index 6e0c53adf..c315f32b2 100644 --- a/apps/server/scripts/build.ts +++ b/apps/server/scripts/build.ts @@ -17,6 +17,9 @@ async function main() { // Integrate the client. build.triggerBuildAndCopyTo("apps/client", "public/"); build.deleteFromOutput("public/webpack-stats.json"); + + // pdf.js + build.triggerBuildAndCopyTo("packages/pdfjs-viewer", "pdfjs-viewer"); } main(); diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index 4eacc3a1c..983c482c4 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -73,7 +73,7 @@ export function getPdfjsAssetDir() { return path.join(srcRoot, "../../packages/pdfjs-viewer/dist"); } const resourceDir = getResourceDir(); - return path.join(resourceDir, "pdfjs-viewer/assets"); + return path.join(resourceDir, "pdfjs-viewer"); } export function getClientDir() { From 2c323cbe805c4ccd2ea127f922f7ac5f0597b771 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 1 Jan 2026 18:39:31 +0200 Subject: [PATCH 2/8] fix(client): color with uppercase causing exception (closes #8232) --- .../src/services/css_class_manager.spec.ts | 14 +++++++++++ apps/client/src/services/css_class_manager.ts | 23 ++++++++++--------- 2 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 apps/client/src/services/css_class_manager.spec.ts diff --git a/apps/client/src/services/css_class_manager.spec.ts b/apps/client/src/services/css_class_manager.spec.ts new file mode 100644 index 000000000..b49e8c0ab --- /dev/null +++ b/apps/client/src/services/css_class_manager.spec.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "vitest"; + +import { getReadableTextColor } from "./css_class_manager"; + +describe("getReadableTextColor", () => { + it("doesn't crash for invalid color", () => { + expect(getReadableTextColor("RandomColor")).toBe("#000"); + }); + + it("tolerates different casing", () => { + expect(getReadableTextColor("Blue")) + .toBe(getReadableTextColor("blue")); + }); +}); diff --git a/apps/client/src/services/css_class_manager.ts b/apps/client/src/services/css_class_manager.ts index 5aa73e32b..de1c98b87 100644 --- a/apps/client/src/services/css_class_manager.ts +++ b/apps/client/src/services/css_class_manager.ts @@ -1,21 +1,22 @@ import clsx from "clsx"; -import {readCssVar} from "../utils/css-var"; import Color, { ColorInstance } from "color"; +import {readCssVar} from "../utils/css-var"; + const registeredClasses = new Set(); const colorsWithHue = new Set(); // Read the color lightness limits defined in the theme as CSS variables const lightThemeColorMaxLightness = readCssVar( - document.documentElement, - "tree-item-light-theme-max-color-lightness" - ).asNumber(70); + document.documentElement, + "tree-item-light-theme-max-color-lightness" +).asNumber(70); const darkThemeColorMinLightness = readCssVar( - document.documentElement, - "tree-item-dark-theme-min-color-lightness" - ).asNumber(50); + document.documentElement, + "tree-item-dark-theme-min-color-lightness" +).asNumber(50); function createClassForColor(colorString: string | null) { if (!colorString?.trim()) return ""; @@ -27,7 +28,7 @@ function createClassForColor(colorString: string | null) { if (!registeredClasses.has(className)) { const adjustedColor = adjustColorLightness(color, lightThemeColorMaxLightness!, - darkThemeColorMinLightness!); + darkThemeColorMinLightness!); const hue = getHue(color); $("head").append(`