diff --git a/.changeset/export-validation-from-subpaths.md b/.changeset/export-validation-from-subpaths.md
new file mode 100644
index 0000000..fd9f1f6
--- /dev/null
+++ b/.changeset/export-validation-from-subpaths.md
@@ -0,0 +1,15 @@
+---
+"brand-shell": minor
+---
+
+Export `validateBrandDetails` and `validateBrandTheme` from `brand-shell/vue` and `brand-shell/web`.
+
+Previously these were only available from the `brand-shell` root, which is the React bundle. Non-React consumers (Vue, Svelte, web components) that imported validation functions from the root would cause Vite to load the React adapter and fail with a `react/jsx-runtime` error.
+
+**Migration for Vue/Svelte/web-component apps:**
+
+```diff
+- import { validateBrandDetails, validateBrandTheme } from 'brand-shell'
++ import { validateBrandDetails, validateBrandTheme } from 'brand-shell/vue' // Vue
++ import { validateBrandDetails, validateBrandTheme } from 'brand-shell/web' // Svelte / vanilla
+```
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 427cceb..d333fec 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -71,7 +71,7 @@ jobs:
run: bun install --frozen-lockfile && bun run build
- name: Pack
- run: bun pack
+ run: bun pm pack
- name: Install react-npm starter
run: bun install --cwd starters/react-npm
diff --git a/apps/docs/src/App.tsx b/apps/docs/src/App.tsx
index d744efc..767ce0f 100644
--- a/apps/docs/src/App.tsx
+++ b/apps/docs/src/App.tsx
@@ -30,7 +30,7 @@ const DEFAULT_DETAILS: BrandDetails = {
linkedin: "https://linkedin.com/in/example",
github: "https://github.com/example",
twitter: "https://x.com/example",
- gmail: "hello@example.com",
+ email: "hello@example.com",
tagline: "One shared brand shell across frameworks.",
};
@@ -91,11 +91,11 @@ import "brand-shell/default.css";
`,
- svelte: `import { brandShell } from "brand-shell/svelte";
+ svelte: `import { BrandHeader, BrandFooter } from "brand-shell/svelte";
import "brand-shell/default.css";
-
-`,
+
+`,
web: `import { applyBrandShellProps, registerBrandShellElements } from "brand-shell/web";
import "brand-shell/default.css";
diff --git a/src/vue/index.ts b/src/vue/index.ts
index dd7fe87..9daaac2 100644
--- a/src/vue/index.ts
+++ b/src/vue/index.ts
@@ -5,6 +5,7 @@ import { assertValidBrandDetails, assertValidBrandTheme, shouldValidateInDev } f
import { applyBrandShellProps, registerBrandShellElements, type BrandShellElementLike, type LinkFactoryOptions } from "../web";
export type { BrandDetails, BrandTheme } from "../core";
+export { validateBrandDetails, validateBrandTheme } from "../core";
export type { LinkFactoryOptions } from "../web";
export interface BrandShellVueProps {
diff --git a/src/web/index.ts b/src/web/index.ts
index 306441d..7d83672 100644
--- a/src/web/index.ts
+++ b/src/web/index.ts
@@ -19,6 +19,7 @@ import {
} from "../core";
export type { BrandAction, BrandDetails, BrandNavLink, BrandTheme } from "../core";
+export { validateBrandDetails, validateBrandTheme } from "../core";
const SVG_NS = "http://www.w3.org/2000/svg";