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.
Files changed (59) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +3 -0
  3. package/dist/ai-server.js +3 -3
  4. package/dist/ai.js +6 -6
  5. package/dist/builder.js +9 -10
  6. package/dist/{chunk-VQRVBQIB.js → chunk-46ZVS2VX.js} +2 -2
  7. package/dist/chunk-6CTFMKAQ.js +865 -0
  8. package/dist/chunk-6CTFMKAQ.js.map +1 -0
  9. package/dist/{chunk-OLTD3S3N.js → chunk-FYIIO7LD.js} +2 -2
  10. package/dist/{chunk-MBZI6NVP.js → chunk-JFIXYIZ3.js} +271 -37
  11. package/dist/chunk-JFIXYIZ3.js.map +1 -0
  12. package/dist/{chunk-XDCGYHLF.js → chunk-LAUNZIFX.js} +103 -10
  13. package/dist/chunk-LAUNZIFX.js.map +1 -0
  14. package/dist/{chunk-7G7C6G3A.js → chunk-LZYDCWVH.js} +42 -4
  15. package/dist/chunk-LZYDCWVH.js.map +1 -0
  16. package/dist/{chunk-A6VTFUSW.js → chunk-MOWQZKIQ.js} +2 -2
  17. package/dist/{chunk-M4R53NYT.js → chunk-OACK2DIW.js} +559 -147
  18. package/dist/chunk-OACK2DIW.js.map +1 -0
  19. package/dist/{chunk-KTTVBNOU.js → chunk-RONYPWDK.js} +2 -2
  20. package/dist/{chunk-24E4GOHU.js → chunk-RSTERB7K.js} +3 -9
  21. package/dist/chunk-RSTERB7K.js.map +1 -0
  22. package/dist/chunk-UUS325J7.js +294 -0
  23. package/dist/chunk-UUS325J7.js.map +1 -0
  24. package/dist/index.js +26 -21
  25. package/dist/index.js.map +1 -1
  26. package/dist/library.js +12 -10
  27. package/dist/server.js +174 -12
  28. package/dist/server.js.map +1 -1
  29. package/dist/styles.css +1 -1
  30. package/dist/types/core/constants.d.ts +1 -1
  31. package/dist/types/engine/NativeAdapter.d.ts +1 -1
  32. package/dist/types/features/tags/tags.d.ts +55 -0
  33. package/dist/types/features/templates/gallery.d.ts +4 -14
  34. package/dist/types/features/templates/thumbnails.d.ts +13 -0
  35. package/dist/types/index.d.ts +1 -0
  36. package/dist/types/library.d.ts +2 -1
  37. package/dist/types/server/handler.d.ts +1 -0
  38. package/dist/types/server/index.d.ts +2 -0
  39. package/dist/types/server/tags.d.ts +64 -0
  40. package/dist/types/storage/client.d.ts +33 -4
  41. package/dist/types/ui/EmailStudio.d.ts +8 -8
  42. package/dist/types/ui/library/TagBadge.d.ts +19 -0
  43. package/dist/types/ui/library/TagsDialog.d.ts +43 -0
  44. package/dist/types/ui/library/TemplateLibrary.d.ts +6 -14
  45. package/dist/types/ui/primitives/misc.d.ts +21 -0
  46. package/package.json +1 -1
  47. package/dist/chunk-24E4GOHU.js.map +0 -1
  48. package/dist/chunk-7G7C6G3A.js.map +0 -1
  49. package/dist/chunk-M4R53NYT.js.map +0 -1
  50. package/dist/chunk-MBZI6NVP.js.map +0 -1
  51. package/dist/chunk-SCQKWAXR.js +0 -527
  52. package/dist/chunk-SCQKWAXR.js.map +0 -1
  53. package/dist/chunk-TUA6E3BR.js +0 -632
  54. package/dist/chunk-TUA6E3BR.js.map +0 -1
  55. package/dist/chunk-XDCGYHLF.js.map +0 -1
  56. /package/dist/{chunk-VQRVBQIB.js.map → chunk-46ZVS2VX.js.map} +0 -0
  57. /package/dist/{chunk-OLTD3S3N.js.map → chunk-FYIIO7LD.js.map} +0 -0
  58. /package/dist/{chunk-A6VTFUSW.js.map → chunk-MOWQZKIQ.js.map} +0 -0
  59. /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-24E4GOHU.js";
30
- import "./chunk-VQRVBQIB.js";
31
- import "./chunk-MBZI6NVP.js";
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-KTTVBNOU.js";
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-XDCGYHLF.js";
23
- import "./chunk-7G7C6G3A.js";
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-24E4GOHU.js";
47
- import "./chunk-VQRVBQIB.js";
48
- import "./chunk-MBZI6NVP.js";
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-TUA6E3BR.js";
11
- import "./chunk-A6VTFUSW.js";
8
+ } from "./chunk-OACK2DIW.js";
9
+ import "./chunk-UUS325J7.js";
10
+ import "./chunk-MOWQZKIQ.js";
12
11
  import "./chunk-UFKCLU2D.js";
13
- import "./chunk-KTTVBNOU.js";
12
+ import "./chunk-RONYPWDK.js";
14
13
  import {
15
14
  StorageError,
16
15
  createHttpStorage,
17
16
  createMemoryStorage
18
- } from "./chunk-XDCGYHLF.js";
17
+ } from "./chunk-LAUNZIFX.js";
19
18
  import {
20
19
  EMAIL_BUILDER_VERSION
21
- } from "./chunk-7G7C6G3A.js";
22
- import "./chunk-VQRVBQIB.js";
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-MBZI6NVP.js";
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-MBZI6NVP.js";
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-VQRVBQIB.js.map
251
+ //# sourceMappingURL=chunk-46ZVS2VX.js.map