diff --git a/e2e/integrations.e2e.spec.ts b/e2e/integrations.e2e.spec.ts
index 2def7d9..4fb5648 100644
--- a/e2e/integrations.e2e.spec.ts
+++ b/e2e/integrations.e2e.spec.ts
@@ -140,6 +140,38 @@ const renderRequireProbe = `${renderExportSmoke}
process.exit(1);
});`;
+const solidEmailBrowserImportProbe = `
+const resolved = import.meta.resolve('@akin01/solid-email');
+const mod = await import('@akin01/solid-email');
+
+for (const name of ['render', 'Section', 'Row', 'Heading']) {
+ if (typeof mod[name] !== 'function') {
+ throw new Error(\`missing solid-email export: \${name}\`);
+ }
+}
+
+const html = await mod.render(() =>
+ mod.Section({
+ style: { padding: '12px' },
+ children: mod.Row({
+ children: mod.Heading({
+ as: 'h2',
+ style: { color: 'blue' },
+ children: 'Solid Email browser condition smoke',
+ }),
+ }),
+ }),
+);
+
+if (!html.includes('
process.exit(0));`;
+
type PnpmError = ExecFileException & {
stderr?: string;
stdout?: string;
@@ -318,6 +350,22 @@ describe('published package integration fixtures', () => {
}
});
+ it('loads solid-email under browser import conditions', async () => {
+ const { stdout } = await execFileAsync(
+ 'node',
+ [
+ '--conditions=browser',
+ '--input-type=module',
+ '--eval',
+ solidEmailBrowserImportProbe,
+ ],
+ { cwd: root },
+ );
+
+ expect(stdout.trim().replaceAll('\\', '/')).toContain(
+ '/packages/solid-email/dist/index.mjs',
+ );
+ });
it('builds and renders in a Solid Vite SSR fixture', async () => {
const fixtureRoot = await installAndBuildFixture('vite');
const html = await execFileAsync('node', ['dist/entry-server.mjs'], {
diff --git a/packages/render/src/shared/slots.ts b/packages/render/src/shared/slots.ts
index 24bd1c7..35d9e04 100644
--- a/packages/render/src/shared/slots.ts
+++ b/packages/render/src/shared/slots.ts
@@ -1,5 +1,5 @@
import type { JSX } from 'solid-js';
-import { ssr } from 'solid-js/web';
+import { ssr } from 'solid-js/web/dist/server.js';
const MARKER_PREFIX = '__SM_';
const CONTENT_START = `${MARKER_PREFIX}CNT_`;
diff --git a/packages/render/src/shared/solid-js-web-server.d.ts b/packages/render/src/shared/solid-js-web-server.d.ts
index a09f553..505743d 100644
--- a/packages/render/src/shared/solid-js-web-server.d.ts
+++ b/packages/render/src/shared/solid-js-web-server.d.ts
@@ -1,3 +1,8 @@
declare module 'solid-js/web/dist/server.js' {
- export { renderToString, renderToStringAsync } from 'solid-js/web';
+ export {
+ Dynamic,
+ renderToString,
+ renderToStringAsync,
+ ssr,
+ } from 'solid-js/web';
}
diff --git a/packages/solid-email/src/components/heading/heading.tsx b/packages/solid-email/src/components/heading/heading.tsx
index db4f6eb..bc84627 100644
--- a/packages/solid-email/src/components/heading/heading.tsx
+++ b/packages/solid-email/src/components/heading/heading.tsx
@@ -1,5 +1,5 @@
import { splitProps } from 'solid-js';
-import { Dynamic } from 'solid-js/web';
+import { Dynamic } from 'solid-js/web/dist/server.js';
import {
cls,
type IntrinsicProps,
diff --git a/packages/solid-email/src/components/tailwind/tailwind.tsx b/packages/solid-email/src/components/tailwind/tailwind.tsx
index 9e898dc..af82fbb 100644
--- a/packages/solid-email/src/components/tailwind/tailwind.tsx
+++ b/packages/solid-email/src/components/tailwind/tailwind.tsx
@@ -1,6 +1,6 @@
import { type CssNode, generate, List, type StyleSheet } from 'css-tree';
import { createResource, type JSX, Suspense } from 'solid-js';
-import { ssr } from 'solid-js/web';
+import { ssr } from 'solid-js/web/dist/server.js';
import type { Config } from 'tailwindcss';
import type { SolidStyle } from '../shared';
import { sanitizeStyleSheet } from './sanitize-stylesheet';
diff --git a/packages/solid-email/src/render-shim.d.ts b/packages/solid-email/src/render-shim.d.ts
index a9fce7e..4b74509 100644
--- a/packages/solid-email/src/render-shim.d.ts
+++ b/packages/solid-email/src/render-shim.d.ts
@@ -86,3 +86,12 @@ declare module '@solid-email/render' {
options?: CompileSyncOptions,
): CompiledTemplate;
}
+
+declare module 'solid-js/web/dist/server.js' {
+ export {
+ Dynamic,
+ renderToString,
+ renderToStringAsync,
+ ssr,
+ } from 'solid-js/web';
+}
diff --git a/packages/solid-email/tsdown.config.ts b/packages/solid-email/tsdown.config.ts
index cebeb80..6687495 100644
--- a/packages/solid-email/tsdown.config.ts
+++ b/packages/solid-email/tsdown.config.ts
@@ -7,5 +7,13 @@ export default defineConfig({
deps: { neverBundle: ['solid-js', 'solid-js/web', '@solid-email/render'] },
format: ['cjs', 'esm'],
outDir: './dist',
- plugins: [solid({ solid: { generate: 'ssr', hydratable: false } })],
+ plugins: [
+ solid({
+ solid: {
+ generate: 'ssr',
+ hydratable: false,
+ moduleName: 'solid-js/web/dist/server.js',
+ },
+ }),
+ ],
});