Skip to content

Commit dc657e2

Browse files
Version Packages (#897)
1 parent c8152c0 commit dc657e2

57 files changed

Lines changed: 258 additions & 88 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.changeset/editor-init-config-copy.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/editor-validate-layout-content-at-call.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/saved-block-confirm-one-line.md‎

Lines changed: 0 additions & 9 deletions
This file was deleted.

‎.changeset/saved-block-keyboard-focus.md‎

Lines changed: 0 additions & 7 deletions
This file was deleted.

‎.changeset/saved-block-radius-token.md‎

Lines changed: 0 additions & 9 deletions
This file was deleted.

‎apps/docs/changelog.md‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,42 @@ Installing or upgrading is covered in [Installation](/getting-started/installati
1515

1616
::: v-pre
1717

18+
## 0.44.3
19+
20+
<time datetime="2026-10-09">2026-10-09</time>
21+
22+
### Fixes and improvements
23+
24+
**Keyboard focus stays in place in the saved blocks browser**
25+
26+
`@templatical/editor`
27+
28+
Arming a saved block's delete, confirming it, and closing an inline rename each replace the control that has focus. Focus used to fall back to the page, so a keyboard user had to start again from the top. Now focus moves to the delete confirm when it appears. After a delete, it goes to the entry that took the deleted one's place, or the one before it, or the search box once the library is empty. Enter or Escape in a rename hands it back to Rename. Escape on the delete confirm now backs out to the Delete button instead of closing the whole browser.
29+
30+
**The saved-block delete confirm stays on one line**
31+
32+
`@templatical/editor`
33+
34+
A saved-block card's bottom row holds the entry's block-type icons, a "+N" count for any beyond five, the last-updated time and the row actions. Clicking Delete swaps the actions for an inline confirm, and its full question, "Delete this saved block?", didn't fit a crowded row: on an entry with five or more block types it wrapped onto two lines, made the card taller and squeezed the icons. German, French, Spanish, Catalan, Dutch and Japanese made it worse.
35+
36+
The confirm now shows a short label ("Delete?" in English, and a short form in every locale) and keeps the full question as its accessible name, so screen readers still announce "Delete this saved block?" and tests that find the button by that name keep working. When the row is crowded, only the timestamp gives way: it truncates and still shows the full date in its tooltip, while the icons and the confirm keep their size.
37+
38+
**`init()` and `initCloud()` now check `layout` and `content` when they are called, before they touch the container. A call whose layout or content the editor refuses (such as a layout without exactly one legal slot, or content holding a `slot` or `wrapper` block) rejects at once with the same error as before, and leaves the container and its editor exactly as they were. The check used to run after the call had taken the container over: the rejected call unmounted the editor already there and left the container blank, and an earlier call still loading on that container resolved with an editor that never mounted. A rejected `initCloud()` call now also makes no auth, health or plan request, and in shadow DOM mode a rejected call no longer attaches a shadow root.**
39+
40+
`@templatical/editor`
41+
42+
**`init()` now mounts on a copy of the config you pass and never writes to it, as `initCloud()` already did. It used to write the normalized `layout` and `content` back onto your object, so a frozen config that carried either one, such as Immer state or an `Object.freeze`d constant, threw `TypeError: Cannot assign to read only property`. Reassigning a key on that object after `init()`, such as `onChange`, no longer reaches the editor; for a handler that changes over time, pass a function that calls the current one.**
43+
44+
`@templatical/editor`
45+
46+
**Saved-block surfaces now have rounded corners**
47+
48+
`@templatical/editor`
49+
50+
The saved blocks browser's cards, their keyboard focus ring, the inline rename row and the loading skeleton, and the block previews in the save dialog all rendered with square corners. They read `--tpl-radius-md`, which is not one of the editor's radius tokens, so the radius resolved to nothing. They now use `--tpl-radius-sm` (7px by default), which matches the inputs and buttons around them, and they follow `--tpl-user-radius-sm` when you theme it. The focus ring follows the card's corners.
51+
52+
The 0.7.0 notes gave `--tpl-user-radius-md` as an example theming hook. The editor has never read it. The radius hooks are `--tpl-user-radius-sm`, `--tpl-user-radius` and `--tpl-user-radius-lg`. The theming guide now lists every hook the editor reads, including `--tpl-user-on-primary`, and marks which ones have a `--tpl-user-dark-*` twin. The radius, size, font and transition hooks have no twin and apply in both modes.
53+
1854
## 0.44.2
1955

2056
<time datetime="2026-10-09">2026-10-09</time>

‎apps/docs/public/changelog.json‎

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,59 @@
1717
"@templatical/template-tools",
1818
"@templatical/types"
1919
],
20-
"latest": "0.44.2",
20+
"latest": "0.44.3",
2121
"versions": [
22+
{
23+
"version": "0.44.3",
24+
"date": "2026-10-09",
25+
"changes": [
26+
{
27+
"hash": "96ae215",
28+
"level": "patch",
29+
"title": "Keyboard focus stays in place in the saved blocks browser",
30+
"body": "Arming a saved block's delete, confirming it, and closing an inline rename each replace the control that has focus. Focus used to fall back to the page, so a keyboard user had to start again from the top. Now focus moves to the delete confirm when it appears. After a delete, it goes to the entry that took the deleted one's place, or the one before it, or the search box once the library is empty. Enter or Escape in a rename hands it back to Rename. Escape on the delete confirm now backs out to the Delete button instead of closing the whole browser.",
31+
"packages": [
32+
"@templatical/editor"
33+
]
34+
},
35+
{
36+
"hash": "96ae215",
37+
"level": "patch",
38+
"title": "The saved-block delete confirm stays on one line",
39+
"body": "A saved-block card's bottom row holds the entry's block-type icons, a \"+N\" count for any beyond five, the last-updated time and the row actions. Clicking Delete swaps the actions for an inline confirm, and its full question, \"Delete this saved block?\", didn't fit a crowded row: on an entry with five or more block types it wrapped onto two lines, made the card taller and squeezed the icons. German, French, Spanish, Catalan, Dutch and Japanese made it worse.\n\nThe confirm now shows a short label (\"Delete?\" in English, and a short form in every locale) and keeps the full question as its accessible name, so screen readers still announce \"Delete this saved block?\" and tests that find the button by that name keep working. When the row is crowded, only the timestamp gives way: it truncates and still shows the full date in its tooltip, while the icons and the confirm keep their size.",
40+
"packages": [
41+
"@templatical/editor"
42+
]
43+
},
44+
{
45+
"hash": "b063149",
46+
"level": "patch",
47+
"title": "`init()` and `initCloud()` now check `layout` and `content` when they are called, before they touch the container. A call whose layout or content the editor refuses (such as a layout without exactly one legal slot, or content holding a `slot` or `wrapper` block) rejects at once with the same error as before, and leaves the container and its editor exactly as they were. The check used to run after the call had taken the container over: the rejected call unmounted the editor already there and left the container blank, and an earlier call still loading on that container resolved with an editor that never mounted. A rejected `initCloud()` call now also makes no auth, health or plan request, and in shadow DOM mode a rejected call no longer attaches a shadow root.",
48+
"body": "",
49+
"packages": [
50+
"@templatical/editor"
51+
]
52+
},
53+
{
54+
"hash": "b063149",
55+
"level": "patch",
56+
"title": "`init()` now mounts on a copy of the config you pass and never writes to it, as `initCloud()` already did. It used to write the normalized `layout` and `content` back onto your object, so a frozen config that carried either one, such as Immer state or an `Object.freeze`d constant, threw `TypeError: Cannot assign to read only property`. Reassigning a key on that object after `init()`, such as `onChange`, no longer reaches the editor; for a handler that changes over time, pass a function that calls the current one.",
57+
"body": "",
58+
"packages": [
59+
"@templatical/editor"
60+
]
61+
},
62+
{
63+
"hash": "c8152c0",
64+
"level": "patch",
65+
"title": "Saved-block surfaces now have rounded corners",
66+
"body": "The saved blocks browser's cards, their keyboard focus ring, the inline rename row and the loading skeleton, and the block previews in the save dialog all rendered with square corners. They read `--tpl-radius-md`, which is not one of the editor's radius tokens, so the radius resolved to nothing. They now use `--tpl-radius-sm` (7px by default), which matches the inputs and buttons around them, and they follow `--tpl-user-radius-sm` when you theme it. The focus ring follows the card's corners.\n\nThe 0.7.0 notes gave `--tpl-user-radius-md` as an example theming hook. The editor has never read it. The radius hooks are `--tpl-user-radius-sm`, `--tpl-user-radius` and `--tpl-user-radius-lg`. The theming guide now lists every hook the editor reads, including `--tpl-user-on-primary`, and marks which ones have a `--tpl-user-dark-*` twin. The radius, size, font and transition hooks have no twin and apply in both modes.",
67+
"packages": [
68+
"@templatical/editor"
69+
]
70+
}
71+
]
72+
},
2273
{
2374
"version": "0.44.2",
2475
"date": "2026-10-09",

‎apps/docs/public/llms-meta.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"sdkVersion": "0.44.2",
2+
"sdkVersion": "0.44.3",
33
"pageCount": 67,
44
"index": "/llms.txt",
55
"full": "/llms-full.txt"

‎apps/docs/public/llms.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> Drag-and-drop email editor for modern apps — source-available, MIT after two years.
44

5-
Documentation for SDK version 0.44.2. Every page below is also available as raw markdown: append `.md` to its URL, or `index.md` when the URL ends in `/`.
5+
Documentation for SDK version 0.44.3. Every page below is also available as raw markdown: append `.md` to its URL, or `index.md` when the URL ends in `/`.
66

77
## Overview
88

‎examples/nextjs/package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
"typecheck": "next typegen && tsc --noEmit"
99
},
1010
"dependencies": {
11-
"@templatical/editor": "^0.44.2",
12-
"@templatical/renderer": "^0.44.2",
13-
"@templatical/types": "^0.44.2",
11+
"@templatical/editor": "^0.44.3",
12+
"@templatical/renderer": "^0.44.3",
13+
"@templatical/types": "^0.44.3",
1414
"mjml": "^5.4.1",
1515
"next": "^16.4.0",
1616
"react": "^19.3.0",

0 commit comments

Comments
 (0)