From 0d1a02e5ea881fb79f4e7b3bec70fa2ee61c1b02 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Wed, 10 Jun 2026 15:19:17 +0530 Subject: [PATCH 1/2] chore(release): bump react-ui to 0.12.0, lang-core to 0.2.6, cli to 0.0.8 Version bumps for the first publish since 2026-05-20 (4b663b90): - @openuidev/react-ui 0.11.8 -> 0.12.0 (minor): component CSS now ships in `@layer openui` (#589/#621) and react-syntax-highlighter moved to ^16.1.1 (#577, fixes prismjs CVE-2024-53382) - @openuidev/lang-core 0.2.5 -> 0.2.6 (patch): parser preserves markdown fences and comments inside string props (#605) - @openuidev/cli 0.0.7 -> 0.0.8 (patch): cross-platform template build (#601, #627); no functional changes to the published CLI Remaining packages have no consumer-visible changes since the last publish and are not republished; the lang wrappers pick up lang-core 0.2.6 transitively via their ^0.2.5 ranges. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/lang-core/package.json | 2 +- packages/openui-cli/package.json | 2 +- packages/react-ui/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/lang-core/package.json b/packages/lang-core/package.json index ee2c87ed0..3e96ed168 100644 --- a/packages/lang-core/package.json +++ b/packages/lang-core/package.json @@ -1,6 +1,6 @@ { "name": "@openuidev/lang-core", - "version": "0.2.5", + "version": "0.2.6", "description": "Framework-agnostic core for OpenUI Lang: parser, prompt generation, validation, and type definitions", "license": "MIT", "type": "module", diff --git a/packages/openui-cli/package.json b/packages/openui-cli/package.json index 892181b08..f4adb8666 100644 --- a/packages/openui-cli/package.json +++ b/packages/openui-cli/package.json @@ -1,6 +1,6 @@ { "name": "@openuidev/cli", - "version": "0.0.7", + "version": "0.0.8", "description": "CLI for OpenUI — scaffold generative UI chat apps and generate LLM system prompts from component libraries", "bin": { "openui": "dist/index.js" diff --git a/packages/react-ui/package.json b/packages/react-ui/package.json index 9c3889a47..2b6c96253 100644 --- a/packages/react-ui/package.json +++ b/packages/react-ui/package.json @@ -2,7 +2,7 @@ "type": "module", "name": "@openuidev/react-ui", "license": "MIT", - "version": "0.11.8", + "version": "0.12.0", "description": "Component library for Generative UI SDK", "main": "dist/index.cjs", "module": "dist/index.mjs", From 263df21ebfc8f635ba3b1dd772bb14d95e073759 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Wed, 10 Jun 2026 15:56:04 +0530 Subject: [PATCH 2/2] fix(react-ui): strip leading BOM before wrapping CSS in @layer openui MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sass emits a UTF-8 BOM for compressed output containing non-ASCII characters. At byte 0 the CSS decoder strips it, but wrapInLayer() concatenated the layer prelude in front of it, pushing the BOM inside the block where U+FEFF parses as an identifier: `:root` becomes a type selector that matches nothing, silently killing the first rule. In the packed 0.12.0 tarball this dropped the entire :root theme-token block of dist/components/index.css (and the first rule of dist/styles/index.css and markDownRenderer.css). Verified in Chrome: the BOM-poisoned rule does not apply; subsequent rules are unaffected. Strip the BOM before wrapping. Repacked tarball now has 0 BOMs across all 171 shipped CSS files and the :root block parses correctly. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/react-ui/cp-css.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/react-ui/cp-css.js b/packages/react-ui/cp-css.js index dc8f9b78a..bcf0fb785 100644 --- a/packages/react-ui/cp-css.js +++ b/packages/react-ui/cp-css.js @@ -15,6 +15,11 @@ function ensureDirectoryExists(dirPath) { // Wrap a CSS file's contents in @layer openui { ... } if not already wrapped. // Idempotency check protects watch-mode and back-to-back builds. function wrapInLayer(content) { + // Sass emits a UTF-8 BOM for files with non-ASCII output. At byte 0 the + // decoder strips it, but wrapping would push it inside the layer block, + // where U+FEFF parses as an identifier and kills the first rule + // (e.g. the :root theme tokens). Strip it before wrapping. + content = content.replace(/^\uFEFF/, ""); if (content.trim() === "") return content; if (/^\s*@layer\s+openui\b/.test(content)) return content; return `@layer openui{${content}}`;