From a90775f19b568c8310bb4c5e97b3361b5a5f3e83 Mon Sep 17 00:00:00 2001 From: Petr Kadlec Date: Mon, 9 Mar 2026 16:21:01 +0100 Subject: [PATCH 1/2] fix(keycloak-theme): force build to resolve React from package path Signed-off-by: Petr Kadlec --- apps/keycloak-theme/vite.config.ts | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/apps/keycloak-theme/vite.config.ts b/apps/keycloak-theme/vite.config.ts index 0b82d8a240..292318958b 100644 --- a/apps/keycloak-theme/vite.config.ts +++ b/apps/keycloak-theme/vite.config.ts @@ -3,21 +3,19 @@ * SPDX-License-Identifier: Apache-2.0 */ -import react from "@vitejs/plugin-react"; -import { keycloakify } from "keycloakify/vite-plugin"; -import path from "path"; -import { defineConfig } from "vite"; -import { viteStaticCopy } from "vite-plugin-static-copy"; -import svgr from "vite-plugin-svgr"; +import react from '@vitejs/plugin-react'; +import { keycloakify } from 'keycloakify/vite-plugin'; +import path from 'path'; +import { defineConfig } from 'vite'; +import { viteStaticCopy } from 'vite-plugin-static-copy'; +import svgr from 'vite-plugin-svgr'; -const THEME_NAME_AGENTSTACK = "agentstack"; -const THEME_NAME_AGENTSTACK_SSO = "agentstack-sso"; +const THEME_NAME_AGENTSTACK = 'agentstack'; +const THEME_NAME_AGENTSTACK_SSO = 'agentstack-sso'; export default defineConfig({ define: { - "import.meta.env.VITE_APP_NAME": JSON.stringify( - process.env.APP_NAME || "Agent Stack", - ), + 'import.meta.env.VITE_APP_NAME': JSON.stringify(process.env.APP_NAME || 'Agent Stack'), }, plugins: [ react(), @@ -25,40 +23,42 @@ export default defineConfig({ viteStaticCopy({ targets: [ { - src: path.join( - __dirname, - "node_modules/@ibm/plex/IBM-Plex-Sans/fonts/split/woff2/*.woff2", - ), - dest: "assets/~@ibm/plex/IBM-Plex-Sans/fonts/split/woff2", + src: path.join(__dirname, 'node_modules/@ibm/plex/IBM-Plex-Sans/fonts/split/woff2/*.woff2'), + dest: 'assets/~@ibm/plex/IBM-Plex-Sans/fonts/split/woff2', }, ], }), keycloakify({ - accountThemeImplementation: "none", + accountThemeImplementation: 'none', themeName: [THEME_NAME_AGENTSTACK, THEME_NAME_AGENTSTACK_SSO], }), ], css: { modules: { - generateScopedName: "[name]__[local]__[hash:base64:5]", + generateScopedName: '[name]__[local]__[hash:base64:5]', }, preprocessorOptions: { scss: { - api: "modern", + api: 'modern', quietDeps: true, additionalData: `@use 'styles/common' as *; @use 'sass:math';`, includePaths: [ - path.join(__dirname, "node_modules"), - path.join(__dirname, "src"), - path.join(__dirname, "../agentstack-ui/src"), + path.join(__dirname, 'node_modules'), + path.join(__dirname, 'src'), + path.join(__dirname, '../agentstack-ui/src'), ], - loadPaths: [path.join(__dirname, "../agentstack-ui/src")], + loadPaths: [path.join(__dirname, '../agentstack-ui/src')], }, }, }, resolve: { + dedupe: ['react', 'react-dom'], alias: { - styles: path.resolve(__dirname, "../agentstack-ui/src/styles"), + react: path.resolve(__dirname, 'node_modules/react'), + 'react/jsx-runtime': path.resolve(__dirname, 'node_modules/react/jsx-runtime.js'), + 'react/jsx-dev-runtime': path.resolve(__dirname, 'node_modules/react/jsx-dev-runtime.js'), + 'react-dom': path.resolve(__dirname, 'node_modules/react-dom'), + styles: path.resolve(__dirname, '../agentstack-ui/src/styles'), }, }, }); From ede40fb6a0ef9e7365a710100a49345906c959d7 Mon Sep 17 00:00:00 2001 From: Petr Kadlec Date: Mon, 9 Mar 2026 18:38:34 +0100 Subject: [PATCH 2/2] fixup! review comments Signed-off-by: Petr Kadlec --- apps/keycloak-theme/vite.config.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/keycloak-theme/vite.config.ts b/apps/keycloak-theme/vite.config.ts index 292318958b..aae0ed35d4 100644 --- a/apps/keycloak-theme/vite.config.ts +++ b/apps/keycloak-theme/vite.config.ts @@ -5,6 +5,7 @@ import react from '@vitejs/plugin-react'; import { keycloakify } from 'keycloakify/vite-plugin'; +import { createRequire } from 'module'; import path from 'path'; import { defineConfig } from 'vite'; import { viteStaticCopy } from 'vite-plugin-static-copy'; @@ -12,6 +13,9 @@ import svgr from 'vite-plugin-svgr'; const THEME_NAME_AGENTSTACK = 'agentstack'; const THEME_NAME_AGENTSTACK_SSO = 'agentstack-sso'; +const require = createRequire(import.meta.url); + +const resolvePackageDir = (packageName: string) => path.dirname(require.resolve(`${packageName}/package.json`)); export default defineConfig({ define: { @@ -54,10 +58,10 @@ export default defineConfig({ resolve: { dedupe: ['react', 'react-dom'], alias: { - react: path.resolve(__dirname, 'node_modules/react'), - 'react/jsx-runtime': path.resolve(__dirname, 'node_modules/react/jsx-runtime.js'), - 'react/jsx-dev-runtime': path.resolve(__dirname, 'node_modules/react/jsx-dev-runtime.js'), - 'react-dom': path.resolve(__dirname, 'node_modules/react-dom'), + react: resolvePackageDir('react'), + 'react/jsx-runtime': require.resolve('react/jsx-runtime'), + 'react/jsx-dev-runtime': require.resolve('react/jsx-dev-runtime'), + 'react-dom': resolvePackageDir('react-dom'), styles: path.resolve(__dirname, '../agentstack-ui/src/styles'), }, },