best-email-builder 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -0
- package/README.md +3 -0
- package/dist/ai-server.js +3 -3
- package/dist/ai.js +6 -6
- package/dist/builder.js +9 -10
- package/dist/{chunk-VQRVBQIB.js → chunk-46ZVS2VX.js} +2 -2
- package/dist/chunk-6CTFMKAQ.js +865 -0
- package/dist/chunk-6CTFMKAQ.js.map +1 -0
- package/dist/{chunk-OLTD3S3N.js → chunk-FYIIO7LD.js} +2 -2
- package/dist/{chunk-MBZI6NVP.js → chunk-JFIXYIZ3.js} +271 -37
- package/dist/chunk-JFIXYIZ3.js.map +1 -0
- package/dist/{chunk-XDCGYHLF.js → chunk-LAUNZIFX.js} +103 -10
- package/dist/chunk-LAUNZIFX.js.map +1 -0
- package/dist/{chunk-7G7C6G3A.js → chunk-LZYDCWVH.js} +42 -4
- package/dist/chunk-LZYDCWVH.js.map +1 -0
- package/dist/{chunk-A6VTFUSW.js → chunk-MOWQZKIQ.js} +2 -2
- package/dist/{chunk-M4R53NYT.js → chunk-OACK2DIW.js} +559 -147
- package/dist/chunk-OACK2DIW.js.map +1 -0
- package/dist/{chunk-KTTVBNOU.js → chunk-RONYPWDK.js} +2 -2
- package/dist/{chunk-24E4GOHU.js → chunk-RSTERB7K.js} +3 -9
- package/dist/chunk-RSTERB7K.js.map +1 -0
- package/dist/chunk-UUS325J7.js +294 -0
- package/dist/chunk-UUS325J7.js.map +1 -0
- package/dist/index.js +26 -21
- package/dist/index.js.map +1 -1
- package/dist/library.js +12 -10
- package/dist/server.js +174 -12
- package/dist/server.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/core/constants.d.ts +1 -1
- package/dist/types/engine/NativeAdapter.d.ts +1 -1
- package/dist/types/features/tags/tags.d.ts +55 -0
- package/dist/types/features/templates/gallery.d.ts +4 -14
- package/dist/types/features/templates/thumbnails.d.ts +13 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/library.d.ts +2 -1
- package/dist/types/server/handler.d.ts +1 -0
- package/dist/types/server/index.d.ts +2 -0
- package/dist/types/server/tags.d.ts +64 -0
- package/dist/types/storage/client.d.ts +33 -4
- package/dist/types/ui/EmailStudio.d.ts +8 -8
- package/dist/types/ui/library/TagBadge.d.ts +19 -0
- package/dist/types/ui/library/TagsDialog.d.ts +43 -0
- package/dist/types/ui/library/TemplateLibrary.d.ts +6 -14
- package/dist/types/ui/primitives/misc.d.ts +21 -0
- package/package.json +1 -1
- package/dist/chunk-24E4GOHU.js.map +0 -1
- package/dist/chunk-7G7C6G3A.js.map +0 -1
- package/dist/chunk-M4R53NYT.js.map +0 -1
- package/dist/chunk-MBZI6NVP.js.map +0 -1
- package/dist/chunk-SCQKWAXR.js +0 -527
- package/dist/chunk-SCQKWAXR.js.map +0 -1
- package/dist/chunk-TUA6E3BR.js +0 -632
- package/dist/chunk-TUA6E3BR.js.map +0 -1
- package/dist/chunk-XDCGYHLF.js.map +0 -1
- /package/dist/{chunk-VQRVBQIB.js.map → chunk-46ZVS2VX.js.map} +0 -0
- /package/dist/{chunk-OLTD3S3N.js.map → chunk-FYIIO7LD.js.map} +0 -0
- /package/dist/{chunk-A6VTFUSW.js.map → chunk-MOWQZKIQ.js.map} +0 -0
- /package/dist/{chunk-KTTVBNOU.js.map → chunk-RONYPWDK.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,68 @@ All notable changes are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.12.0] — 2026-10-20
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- The tag filters of the library and of the *Templates* dialog have no
|
|
13
|
+
*All* chip: with no tag picked, every template shows. A reset icon next to
|
|
14
|
+
the tags unpicks them all (it rests, dimmed, while none is picked).
|
|
15
|
+
|
|
16
|
+
## [0.11.0] — 2026-10-19
|
|
17
|
+
|
|
18
|
+
The library loses its bases and gains tags, which also filter it; the
|
|
19
|
+
editor's *Templates* dialog gains a search and tag filters. This breaks
|
|
20
|
+
code that passed `sender` or `templates` to `TemplateLibrary`, or read
|
|
21
|
+
`onCreate`'s argument (see *Changed* and *Removed*).
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- **Tags** on templates, in the library: up to three per template
|
|
25
|
+
(`MAX_TEMPLATE_TAGS`), shown in the list before the template's date, and
|
|
26
|
+
found by the search. The *Tags* line of the details opens a dialog to tick
|
|
27
|
+
them and to create, rename, recolor or delete the workspace's tags (a name
|
|
28
|
+
of 24 characters at most, unique case aside, one of the twelve
|
|
29
|
+
`TAG_COLORS`). Each change is saved at once; a deleted tag leaves every
|
|
30
|
+
template; a copy keeps its template's tags.
|
|
31
|
+
- The storage methods `listTags()`, `saveTag(tag, { create })`,
|
|
32
|
+
`deleteTag(id)` and `setTemplateTags(id, tagIds)`, in the memory storage
|
|
33
|
+
and in `createHttpStorage({ tags: true })`. `list()` and `load()` give each
|
|
34
|
+
template's `tags` (ids).
|
|
35
|
+
- On the server: the `tagStore` option (`createMemoryTagRepository()` is the
|
|
36
|
+
reference), the routes `GET`/`POST {base}/tags`, `PUT`/`DELETE
|
|
37
|
+
{base}/tags/:id` and `PUT {base}/templates/:id/tags`, `createTagService`.
|
|
38
|
+
`validateTag`, `TAG_COLORS`, `TAG_LIMITS`, `MAX_TEMPLATE_TAGS` and
|
|
39
|
+
`MAX_TAGS` are exported (`validateTag`, `TAG_COLORS` and
|
|
40
|
+
`MAX_TEMPLATE_TAGS` from the browser entries too).
|
|
41
|
+
- `TemplateLibrary`'s `deleteDisabled`: a sentence shown instead of deleting,
|
|
42
|
+
*Delete* staying in place, dimmed. For a public demo.
|
|
43
|
+
- `createMemoryStorage({ compile })`: the templates keep their compiled HTML,
|
|
44
|
+
as on the server, so the library shows *Copy HTML* and *Download*.
|
|
45
|
+
- Tag filters under the library's search: the tags some template carries,
|
|
46
|
+
one or several (a template with any of them), or *All*; with the search,
|
|
47
|
+
both apply.
|
|
48
|
+
- The editor's *Templates* dialog has a search (names, descriptions, tags)
|
|
49
|
+
and the bases' tags as filters: one or several (a base with any of them),
|
|
50
|
+
or *All*. A gallery entry takes `tags`, translated like its name.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- `TemplateLibrary` lists only the templates; a new one starts from a base
|
|
54
|
+
with the editor's *Templates* button. `onCreate()` takes no argument.
|
|
55
|
+
- `EmailStudio` passes `sender` and `templates` to the editor only, which
|
|
56
|
+
keeps its *Templates* button.
|
|
57
|
+
- The live demo opens on five templates of the gallery, three of them
|
|
58
|
+
tagged; its *Delete* is turned off.
|
|
59
|
+
- The *Templates* dialog's cards all have the same height: a name or a
|
|
60
|
+
description too long fades out at the card's edge, and the thumbnails show
|
|
61
|
+
no scrollbar. Only the cards scroll; the search and the tags stay.
|
|
62
|
+
|
|
63
|
+
### Removed
|
|
64
|
+
- The *Builder* badge of every row of the library: the same on every
|
|
65
|
+
template, it only looked like a tag. The details still give the origin.
|
|
66
|
+
- The *Bases* section of the library, its *Start from this base* button, and
|
|
67
|
+
`TemplateLibrary`'s `sender` and `templates` props.
|
|
68
|
+
- `TEMPLATE_GALLERY` and `buildGallery` from `best-email-builder/library`
|
|
69
|
+
(they stay in `best-email-builder/builder` and `best-email-builder`).
|
|
70
|
+
|
|
9
71
|
## [0.10.0] — 2026-10-19
|
|
10
72
|
|
|
11
73
|
The AI no longer writes whole emails: it checks and writes their texts.
|
package/README.md
CHANGED
|
@@ -76,6 +76,9 @@ once and given away.
|
|
|
76
76
|
server, or in the page with each user's own key.
|
|
77
77
|
|
|
78
78
|
**Your app**
|
|
79
|
+
- A template library: search, favorites, up to three colored tags per
|
|
80
|
+
template that also filter the list, and *Edit*, *Duplicate*, *Copy HTML*,
|
|
81
|
+
*Download*, *Delete*.
|
|
79
82
|
- Merge-tag variables, including ones your users create.
|
|
80
83
|
- Your brand read from your website: logo, colors and font.
|
|
81
84
|
- One Fetch-API handler for Next.js, Hono, Bun, Deno, Cloudflare Workers and Express.
|
package/dist/ai-server.js
CHANGED
|
@@ -26,9 +26,9 @@ import {
|
|
|
26
26
|
reviewFix,
|
|
27
27
|
reviewRewrite,
|
|
28
28
|
reviewSubjects
|
|
29
|
-
} from "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
29
|
+
} from "./chunk-RSTERB7K.js";
|
|
30
|
+
import "./chunk-46ZVS2VX.js";
|
|
31
|
+
import "./chunk-JFIXYIZ3.js";
|
|
32
32
|
|
|
33
33
|
// src/ai/agentEndpoint.js
|
|
34
34
|
var TASKS = ["rewrite", "subjects"];
|
package/dist/ai.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cleanRichText
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RONYPWDK.js";
|
|
4
4
|
import {
|
|
5
5
|
Button,
|
|
6
6
|
Dialog,
|
|
@@ -19,8 +19,8 @@ import {
|
|
|
19
19
|
cn,
|
|
20
20
|
createHttpCaller,
|
|
21
21
|
useUi
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-LAUNZIFX.js";
|
|
23
|
+
import "./chunk-LZYDCWVH.js";
|
|
24
24
|
import {
|
|
25
25
|
AGENT_ERROR_CODES,
|
|
26
26
|
AGENT_PROTOCOL,
|
|
@@ -43,9 +43,9 @@ import {
|
|
|
43
43
|
providerEmailModel,
|
|
44
44
|
resolveProvider,
|
|
45
45
|
visibleText
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-RSTERB7K.js";
|
|
47
|
+
import "./chunk-46ZVS2VX.js";
|
|
48
|
+
import "./chunk-JFIXYIZ3.js";
|
|
49
49
|
|
|
50
50
|
// src/ai/keys.js
|
|
51
51
|
var STORAGE_PREFIX = "best-email-builder:ai-key:";
|
package/dist/builder.js
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EmailBuilder,
|
|
3
|
-
EmailBuilderBoundary
|
|
4
|
-
} from "./chunk-M4R53NYT.js";
|
|
5
|
-
import {
|
|
3
|
+
EmailBuilderBoundary,
|
|
6
4
|
STARTER_MJML,
|
|
7
5
|
TEMPLATE_GALLERY,
|
|
8
6
|
buildGallery,
|
|
9
7
|
createStarterMjml
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-OACK2DIW.js";
|
|
9
|
+
import "./chunk-UUS325J7.js";
|
|
10
|
+
import "./chunk-MOWQZKIQ.js";
|
|
12
11
|
import "./chunk-UFKCLU2D.js";
|
|
13
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-RONYPWDK.js";
|
|
14
13
|
import {
|
|
15
14
|
StorageError,
|
|
16
15
|
createHttpStorage,
|
|
17
16
|
createMemoryStorage
|
|
18
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LAUNZIFX.js";
|
|
19
18
|
import {
|
|
20
19
|
EMAIL_BUILDER_VERSION
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-LZYDCWVH.js";
|
|
21
|
+
import "./chunk-46ZVS2VX.js";
|
|
23
22
|
import {
|
|
24
23
|
CUSTOM_GROUP,
|
|
25
24
|
DEFAULT_VARIABLES,
|
|
@@ -28,7 +27,7 @@ import {
|
|
|
28
27
|
defineVariables,
|
|
29
28
|
mergeVariables,
|
|
30
29
|
translatorFor
|
|
31
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-JFIXYIZ3.js";
|
|
32
31
|
export {
|
|
33
32
|
CUSTOM_GROUP,
|
|
34
33
|
DEFAULT_VARIABLES,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
identity,
|
|
3
3
|
isAssetPath
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JFIXYIZ3.js";
|
|
5
5
|
|
|
6
6
|
// src/validation/urls.js
|
|
7
7
|
var LINK_ATTRIBUTES = /* @__PURE__ */ new Set(["href", "action", "formaction", "xlink:href"]);
|
|
@@ -248,4 +248,4 @@ export {
|
|
|
248
248
|
validateMjml,
|
|
249
249
|
assertValidMjml
|
|
250
250
|
};
|
|
251
|
-
//# sourceMappingURL=chunk-
|
|
251
|
+
//# sourceMappingURL=chunk-46ZVS2VX.js.map
|