You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- packages/core/deno.json: add @lessjs/signals to imports (required by dsd-element.ts for effect())
- .github/workflows/publish-jsr.yml: move signals before core in publish order (core now depends on signals)
- docs/releases/0.24.2.md: comprehensive update with all 4 production hotfixes, file changes, and JSX infrastructure verification
All checks passing:
- graph:check ✅ (18 packages, no cycles, consistent publish order)
- fmt:check ✅
- lint ✅
- typecheck ✅
- test ✅ (939 passed, 0 failed)
Copy file name to clipboardExpand all lines: docs/releases/0.24.2.md
+37-15Lines changed: 37 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
7
7
## Summary
8
8
9
-
v0.24.2 completes the migration started in v0.24.1 by removing the old `html` tagged template component model entirely. All components now use JSX + `static props` + Signal, with zero backward-compatibility overhead.
9
+
v0.24.2 completes the migration started in v0.24.1 by removing the old `html` tagged template component model entirely. All components now use JSX + `static props` + Signal, with zero backward-compatibility overhead. Four production hotfixes were applied post-release to fix JSX infrastructure gaps.
10
10
11
11
## What Changed
12
12
@@ -22,15 +22,27 @@ v0.24.2 completes the migration started in v0.24.1 by removing the old `html` ta
22
22
- JSX `IntrinsicElements` type declarations for TypeScript
23
23
- Signal auto-unwrap in `renderToString` (JSX expressions `{signal}` auto-resolve `.value`)
24
24
-`renderToDOM` integration in `_renderIntoShadowRoot` for proper event binding
25
+
-**`@lessjs/signals` as explicit dependency of `@lessjs/core`**: Core now imports `effect()` from signals for VNode signal tracking. Publish order adjusted: signals (5) → core (6).
25
26
26
27
### Fixed
27
28
29
+
#### Production Hotfixes (post-release)
30
+
31
+
| # | Bug | Root Cause | Fix |
32
+
|---|-----|-----------|-----|
33
+
| 1 | Island components render `[object Object]`|`build-client.ts` and `build-ssg.ts` internal `viteBuild()` calls use `configFile: false`, ignoring user's `vite.config.ts` esbuild JSX config. esbuild defaults to classic `React.createElement`, producing objects DsdElement can't read. | Added `esbuild: { jsx: 'automatic', jsxImportSource: '@lessjs/core' }` to both internal build configs. |
34
+
| 2 | SVG icons disappear after hydration |`renderToDOM` uses `document.createElement()` for all elements, placing SVG elements (circle, line, path, svg) in HTML namespace where browsers won't render them. | Added `SVG_TAGS` set (50+ elements) and `createElementForTag()` helper that routes SVG elements to `document.createElementNS()`. |
35
+
| 3 | Theme toggle doesn't switch / theme lost on navigation |`_renderIntoShadowRoot`'s VNode branch renders DOM but never subscribes to signals. TemplateResult path has `_subscribeTemplateSignals()`; VNode path had no equivalent. | Wrapped `render()` in an alien-signals `effect()` that auto-tracks signal accesses and re-renders DOM on changes. Disposed in `_disposeSignalSubscriptions()`. |
36
+
| 4 |`graph:check` fails: core imports signals without declaration |`dsd-element.ts` imports `effect` from `@lessjs/signals` but `packages/core/deno.json` didn't declare the dependency. | Added `@lessjs/signals` to core's imports; moved signals before core in CI publish order. |
37
+
38
+
#### Pre-release Fixes
39
+
28
40
-**VNode event binding**: `_renderIntoShadowRoot` previously used `renderToString` for VNode, which silently dropped `onClick`/`onInput` handlers. Now uses `renderToDOM` with `addEventListener`.
29
-
-**SSG package resolver `.tsx` subpath resolution**: `resolveVirtualLessPackageRelative` in `ssg-package-resolver.ts` blindly appended `.ts` to all relative imports, causing `.tsx` UI components (`less-dialog`, `less-theme-toggle`, `less-layout`, etc.) to resolve to non-existent `.ts` files. Added `resolveSourcePathExtension` that consults `LESSJS_EXPORT_FILES` to preserve the exact source extension.
30
-
-**JSX DOM renderer signal child unwrap**: `renderToDOM` now auto-unwraps Signal values in children (matching `renderToString` behavior), preventing `[object Object]` from appearing in CSR when JSX expressions contain signals.
31
-
-**`www` stale `.js` search imports**: All route files and `_renderer.ts`still imported `less-search.js`, but the island file is `less-search.tsx`. Updated 6 import paths to `.tsx`.
32
-
-**`@lessjs/runtime` missing `LessRenderer` export**: Added `export type { LessRenderer }` so that `www/app/shared/section-renderer.ts` and `registry/_renderer.ts` can import the type from the authoring facade.
33
-
-**Generated project build test alias drift**: `packages/create/__tests__/cli.test.ts` local workspace aliases for `@lessjs/ui/*` components and `@lessjs/core/jsx-runtime` were still pointing to `.ts` files. Updated all UI component aliases to `.tsx` and added `jsx-runtime`/ `jsx-dev-runtime`subpath aliases to prevent parent-alias ENOTDIR errors.
41
+
-**SSG package resolver `.tsx` subpath resolution**: `resolveVirtualLessPackageRelative` in `ssg-package-resolver.ts` blindly appended `.ts` to all relative imports, causing `.tsx` UI components to resolve to non-existent `.ts` files. Added `resolveSourcePathExtension` that consults `LESSJS_EXPORT_FILES`.
42
+
-**JSX DOM renderer signal child unwrap**: `renderToDOM` now auto-unwraps Signal values in children (matching `renderToString` behavior).
43
+
-**`www` stale `.js` search imports**: All route files and `_renderer.ts`updated to `.tsx`.
0 commit comments