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
{{ message }}
Repository navigation
Commit dc657e2
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: apps/docs/changelog.md
+36Lines changed: 36 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,42 @@ Installing or upgrading is covered in [Installation](/getting-started/installati
15
15
16
16
::: v-pre
17
17
18
+
## 0.44.3
19
+
20
+
<timedatetime="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.
Copy file name to clipboardExpand all lines: apps/docs/public/changelog.json
+52-1Lines changed: 52 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,59 @@
17
17
"@templatical/template-tools",
18
18
"@templatical/types"
19
19
],
20
-
"latest": "0.44.2",
20
+
"latest": "0.44.3",
21
21
"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.",
Copy file name to clipboardExpand all lines: apps/docs/public/llms.txt
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
> Drag-and-drop email editor for modern apps — source-available, MIT after two years.
4
4
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 `/`.
0 commit comments