@kontakto/email-template-editor 2.10.1 → 2.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/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import DOMPurify from 'dompurify';
2
2
  import { marked, Renderer } from 'marked';
3
- import React62, { createContext, forwardRef, useRef, useEffect, useImperativeHandle, useMemo, useContext, useState, useCallback, useLayoutEffect, Fragment } from 'react';
3
+ import React63, { createContext, forwardRef, useRef, useEffect, useImperativeHandle, useMemo, useContext, useState, useCallback, useLayoutEffect, Fragment } from 'react';
4
4
  import { z } from 'zod';
5
5
  import { renderToStaticMarkup as renderToStaticMarkup$1 } from 'react-dom/server';
6
6
  import Handlebars from 'handlebars';
7
7
  import { createTheme, alpha, lighten, darken } from '@mui/material/styles';
8
8
  import { I18nProvider, Trans } from '@lingui/react';
9
- import { MenuItem, Stack, ThemeProvider, CssBaseline, useTheme, Drawer, Box, Tabs, Tab, Typography, Tooltip, IconButton, TextField, InputAdornment, Chip, CircularProgress, Alert, ToggleButtonGroup, ToggleButton, Snackbar, Menu, ListItemIcon, ListItemText, Divider as Divider$1, Dialog, DialogTitle, DialogContent, Button as Button$1, DialogActions, List, ListItemButton, InputBase, AlertTitle, FormControlLabel, Switch, InputLabel, Slider, ButtonBase, Popper, Paper, Select, Fade } from '@mui/material';
9
+ import { Stack, ThemeProvider, CssBaseline, useTheme, Drawer, Box, Tabs, Tab, Typography, Tooltip, IconButton, TextField, InputAdornment, MenuItem, Chip, CircularProgress, Alert, ToggleButtonGroup, ToggleButton, Snackbar, Menu, ListItemIcon, ListItemText, Divider as Divider$1, Dialog, DialogTitle, DialogContent, Button as Button$1, DialogActions, List, ListItemButton, InputBase, AlertTitle, FormControlLabel, Switch, InputLabel, Slider, ButtonBase, Popper, Paper, Select, Fade } from '@mui/material';
10
10
  import { i18n } from '@lingui/core';
11
11
  import { create, useStore } from 'zustand';
12
12
  import { temporal } from 'zundo';
13
- import { AddOutlined, SearchOutlined, MonitorOutlined, PhoneIphoneOutlined, MoreVertOutlined, DriveFileRenameOutlineOutlined, ContentCopyOutlined, LibraryAddOutlined, FileUploadOutlined, FileDownloadOutlined, DeleteOutlined, InsertDriveFileOutlined, DescriptionOutlined, EditOutlined, PreviewOutlined, CodeOutlined, SubjectOutlined, DataObjectOutlined, UndoOutlined, RedoOutlined, LastPageOutlined, AppRegistrationOutlined, CloudUploadOutlined, SaveOutlined, SaveAsOutlined, GridOnOutlined, SquareOutlined, ViewColumnSharp, ExpandMore, ChevronRight, KeyboardArrowUp, KeyboardArrowDown, FirstPageOutlined, MenuOutlined, CheckOutlined, InputOutlined, DeleteOutline, RoundedCornerOutlined, AspectRatioOutlined, HeightOutlined, CollectionsOutlined, ErrorOutlineOutlined, VerticalAlignTopOutlined, VerticalAlignCenterOutlined, VerticalAlignBottomOutlined, SpaceBarOutlined, BusinessOutlined, ViewColumnOutlined, HtmlOutlined, Crop32Outlined, HorizontalRuleOutlined, ContactMailOutlined, AccountCircleOutlined, ImageOutlined, SmartButtonOutlined, NotesOutlined, HMobiledataOutlined, DashboardOutlined, CloseOutlined, AlignVerticalTopOutlined, AlignVerticalBottomOutlined, AlignHorizontalLeftOutlined, AlignHorizontalRightOutlined, FormatAlignLeftOutlined, FormatAlignCenterOutlined, FormatAlignRightOutlined, FormatLineSpacingOutlined, TextFieldsOutlined, FormatColorTextOutlined, FormatBoldOutlined, FormatItalicOutlined, FormatUnderlinedOutlined, FormatOverlineOutlined, LinkOutlined, ArrowUpwardOutlined, ArrowDownwardOutlined } from '@mui/icons-material';
13
+ import { AddOutlined, SearchOutlined, MonitorOutlined, PhoneIphoneOutlined, SendOutlined, MoreVertOutlined, DriveFileRenameOutlineOutlined, ContentCopyOutlined, LibraryAddOutlined, FileUploadOutlined, FileDownloadOutlined, DeleteOutlined, InsertDriveFileOutlined, DescriptionOutlined, EditOutlined, PreviewOutlined, CodeOutlined, SubjectOutlined, DataObjectOutlined, UndoOutlined, RedoOutlined, LastPageOutlined, AppRegistrationOutlined, CloudUploadOutlined, SaveOutlined, SaveAsOutlined, GridOnOutlined, SquareOutlined, ViewColumnSharp, ExpandMore, ChevronRight, KeyboardArrowUp, KeyboardArrowDown, FirstPageOutlined, MenuOutlined, CheckOutlined, InputOutlined, DeleteOutline, RoundedCornerOutlined, AspectRatioOutlined, HeightOutlined, CollectionsOutlined, ErrorOutlineOutlined, VerticalAlignTopOutlined, VerticalAlignCenterOutlined, VerticalAlignBottomOutlined, SpaceBarOutlined, BusinessOutlined, ViewColumnOutlined, HtmlOutlined, Crop32Outlined, HorizontalRuleOutlined, ContactMailOutlined, AccountCircleOutlined, ImageOutlined, SmartButtonOutlined, NotesOutlined, HMobiledataOutlined, DashboardOutlined, CloseOutlined, AlignVerticalTopOutlined, AlignVerticalBottomOutlined, AlignHorizontalLeftOutlined, AlignHorizontalRightOutlined, FormatAlignLeftOutlined, FormatAlignCenterOutlined, FormatAlignRightOutlined, FormatLineSpacingOutlined, TextFieldsOutlined, FormatColorTextOutlined, FormatBoldOutlined, FormatItalicOutlined, FormatUnderlinedOutlined, FormatOverlineOutlined, LinkOutlined, ArrowUpwardOutlined, ArrowDownwardOutlined, WidgetsOutlined } from '@mui/icons-material';
14
14
  import { HexColorPicker, HexColorInput } from 'react-colorful';
15
15
  import hljs from 'highlight.js';
16
16
  import jsonHighlighter from 'highlight.js/lib/languages/json';
@@ -152,6 +152,15 @@ ${body}</tbody>
152
152
  paragraph(text) {
153
153
  return `<p style="margin:0 0 1em 0">${text}</p>`;
154
154
  }
155
+ list(body, ordered, start) {
156
+ const tag = ordered ? "ol" : "ul";
157
+ const type = ordered ? "list-style-type:decimal" : "list-style-type:disc";
158
+ const startAttr = ordered && start !== 1 ? ` start="${start}"` : "";
159
+ return `<${tag} style="margin:0 0 1em 0;padding-left:1.5em;${type}"${startAttr}>${body}</${tag}>`;
160
+ }
161
+ listitem(text) {
162
+ return `<li style="margin-bottom:0.25em">${text}</li>`;
163
+ }
155
164
  };
156
165
  function renderMarkdownString(str) {
157
166
  const html2 = marked.parse(str, {
@@ -184,7 +193,7 @@ function renderInlineMarkdownString(str) {
184
193
  function EmailMarkdown(_a) {
185
194
  var _b = _a, { markdown } = _b, props = __objRest(_b, ["markdown"]);
186
195
  const data = useMemo(() => renderMarkdownString(markdown), [markdown]);
187
- return /* @__PURE__ */ React62.createElement("div", __spreadProps(__spreadValues({}, props), { dangerouslySetInnerHTML: { __html: data } }));
196
+ return /* @__PURE__ */ React63.createElement("div", __spreadProps(__spreadValues({}, props), { dangerouslySetInnerHTML: { __html: data } }));
188
197
  }
189
198
  var FONT_FAMILY_SCHEMA = z.enum([
190
199
  "MODERN_SANS",
@@ -264,9 +273,9 @@ function Text({ style, props }) {
264
273
  };
265
274
  const text = (_g = props == null ? void 0 : props.text) != null ? _g : TextPropsDefaults.text;
266
275
  if (props == null ? void 0 : props.markdown) {
267
- return /* @__PURE__ */ React62.createElement(EmailMarkdown, { style: wStyle, markdown: text });
276
+ return /* @__PURE__ */ React63.createElement(EmailMarkdown, { style: wStyle, markdown: text });
268
277
  }
269
- return /* @__PURE__ */ React62.createElement("div", { style: wStyle }, text);
278
+ return /* @__PURE__ */ React63.createElement("div", { style: wStyle }, text);
270
279
  }
271
280
  var PADDING_SCHEMA2 = z.object({
272
281
  top: z.number(),
@@ -315,7 +324,7 @@ function Avatar({ style, props }) {
315
324
  textAlign: (_e = style == null ? void 0 : style.textAlign) != null ? _e : void 0,
316
325
  padding: getPadding2(style == null ? void 0 : style.padding)
317
326
  };
318
- return /* @__PURE__ */ React62.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React62.createElement(
327
+ return /* @__PURE__ */ React63.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React63.createElement(
319
328
  "img",
320
329
  {
321
330
  alt,
@@ -467,14 +476,14 @@ function Button({ style, props }) {
467
476
  padding: `${padding[0]}px ${padding[1]}px`,
468
477
  textDecoration: "none"
469
478
  };
470
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React62.createElement("a", { href: url, style: linkStyle, target: "_blank" }, /* @__PURE__ */ React62.createElement(
479
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React63.createElement("a", { href: url, style: linkStyle, target: "_blank" }, /* @__PURE__ */ React63.createElement(
471
480
  "span",
472
481
  {
473
482
  dangerouslySetInnerHTML: {
474
483
  __html: `<!--[if mso]><i style="letter-spacing: ${padding[1]}px;mso-font-width:-100%;mso-text-raise:${textRaise}" hidden>&nbsp;</i><![endif]-->`
475
484
  }
476
485
  }
477
- ), /* @__PURE__ */ React62.createElement("span", null, text), /* @__PURE__ */ React62.createElement(
486
+ ), /* @__PURE__ */ React63.createElement("span", null, text), /* @__PURE__ */ React63.createElement(
478
487
  "span",
479
488
  {
480
489
  dangerouslySetInnerHTML: {
@@ -523,7 +532,7 @@ function ColumnsContainer({ style, columns, props }) {
523
532
  contentAlignment: (_d = props == null ? void 0 : props.contentAlignment) != null ? _d : ColumnsContainerPropsDefaults.contentAlignment,
524
533
  fixedWidths: props == null ? void 0 : props.fixedWidths
525
534
  };
526
- return /* @__PURE__ */ React62.createElement("div", { style: wStyle }, /* @__PURE__ */ React62.createElement(
535
+ return /* @__PURE__ */ React63.createElement("div", { style: wStyle }, /* @__PURE__ */ React63.createElement(
527
536
  "table",
528
537
  {
529
538
  align: "center",
@@ -532,7 +541,7 @@ function ColumnsContainer({ style, columns, props }) {
532
541
  border: 0,
533
542
  style: { tableLayout: "fixed", borderCollapse: "collapse" }
534
543
  },
535
- /* @__PURE__ */ React62.createElement("tbody", { style: { width: "100%" } }, /* @__PURE__ */ React62.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React62.createElement(TableCell, { index: 0, props: blockProps, columns }), /* @__PURE__ */ React62.createElement(TableCell, { index: 1, props: blockProps, columns }), /* @__PURE__ */ React62.createElement(TableCell, { index: 2, props: blockProps, columns })))
544
+ /* @__PURE__ */ React63.createElement("tbody", { style: { width: "100%" } }, /* @__PURE__ */ React63.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React63.createElement(TableCell, { index: 0, props: blockProps, columns }), /* @__PURE__ */ React63.createElement(TableCell, { index: 1, props: blockProps, columns }), /* @__PURE__ */ React63.createElement(TableCell, { index: 2, props: blockProps, columns })))
536
545
  ));
537
546
  }
538
547
  function TableCell({ index, props, columns }) {
@@ -550,7 +559,7 @@ function TableCell({ index, props, columns }) {
550
559
  width: (_d = (_c = props.fixedWidths) == null ? void 0 : _c[index]) != null ? _d : void 0
551
560
  };
552
561
  const children = (_e = columns && columns[index]) != null ? _e : null;
553
- return /* @__PURE__ */ React62.createElement("td", { style }, children);
562
+ return /* @__PURE__ */ React63.createElement("td", { style }, children);
554
563
  }
555
564
  function getPaddingBefore(index, { columnsGap, columnsCount }) {
556
565
  if (index === 0) {
@@ -609,12 +618,13 @@ function Container({ style, children }) {
609
618
  backgroundColor: (_a = style == null ? void 0 : style.backgroundColor) != null ? _a : void 0,
610
619
  border: getBorder(style),
611
620
  borderRadius: (_b = style == null ? void 0 : style.borderRadius) != null ? _b : void 0,
621
+ overflow: (style == null ? void 0 : style.borderRadius) ? "hidden" : void 0,
612
622
  padding: getPadding5(style == null ? void 0 : style.padding)
613
623
  };
614
624
  if (!children) {
615
- return /* @__PURE__ */ React62.createElement("div", { style: wStyle });
625
+ return /* @__PURE__ */ React63.createElement("div", { style: wStyle });
616
626
  }
617
- return /* @__PURE__ */ React62.createElement("div", { style: wStyle }, children);
627
+ return /* @__PURE__ */ React63.createElement("div", { style: wStyle }, children);
618
628
  }
619
629
  var container_default = Container;
620
630
  var COLOR_SCHEMA5 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
@@ -648,7 +658,7 @@ function Divider({ style, props }) {
648
658
  };
649
659
  const borderTopWidth = (_b = props == null ? void 0 : props.lineHeight) != null ? _b : DividerPropsDefaults.lineHeight;
650
660
  const borderTopColor = (_c = props == null ? void 0 : props.lineColor) != null ? _c : DividerPropsDefaults.lineColor;
651
- return /* @__PURE__ */ React62.createElement("div", { style: st }, /* @__PURE__ */ React62.createElement(
661
+ return /* @__PURE__ */ React63.createElement("div", { style: st }, /* @__PURE__ */ React63.createElement(
652
662
  "hr",
653
663
  {
654
664
  style: {
@@ -746,11 +756,11 @@ function Heading({ props, style }) {
746
756
  const renderProps = isMarkdown ? { style: hStyle, dangerouslySetInnerHTML: { __html: html2 != null ? html2 : "" } } : { style: hStyle, children: text };
747
757
  switch (level) {
748
758
  case "h1":
749
- return /* @__PURE__ */ React62.createElement("h1", __spreadValues({}, renderProps));
759
+ return /* @__PURE__ */ React63.createElement("h1", __spreadValues({}, renderProps));
750
760
  case "h2":
751
- return /* @__PURE__ */ React62.createElement("h2", __spreadValues({}, renderProps));
761
+ return /* @__PURE__ */ React63.createElement("h2", __spreadValues({}, renderProps));
752
762
  case "h3":
753
- return /* @__PURE__ */ React62.createElement("h3", __spreadValues({}, renderProps));
763
+ return /* @__PURE__ */ React63.createElement("h3", __spreadValues({}, renderProps));
754
764
  }
755
765
  }
756
766
  function getFontSize(level) {
@@ -832,9 +842,9 @@ function Html({ style, props }) {
832
842
  padding: getPadding8(style == null ? void 0 : style.padding)
833
843
  };
834
844
  if (!children) {
835
- return /* @__PURE__ */ React62.createElement("div", { style: cssStyle });
845
+ return /* @__PURE__ */ React63.createElement("div", { style: cssStyle });
836
846
  }
837
- return /* @__PURE__ */ React62.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: children } });
847
+ return /* @__PURE__ */ React63.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: children } });
838
848
  }
839
849
  var html_default = Html;
840
850
  var PADDING_SCHEMA9 = z.object({
@@ -870,7 +880,7 @@ function Image({ style, props }) {
870
880
  const linkHref = (_c = props == null ? void 0 : props.linkHref) != null ? _c : null;
871
881
  const width = (_d = props == null ? void 0 : props.width) != null ? _d : void 0;
872
882
  const height = (_e = props == null ? void 0 : props.height) != null ? _e : void 0;
873
- const imageElement = /* @__PURE__ */ React62.createElement(
883
+ const imageElement = /* @__PURE__ */ React63.createElement(
874
884
  "img",
875
885
  {
876
886
  alt: (_f = props == null ? void 0 : props.alt) != null ? _f : "",
@@ -890,9 +900,9 @@ function Image({ style, props }) {
890
900
  }
891
901
  );
892
902
  if (!linkHref) {
893
- return /* @__PURE__ */ React62.createElement("div", { style: sectionStyle }, imageElement);
903
+ return /* @__PURE__ */ React63.createElement("div", { style: sectionStyle }, imageElement);
894
904
  }
895
- return /* @__PURE__ */ React62.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React62.createElement("a", { href: linkHref, style: { textDecoration: "none" }, target: "_blank" }, imageElement));
905
+ return /* @__PURE__ */ React63.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React63.createElement("a", { href: linkHref, style: { textDecoration: "none" }, target: "_blank" }, imageElement));
896
906
  }
897
907
  var image_default = Image;
898
908
  var FONT_FAMILY_SCHEMA5 = z.enum([
@@ -1038,7 +1048,7 @@ function Signature({ style, props }) {
1038
1048
  color: linkColor,
1039
1049
  textDecoration: "none"
1040
1050
  };
1041
- const imageElement = imageUrl ? /* @__PURE__ */ React62.createElement(
1051
+ const imageElement = imageUrl ? /* @__PURE__ */ React63.createElement(
1042
1052
  "img",
1043
1053
  {
1044
1054
  src: imageUrl,
@@ -1057,18 +1067,18 @@ function Signature({ style, props }) {
1057
1067
  }
1058
1068
  ) : null;
1059
1069
  const contactParts = [];
1060
- if (email) contactParts.push(/* @__PURE__ */ React62.createElement("a", { key: "email", href: `mailto:${email}`, style: linkStyle }, email));
1061
- if (phone) contactParts.push(/* @__PURE__ */ React62.createElement("a", { key: "phone", href: `tel:${phone}`, style: linkStyle }, phone));
1070
+ if (email) contactParts.push(/* @__PURE__ */ React63.createElement("a", { key: "email", href: `mailto:${email}`, style: linkStyle }, email));
1071
+ if (phone) contactParts.push(/* @__PURE__ */ React63.createElement("a", { key: "phone", href: `tel:${phone}`, style: linkStyle }, phone));
1062
1072
  if (website) {
1063
1073
  const href = website.startsWith("http") ? website : `https://${website}`;
1064
- contactParts.push(/* @__PURE__ */ React62.createElement("a", { key: "website", href, style: linkStyle, target: "_blank" }, website));
1074
+ contactParts.push(/* @__PURE__ */ React63.createElement("a", { key: "website", href, style: linkStyle, target: "_blank" }, website));
1065
1075
  }
1066
- const textContent = /* @__PURE__ */ React62.createElement("div", null, name && /* @__PURE__ */ React62.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, address), contactParts.length > 0 && /* @__PURE__ */ React62.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, contactParts.map((part, i) => /* @__PURE__ */ React62.createElement(React62.Fragment, { key: i }, i > 0 && /* @__PURE__ */ React62.createElement("span", { style: detailStyle }, " \xB7 "), part))));
1067
- const greetingElement = greeting ? /* @__PURE__ */ React62.createElement("p", { style: greetingStyle }, greeting) : null;
1076
+ const textContent = /* @__PURE__ */ React63.createElement("div", null, name && /* @__PURE__ */ React63.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, address), contactParts.length > 0 && /* @__PURE__ */ React63.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, contactParts.map((part, i) => /* @__PURE__ */ React63.createElement(React63.Fragment, { key: i }, i > 0 && /* @__PURE__ */ React63.createElement("span", { style: detailStyle }, " \xB7 "), part))));
1077
+ const greetingElement = greeting ? /* @__PURE__ */ React63.createElement("p", { style: greetingStyle }, greeting) : null;
1068
1078
  if (layout === "vertical") {
1069
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React62.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
1079
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React63.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
1070
1080
  }
1071
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React62.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React62.createElement("tbody", null, /* @__PURE__ */ React62.createElement("tr", null, imageElement && /* @__PURE__ */ React62.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React62.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
1081
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React63.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React63.createElement("tbody", null, /* @__PURE__ */ React63.createElement("tr", null, imageElement && /* @__PURE__ */ React63.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React63.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
1072
1082
  }
1073
1083
  var signature_default = Signature;
1074
1084
  var SpacerPropsSchema = z.object({
@@ -1085,13 +1095,13 @@ function Spacer({ props }) {
1085
1095
  const style = {
1086
1096
  height: (_a = props == null ? void 0 : props.height) != null ? _a : SpacerPropsDefaults.height
1087
1097
  };
1088
- return /* @__PURE__ */ React62.createElement("div", { style });
1098
+ return /* @__PURE__ */ React63.createElement("div", { style });
1089
1099
  }
1090
1100
  var spacer_default = Spacer;
1091
1101
  function buildBlockComponent(blocks) {
1092
1102
  return function BlockComponent({ type, data }) {
1093
1103
  const Component = blocks[type].Component;
1094
- return /* @__PURE__ */ React62.createElement(Component, __spreadValues({}, data));
1104
+ return /* @__PURE__ */ React63.createElement(Component, __spreadValues({}, data));
1095
1105
  };
1096
1106
  }
1097
1107
  function buildBlockConfigurationSchema(blocks) {
@@ -1160,9 +1170,9 @@ function ColumnsContainerReader({ style, props }) {
1160
1170
  const _a = props != null ? props : {}, { columns } = _a, restProps = __objRest(_a, ["columns"]);
1161
1171
  let cols = void 0;
1162
1172
  if (columns) {
1163
- cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ React62.createElement(ReaderBlock, { key: childId, id: childId })));
1173
+ cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })));
1164
1174
  }
1165
- return /* @__PURE__ */ React62.createElement(columns_container_default, { props: restProps, columns: cols, style });
1175
+ return /* @__PURE__ */ React63.createElement(columns_container_default, { props: restProps, columns: cols, style });
1166
1176
  }
1167
1177
  var ContainerPropsSchema2 = z.object({
1168
1178
  style: ContainerPropsSchema.shape.style,
@@ -1173,7 +1183,7 @@ var ContainerPropsSchema2 = z.object({
1173
1183
  function ContainerReader({ style, props }) {
1174
1184
  var _a;
1175
1185
  const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
1176
- return /* @__PURE__ */ React62.createElement(container_default, { style }, childrenIds.map((childId) => /* @__PURE__ */ React62.createElement(ReaderBlock, { key: childId, id: childId })));
1186
+ return /* @__PURE__ */ React63.createElement(container_default, { style }, childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })));
1177
1187
  }
1178
1188
  var COLOR_SCHEMA9 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
1179
1189
  var FONT_FAMILY_SCHEMA6 = z.enum([
@@ -1246,9 +1256,9 @@ function EmailLayoutReader(props) {
1246
1256
  margin: "0"
1247
1257
  };
1248
1258
  if (props.backdropDisabled) {
1249
- return /* @__PURE__ */ React62.createElement("div", { style: baseStyle }, childrenIds.map((childId) => /* @__PURE__ */ React62.createElement(ReaderBlock, { key: childId, id: childId })));
1259
+ return /* @__PURE__ */ React63.createElement("div", { style: baseStyle }, childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })));
1250
1260
  }
1251
- return /* @__PURE__ */ React62.createElement(
1261
+ return /* @__PURE__ */ React63.createElement(
1252
1262
  "div",
1253
1263
  {
1254
1264
  style: __spreadProps(__spreadValues({}, baseStyle), {
@@ -1258,7 +1268,7 @@ function EmailLayoutReader(props) {
1258
1268
  width: "100%"
1259
1269
  })
1260
1270
  },
1261
- /* @__PURE__ */ React62.createElement(
1271
+ /* @__PURE__ */ React63.createElement(
1262
1272
  "table",
1263
1273
  {
1264
1274
  align: "center",
@@ -1276,7 +1286,7 @@ function EmailLayoutReader(props) {
1276
1286
  cellPadding: "0",
1277
1287
  border: 0
1278
1288
  },
1279
- /* @__PURE__ */ React62.createElement("tbody", null, /* @__PURE__ */ React62.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React62.createElement("td", null, childrenIds.map((childId) => /* @__PURE__ */ React62.createElement(ReaderBlock, { key: childId, id: childId })))))
1289
+ /* @__PURE__ */ React63.createElement("tbody", null, /* @__PURE__ */ React63.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React63.createElement("td", null, childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })))))
1280
1290
  )
1281
1291
  );
1282
1292
  }
@@ -1288,7 +1298,7 @@ function useReaderDocument() {
1288
1298
  }
1289
1299
  function ReaderBlock({ id }) {
1290
1300
  const document2 = useReaderDocument();
1291
- return document2[id] ? /* @__PURE__ */ React62.createElement(BaseReaderBlock, __spreadValues({}, document2[id])) : null;
1301
+ return document2[id] ? /* @__PURE__ */ React63.createElement(BaseReaderBlock, __spreadValues({}, document2[id])) : null;
1292
1302
  }
1293
1303
  var READER_DICTIONARY = buildBlockConfigurationDictionary({
1294
1304
  ColumnsContainer: {
@@ -1345,13 +1355,13 @@ var ReaderBlockSchema = buildBlockConfigurationSchema(READER_DICTIONARY);
1345
1355
  var ReaderDocumentSchema = z.record(z.string(), ReaderBlockSchema);
1346
1356
  var BaseReaderBlock = buildBlockComponent(READER_DICTIONARY);
1347
1357
  function Reader({ document: document2, rootBlockId }) {
1348
- return /* @__PURE__ */ React62.createElement(ReaderContext.Provider, { value: document2 }, /* @__PURE__ */ React62.createElement(ReaderBlock, { id: rootBlockId }));
1358
+ return /* @__PURE__ */ React63.createElement(ReaderContext.Provider, { value: document2 }, /* @__PURE__ */ React63.createElement(ReaderBlock, { id: rootBlockId }));
1349
1359
  }
1350
1360
 
1351
1361
  // src/email-builder/renderers/render-to-static-markup.tsx
1352
1362
  function renderToStaticMarkup(document2, { rootBlockId, variables }) {
1353
1363
  const html2 = "<!DOCTYPE html>" + renderToStaticMarkup$1(
1354
- /* @__PURE__ */ React62.createElement("html", null, /* @__PURE__ */ React62.createElement("body", null, /* @__PURE__ */ React62.createElement(Reader, { document: document2, rootBlockId })))
1364
+ /* @__PURE__ */ React63.createElement("html", null, /* @__PURE__ */ React63.createElement("body", null, /* @__PURE__ */ React63.createElement(Reader, { document: document2, rootBlockId })))
1355
1365
  );
1356
1366
  if (!variables) return html2;
1357
1367
  return evaluateHandlebars(html2, variables);
@@ -2005,13 +2015,13 @@ var THEME = createTheme(BASE_THEME, {
2005
2015
  var theme_default = THEME;
2006
2016
 
2007
2017
  // src/locales/en/messages.ts
2008
- var messages = JSON.parse('{"avatar.shape":["Shape"],"block-add.avatar":["Avatar"],"block-add.button":["Button"],"block-add.columns":["Columns"],"block-add.company-signature":["Company Signature"],"block-add.container":["Container"],"block-add.divider":["Divider"],"block-add.heading":["Heading"],"block-add.html":["Html"],"block-add.image":["Image"],"block-add.personal-signature":["Personal Signature"],"block-add.spacer":["Spacer"],"block-add.text":["Text"],"button.color":["Button color"],"button.style.pill":["Pill"],"button.style.rectangle":["Rectangle"],"button.style.rounded":["Rounded"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Desktop view"],"canvas.mobile-view":["Mobile view"],"columns.count":["Number of columns"],"columns.gap":["Columns gap"],"common.add":["Add"],"common.cancel":["Cancel"],"common.save":["Save"],"common.saving":["Saving\u2026"],"divider.color":["Color"],"drawer.library":["Library"],"drawer.new-sample":["New sample"],"drawer.new-template":["New template"],"drawer.no-samples":["No samples available"],"drawer.no-samples-match":["No samples match your filters"],"drawer.no-templates":["No saved templates yet"],"drawer.no-templates-match":["No templates match your filters"],"drawer.search-samples":["Search samples"],"drawer.search-templates":["Search templates"],"drawer.sort-by":["Sort by"],"drawer.tab.outline":["Outline"],"drawer.tab.samples":["Samples"],"drawer.tab.templates":["Templates"],"drawer.tag.all":["All"],"empty.description":["A blank email template to start from scratch"],"empty.slug":["Empty email"],"field.content":["Content"],"field.height":["Height"],"field.level":["Level"],"field.markdown":["Markdown"],"field.size":["Size"],"field.style":["Style"],"field.text":["Text"],"field.url":["Url"],"field.width":["Width"],"font-family.inherit":["Match email settings"],"font-weight.bold":["Bold"],"font-weight.regular":["Regular"],"global.backdrop-color":["Backdrop color"],"global.canvas-border-color":["Canvas border color"],"global.canvas-border-radius":["Canvas border radius"],"global.canvas-color":["Canvas color"],"global.disable-backdrop":["Disable backdrop"],"image.alt-text":["Alt text"],"image.http-warning":["Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."],"image.library":["Library"],"image.link-href":["Click through URL"],"image.source-url":["Source URL"],"image.upload":["Upload"],"image.uploading":["Uploading\u2026"],"inspect.hint":["Click on a block to inspect."],"inspect.not-found":["Block not found. Click on a block to reset."],"inspector.tab.inspect":["Inspect"],"inspector.tab.settings":["Settings"],"inspector.tab.styles":["Styles"],"inspector.tab.variables":["Variables"],"outline.canvas":["Canvas"],"outline.hint":["Click a row to select. Drag a row to reorder or move it into a container."],"outline.title":["Outline"],"panel.avatar-block":["Avatar block"],"panel.button-block":["Button block"],"panel.columns-block":["Columns block"],"panel.container-block":["Container block"],"panel.details":["Details"],"panel.divider-block":["Divider block"],"panel.editor-appearance":["Editor appearance"],"panel.export":["Export"],"panel.global":["Global"],"panel.heading-block":["Heading block"],"panel.html-block":["HTML block"],"panel.image-block":["Image block"],"panel.signature-block":["Signature block"],"panel.spacer-block":["Spacer block"],"panel.template":["Template"],"panel.text-block":["Text block"],"picker.blank-desc":["Start from an empty email"],"picker.blank-title":["Blank"],"picker.create-sample":["Create sample"],"picker.create-template":["Create template"],"picker.creating":["Creating\u2026"],"picker.error-name-required":["Name is required"],"picker.error-sample-taken":["A sample with this name already exists"],"picker.error-template-taken":["A template with this name already exists"],"picker.start-from":["Start from"],"picker.title-sample":["New sample"],"picker.title-template":["New template"],"redo.label":["Redo"],"redo.tooltip":["Redo"],"rename.add-tag":["Add a tag"],"rename.error-empty":["Please enter a name"],"rename.error-generic":["Failed to update template details"],"rename.error-taken":["A template with this name already exists"],"rename.name-label":["Name"],"rename.no-tags":["No tags yet."],"rename.tag-placeholder":["Add a tag and press Enter"],"rename.tags":["Tags"],"rename.title":["Edit details"],"row.actions":["Row actions"],"row.demote":["Demote to template"],"row.duplicate":["Duplicate"],"row.duplicate-as-template":["Duplicate as template"],"row.edit-details":["Edit name & tags\u2026"],"row.more":["More"],"row.promote":["Promote to sample"],"save-dialog.create":["Create"],"save-dialog.error-empty-name":["Please enter a template name"],"save-dialog.name-label":["Template Name"],"save-dialog.save":["Save"],"save-dialog.saving":["Saving..."],"save-dialog.title":["Save as a new template"],"save-dialog.title-new":["Create a new template"],"savebar.error-saving":["Error saving"],"savebar.new":["New"],"savebar.new-template-created":["New template created"],"savebar.sample-prefix":["Sample"],"savebar.sample-saved":["Sample saved"],"savebar.save":["Save"],"savebar.save-as":["Save as\u2026"],"savebar.save-as-new":["Save as new\u2026"],"savebar.save-as-new-template":["Save as a new template"],"savebar.save-changes":["Save changes"],"savebar.save-changes-to-sample":["Save changes to this sample"],"savebar.start-fresh":["Start a fresh template"],"savebar.template-saved":["Template saved"],"settings.checkerboard":["Checkerboard"],"settings.copied":["Template copied successfully!"],"settings.delete":["Delete Template"],"settings.delete-confirm":["Are you sure you want to delete this template?"],"settings.editor-only-hint":["Editor-only \u2014 never reaches the rendered email."],"settings.no-rename-cb":["Wire a renameTemplate callback to enable editing from here"],"settings.no-template":["No template selected"],"settings.save-as-sample":["Save as Sample Template"],"settings.save-details":["Save details"],"settings.save-disabled":["Save functionality is disabled. To enable saving, provide the necessary callback functions."],"settings.saved":["Saved"],"settings.solid":["Solid"],"settings.workspace-background":["Workspace background"],"signature.address":["Address"],"signature.company":["Company"],"signature.email":["Email"],"signature.greeting":["Greeting"],"signature.image-shape":["Image shape"],"signature.image-size":["Image size"],"signature.image-url":["Image URL"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horizontal"],"signature.layout.vertical":["Vertical"],"signature.link-color":["Link color"],"signature.name":["Name"],"signature.name-color":["Name color"],"signature.phone":["Phone"],"signature.shape.circle":["Circle"],"signature.shape.rounded":["Rounded"],"signature.shape.square":["Square"],"signature.title":["Title"],"signature.website":["Website"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Last updated"],"sort.name":["Name (A\u2013Z)"],"sort.recently-created":["Recently created"],"style.alignment":["Alignment"],"style.background-color":["Background color"],"style.border-color":["Border color"],"style.border-radius":["Border radius"],"style.font-family":["Font family"],"style.font-size":["Font size"],"style.font-weight":["Font weight"],"style.letter-spacing":["Letter spacing"],"style.line-height":["Line height"],"style.padding":["Padding"],"style.text-color":["Text color"],"tab.edit":["Edit"],"tab.html-output":["HTML output"],"tab.json-output":["JSON output"],"tab.preview":["Preview"],"tab.text-output":["Plain text output"],"tag.marketing":["marketing"],"tag.transactional":["transactional"],"time.days-short":["d ago"],"time.hours-short":["h ago"],"time.just-now":["just now"],"time.minutes-short":["m ago"],"time.months-short":["mo ago"],"time.years-short":["y ago"],"toolbar.apply":["Apply"],"toolbar.bold":["Bold"],"toolbar.bold-shortcut":["Bold (Cmd+B)"],"toolbar.font-family":["Font family"],"toolbar.italic":["Italic"],"toolbar.italic-shortcut":["Italic (Cmd+I)"],"toolbar.link":["Link"],"toolbar.link-shortcut":["Link (Cmd+K)"],"toolbar.overline":["Overline"],"toolbar.text-color":["Text color"],"toolbar.underline":["Underline"],"toolbar.underline-shortcut":["Underline (Cmd+U)"],"tune.copy":["Copy block"],"tune.delete":["Delete"],"tune.move-down":["Move down"],"tune.move-up":["Move up"],"undo.label":["Undo"],"undo.tooltip":["Undo"],"variables.add":["Add variable"],"variables.click-to-declare":["Click a token to declare it."],"variables.confirm-delete":["Variable is still referenced in the body. Delete anyway?"],"variables.copy-token":["Copy {",["name"],"} token"],"variables.description":["Description"],"variables.focus-first":["Focus a text field first"],"variables.insert-at-cursor":["Insert at cursor"],"variables.intro":["Declared variables travel with the template. Reference them in subject and body as {",["name"],"}. In Preview mode, tokens render with the sample values below."],"variables.none":["No variables declared. Click + to add one."],"variables.open-template":["Open a template to manage variables."],"variables.optional":["Optional"],"variables.ref-many":["refs"],"variables.ref-one":["ref"],"variables.remove":["Remove"],"variables.sample-hint":["Shown in Preview mode"],"variables.sample-value":["Sample value"],"variables.title":["Variables"],"variables.undeclared":["Undeclared in body"],"variables.unused":["Unused in body"]}');
2018
+ var messages = JSON.parse('{"avatar.shape":["Shape"],"block-add.avatar":["Avatar"],"block-add.button":["Button"],"block-add.columns":["Columns"],"block-add.company-signature":["Company Signature"],"block-add.container":["Container"],"block-add.divider":["Divider"],"block-add.heading":["Heading"],"block-add.html":["Html"],"block-add.image":["Image"],"block-add.personal-signature":["Personal Signature"],"block-add.spacer":["Spacer"],"block-add.text":["Text"],"button.color":["Button color"],"button.style.pill":["Pill"],"button.style.rectangle":["Rectangle"],"button.style.rounded":["Rounded"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Desktop view"],"canvas.mobile-view":["Mobile view"],"columns.count":["Number of columns"],"columns.gap":["Columns gap"],"common.add":["Add"],"common.cancel":["Cancel"],"common.save":["Save"],"common.saving":["Saving\u2026"],"default.button":["Button"],"default.company-address":["123 Main Street, City, Country"],"default.heading":["Hello friend"],"default.html":["Hello world"],"default.image-alt":["Sample product"],"default.personal-company":["Acme Inc."],"default.personal-greeting":["Best regards,"],"default.personal-name":["John Doe"],"default.personal-title":["Software Engineer"],"default.text":["My new text block"],"divider.color":["Color"],"drawer.library":["Library"],"drawer.new-sample":["New sample"],"drawer.new-template":["New template"],"drawer.no-samples":["No samples available"],"drawer.no-samples-match":["No samples match your filters"],"drawer.no-templates":["No saved templates yet"],"drawer.no-templates-match":["No templates match your filters"],"drawer.search-samples":["Search samples"],"drawer.search-templates":["Search templates"],"drawer.sort-by":["Sort by"],"drawer.tab.outline":["Outline"],"drawer.tab.samples":["Samples"],"drawer.tab.templates":["Templates"],"drawer.tag.all":["All"],"empty.description":["A blank email template to start from scratch"],"empty.slug":["Empty email"],"field.content":["Content"],"field.height":["Height"],"field.level":["Level"],"field.markdown":["Markdown"],"field.size":["Size"],"field.style":["Style"],"field.text":["Text"],"field.url":["Url"],"field.width":["Width"],"font-family.book_sans":["Book sans"],"font-family.book_serif":["Book serif"],"font-family.geometric_sans":["Geometric sans"],"font-family.heavy_sans":["Heavy sans"],"font-family.inherit":["Match email settings"],"font-family.modern_sans":["Modern sans"],"font-family.modern_serif":["Modern serif"],"font-family.monospace":["Monospace"],"font-family.organic_sans":["Organic sans"],"font-family.rounded_sans":["Rounded sans"],"font-weight.bold":["Bold"],"font-weight.regular":["Regular"],"global.backdrop-color":["Backdrop color"],"global.canvas-border-color":["Canvas border color"],"global.canvas-border-radius":["Canvas border radius"],"global.canvas-color":["Canvas color"],"global.disable-backdrop":["Disable backdrop"],"image.alt-text":["Alt text"],"image.http-warning":["Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."],"image.library":["Library"],"image.link-href":["Click through URL"],"image.source-url":["Source URL"],"image.upload":["Upload"],"image.uploading":["Uploading\u2026"],"inspect.hint":["Click on a block to inspect."],"inspect.not-found":["Block not found. Click on a block to reset."],"inspector.tab.inspect":["Inspect"],"inspector.tab.settings":["Settings"],"inspector.tab.styles":["Styles"],"inspector.tab.variables":["Variables"],"outline.canvas":["Canvas"],"outline.hint":["Click a row to select. Drag a row to reorder or move it into a container."],"outline.title":["Outline"],"panel.avatar-block":["Avatar block"],"panel.button-block":["Button block"],"panel.columns-block":["Columns block"],"panel.container-block":["Container block"],"panel.details":["Details"],"panel.divider-block":["Divider block"],"panel.editor-appearance":["Editor appearance"],"panel.export":["Export"],"panel.global":["Global"],"panel.heading-block":["Heading block"],"panel.html-block":["HTML block"],"panel.image-block":["Image block"],"panel.signature-block":["Signature block"],"panel.spacer-block":["Spacer block"],"panel.template":["Template"],"panel.text-block":["Text block"],"picker.blank-desc":["Start from an empty email"],"picker.blank-title":["Blank"],"picker.create-sample":["Create sample"],"picker.create-template":["Create template"],"picker.creating":["Creating\u2026"],"picker.error-name-required":["Name is required"],"picker.error-sample-taken":["A sample with this name already exists"],"picker.error-template-taken":["A template with this name already exists"],"picker.start-from":["Start from"],"picker.title-sample":["New sample"],"picker.title-template":["New template"],"redo.label":["Redo"],"redo.tooltip":["Redo"],"rename.add-tag":["Add a tag"],"rename.error-empty":["Please enter a name"],"rename.error-generic":["Failed to update template details"],"rename.error-taken":["A template with this name already exists"],"rename.name-label":["Name"],"rename.no-tags":["No tags yet."],"rename.tag-placeholder":["Add a tag and press Enter"],"rename.tags":["Tags"],"rename.title":["Edit details"],"row.actions":["Row actions"],"row.demote":["Demote to template"],"row.duplicate":["Duplicate"],"row.duplicate-as-template":["Duplicate as template"],"row.edit-details":["Edit name & tags\u2026"],"row.more":["More"],"row.promote":["Promote to sample"],"save-dialog.create":["Create"],"save-dialog.error-empty-name":["Please enter a template name"],"save-dialog.name-label":["Template Name"],"save-dialog.save":["Save"],"save-dialog.saving":["Saving..."],"save-dialog.title":["Save as a new template"],"save-dialog.title-new":["Create a new template"],"savebar.error-saving":["Error saving"],"savebar.new":["New"],"savebar.new-template-created":["New template created"],"savebar.sample-prefix":["Sample"],"savebar.sample-saved":["Sample saved"],"savebar.save":["Save"],"savebar.save-as":["Save as\u2026"],"savebar.save-as-new":["Save as new\u2026"],"savebar.save-as-new-template":["Save as a new template"],"savebar.save-changes":["Save changes"],"savebar.save-changes-to-sample":["Save changes to this sample"],"savebar.start-fresh":["Start a fresh template"],"savebar.template-saved":["Template saved"],"settings.checkerboard":["Checkerboard"],"settings.copied":["Template copied successfully!"],"settings.delete":["Delete Template"],"settings.delete-confirm":["Are you sure you want to delete this template?"],"settings.editor-only-hint":["Editor-only \u2014 never reaches the rendered email."],"settings.no-rename-cb":["Wire a renameTemplate callback to enable editing from here"],"settings.no-template":["No template selected"],"settings.save-as-sample":["Save as Sample Template"],"settings.save-details":["Save details"],"settings.save-disabled":["Save functionality is disabled. To enable saving, provide the necessary callback functions."],"settings.saved":["Saved"],"settings.solid":["Solid"],"settings.workspace-background":["Workspace background"],"signature.address":["Address"],"signature.company":["Company"],"signature.email":["Email"],"signature.greeting":["Greeting"],"signature.image-shape":["Image shape"],"signature.image-size":["Image size"],"signature.image-url":["Image URL"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horizontal"],"signature.layout.vertical":["Vertical"],"signature.link-color":["Link color"],"signature.name":["Name"],"signature.name-color":["Name color"],"signature.phone":["Phone"],"signature.shape.circle":["Circle"],"signature.shape.rounded":["Rounded"],"signature.shape.square":["Square"],"signature.title":["Title"],"signature.website":["Website"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Last updated"],"sort.name":["Name (A\u2013Z)"],"sort.recently-created":["Recently created"],"style.alignment":["Alignment"],"style.background-color":["Background color"],"style.border-color":["Border color"],"style.border-radius":["Border radius"],"style.font-family":["Font family"],"style.font-size":["Font size"],"style.font-weight":["Font weight"],"style.letter-spacing":["Letter spacing"],"style.line-height":["Line height"],"style.padding":["Padding"],"style.text-color":["Text color"],"subject.label":["Subject"],"subject.placeholder":["Email subject \u2014 supports {",["variables"],"}"],"tab.edit":["Edit"],"tab.html-output":["HTML output"],"tab.json-output":["JSON output"],"tab.preview":["Preview"],"tab.text-output":["Plain text output"],"tag.marketing":["marketing"],"tag.transactional":["transactional"],"time.days-short":["d ago"],"time.hours-short":["h ago"],"time.just-now":["just now"],"time.minutes-short":["m ago"],"time.months-short":["mo ago"],"time.years-short":["y ago"],"toolbar.apply":["Apply"],"toolbar.bold":["Bold"],"toolbar.bold-shortcut":["Bold (Cmd+B)"],"toolbar.font-family":["Font family"],"toolbar.italic":["Italic"],"toolbar.italic-shortcut":["Italic (Cmd+I)"],"toolbar.link":["Link"],"toolbar.link-shortcut":["Link (Cmd+K)"],"toolbar.overline":["Overline"],"toolbar.text-color":["Text color"],"toolbar.underline":["Underline"],"toolbar.underline-shortcut":["Underline (Cmd+U)"],"tune.copy":["Copy block"],"tune.delete":["Delete"],"tune.move-down":["Move down"],"tune.move-up":["Move up"],"undo.label":["Undo"],"undo.tooltip":["Undo"],"variables.add":["Add variable"],"variables.click-to-declare":["Click a token to declare it."],"variables.confirm-delete":["Variable is still referenced in the body. Delete anyway?"],"variables.copy-token":["Copy {",["name"],"} token"],"variables.description":["Description"],"variables.focus-first":["Focus a text field first"],"variables.insert-at-cursor":["Insert at cursor"],"variables.intro":["Declared variables travel with the template. Reference them in subject and body as {",["name"],"}. In Preview mode, tokens render with the sample values below."],"variables.none":["No variables declared. Click + to add one."],"variables.open-template":["Open a template to manage variables."],"variables.optional":["Optional"],"variables.ref-many":["refs"],"variables.ref-one":["ref"],"variables.remove":["Remove"],"variables.sample-hint":["Shown in Preview mode"],"variables.sample-value":["Sample value"],"variables.title":["Variables"],"variables.undeclared":["Undeclared in body"],"variables.unused":["Unused in body"]}');
2009
2019
 
2010
2020
  // src/locales/fi/messages.ts
2011
- var messages2 = JSON.parse('{"avatar.shape":["Muoto"],"block-add.avatar":["Avatar"],"block-add.button":["Painike"],"block-add.columns":["Sarakkeet"],"block-add.company-signature":["Yritysallekirjoitus"],"block-add.container":["S\xE4ili\xF6"],"block-add.divider":["Erotin"],"block-add.heading":["Otsikko"],"block-add.html":["HTML"],"block-add.image":["Kuva"],"block-add.personal-signature":["Henkil\xF6kohtainen allekirjoitus"],"block-add.spacer":["V\xE4li"],"block-add.text":["Teksti"],"button.color":["Painikkeen v\xE4ri"],"button.style.pill":["Pilleri"],"button.style.rectangle":["Suorakaide"],"button.style.rounded":["Py\xF6ristetty"],"button.width.auto":["Automaattinen"],"button.width.full":["T\xE4ysi"],"canvas.desktop-view":["Ty\xF6p\xF6yt\xE4n\xE4kym\xE4"],"canvas.mobile-view":["Mobiilin\xE4kym\xE4"],"columns.count":["Sarakkeiden m\xE4\xE4r\xE4"],"columns.gap":["Sarakev\xE4li"],"common.add":["Lis\xE4\xE4"],"common.cancel":["Peruuta"],"common.save":["Tallenna"],"common.saving":["Tallennetaan\u2026"],"divider.color":["V\xE4ri"],"drawer.library":["Kirjasto"],"drawer.new-sample":["Uusi malli"],"drawer.new-template":["Uusi pohja"],"drawer.no-samples":["Ei malleja saatavilla"],"drawer.no-samples-match":["Mik\xE4\xE4n malli ei vastaa hakua"],"drawer.no-templates":["Ei tallennettuja pohjia"],"drawer.no-templates-match":["Mik\xE4\xE4n pohja ei vastaa hakua"],"drawer.search-samples":["Etsi malleja"],"drawer.search-templates":["Etsi pohjia"],"drawer.sort-by":["J\xE4rjestys"],"drawer.tab.outline":["Rakenne"],"drawer.tab.samples":["Mallit"],"drawer.tab.templates":["Pohjat"],"drawer.tag.all":["Kaikki"],"empty.description":["Tyhj\xE4 s\xE4hk\xF6postipohja, aloita tyhj\xE4lt\xE4 p\xF6yd\xE4lt\xE4"],"empty.slug":["Tyhj\xE4 s\xE4hk\xF6posti"],"field.content":["Sis\xE4lt\xF6"],"field.height":["Korkeus"],"field.level":["Taso"],"field.markdown":["Markdown"],"field.size":["Koko"],"field.style":["Tyyli"],"field.text":["Teksti"],"field.url":["Osoite"],"field.width":["Leveys"],"font-family.inherit":["K\xE4yt\xE4 viestin asetuksia"],"font-weight.bold":["Lihavoitu"],"font-weight.regular":["Normaali"],"global.backdrop-color":["Taustav\xE4ri"],"global.canvas-border-color":["Kankaan reunan v\xE4ri"],"global.canvas-border-radius":["Kankaan reunan py\xF6ristys"],"global.canvas-color":["Kankaan v\xE4ri"],"global.disable-backdrop":["Piilota taustav\xE4ri"],"image.alt-text":["Vaihtoehtoinen teksti"],"image.http-warning":["Ei-HTTPS-osoite: Gmail ja muut asiakasohjelmat poistavat sekoitetun sis\xE4ll\xF6n. K\xE4yt\xE4 https:// varmaa toimitusta varten."],"image.library":["Kirjasto"],"image.link-href":["Linkin osoite"],"image.source-url":["L\xE4hdeosoite"],"image.upload":["Lataa"],"image.uploading":["Ladataan\u2026"],"inspect.hint":["Valitse lohko napsauttamalla."],"inspect.not-found":["Lohkoa ei l\xF6ytynyt. Palaa napsauttamalla toista lohkoa."],"inspector.tab.inspect":["Tarkastele"],"inspector.tab.settings":["Asetukset"],"inspector.tab.styles":["Tyylit"],"inspector.tab.variables":["Muuttujat"],"outline.canvas":["Kangas"],"outline.hint":["Valitse rivi napsauttamalla. Raahaa rivi\xE4 j\xE4rjestyksen muuttamiseksi tai siirr\xE4 se s\xE4ili\xF6\xF6n."],"outline.title":["Rakenne"],"panel.avatar-block":["Avatarlohko"],"panel.button-block":["Painikelohko"],"panel.columns-block":["Sarakkeet"],"panel.container-block":["S\xE4ili\xF6lohko"],"panel.details":["Tiedot"],"panel.divider-block":["Erotin"],"panel.editor-appearance":["Editorin ulkoasu"],"panel.export":["Vienti"],"panel.global":["Yleiset"],"panel.heading-block":["Otsikkolohko"],"panel.html-block":["HTML-lohko"],"panel.image-block":["Kuvalohko"],"panel.signature-block":["Allekirjoituslohko"],"panel.spacer-block":["V\xE4lilohko"],"panel.template":["Pohja"],"panel.text-block":["Tekstilohko"],"picker.blank-desc":["Aloita tyhj\xE4st\xE4 s\xE4hk\xF6postista"],"picker.blank-title":["Tyhj\xE4"],"picker.create-sample":["Luo malli"],"picker.create-template":["Luo pohja"],"picker.creating":["Luodaan\u2026"],"picker.error-name-required":["Nimi vaaditaan"],"picker.error-sample-taken":["Samanniminen malli on jo olemassa"],"picker.error-template-taken":["Samanniminen pohja on jo olemassa"],"picker.start-from":["Aloitetaan pohjasta"],"picker.title-sample":["Uusi malli"],"picker.title-template":["Uusi pohja"],"redo.label":["Tee uudelleen"],"redo.tooltip":["Tee uudelleen"],"rename.add-tag":["Lis\xE4\xE4 tunniste"],"rename.error-empty":["Anna nimi"],"rename.error-generic":["Tietojen p\xE4ivitys ep\xE4onnistui"],"rename.error-taken":["Samanniminen pohja on jo olemassa"],"rename.name-label":["Nimi"],"rename.no-tags":["Ei tunnisteita."],"rename.tag-placeholder":["Lis\xE4\xE4 tunniste ja paina Enter"],"rename.tags":["Tunnisteet"],"rename.title":["Muokkaa tietoja"],"row.actions":["Rivin toiminnot"],"row.demote":["Alenna pohjaksi"],"row.duplicate":["Monista"],"row.duplicate-as-template":["Monista pohjaksi"],"row.edit-details":["Muokkaa nime\xE4 ja tunnisteita\u2026"],"row.more":["Lis\xE4\xE4"],"row.promote":["Ylenn\xE4 malliksi"],"save-dialog.create":["Luo"],"save-dialog.error-empty-name":["Anna pohjalle nimi"],"save-dialog.name-label":["Pohjan nimi"],"save-dialog.save":["Tallenna"],"save-dialog.saving":["Tallennetaan..."],"save-dialog.title":["Tallenna uutena pohjana"],"save-dialog.title-new":["Luo uusi pohja"],"savebar.error-saving":["Tallennus ep\xE4onnistui"],"savebar.new":["Uusi"],"savebar.new-template-created":["Uusi pohja luotu"],"savebar.sample-prefix":["Malli"],"savebar.sample-saved":["Malli tallennettu"],"savebar.save":["Tallenna"],"savebar.save-as":["Tallenna nimell\xE4\u2026"],"savebar.save-as-new":["Tallenna uutena\u2026"],"savebar.save-as-new-template":["Tallenna uutena pohjana"],"savebar.save-changes":["Tallenna muutokset"],"savebar.save-changes-to-sample":["Tallenna muutokset t\xE4h\xE4n malliin"],"savebar.start-fresh":["Aloita tyhj\xE4st\xE4 pohjasta"],"savebar.template-saved":["Pohja tallennettu"],"settings.checkerboard":["Shakkikuvio"],"settings.copied":["Pohja kopioitu!"],"settings.delete":["Poista pohja"],"settings.delete-confirm":["Haluatko varmasti poistaa t\xE4m\xE4n pohjan?"],"settings.editor-only-hint":["N\xE4kyy vain editorissa \u2014 ei p\xE4\xE4dy l\xE4hetett\xE4v\xE4\xE4n viestiin."],"settings.no-rename-cb":["Anna renameTemplate-callback k\xE4ytt\xF6\xF6n, niin voit muokata t\xE4st\xE4"],"settings.no-template":["Pohjaa ei ole valittu"],"settings.save-as-sample":["Tallenna mallipohjaksi"],"settings.save-details":["Tallenna tiedot"],"settings.save-disabled":["Tallennus on poistettu k\xE4yt\xF6st\xE4. Ota k\xE4ytt\xF6\xF6n antamalla tarvittavat callback-funktiot."],"settings.saved":["Tallennettu"],"settings.solid":["Yksiv\xE4rinen"],"settings.workspace-background":["Ty\xF6tilan tausta"],"signature.address":["Osoite"],"signature.company":["Yritys"],"signature.email":["S\xE4hk\xF6posti"],"signature.greeting":["Tervehdys"],"signature.image-shape":["Kuvan muoto"],"signature.image-size":["Kuvan koko"],"signature.image-url":["Kuvan osoite"],"signature.layout":["Asettelu"],"signature.layout.horizontal":["Vaakasuora"],"signature.layout.vertical":["Pystysuora"],"signature.link-color":["Linkin v\xE4ri"],"signature.name":["Nimi"],"signature.name-color":["Nimen v\xE4ri"],"signature.phone":["Puhelin"],"signature.shape.circle":["Ympyr\xE4"],"signature.shape.rounded":["Py\xF6ristetty"],"signature.shape.square":["Neli\xF6"],"signature.title":["Titteli"],"signature.website":["Verkkosivusto"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Viimeksi p\xE4ivitetty"],"sort.name":["Nimi (A\u2013\xD6)"],"sort.recently-created":["\xC4skett\xE4in luotu"],"style.alignment":["Tasaus"],"style.background-color":["Taustav\xE4ri"],"style.border-color":["Reunan v\xE4ri"],"style.border-radius":["Reunan py\xF6ristys"],"style.font-family":["Fontti"],"style.font-size":["Fonttikoko"],"style.font-weight":["Fontin paksuus"],"style.letter-spacing":["Kirjainv\xE4li"],"style.line-height":["Rivikorkeus"],"style.padding":["T\xE4yte"],"style.text-color":["Tekstin v\xE4ri"],"tab.edit":["Muokkaa"],"tab.html-output":["HTML-tuloste"],"tab.json-output":["JSON-tuloste"],"tab.preview":["Esikatselu"],"tab.text-output":["Tekstituloste"],"tag.marketing":["markkinointi"],"tag.transactional":["tapahtumaviestit"],"time.days-short":[" pv sitten"],"time.hours-short":[" h sitten"],"time.just-now":["juuri nyt"],"time.minutes-short":[" min sitten"],"time.months-short":[" kk sitten"],"time.years-short":[" v sitten"],"toolbar.apply":["K\xE4yt\xE4"],"toolbar.bold":["Lihavointi"],"toolbar.bold-shortcut":["Lihavointi (Cmd+B)"],"toolbar.font-family":["Fontti"],"toolbar.italic":["Kursivointi"],"toolbar.italic-shortcut":["Kursivointi (Cmd+I)"],"toolbar.link":["Linkki"],"toolbar.link-shortcut":["Linkki (Cmd+K)"],"toolbar.overline":["Yliviivaus"],"toolbar.text-color":["Tekstin v\xE4ri"],"toolbar.underline":["Alleviivaus"],"toolbar.underline-shortcut":["Alleviivaus (Cmd+U)"],"tune.copy":["Kopioi lohko"],"tune.delete":["Poista"],"tune.move-down":["Siirr\xE4 alas"],"tune.move-up":["Siirr\xE4 yl\xF6s"],"undo.label":["Kumoa"],"undo.tooltip":["Kumoa"],"variables.add":["Lis\xE4\xE4 muuttuja"],"variables.click-to-declare":["M\xE4\xE4rittele muuttuja napsauttamalla tunnistetta."],"variables.confirm-delete":["Muuttujaan viitataan edelleen viestiss\xE4. Poistetaanko silti?"],"variables.copy-token":["Kopioi {",["nimi"],"}-tunniste"],"variables.description":["Kuvaus"],"variables.focus-first":["Kohdista ensin tekstikentt\xE4\xE4n"],"variables.insert-at-cursor":["Lis\xE4\xE4 kohdistimeen"],"variables.intro":["M\xE4\xE4ritellyt muuttujat kulkevat pohjan mukana. Viittaa niihin aiherivill\xE4 ja viestiss\xE4 muodossa {",["nimi"],"}. Esikatselussa merkit korvautuvat alla olevilla esimerkkiarvoilla."],"variables.none":["Ei m\xE4\xE4riteltyj\xE4 muuttujia. Lis\xE4\xE4 napsauttamalla +."],"variables.open-template":["Avaa pohja hallitaksesi muuttujia."],"variables.optional":["Valinnainen"],"variables.ref-many":["viittausta"],"variables.ref-one":["viittaus"],"variables.remove":["Poista"],"variables.sample-hint":["N\xE4ytet\xE4\xE4n esikatselussa"],"variables.sample-value":["Esimerkkiarvo"],"variables.title":["Muuttujat"],"variables.undeclared":["M\xE4\xE4rittelem\xE4t\xF6n viestiss\xE4"],"variables.unused":["Ei k\xE4yt\xF6ss\xE4 viestiss\xE4"]}');
2021
+ var messages2 = JSON.parse('{"avatar.shape":["Muoto"],"block-add.avatar":["Avatar"],"block-add.button":["Painike"],"block-add.columns":["Sarakkeet"],"block-add.company-signature":["Yritysallekirjoitus"],"block-add.container":["S\xE4ili\xF6"],"block-add.divider":["Erotin"],"block-add.heading":["Otsikko"],"block-add.html":["HTML"],"block-add.image":["Kuva"],"block-add.personal-signature":["Henkil\xF6kohtainen allekirjoitus"],"block-add.spacer":["V\xE4li"],"block-add.text":["Teksti"],"button.color":["Painikkeen v\xE4ri"],"button.style.pill":["Pilleri"],"button.style.rectangle":["Suorakaide"],"button.style.rounded":["Py\xF6ristetty"],"button.width.auto":["Automaattinen"],"button.width.full":["T\xE4ysi"],"canvas.desktop-view":["Ty\xF6p\xF6yt\xE4n\xE4kym\xE4"],"canvas.mobile-view":["Mobiilin\xE4kym\xE4"],"columns.count":["Sarakkeiden m\xE4\xE4r\xE4"],"columns.gap":["Sarakev\xE4li"],"common.add":["Lis\xE4\xE4"],"common.cancel":["Peruuta"],"common.save":["Tallenna"],"common.saving":["Tallennetaan\u2026"],"default.button":["Painike"],"default.company-address":["P\xE4\xE4katu 1, Kaupunki, Suomi"],"default.heading":["Hei yst\xE4v\xE4"],"default.html":["Hei maailma"],"default.image-alt":["Esimerkkikuva"],"default.personal-company":["Acme Oy"],"default.personal-greeting":["Yst\xE4v\xE4llisin terveisin,"],"default.personal-name":["Matti Meik\xE4l\xE4inen"],"default.personal-title":["Ohjelmistokehitt\xE4j\xE4"],"default.text":["Uusi tekstilohko"],"divider.color":["V\xE4ri"],"drawer.library":["Kirjasto"],"drawer.new-sample":["Uusi malli"],"drawer.new-template":["Uusi pohja"],"drawer.no-samples":["Ei malleja saatavilla"],"drawer.no-samples-match":["Mik\xE4\xE4n malli ei vastaa hakua"],"drawer.no-templates":["Ei tallennettuja pohjia"],"drawer.no-templates-match":["Mik\xE4\xE4n pohja ei vastaa hakua"],"drawer.search-samples":["Etsi malleja"],"drawer.search-templates":["Etsi pohjia"],"drawer.sort-by":["J\xE4rjestys"],"drawer.tab.outline":["Rakenne"],"drawer.tab.samples":["Mallit"],"drawer.tab.templates":["Pohjat"],"drawer.tag.all":["Kaikki"],"empty.description":["Tyhj\xE4 s\xE4hk\xF6postipohja, aloita tyhj\xE4lt\xE4 p\xF6yd\xE4lt\xE4"],"empty.slug":["Tyhj\xE4 s\xE4hk\xF6posti"],"field.content":["Sis\xE4lt\xF6"],"field.height":["Korkeus"],"field.level":["Taso"],"field.markdown":["Markdown"],"field.size":["Koko"],"field.style":["Tyyli"],"field.text":["Teksti"],"field.url":["Osoite"],"field.width":["Leveys"],"font-family.book_sans":["Kirjagroteski"],"font-family.book_serif":["Kirja-antiikva"],"font-family.geometric_sans":["Geometrinen groteski"],"font-family.heavy_sans":["Paksu groteski"],"font-family.inherit":["K\xE4yt\xE4 viestin asetuksia"],"font-family.modern_sans":["Moderni groteski"],"font-family.modern_serif":["Moderni antiikva"],"font-family.monospace":["Tasalevyinen"],"font-family.organic_sans":["Orgaaninen groteski"],"font-family.rounded_sans":["Py\xF6ristetty groteski"],"font-weight.bold":["Lihavoitu"],"font-weight.regular":["Normaali"],"global.backdrop-color":["Taustav\xE4ri"],"global.canvas-border-color":["Kankaan reunan v\xE4ri"],"global.canvas-border-radius":["Kankaan reunan py\xF6ristys"],"global.canvas-color":["Kankaan v\xE4ri"],"global.disable-backdrop":["Piilota taustav\xE4ri"],"image.alt-text":["Vaihtoehtoinen teksti"],"image.http-warning":["Ei-HTTPS-osoite: Gmail ja muut asiakasohjelmat poistavat sekoitetun sis\xE4ll\xF6n. K\xE4yt\xE4 https:// varmaa toimitusta varten."],"image.library":["Kirjasto"],"image.link-href":["Linkin osoite"],"image.source-url":["L\xE4hdeosoite"],"image.upload":["Lataa"],"image.uploading":["Ladataan\u2026"],"inspect.hint":["Valitse lohko napsauttamalla."],"inspect.not-found":["Lohkoa ei l\xF6ytynyt. Palaa napsauttamalla toista lohkoa."],"inspector.tab.inspect":["Tarkastele"],"inspector.tab.settings":["Asetukset"],"inspector.tab.styles":["Tyylit"],"inspector.tab.variables":["Muuttujat"],"outline.canvas":["Kangas"],"outline.hint":["Valitse rivi napsauttamalla. Raahaa rivi\xE4 j\xE4rjestyksen muuttamiseksi tai siirr\xE4 se s\xE4ili\xF6\xF6n."],"outline.title":["Rakenne"],"panel.avatar-block":["Avatarlohko"],"panel.button-block":["Painikelohko"],"panel.columns-block":["Sarakkeet"],"panel.container-block":["S\xE4ili\xF6lohko"],"panel.details":["Tiedot"],"panel.divider-block":["Erotin"],"panel.editor-appearance":["Editorin ulkoasu"],"panel.export":["Vienti"],"panel.global":["Yleiset"],"panel.heading-block":["Otsikkolohko"],"panel.html-block":["HTML-lohko"],"panel.image-block":["Kuvalohko"],"panel.signature-block":["Allekirjoituslohko"],"panel.spacer-block":["V\xE4lilohko"],"panel.template":["Pohja"],"panel.text-block":["Tekstilohko"],"picker.blank-desc":["Aloita tyhj\xE4st\xE4 s\xE4hk\xF6postista"],"picker.blank-title":["Tyhj\xE4"],"picker.create-sample":["Luo malli"],"picker.create-template":["Luo pohja"],"picker.creating":["Luodaan\u2026"],"picker.error-name-required":["Nimi vaaditaan"],"picker.error-sample-taken":["Samanniminen malli on jo olemassa"],"picker.error-template-taken":["Samanniminen pohja on jo olemassa"],"picker.start-from":["Aloitetaan pohjasta"],"picker.title-sample":["Uusi malli"],"picker.title-template":["Uusi pohja"],"redo.label":["Tee uudelleen"],"redo.tooltip":["Tee uudelleen"],"rename.add-tag":["Lis\xE4\xE4 tunniste"],"rename.error-empty":["Anna nimi"],"rename.error-generic":["Tietojen p\xE4ivitys ep\xE4onnistui"],"rename.error-taken":["Samanniminen pohja on jo olemassa"],"rename.name-label":["Nimi"],"rename.no-tags":["Ei tunnisteita."],"rename.tag-placeholder":["Lis\xE4\xE4 tunniste ja paina Enter"],"rename.tags":["Tunnisteet"],"rename.title":["Muokkaa tietoja"],"row.actions":["Rivin toiminnot"],"row.demote":["Alenna pohjaksi"],"row.duplicate":["Monista"],"row.duplicate-as-template":["Monista pohjaksi"],"row.edit-details":["Muokkaa nime\xE4 ja tunnisteita\u2026"],"row.more":["Lis\xE4\xE4"],"row.promote":["Ylenn\xE4 malliksi"],"save-dialog.create":["Luo"],"save-dialog.error-empty-name":["Anna pohjalle nimi"],"save-dialog.name-label":["Pohjan nimi"],"save-dialog.save":["Tallenna"],"save-dialog.saving":["Tallennetaan..."],"save-dialog.title":["Tallenna uutena pohjana"],"save-dialog.title-new":["Luo uusi pohja"],"savebar.error-saving":["Tallennus ep\xE4onnistui"],"savebar.new":["Uusi"],"savebar.new-template-created":["Uusi pohja luotu"],"savebar.sample-prefix":["Malli"],"savebar.sample-saved":["Malli tallennettu"],"savebar.save":["Tallenna"],"savebar.save-as":["Tallenna nimell\xE4\u2026"],"savebar.save-as-new":["Tallenna uutena\u2026"],"savebar.save-as-new-template":["Tallenna uutena pohjana"],"savebar.save-changes":["Tallenna muutokset"],"savebar.save-changes-to-sample":["Tallenna muutokset t\xE4h\xE4n malliin"],"savebar.start-fresh":["Aloita tyhj\xE4st\xE4 pohjasta"],"savebar.template-saved":["Pohja tallennettu"],"settings.checkerboard":["Shakkikuvio"],"settings.copied":["Pohja kopioitu!"],"settings.delete":["Poista pohja"],"settings.delete-confirm":["Haluatko varmasti poistaa t\xE4m\xE4n pohjan?"],"settings.editor-only-hint":["N\xE4kyy vain editorissa \u2014 ei p\xE4\xE4dy l\xE4hetett\xE4v\xE4\xE4n viestiin."],"settings.no-rename-cb":["Anna renameTemplate-callback k\xE4ytt\xF6\xF6n, niin voit muokata t\xE4st\xE4"],"settings.no-template":["Pohjaa ei ole valittu"],"settings.save-as-sample":["Tallenna mallipohjaksi"],"settings.save-details":["Tallenna tiedot"],"settings.save-disabled":["Tallennus on poistettu k\xE4yt\xF6st\xE4. Ota k\xE4ytt\xF6\xF6n antamalla tarvittavat callback-funktiot."],"settings.saved":["Tallennettu"],"settings.solid":["Yksiv\xE4rinen"],"settings.workspace-background":["Ty\xF6tilan tausta"],"signature.address":["Osoite"],"signature.company":["Yritys"],"signature.email":["S\xE4hk\xF6posti"],"signature.greeting":["Tervehdys"],"signature.image-shape":["Kuvan muoto"],"signature.image-size":["Kuvan koko"],"signature.image-url":["Kuvan osoite"],"signature.layout":["Asettelu"],"signature.layout.horizontal":["Vaakasuora"],"signature.layout.vertical":["Pystysuora"],"signature.link-color":["Linkin v\xE4ri"],"signature.name":["Nimi"],"signature.name-color":["Nimen v\xE4ri"],"signature.phone":["Puhelin"],"signature.shape.circle":["Ympyr\xE4"],"signature.shape.rounded":["Py\xF6ristetty"],"signature.shape.square":["Neli\xF6"],"signature.title":["Titteli"],"signature.website":["Verkkosivusto"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Viimeksi p\xE4ivitetty"],"sort.name":["Nimi (A\u2013\xD6)"],"sort.recently-created":["\xC4skett\xE4in luotu"],"style.alignment":["Tasaus"],"style.background-color":["Taustav\xE4ri"],"style.border-color":["Reunan v\xE4ri"],"style.border-radius":["Reunan py\xF6ristys"],"style.font-family":["Fontti"],"style.font-size":["Fonttikoko"],"style.font-weight":["Fontin paksuus"],"style.letter-spacing":["Kirjainv\xE4li"],"style.line-height":["Rivikorkeus"],"style.padding":["T\xE4yte"],"style.text-color":["Tekstin v\xE4ri"],"subject.label":["Aihe"],"subject.placeholder":["S\xE4hk\xF6postin aihe \u2014 tukee {",["muuttujia"],"}"],"tab.edit":["Muokkaa"],"tab.html-output":["HTML-tuloste"],"tab.json-output":["JSON-tuloste"],"tab.preview":["Esikatselu"],"tab.text-output":["Tekstituloste"],"tag.marketing":["markkinointi"],"tag.transactional":["tapahtumaviestit"],"time.days-short":[" pv sitten"],"time.hours-short":[" h sitten"],"time.just-now":["juuri nyt"],"time.minutes-short":[" min sitten"],"time.months-short":[" kk sitten"],"time.years-short":[" v sitten"],"toolbar.apply":["K\xE4yt\xE4"],"toolbar.bold":["Lihavointi"],"toolbar.bold-shortcut":["Lihavointi (Cmd+B)"],"toolbar.font-family":["Fontti"],"toolbar.italic":["Kursivointi"],"toolbar.italic-shortcut":["Kursivointi (Cmd+I)"],"toolbar.link":["Linkki"],"toolbar.link-shortcut":["Linkki (Cmd+K)"],"toolbar.overline":["Yliviivaus"],"toolbar.text-color":["Tekstin v\xE4ri"],"toolbar.underline":["Alleviivaus"],"toolbar.underline-shortcut":["Alleviivaus (Cmd+U)"],"tune.copy":["Kopioi lohko"],"tune.delete":["Poista"],"tune.move-down":["Siirr\xE4 alas"],"tune.move-up":["Siirr\xE4 yl\xF6s"],"undo.label":["Kumoa"],"undo.tooltip":["Kumoa"],"variables.add":["Lis\xE4\xE4 muuttuja"],"variables.click-to-declare":["M\xE4\xE4rittele muuttuja napsauttamalla tunnistetta."],"variables.confirm-delete":["Muuttujaan viitataan edelleen viestiss\xE4. Poistetaanko silti?"],"variables.copy-token":["Kopioi {",["nimi"],"}-tunniste"],"variables.description":["Kuvaus"],"variables.focus-first":["Kohdista ensin tekstikentt\xE4\xE4n"],"variables.insert-at-cursor":["Lis\xE4\xE4 kohdistimeen"],"variables.intro":["M\xE4\xE4ritellyt muuttujat kulkevat pohjan mukana. Viittaa niihin aiherivill\xE4 ja viestiss\xE4 muodossa {",["nimi"],"}. Esikatselussa merkit korvautuvat alla olevilla esimerkkiarvoilla."],"variables.none":["Ei m\xE4\xE4riteltyj\xE4 muuttujia. Lis\xE4\xE4 napsauttamalla +."],"variables.open-template":["Avaa pohja hallitaksesi muuttujia."],"variables.optional":["Valinnainen"],"variables.ref-many":["viittausta"],"variables.ref-one":["viittaus"],"variables.remove":["Poista"],"variables.sample-hint":["N\xE4ytet\xE4\xE4n esikatselussa"],"variables.sample-value":["Esimerkkiarvo"],"variables.title":["Muuttujat"],"variables.undeclared":["M\xE4\xE4rittelem\xE4t\xF6n viestiss\xE4"],"variables.unused":["Ei k\xE4yt\xF6ss\xE4 viestiss\xE4"]}');
2012
2022
 
2013
2023
  // src/locales/sv/messages.ts
2014
- var messages3 = JSON.parse('{"avatar.shape":["Form"],"block-add.avatar":["Avatar"],"block-add.button":["Knapp"],"block-add.columns":["Kolumner"],"block-add.company-signature":["F\xF6retagssignatur"],"block-add.container":["Beh\xE5llare"],"block-add.divider":["Avgr\xE4nsare"],"block-add.heading":["Rubrik"],"block-add.html":["HTML"],"block-add.image":["Bild"],"block-add.personal-signature":["Personlig signatur"],"block-add.spacer":["Mellanrum"],"block-add.text":["Text"],"button.color":["Knappf\xE4rg"],"button.style.pill":["Piller"],"button.style.rectangle":["Rektangel"],"button.style.rounded":["Rundad"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Skrivbordsvy"],"canvas.mobile-view":["Mobilvy"],"columns.count":["Antal kolumner"],"columns.gap":["Kolumnmellanrum"],"common.add":["L\xE4gg till"],"common.cancel":["Avbryt"],"common.save":["Spara"],"common.saving":["Sparar\u2026"],"divider.color":["F\xE4rg"],"drawer.library":["Bibliotek"],"drawer.new-sample":["Ny mall"],"drawer.new-template":["Ny e-postmall"],"drawer.no-samples":["Inga exempel tillg\xE4ngliga"],"drawer.no-samples-match":["Inga exempel matchar dina filter"],"drawer.no-templates":["Inga sparade mallar \xE4nnu"],"drawer.no-templates-match":["Inga mallar matchar dina filter"],"drawer.search-samples":["S\xF6k exempel"],"drawer.search-templates":["S\xF6k mallar"],"drawer.sort-by":["Sortera efter"],"drawer.tab.outline":["Struktur"],"drawer.tab.samples":["Exempel"],"drawer.tab.templates":["Mallar"],"drawer.tag.all":["Alla"],"empty.description":["En tom e-postmall att utg\xE5 fr\xE5n"],"empty.slug":["Tomt e-postmeddelande"],"field.content":["Inneh\xE5ll"],"field.height":["H\xF6jd"],"field.level":["Niv\xE5"],"field.markdown":["Markdown"],"field.size":["Storlek"],"field.style":["Stil"],"field.text":["Text"],"field.url":["Adress"],"field.width":["Bredd"],"font-family.inherit":["F\xF6lj mejlets inst\xE4llningar"],"font-weight.bold":["Fet"],"font-weight.regular":["Normal"],"global.backdrop-color":["Bakgrundsf\xE4rg"],"global.canvas-border-color":["Canvaskantf\xE4rg"],"global.canvas-border-radius":["Canvaskantradie"],"global.canvas-color":["Canvasf\xE4rg"],"global.disable-backdrop":["D\xF6lj bakgrund"],"image.alt-text":["Alternativ text"],"image.http-warning":["Icke-HTTPS-URL: Gmail och andra klienter tar bort blandat inneh\xE5ll. Anv\xE4nd https:// f\xF6r p\xE5litlig leverans."],"image.library":["Bibliotek"],"image.link-href":["Klickl\xE4nk"],"image.source-url":["K\xE4lladress"],"image.upload":["Ladda upp"],"image.uploading":["Laddar upp\u2026"],"inspect.hint":["Klicka p\xE5 ett block f\xF6r att inspektera."],"inspect.not-found":["Blocket hittades inte. Klicka p\xE5 ett block f\xF6r att \xE5terst\xE4lla."],"inspector.tab.inspect":["Inspektera"],"inspector.tab.settings":["Inst\xE4llningar"],"inspector.tab.styles":["Stilar"],"inspector.tab.variables":["Variabler"],"outline.canvas":["Canvas"],"outline.hint":["Klicka p\xE5 en rad f\xF6r att v\xE4lja. Dra en rad f\xF6r att \xE4ndra ordning eller flytta till en beh\xE5llare."],"outline.title":["Struktur"],"panel.avatar-block":["Avatarblock"],"panel.button-block":["Knappblock"],"panel.columns-block":["Kolumner"],"panel.container-block":["Beh\xE5llarblock"],"panel.details":["Detaljer"],"panel.divider-block":["Avgr\xE4nsare"],"panel.editor-appearance":["Editorns utseende"],"panel.export":["Exportera"],"panel.global":["Allm\xE4nt"],"panel.heading-block":["Rubrikblock"],"panel.html-block":["HTML-block"],"panel.image-block":["Bildblock"],"panel.signature-block":["Signaturblock"],"panel.spacer-block":["Mellanrumsblock"],"panel.template":["Mall"],"panel.text-block":["Textblock"],"picker.blank-desc":["Starta fr\xE5n ett tomt e-postmeddelande"],"picker.blank-title":["Tomt"],"picker.create-sample":["Skapa exempel"],"picker.create-template":["Skapa mall"],"picker.creating":["Skapar\u2026"],"picker.error-name-required":["Namn kr\xE4vs"],"picker.error-sample-taken":["Ett exempel med detta namn finns redan"],"picker.error-template-taken":["En mall med detta namn finns redan"],"picker.start-from":["Utg\xE5 fr\xE5n"],"picker.title-sample":["Nytt exempel"],"picker.title-template":["Ny mall"],"redo.label":["G\xF6r om"],"redo.tooltip":["G\xF6r om"],"rename.add-tag":["L\xE4gg till en etikett"],"rename.error-empty":["Ange ett namn"],"rename.error-generic":["Kunde inte uppdatera malldetaljer"],"rename.error-taken":["En mall med detta namn finns redan"],"rename.name-label":["Namn"],"rename.no-tags":["Inga etiketter \xE4nnu."],"rename.tag-placeholder":["L\xE4gg till en etikett och tryck Enter"],"rename.tags":["Etiketter"],"rename.title":["Redigera detaljer"],"row.actions":["Rad\xE5tg\xE4rder"],"row.demote":["Degradera till mall"],"row.duplicate":["Duplicera"],"row.duplicate-as-template":["Duplicera som mall"],"row.edit-details":["Redigera namn och etiketter\u2026"],"row.more":["Mer"],"row.promote":["Befordra till exempel"],"save-dialog.create":["Skapa"],"save-dialog.error-empty-name":["Ange ett mallnamn"],"save-dialog.name-label":["Mallnamn"],"save-dialog.save":["Spara"],"save-dialog.saving":["Sparar..."],"save-dialog.title":["Spara som en ny mall"],"save-dialog.title-new":["Skapa en ny mall"],"savebar.error-saving":["Fel vid sparande"],"savebar.new":["Ny"],"savebar.new-template-created":["Ny mall skapad"],"savebar.sample-prefix":["Exempel"],"savebar.sample-saved":["Exempel sparat"],"savebar.save":["Spara"],"savebar.save-as":["Spara som\u2026"],"savebar.save-as-new":["Spara som ny\u2026"],"savebar.save-as-new-template":["Spara som en ny mall"],"savebar.save-changes":["Spara \xE4ndringar"],"savebar.save-changes-to-sample":["Spara \xE4ndringar till detta exempel"],"savebar.start-fresh":["Starta en ny mall"],"savebar.template-saved":["Mall sparad"],"settings.checkerboard":["Rutm\xF6nster"],"settings.copied":["Mall kopierad!"],"settings.delete":["Ta bort mall"],"settings.delete-confirm":["\xC4r du s\xE4ker p\xE5 att du vill ta bort denna mall?"],"settings.editor-only-hint":["Syns bara i editorn \u2014 n\xE5r aldrig det renderade mejlet."],"settings.no-rename-cb":["Koppla renameTemplate-callback f\xF6r att kunna redigera h\xE4rifr\xE5n"],"settings.no-template":["Ingen mall vald"],"settings.save-as-sample":["Spara som exempelmall"],"settings.save-details":["Spara detaljer"],"settings.save-disabled":["Sparfunktionen \xE4r inaktiverad. Aktivera genom att ange n\xF6dv\xE4ndiga callback-funktioner."],"settings.saved":["Sparad"],"settings.solid":["Enf\xE4rgad"],"settings.workspace-background":["Arbetsytans bakgrund"],"signature.address":["Adress"],"signature.company":["F\xF6retag"],"signature.email":["E-post"],"signature.greeting":["H\xE4lsning"],"signature.image-shape":["Bildform"],"signature.image-size":["Bildstorlek"],"signature.image-url":["Bildadress"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horisontell"],"signature.layout.vertical":["Vertikal"],"signature.link-color":["L\xE4nkf\xE4rg"],"signature.name":["Namn"],"signature.name-color":["Namnf\xE4rg"],"signature.phone":["Telefon"],"signature.shape.circle":["Cirkel"],"signature.shape.rounded":["Rundad"],"signature.shape.square":["Kvadrat"],"signature.title":["Titel"],"signature.website":["Webbplats"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Senast uppdaterad"],"sort.name":["Namn (A\u2013\xD6)"],"sort.recently-created":["Nyligen skapad"],"style.alignment":["Justering"],"style.background-color":["Bakgrundsf\xE4rg"],"style.border-color":["Kantf\xE4rg"],"style.border-radius":["Kantradie"],"style.font-family":["Typsnitt"],"style.font-size":["Typsnittsstorlek"],"style.font-weight":["Typsnittsvikt"],"style.letter-spacing":["Teckenavst\xE5nd"],"style.line-height":["Radh\xF6jd"],"style.padding":["Utrymme"],"style.text-color":["Textf\xE4rg"],"tab.edit":["Redigera"],"tab.html-output":["HTML-utdata"],"tab.json-output":["JSON-utdata"],"tab.preview":["F\xF6rhandsgranska"],"tab.text-output":["Textutdata"],"tag.marketing":["marknadsf\xF6ring"],"tag.transactional":["transaktionella"],"time.days-short":[" d sedan"],"time.hours-short":[" tim sedan"],"time.just-now":["just nu"],"time.minutes-short":[" min sedan"],"time.months-short":[" m\xE5n sedan"],"time.years-short":[" \xE5r sedan"],"toolbar.apply":["Anv\xE4nd"],"toolbar.bold":["Fet"],"toolbar.bold-shortcut":["Fet (Cmd+B)"],"toolbar.font-family":["Typsnitt"],"toolbar.italic":["Kursiv"],"toolbar.italic-shortcut":["Kursiv (Cmd+I)"],"toolbar.link":["L\xE4nk"],"toolbar.link-shortcut":["L\xE4nk (Cmd+K)"],"toolbar.overline":["\xD6verstruken"],"toolbar.text-color":["Textf\xE4rg"],"toolbar.underline":["Understruken"],"toolbar.underline-shortcut":["Understruken (Cmd+U)"],"tune.copy":["Kopiera block"],"tune.delete":["Ta bort"],"tune.move-down":["Flytta ner"],"tune.move-up":["Flytta upp"],"undo.label":["\xC5ngra"],"undo.tooltip":["\xC5ngra"],"variables.add":["L\xE4gg till variabel"],"variables.click-to-declare":["Klicka p\xE5 en token f\xF6r att deklarera den."],"variables.confirm-delete":["Variabeln refereras fortfarande i br\xF6dtexten. Ta bort \xE4nd\xE5?"],"variables.copy-token":["Kopiera {",["namn"],"}-token"],"variables.description":["Beskrivning"],"variables.focus-first":["Fokusera ett textf\xE4lt f\xF6rst"],"variables.insert-at-cursor":["Infoga vid mark\xF6ren"],"variables.intro":["Deklarerade variabler f\xF6ljer med mallen. H\xE4nvisa till dem i \xE4mnesrad och br\xF6dtext som {",["namn"],"}. I f\xF6rhandsgranskningen renderas tokens med exempelv\xE4rdena nedan."],"variables.none":["Inga variabler deklarerade. Klicka p\xE5 + f\xF6r att l\xE4gga till en."],"variables.open-template":["\xD6ppna en mall f\xF6r att hantera variabler."],"variables.optional":["Valfritt"],"variables.ref-many":["referenser"],"variables.ref-one":["referens"],"variables.remove":["Ta bort"],"variables.sample-hint":["Visas i f\xF6rhandsgranskning"],"variables.sample-value":["Exempelv\xE4rde"],"variables.title":["Variabler"],"variables.undeclared":["Odeklarerad i br\xF6dtexten"],"variables.unused":["Oanv\xE4nd i br\xF6dtexten"]}');
2024
+ var messages3 = JSON.parse('{"avatar.shape":["Form"],"block-add.avatar":["Avatar"],"block-add.button":["Knapp"],"block-add.columns":["Kolumner"],"block-add.company-signature":["F\xF6retagssignatur"],"block-add.container":["Beh\xE5llare"],"block-add.divider":["Avgr\xE4nsare"],"block-add.heading":["Rubrik"],"block-add.html":["HTML"],"block-add.image":["Bild"],"block-add.personal-signature":["Personlig signatur"],"block-add.spacer":["Mellanrum"],"block-add.text":["Text"],"button.color":["Knappf\xE4rg"],"button.style.pill":["Piller"],"button.style.rectangle":["Rektangel"],"button.style.rounded":["Rundad"],"button.width.auto":["Auto"],"button.width.full":["Full"],"canvas.desktop-view":["Skrivbordsvy"],"canvas.mobile-view":["Mobilvy"],"columns.count":["Antal kolumner"],"columns.gap":["Kolumnmellanrum"],"common.add":["L\xE4gg till"],"common.cancel":["Avbryt"],"common.save":["Spara"],"common.saving":["Sparar\u2026"],"default.button":["Knapp"],"default.company-address":["Storgatan 1, Stad, Sverige"],"default.heading":["Hej v\xE4n"],"default.html":["Hej v\xE4rlden"],"default.image-alt":["Exempelbild"],"default.personal-company":["Acme AB"],"default.personal-greeting":["V\xE4nliga h\xE4lsningar,"],"default.personal-name":["Anna Andersson"],"default.personal-title":["Programvaruutvecklare"],"default.text":["Nytt textblock"],"divider.color":["F\xE4rg"],"drawer.library":["Bibliotek"],"drawer.new-sample":["Ny mall"],"drawer.new-template":["Ny e-postmall"],"drawer.no-samples":["Inga exempel tillg\xE4ngliga"],"drawer.no-samples-match":["Inga exempel matchar dina filter"],"drawer.no-templates":["Inga sparade mallar \xE4nnu"],"drawer.no-templates-match":["Inga mallar matchar dina filter"],"drawer.search-samples":["S\xF6k exempel"],"drawer.search-templates":["S\xF6k mallar"],"drawer.sort-by":["Sortera efter"],"drawer.tab.outline":["Struktur"],"drawer.tab.samples":["Exempel"],"drawer.tab.templates":["Mallar"],"drawer.tag.all":["Alla"],"empty.description":["En tom e-postmall att utg\xE5 fr\xE5n"],"empty.slug":["Tomt e-postmeddelande"],"field.content":["Inneh\xE5ll"],"field.height":["H\xF6jd"],"field.level":["Niv\xE5"],"field.markdown":["Markdown"],"field.size":["Storlek"],"field.style":["Stil"],"field.text":["Text"],"field.url":["Adress"],"field.width":["Bredd"],"font-family.book_sans":["Bok sans"],"font-family.book_serif":["Bok serif"],"font-family.geometric_sans":["Geometrisk sans"],"font-family.heavy_sans":["Tjock sans"],"font-family.inherit":["F\xF6lj mejlets inst\xE4llningar"],"font-family.modern_sans":["Modern sans"],"font-family.modern_serif":["Modern serif"],"font-family.monospace":["Monospace"],"font-family.organic_sans":["Organisk sans"],"font-family.rounded_sans":["Rundad sans"],"font-weight.bold":["Fet"],"font-weight.regular":["Normal"],"global.backdrop-color":["Bakgrundsf\xE4rg"],"global.canvas-border-color":["Canvaskantf\xE4rg"],"global.canvas-border-radius":["Canvaskantradie"],"global.canvas-color":["Canvasf\xE4rg"],"global.disable-backdrop":["D\xF6lj bakgrund"],"image.alt-text":["Alternativ text"],"image.http-warning":["Icke-HTTPS-URL: Gmail och andra klienter tar bort blandat inneh\xE5ll. Anv\xE4nd https:// f\xF6r p\xE5litlig leverans."],"image.library":["Bibliotek"],"image.link-href":["Klickl\xE4nk"],"image.source-url":["K\xE4lladress"],"image.upload":["Ladda upp"],"image.uploading":["Laddar upp\u2026"],"inspect.hint":["Klicka p\xE5 ett block f\xF6r att inspektera."],"inspect.not-found":["Blocket hittades inte. Klicka p\xE5 ett block f\xF6r att \xE5terst\xE4lla."],"inspector.tab.inspect":["Inspektera"],"inspector.tab.settings":["Inst\xE4llningar"],"inspector.tab.styles":["Stilar"],"inspector.tab.variables":["Variabler"],"outline.canvas":["Canvas"],"outline.hint":["Klicka p\xE5 en rad f\xF6r att v\xE4lja. Dra en rad f\xF6r att \xE4ndra ordning eller flytta till en beh\xE5llare."],"outline.title":["Struktur"],"panel.avatar-block":["Avatarblock"],"panel.button-block":["Knappblock"],"panel.columns-block":["Kolumner"],"panel.container-block":["Beh\xE5llarblock"],"panel.details":["Detaljer"],"panel.divider-block":["Avgr\xE4nsare"],"panel.editor-appearance":["Editorns utseende"],"panel.export":["Exportera"],"panel.global":["Allm\xE4nt"],"panel.heading-block":["Rubrikblock"],"panel.html-block":["HTML-block"],"panel.image-block":["Bildblock"],"panel.signature-block":["Signaturblock"],"panel.spacer-block":["Mellanrumsblock"],"panel.template":["Mall"],"panel.text-block":["Textblock"],"picker.blank-desc":["Starta fr\xE5n ett tomt e-postmeddelande"],"picker.blank-title":["Tomt"],"picker.create-sample":["Skapa exempel"],"picker.create-template":["Skapa mall"],"picker.creating":["Skapar\u2026"],"picker.error-name-required":["Namn kr\xE4vs"],"picker.error-sample-taken":["Ett exempel med detta namn finns redan"],"picker.error-template-taken":["En mall med detta namn finns redan"],"picker.start-from":["Utg\xE5 fr\xE5n"],"picker.title-sample":["Nytt exempel"],"picker.title-template":["Ny mall"],"redo.label":["G\xF6r om"],"redo.tooltip":["G\xF6r om"],"rename.add-tag":["L\xE4gg till en etikett"],"rename.error-empty":["Ange ett namn"],"rename.error-generic":["Kunde inte uppdatera malldetaljer"],"rename.error-taken":["En mall med detta namn finns redan"],"rename.name-label":["Namn"],"rename.no-tags":["Inga etiketter \xE4nnu."],"rename.tag-placeholder":["L\xE4gg till en etikett och tryck Enter"],"rename.tags":["Etiketter"],"rename.title":["Redigera detaljer"],"row.actions":["Rad\xE5tg\xE4rder"],"row.demote":["Degradera till mall"],"row.duplicate":["Duplicera"],"row.duplicate-as-template":["Duplicera som mall"],"row.edit-details":["Redigera namn och etiketter\u2026"],"row.more":["Mer"],"row.promote":["Befordra till exempel"],"save-dialog.create":["Skapa"],"save-dialog.error-empty-name":["Ange ett mallnamn"],"save-dialog.name-label":["Mallnamn"],"save-dialog.save":["Spara"],"save-dialog.saving":["Sparar..."],"save-dialog.title":["Spara som en ny mall"],"save-dialog.title-new":["Skapa en ny mall"],"savebar.error-saving":["Fel vid sparande"],"savebar.new":["Ny"],"savebar.new-template-created":["Ny mall skapad"],"savebar.sample-prefix":["Exempel"],"savebar.sample-saved":["Exempel sparat"],"savebar.save":["Spara"],"savebar.save-as":["Spara som\u2026"],"savebar.save-as-new":["Spara som ny\u2026"],"savebar.save-as-new-template":["Spara som en ny mall"],"savebar.save-changes":["Spara \xE4ndringar"],"savebar.save-changes-to-sample":["Spara \xE4ndringar till detta exempel"],"savebar.start-fresh":["Starta en ny mall"],"savebar.template-saved":["Mall sparad"],"settings.checkerboard":["Rutm\xF6nster"],"settings.copied":["Mall kopierad!"],"settings.delete":["Ta bort mall"],"settings.delete-confirm":["\xC4r du s\xE4ker p\xE5 att du vill ta bort denna mall?"],"settings.editor-only-hint":["Syns bara i editorn \u2014 n\xE5r aldrig det renderade mejlet."],"settings.no-rename-cb":["Koppla renameTemplate-callback f\xF6r att kunna redigera h\xE4rifr\xE5n"],"settings.no-template":["Ingen mall vald"],"settings.save-as-sample":["Spara som exempelmall"],"settings.save-details":["Spara detaljer"],"settings.save-disabled":["Sparfunktionen \xE4r inaktiverad. Aktivera genom att ange n\xF6dv\xE4ndiga callback-funktioner."],"settings.saved":["Sparad"],"settings.solid":["Enf\xE4rgad"],"settings.workspace-background":["Arbetsytans bakgrund"],"signature.address":["Adress"],"signature.company":["F\xF6retag"],"signature.email":["E-post"],"signature.greeting":["H\xE4lsning"],"signature.image-shape":["Bildform"],"signature.image-size":["Bildstorlek"],"signature.image-url":["Bildadress"],"signature.layout":["Layout"],"signature.layout.horizontal":["Horisontell"],"signature.layout.vertical":["Vertikal"],"signature.link-color":["L\xE4nkf\xE4rg"],"signature.name":["Namn"],"signature.name-color":["Namnf\xE4rg"],"signature.phone":["Telefon"],"signature.shape.circle":["Cirkel"],"signature.shape.rounded":["Rundad"],"signature.shape.square":["Kvadrat"],"signature.title":["Titel"],"signature.website":["Webbplats"],"size.lg":["Lg"],"size.md":["Md"],"size.sm":["Sm"],"size.xs":["Xs"],"sort.last-updated":["Senast uppdaterad"],"sort.name":["Namn (A\u2013\xD6)"],"sort.recently-created":["Nyligen skapad"],"style.alignment":["Justering"],"style.background-color":["Bakgrundsf\xE4rg"],"style.border-color":["Kantf\xE4rg"],"style.border-radius":["Kantradie"],"style.font-family":["Typsnitt"],"style.font-size":["Typsnittsstorlek"],"style.font-weight":["Typsnittsvikt"],"style.letter-spacing":["Teckenavst\xE5nd"],"style.line-height":["Radh\xF6jd"],"style.padding":["Utrymme"],"style.text-color":["Textf\xE4rg"],"subject.label":["\xC4mne"],"subject.placeholder":["E-postens \xE4mne \u2014 st\xF6der {",["variabler"],"}"],"tab.edit":["Redigera"],"tab.html-output":["HTML-utdata"],"tab.json-output":["JSON-utdata"],"tab.preview":["F\xF6rhandsgranska"],"tab.text-output":["Textutdata"],"tag.marketing":["marknadsf\xF6ring"],"tag.transactional":["transaktionella"],"time.days-short":[" d sedan"],"time.hours-short":[" tim sedan"],"time.just-now":["just nu"],"time.minutes-short":[" min sedan"],"time.months-short":[" m\xE5n sedan"],"time.years-short":[" \xE5r sedan"],"toolbar.apply":["Anv\xE4nd"],"toolbar.bold":["Fet"],"toolbar.bold-shortcut":["Fet (Cmd+B)"],"toolbar.font-family":["Typsnitt"],"toolbar.italic":["Kursiv"],"toolbar.italic-shortcut":["Kursiv (Cmd+I)"],"toolbar.link":["L\xE4nk"],"toolbar.link-shortcut":["L\xE4nk (Cmd+K)"],"toolbar.overline":["\xD6verstruken"],"toolbar.text-color":["Textf\xE4rg"],"toolbar.underline":["Understruken"],"toolbar.underline-shortcut":["Understruken (Cmd+U)"],"tune.copy":["Kopiera block"],"tune.delete":["Ta bort"],"tune.move-down":["Flytta ner"],"tune.move-up":["Flytta upp"],"undo.label":["\xC5ngra"],"undo.tooltip":["\xC5ngra"],"variables.add":["L\xE4gg till variabel"],"variables.click-to-declare":["Klicka p\xE5 en token f\xF6r att deklarera den."],"variables.confirm-delete":["Variabeln refereras fortfarande i br\xF6dtexten. Ta bort \xE4nd\xE5?"],"variables.copy-token":["Kopiera {",["namn"],"}-token"],"variables.description":["Beskrivning"],"variables.focus-first":["Fokusera ett textf\xE4lt f\xF6rst"],"variables.insert-at-cursor":["Infoga vid mark\xF6ren"],"variables.intro":["Deklarerade variabler f\xF6ljer med mallen. H\xE4nvisa till dem i \xE4mnesrad och br\xF6dtext som {",["namn"],"}. I f\xF6rhandsgranskningen renderas tokens med exempelv\xE4rdena nedan."],"variables.none":["Inga variabler deklarerade. Klicka p\xE5 + f\xF6r att l\xE4gga till en."],"variables.open-template":["\xD6ppna en mall f\xF6r att hantera variabler."],"variables.optional":["Valfritt"],"variables.ref-many":["referenser"],"variables.ref-one":["referens"],"variables.remove":["Ta bort"],"variables.sample-hint":["Visas i f\xF6rhandsgranskning"],"variables.sample-value":["Exempelv\xE4rde"],"variables.title":["Variabler"],"variables.undeclared":["Odeklarerad i br\xF6dtexten"],"variables.unused":["Oanv\xE4nd i br\xF6dtexten"]}');
2015
2025
  var SUPPORTED_LOCALES = ["en", "sv", "fi"];
2016
2026
  var CATALOGS = {
2017
2027
  en: messages,
@@ -2298,7 +2308,7 @@ var EmailEditorProvider = ({
2298
2308
  setCurrentTemplateTags
2299
2309
  ]
2300
2310
  );
2301
- return /* @__PURE__ */ React62.createElement(EmailEditorContext.Provider, { value }, children);
2311
+ return /* @__PURE__ */ React63.createElement(EmailEditorContext.Provider, { value }, children);
2302
2312
  };
2303
2313
  var useEmailEditor = () => {
2304
2314
  const context = useContext(EmailEditorContext);
@@ -2307,12 +2317,22 @@ var useEmailEditor = () => {
2307
2317
  }
2308
2318
  return context;
2309
2319
  };
2320
+ var EditorConfigContext = createContext({});
2321
+ function EditorConfigProvider({
2322
+ config,
2323
+ children
2324
+ }) {
2325
+ return /* @__PURE__ */ React63.createElement(EditorConfigContext.Provider, { value: config }, children);
2326
+ }
2327
+ function useEditorConfig() {
2328
+ return useContext(EditorConfigContext);
2329
+ }
2310
2330
  var ImageCallbacksContext = createContext({});
2311
2331
  function ImageCallbacksProvider({
2312
2332
  callbacks,
2313
2333
  children
2314
2334
  }) {
2315
- return /* @__PURE__ */ React62.createElement(ImageCallbacksContext.Provider, { value: callbacks }, children);
2335
+ return /* @__PURE__ */ React63.createElement(ImageCallbacksContext.Provider, { value: callbacks }, children);
2316
2336
  }
2317
2337
  function useImageCallbacks() {
2318
2338
  return useContext(ImageCallbacksContext);
@@ -2338,14 +2358,14 @@ var TITLE_KEYS = {
2338
2358
  function BaseSidebarPanel({ title, children }) {
2339
2359
  const key = TITLE_KEYS[title];
2340
2360
  const displayTitle = key ? t(key, title) : title;
2341
- return /* @__PURE__ */ React62.createElement(Box, { p: 2 }, /* @__PURE__ */ React62.createElement(Typography, { variant: "overline", color: "text.secondary", sx: { display: "block", mb: 2 } }, displayTitle), /* @__PURE__ */ React62.createElement(Stack, { spacing: 5, mb: 3 }, children));
2361
+ return /* @__PURE__ */ React63.createElement(Box, { p: 2 }, /* @__PURE__ */ React63.createElement(Typography, { variant: "overline", color: "text.secondary", sx: { display: "block", mb: 2 } }, displayTitle), /* @__PURE__ */ React63.createElement(Stack, { spacing: 5, mb: 3 }, children));
2342
2362
  }
2343
2363
  function RadioGroupInput({ label, children, defaultValue, onChange }) {
2344
2364
  const [value, setValue] = useState(defaultValue);
2345
2365
  useEffect(() => {
2346
2366
  setValue(defaultValue);
2347
2367
  }, [defaultValue]);
2348
- return /* @__PURE__ */ React62.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2368
+ return /* @__PURE__ */ React63.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2349
2369
  ToggleButtonGroup,
2350
2370
  {
2351
2371
  exclusive: true,
@@ -2365,7 +2385,7 @@ function RadioGroupInput({ label, children, defaultValue, onChange }) {
2365
2385
  }
2366
2386
  function RawSliderInput(_a) {
2367
2387
  var _b = _a, { iconLabel, value, setValue, units } = _b, props = __objRest(_b, ["iconLabel", "value", "setValue", "units"]);
2368
- return /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", spacing: 2, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React62.createElement(Box, { sx: { minWidth: 24, lineHeight: 1, flexShrink: 0 } }, iconLabel), /* @__PURE__ */ React62.createElement(
2388
+ return /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", spacing: 2, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React63.createElement(Box, { sx: { minWidth: 24, lineHeight: 1, flexShrink: 0 } }, iconLabel), /* @__PURE__ */ React63.createElement(
2369
2389
  Slider,
2370
2390
  __spreadProps(__spreadValues({}, props), {
2371
2391
  value,
@@ -2376,14 +2396,14 @@ function RawSliderInput(_a) {
2376
2396
  setValue(value2);
2377
2397
  }
2378
2398
  })
2379
- ), /* @__PURE__ */ React62.createElement(Box, { sx: { minWidth: 32, textAlign: "right", flexShrink: 0 } }, /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", color: "text.secondary", sx: { lineHeight: 1 } }, value, units)));
2399
+ ), /* @__PURE__ */ React63.createElement(Box, { sx: { minWidth: 32, textAlign: "right", flexShrink: 0 } }, /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", color: "text.secondary", sx: { lineHeight: 1 } }, value, units)));
2380
2400
  }
2381
2401
 
2382
2402
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/slider-input.tsx
2383
2403
  function SliderInput(_a) {
2384
2404
  var _b = _a, { label, defaultValue, onChange } = _b, props = __objRest(_b, ["label", "defaultValue", "onChange"]);
2385
2405
  const [value, setValue] = useState(defaultValue);
2386
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2406
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2387
2407
  RawSliderInput,
2388
2408
  __spreadValues({
2389
2409
  value,
@@ -2400,7 +2420,7 @@ function TextInput({ helperText, label, placeholder, rows, InputProps: InputProp
2400
2420
  useEffect(() => {
2401
2421
  setValue(defaultValue);
2402
2422
  }, [defaultValue]);
2403
- return /* @__PURE__ */ React62.createElement(
2423
+ return /* @__PURE__ */ React63.createElement(
2404
2424
  TextField,
2405
2425
  {
2406
2426
  fullWidth: true,
@@ -2426,7 +2446,7 @@ var TILE_BUTTON = {
2426
2446
  };
2427
2447
  function Swatch({ paletteColors, value, onChange }) {
2428
2448
  const renderButton2 = (colorValue) => {
2429
- return /* @__PURE__ */ React62.createElement(
2449
+ return /* @__PURE__ */ React63.createElement(
2430
2450
  Button$1,
2431
2451
  {
2432
2452
  key: colorValue,
@@ -2445,7 +2465,7 @@ function Swatch({ paletteColors, value, onChange }) {
2445
2465
  }
2446
2466
  );
2447
2467
  };
2448
- return /* @__PURE__ */ React62.createElement(Box, { width: "100%", sx: { display: "grid", gap: 1, gridTemplateColumns: "1fr 1fr 1fr 1fr 1fr 1fr" } }, paletteColors.map((c) => renderButton2(c)));
2468
+ return /* @__PURE__ */ React63.createElement(Box, { width: "100%", sx: { display: "grid", gap: 1, gridTemplateColumns: "1fr 1fr 1fr 1fr 1fr 1fr" } }, paletteColors.map((c) => renderButton2(c)));
2449
2469
  }
2450
2470
 
2451
2471
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/picker.tsx
@@ -2512,7 +2532,9 @@ var SX = {
2512
2532
  }
2513
2533
  };
2514
2534
  function Picker({ value, onChange }) {
2515
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1, sx: SX }, /* @__PURE__ */ React62.createElement(HexColorPicker, { color: value, onChange }), /* @__PURE__ */ React62.createElement(Swatch, { paletteColors: DEFAULT_PRESET_COLORS, value, onChange }), /* @__PURE__ */ React62.createElement(Box, { pt: 1 }, /* @__PURE__ */ React62.createElement(HexColorInput, { prefixed: true, color: value, onChange })));
2535
+ const { favoriteColors } = useEditorConfig();
2536
+ const hasFavorites = favoriteColors && favoriteColors.length > 0;
2537
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1, sx: SX }, /* @__PURE__ */ React63.createElement(HexColorPicker, { color: value, onChange }), hasFavorites && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(Swatch, { paletteColors: favoriteColors, value, onChange }), /* @__PURE__ */ React63.createElement(Divider$1, null)), /* @__PURE__ */ React63.createElement(Swatch, { paletteColors: DEFAULT_PRESET_COLORS, value, onChange }), /* @__PURE__ */ React63.createElement(Box, { pt: 1 }, /* @__PURE__ */ React63.createElement(HexColorInput, { prefixed: true, color: value, onChange })));
2516
2538
  }
2517
2539
 
2518
2540
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/base-color-input.tsx
@@ -2537,7 +2559,7 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
2537
2559
  if (typeof value !== "string" || value.trim().length === 0) {
2538
2560
  return null;
2539
2561
  }
2540
- return /* @__PURE__ */ React62.createElement(
2562
+ return /* @__PURE__ */ React63.createElement(
2541
2563
  ButtonBase,
2542
2564
  {
2543
2565
  onClick: () => {
@@ -2545,16 +2567,16 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
2545
2567
  onChange(null);
2546
2568
  }
2547
2569
  },
2548
- /* @__PURE__ */ React62.createElement(CloseOutlined, { fontSize: "small", sx: { color: "grey.600" } })
2570
+ /* @__PURE__ */ React63.createElement(CloseOutlined, { fontSize: "small", sx: { color: "grey.600" } })
2549
2571
  );
2550
2572
  };
2551
2573
  const renderOpenButton = () => {
2552
2574
  if (value) {
2553
- return /* @__PURE__ */ React62.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadProps(__spreadValues({}, BUTTON_SX), { bgcolor: value }) });
2575
+ return /* @__PURE__ */ React63.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadProps(__spreadValues({}, BUTTON_SX), { bgcolor: value }) });
2554
2576
  }
2555
- return /* @__PURE__ */ React62.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadValues({}, BUTTON_SX) }, /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" }));
2577
+ return /* @__PURE__ */ React63.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadValues({}, BUTTON_SX) }, /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" }));
2556
2578
  };
2557
- return /* @__PURE__ */ React62.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { sx: { mb: 0.5 } }, label), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 1 }, renderOpenButton(), renderResetButton()), /* @__PURE__ */ React62.createElement(
2579
+ return /* @__PURE__ */ React63.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { sx: { mb: 0.5 } }, label), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 1 }, renderOpenButton(), renderResetButton()), /* @__PURE__ */ React63.createElement(
2558
2580
  Menu,
2559
2581
  {
2560
2582
  anchorEl,
@@ -2564,7 +2586,7 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
2564
2586
  sx: { height: "auto", padding: 0 }
2565
2587
  }
2566
2588
  },
2567
- /* @__PURE__ */ React62.createElement(
2589
+ /* @__PURE__ */ React63.createElement(
2568
2590
  Picker,
2569
2591
  {
2570
2592
  value: value || "",
@@ -2579,10 +2601,10 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
2579
2601
 
2580
2602
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/index.tsx
2581
2603
  function ColorInput2(props) {
2582
- return /* @__PURE__ */ React62.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: false }));
2604
+ return /* @__PURE__ */ React63.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: false }));
2583
2605
  }
2584
2606
  function NullableColorInput(props) {
2585
- return /* @__PURE__ */ React62.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: true }));
2607
+ return /* @__PURE__ */ React63.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: true }));
2586
2608
  }
2587
2609
 
2588
2610
  // src/editor/blocks/helpers/font-family.ts
@@ -2635,13 +2657,12 @@ var FONT_FAMILIES = [
2635
2657
  ];
2636
2658
 
2637
2659
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-family.tsx
2638
- var OPTIONS = FONT_FAMILIES.map((option) => /* @__PURE__ */ React62.createElement(MenuItem, { key: option.key, value: option.key, sx: { fontFamily: option.value } }, option.label));
2639
2660
  function NullableFontFamily({ label, onChange, defaultValue }) {
2640
2661
  const [value, setValue] = useState(defaultValue != null ? defaultValue : "inherit");
2641
2662
  useEffect(() => {
2642
2663
  setValue(defaultValue != null ? defaultValue : "inherit");
2643
2664
  }, [defaultValue]);
2644
- return /* @__PURE__ */ React62.createElement(
2665
+ return /* @__PURE__ */ React63.createElement(
2645
2666
  TextField,
2646
2667
  {
2647
2668
  select: true,
@@ -2654,8 +2675,8 @@ function NullableFontFamily({ label, onChange, defaultValue }) {
2654
2675
  onChange(v === null ? null : v);
2655
2676
  }
2656
2677
  },
2657
- /* @__PURE__ */ React62.createElement(MenuItem, { value: "inherit" }, t("font-family.inherit", "Match email settings")),
2658
- OPTIONS
2678
+ /* @__PURE__ */ React63.createElement(MenuItem, { value: "inherit" }, t("font-family.inherit", "Match email settings")),
2679
+ FONT_FAMILIES.map((option) => /* @__PURE__ */ React63.createElement(MenuItem, { key: option.key, value: option.key, sx: { fontFamily: option.value } }, t(`font-family.${option.key.toLowerCase()}`, option.label)))
2659
2680
  );
2660
2681
  }
2661
2682
  function FontSizeInput({ label, defaultValue, onChange }) {
@@ -2667,10 +2688,10 @@ function FontSizeInput({ label, defaultValue, onChange }) {
2667
2688
  setValue(value2);
2668
2689
  onChange(value2);
2669
2690
  };
2670
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2691
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2671
2692
  RawSliderInput,
2672
2693
  {
2673
- iconLabel: /* @__PURE__ */ React62.createElement(TextFieldsOutlined, { sx: { fontSize: 16 } }),
2694
+ iconLabel: /* @__PURE__ */ React63.createElement(TextFieldsOutlined, { sx: { fontSize: 16 } }),
2674
2695
  value,
2675
2696
  setValue: handleChange,
2676
2697
  units: "px",
@@ -2685,7 +2706,7 @@ function FontWeightInput({ label, defaultValue, onChange }) {
2685
2706
  useEffect(() => {
2686
2707
  setValue(defaultValue);
2687
2708
  }, [defaultValue]);
2688
- return /* @__PURE__ */ React62.createElement(
2709
+ return /* @__PURE__ */ React63.createElement(
2689
2710
  RadioGroupInput,
2690
2711
  {
2691
2712
  label,
@@ -2695,8 +2716,8 @@ function FontWeightInput({ label, defaultValue, onChange }) {
2695
2716
  onChange(fontWeight);
2696
2717
  }
2697
2718
  },
2698
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "normal" }, t("font-weight.regular", "Regular")),
2699
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "bold" }, t("font-weight.bold", "Bold"))
2719
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "normal" }, t("font-weight.regular", "Regular")),
2720
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "bold" }, t("font-weight.bold", "Bold"))
2700
2721
  );
2701
2722
  }
2702
2723
  function LetterSpacingInput({ label, defaultValue, onChange }) {
@@ -2708,10 +2729,10 @@ function LetterSpacingInput({ label, defaultValue, onChange }) {
2708
2729
  setValue(v);
2709
2730
  onChange(v === 0 ? null : v);
2710
2731
  };
2711
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2732
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2712
2733
  RawSliderInput,
2713
2734
  {
2714
- iconLabel: /* @__PURE__ */ React62.createElement(SpaceBarOutlined, { sx: { fontSize: 16 } }),
2735
+ iconLabel: /* @__PURE__ */ React63.createElement(SpaceBarOutlined, { sx: { fontSize: 16 } }),
2715
2736
  value,
2716
2737
  setValue: handleChange,
2717
2738
  units: "px",
@@ -2730,10 +2751,10 @@ function LineHeightInput({ label, defaultValue, onChange }) {
2730
2751
  setValue(v);
2731
2752
  onChange(v === 0 ? null : v);
2732
2753
  };
2733
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2754
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2734
2755
  RawSliderInput,
2735
2756
  {
2736
- iconLabel: /* @__PURE__ */ React62.createElement(FormatLineSpacingOutlined, { sx: { fontSize: 16 } }),
2757
+ iconLabel: /* @__PURE__ */ React63.createElement(FormatLineSpacingOutlined, { sx: { fontSize: 16 } }),
2737
2758
  value,
2738
2759
  setValue: handleChange,
2739
2760
  units: "",
@@ -2762,10 +2783,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
2762
2783
  setValue(v);
2763
2784
  onChange(v);
2764
2785
  }
2765
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 2, alignItems: "flex-start", pb: 1 }, /* @__PURE__ */ React62.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React62.createElement(
2786
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 2, alignItems: "flex-start", pb: 1 }, /* @__PURE__ */ React63.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React63.createElement(
2766
2787
  RawSliderInput,
2767
2788
  {
2768
- iconLabel: /* @__PURE__ */ React62.createElement(AlignVerticalTopOutlined, { sx: { fontSize: 16 } }),
2789
+ iconLabel: /* @__PURE__ */ React63.createElement(AlignVerticalTopOutlined, { sx: { fontSize: 16 } }),
2769
2790
  value: value.top,
2770
2791
  setValue: (num) => handleChange("top", num),
2771
2792
  units: "px",
@@ -2774,10 +2795,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
2774
2795
  max: 80,
2775
2796
  marks: true
2776
2797
  }
2777
- ), /* @__PURE__ */ React62.createElement(
2798
+ ), /* @__PURE__ */ React63.createElement(
2778
2799
  RawSliderInput,
2779
2800
  {
2780
- iconLabel: /* @__PURE__ */ React62.createElement(AlignVerticalBottomOutlined, { sx: { fontSize: 16 } }),
2801
+ iconLabel: /* @__PURE__ */ React63.createElement(AlignVerticalBottomOutlined, { sx: { fontSize: 16 } }),
2781
2802
  value: value.bottom,
2782
2803
  setValue: (num) => handleChange("bottom", num),
2783
2804
  units: "px",
@@ -2786,10 +2807,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
2786
2807
  max: 80,
2787
2808
  marks: true
2788
2809
  }
2789
- ), /* @__PURE__ */ React62.createElement(
2810
+ ), /* @__PURE__ */ React63.createElement(
2790
2811
  RawSliderInput,
2791
2812
  {
2792
- iconLabel: /* @__PURE__ */ React62.createElement(AlignHorizontalLeftOutlined, { sx: { fontSize: 16 } }),
2813
+ iconLabel: /* @__PURE__ */ React63.createElement(AlignHorizontalLeftOutlined, { sx: { fontSize: 16 } }),
2793
2814
  value: value.left,
2794
2815
  setValue: (num) => handleChange("left", num),
2795
2816
  units: "px",
@@ -2798,10 +2819,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
2798
2819
  max: 80,
2799
2820
  marks: true
2800
2821
  }
2801
- ), /* @__PURE__ */ React62.createElement(
2822
+ ), /* @__PURE__ */ React63.createElement(
2802
2823
  RawSliderInput,
2803
2824
  {
2804
- iconLabel: /* @__PURE__ */ React62.createElement(AlignHorizontalRightOutlined, { sx: { fontSize: 16 } }),
2825
+ iconLabel: /* @__PURE__ */ React63.createElement(AlignHorizontalRightOutlined, { sx: { fontSize: 16 } }),
2805
2826
  value: value.right,
2806
2827
  setValue: (num) => handleChange("right", num),
2807
2828
  units: "px",
@@ -2817,7 +2838,7 @@ function TextAlignInput({ label, defaultValue, onChange }) {
2817
2838
  useEffect(() => {
2818
2839
  setValue(defaultValue != null ? defaultValue : "left");
2819
2840
  }, [defaultValue]);
2820
- return /* @__PURE__ */ React62.createElement(
2841
+ return /* @__PURE__ */ React63.createElement(
2821
2842
  RadioGroupInput,
2822
2843
  {
2823
2844
  label,
@@ -2827,9 +2848,9 @@ function TextAlignInput({ label, defaultValue, onChange }) {
2827
2848
  onChange(value2);
2828
2849
  }
2829
2850
  },
2830
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "left" }, /* @__PURE__ */ React62.createElement(FormatAlignLeftOutlined, { fontSize: "small" })),
2831
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "center" }, /* @__PURE__ */ React62.createElement(FormatAlignCenterOutlined, { fontSize: "small" })),
2832
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "right" }, /* @__PURE__ */ React62.createElement(FormatAlignRightOutlined, { fontSize: "small" }))
2851
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "left" }, /* @__PURE__ */ React63.createElement(FormatAlignLeftOutlined, { fontSize: "small" })),
2852
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "center" }, /* @__PURE__ */ React63.createElement(FormatAlignCenterOutlined, { fontSize: "small" })),
2853
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "right" }, /* @__PURE__ */ React63.createElement(FormatAlignRightOutlined, { fontSize: "small" }))
2833
2854
  );
2834
2855
  }
2835
2856
 
@@ -2842,14 +2863,14 @@ function SingleStylePropertyPanel({ name, value, onChange }) {
2842
2863
  };
2843
2864
  switch (name) {
2844
2865
  case "backgroundColor":
2845
- return /* @__PURE__ */ React62.createElement(NullableColorInput, { label: t("style.background-color", "Background color"), defaultValue, onChange: handleChange });
2866
+ return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.background-color", "Background color"), defaultValue, onChange: handleChange });
2846
2867
  case "borderColor":
2847
- return /* @__PURE__ */ React62.createElement(NullableColorInput, { label: t("style.border-color", "Border color"), defaultValue, onChange: handleChange });
2868
+ return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.border-color", "Border color"), defaultValue, onChange: handleChange });
2848
2869
  case "borderRadius":
2849
- return /* @__PURE__ */ React62.createElement(
2870
+ return /* @__PURE__ */ React63.createElement(
2850
2871
  SliderInput,
2851
2872
  {
2852
- iconLabel: /* @__PURE__ */ React62.createElement(RoundedCornerOutlined, null),
2873
+ iconLabel: /* @__PURE__ */ React63.createElement(RoundedCornerOutlined, null),
2853
2874
  units: "px",
2854
2875
  step: 4,
2855
2876
  marks: true,
@@ -2861,27 +2882,27 @@ function SingleStylePropertyPanel({ name, value, onChange }) {
2861
2882
  }
2862
2883
  );
2863
2884
  case "color":
2864
- return /* @__PURE__ */ React62.createElement(NullableColorInput, { label: t("style.text-color", "Text color"), defaultValue, onChange: handleChange });
2885
+ return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.text-color", "Text color"), defaultValue, onChange: handleChange });
2865
2886
  case "fontFamily":
2866
- return /* @__PURE__ */ React62.createElement(NullableFontFamily, { label: t("style.font-family", "Font family"), defaultValue, onChange: handleChange });
2887
+ return /* @__PURE__ */ React63.createElement(NullableFontFamily, { label: t("style.font-family", "Font family"), defaultValue, onChange: handleChange });
2867
2888
  case "fontSize":
2868
- return /* @__PURE__ */ React62.createElement(FontSizeInput, { label: t("style.font-size", "Font size"), defaultValue, onChange: handleChange });
2889
+ return /* @__PURE__ */ React63.createElement(FontSizeInput, { label: t("style.font-size", "Font size"), defaultValue, onChange: handleChange });
2869
2890
  case "fontWeight":
2870
- return /* @__PURE__ */ React62.createElement(FontWeightInput, { label: t("style.font-weight", "Font weight"), defaultValue, onChange: handleChange });
2891
+ return /* @__PURE__ */ React63.createElement(FontWeightInput, { label: t("style.font-weight", "Font weight"), defaultValue, onChange: handleChange });
2871
2892
  case "lineHeight":
2872
- return /* @__PURE__ */ React62.createElement(LineHeightInput, { label: t("style.line-height", "Line height"), defaultValue, onChange: handleChange });
2893
+ return /* @__PURE__ */ React63.createElement(LineHeightInput, { label: t("style.line-height", "Line height"), defaultValue, onChange: handleChange });
2873
2894
  case "letterSpacing":
2874
- return /* @__PURE__ */ React62.createElement(LetterSpacingInput, { label: t("style.letter-spacing", "Letter spacing"), defaultValue, onChange: handleChange });
2895
+ return /* @__PURE__ */ React63.createElement(LetterSpacingInput, { label: t("style.letter-spacing", "Letter spacing"), defaultValue, onChange: handleChange });
2875
2896
  case "textAlign":
2876
- return /* @__PURE__ */ React62.createElement(TextAlignInput, { label: t("style.alignment", "Alignment"), defaultValue, onChange: handleChange });
2897
+ return /* @__PURE__ */ React63.createElement(TextAlignInput, { label: t("style.alignment", "Alignment"), defaultValue, onChange: handleChange });
2877
2898
  case "padding":
2878
- return /* @__PURE__ */ React62.createElement(PaddingInput, { label: t("style.padding", "Padding"), defaultValue, onChange: handleChange });
2899
+ return /* @__PURE__ */ React63.createElement(PaddingInput, { label: t("style.padding", "Padding"), defaultValue, onChange: handleChange });
2879
2900
  }
2880
2901
  }
2881
2902
 
2882
2903
  // src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/multi-style-property-panel.tsx
2883
2904
  function MultiStylePropertyPanel({ names, value, onChange }) {
2884
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, names.map((name) => /* @__PURE__ */ React62.createElement(SingleStylePropertyPanel, { key: name, name, value: value || {}, onChange })));
2905
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, names.map((name) => /* @__PURE__ */ React63.createElement(SingleStylePropertyPanel, { key: name, name, value: value || {}, onChange })));
2885
2906
  }
2886
2907
 
2887
2908
  // src/app/inspector-drawer/configuration-panel/input-panels/avatar-sidebar-panel.tsx
@@ -2901,11 +2922,11 @@ function AvatarSidebarPanel({ data, setData }) {
2901
2922
  const imageUrl = (_d = (_c = data.props) == null ? void 0 : _c.imageUrl) != null ? _d : AvatarPropsDefaults.imageUrl;
2902
2923
  const alt = (_f = (_e = data.props) == null ? void 0 : _e.alt) != null ? _f : AvatarPropsDefaults.alt;
2903
2924
  const shape = (_h = (_g = data.props) == null ? void 0 : _g.shape) != null ? _h : AvatarPropsDefaults.shape;
2904
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Avatar block" }, /* @__PURE__ */ React62.createElement(
2925
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Avatar block" }, /* @__PURE__ */ React63.createElement(
2905
2926
  SliderInput,
2906
2927
  {
2907
2928
  label: t("field.size", "Size"),
2908
- iconLabel: /* @__PURE__ */ React62.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
2929
+ iconLabel: /* @__PURE__ */ React63.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
2909
2930
  units: "px",
2910
2931
  step: 3,
2911
2932
  min: 32,
@@ -2915,7 +2936,7 @@ function AvatarSidebarPanel({ data, setData }) {
2915
2936
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { size: size2 }) }));
2916
2937
  }
2917
2938
  }
2918
- ), /* @__PURE__ */ React62.createElement(
2939
+ ), /* @__PURE__ */ React63.createElement(
2919
2940
  RadioGroupInput,
2920
2941
  {
2921
2942
  label: t("avatar.shape", "Shape"),
@@ -2924,10 +2945,10 @@ function AvatarSidebarPanel({ data, setData }) {
2924
2945
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { shape: shape2 }) }));
2925
2946
  }
2926
2947
  },
2927
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
2928
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
2929
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
2930
- ), /* @__PURE__ */ React62.createElement(
2948
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
2949
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
2950
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
2951
+ ), /* @__PURE__ */ React63.createElement(
2931
2952
  TextInput,
2932
2953
  {
2933
2954
  label: t("signature.image-url", "Image URL"),
@@ -2936,7 +2957,7 @@ function AvatarSidebarPanel({ data, setData }) {
2936
2957
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }));
2937
2958
  }
2938
2959
  }
2939
- ), /* @__PURE__ */ React62.createElement(
2960
+ ), /* @__PURE__ */ React63.createElement(
2940
2961
  TextInput,
2941
2962
  {
2942
2963
  label: t("image.alt-text", "Alt text"),
@@ -2945,7 +2966,7 @@ function AvatarSidebarPanel({ data, setData }) {
2945
2966
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt: alt2 }) }));
2946
2967
  }
2947
2968
  }
2948
- ), /* @__PURE__ */ React62.createElement(
2969
+ ), /* @__PURE__ */ React63.createElement(
2949
2970
  MultiStylePropertyPanel,
2950
2971
  {
2951
2972
  names: ["textAlign", "padding"],
@@ -2973,65 +2994,65 @@ function ButtonSidebarPanel({ data, setData }) {
2973
2994
  const buttonStyle = (_j = (_i = data.props) == null ? void 0 : _i.buttonStyle) != null ? _j : ButtonPropsDefaults.buttonStyle;
2974
2995
  const buttonTextColor = (_l = (_k = data.props) == null ? void 0 : _k.buttonTextColor) != null ? _l : ButtonPropsDefaults.buttonTextColor;
2975
2996
  const buttonBackgroundColor = (_n = (_m = data.props) == null ? void 0 : _m.buttonBackgroundColor) != null ? _n : ButtonPropsDefaults.buttonBackgroundColor;
2976
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Button block" }, /* @__PURE__ */ React62.createElement(
2997
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Button block" }, /* @__PURE__ */ React63.createElement(
2977
2998
  TextInput,
2978
2999
  {
2979
3000
  label: t("field.text", "Text"),
2980
3001
  defaultValue: text,
2981
3002
  onChange: (text2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text: text2 }) }))
2982
3003
  }
2983
- ), /* @__PURE__ */ React62.createElement(
3004
+ ), /* @__PURE__ */ React63.createElement(
2984
3005
  TextInput,
2985
3006
  {
2986
3007
  label: t("field.url", "Url"),
2987
3008
  defaultValue: url,
2988
3009
  onChange: (url2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: url2 }) }))
2989
3010
  }
2990
- ), /* @__PURE__ */ React62.createElement(
3011
+ ), /* @__PURE__ */ React63.createElement(
2991
3012
  RadioGroupInput,
2992
3013
  {
2993
3014
  label: t("field.width", "Width"),
2994
3015
  defaultValue: fullWidth ? "FULL_WIDTH" : "AUTO",
2995
3016
  onChange: (v) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { fullWidth: v === "FULL_WIDTH" }) }))
2996
3017
  },
2997
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "FULL_WIDTH" }, t("button.width.full", "Full")),
2998
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "AUTO" }, t("button.width.auto", "Auto"))
2999
- ), /* @__PURE__ */ React62.createElement(
3018
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "FULL_WIDTH" }, t("button.width.full", "Full")),
3019
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "AUTO" }, t("button.width.auto", "Auto"))
3020
+ ), /* @__PURE__ */ React63.createElement(
3000
3021
  RadioGroupInput,
3001
3022
  {
3002
3023
  label: t("field.size", "Size"),
3003
3024
  defaultValue: size,
3004
3025
  onChange: (size2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { size: size2 }) }))
3005
3026
  },
3006
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "x-small" }, t("size.xs", "Xs")),
3007
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "small" }, t("size.sm", "Sm")),
3008
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "medium" }, t("size.md", "Md")),
3009
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "large" }, t("size.lg", "Lg"))
3010
- ), /* @__PURE__ */ React62.createElement(
3027
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "x-small" }, t("size.xs", "Xs")),
3028
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "small" }, t("size.sm", "Sm")),
3029
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "medium" }, t("size.md", "Md")),
3030
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "large" }, t("size.lg", "Lg"))
3031
+ ), /* @__PURE__ */ React63.createElement(
3011
3032
  RadioGroupInput,
3012
3033
  {
3013
3034
  label: t("field.style", "Style"),
3014
3035
  defaultValue: buttonStyle,
3015
3036
  onChange: (buttonStyle2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonStyle: buttonStyle2 }) }))
3016
3037
  },
3017
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "rectangle" }, t("button.style.rectangle", "Rectangle")),
3018
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "rounded" }, t("button.style.rounded", "Rounded")),
3019
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "pill" }, t("button.style.pill", "Pill"))
3020
- ), /* @__PURE__ */ React62.createElement(
3038
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "rectangle" }, t("button.style.rectangle", "Rectangle")),
3039
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "rounded" }, t("button.style.rounded", "Rounded")),
3040
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "pill" }, t("button.style.pill", "Pill"))
3041
+ ), /* @__PURE__ */ React63.createElement(
3021
3042
  ColorInput2,
3022
3043
  {
3023
3044
  label: t("style.text-color", "Text color"),
3024
3045
  defaultValue: buttonTextColor,
3025
3046
  onChange: (buttonTextColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonTextColor: buttonTextColor2 }) }))
3026
3047
  }
3027
- ), /* @__PURE__ */ React62.createElement(
3048
+ ), /* @__PURE__ */ React63.createElement(
3028
3049
  ColorInput2,
3029
3050
  {
3030
3051
  label: t("button.color", "Button color"),
3031
3052
  defaultValue: buttonBackgroundColor,
3032
3053
  onChange: (buttonBackgroundColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonBackgroundColor: buttonBackgroundColor2 }) }))
3033
3054
  }
3034
- ), /* @__PURE__ */ React62.createElement(
3055
+ ), /* @__PURE__ */ React63.createElement(
3035
3056
  MultiStylePropertyPanel,
3036
3057
  {
3037
3058
  names: [
@@ -3066,7 +3087,7 @@ function TextDimensionInput({ label, defaultValue, onChange }) {
3066
3087
  const value = parseInt(ev.target.value);
3067
3088
  onChange(isNaN(value) ? null : value);
3068
3089
  };
3069
- return /* @__PURE__ */ React62.createElement(
3090
+ return /* @__PURE__ */ React63.createElement(
3070
3091
  TextField,
3071
3092
  {
3072
3093
  fullWidth: true,
@@ -3077,7 +3098,7 @@ function TextDimensionInput({ label, defaultValue, onChange }) {
3077
3098
  placeholder: "auto",
3078
3099
  size: "small",
3079
3100
  InputProps: {
3080
- endAdornment: /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", color: "text.secondary" }, "px")
3101
+ endAdornment: /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", color: "text.secondary" }, "px")
3081
3102
  }
3082
3103
  }
3083
3104
  );
@@ -3099,7 +3120,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
3099
3120
  };
3100
3121
  let column3 = null;
3101
3122
  {
3102
- column3 = /* @__PURE__ */ React62.createElement(
3123
+ column3 = /* @__PURE__ */ React63.createElement(
3103
3124
  TextDimensionInput,
3104
3125
  {
3105
3126
  label: "Column 3",
@@ -3110,7 +3131,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
3110
3131
  }
3111
3132
  );
3112
3133
  }
3113
- return /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 1 }, /* @__PURE__ */ React62.createElement(
3134
+ return /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 1 }, /* @__PURE__ */ React63.createElement(
3114
3135
  TextDimensionInput,
3115
3136
  {
3116
3137
  label: "Column 1",
@@ -3119,7 +3140,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
3119
3140
  setIndexValue(0, v);
3120
3141
  }
3121
3142
  }
3122
- ), /* @__PURE__ */ React62.createElement(
3143
+ ), /* @__PURE__ */ React63.createElement(
3123
3144
  TextDimensionInput,
3124
3145
  {
3125
3146
  label: "Column 2",
@@ -3144,7 +3165,7 @@ function ColumnsContainerPanel({ data, setData }) {
3144
3165
  setErrors(res.error);
3145
3166
  }
3146
3167
  };
3147
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Columns block" }, /* @__PURE__ */ React62.createElement(
3168
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Columns block" }, /* @__PURE__ */ React63.createElement(
3148
3169
  RadioGroupInput,
3149
3170
  {
3150
3171
  label: t("columns.count", "Number of columns"),
@@ -3153,9 +3174,9 @@ function ColumnsContainerPanel({ data, setData }) {
3153
3174
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { columnsCount: v === "2" ? 2 : 3 }) }));
3154
3175
  }
3155
3176
  },
3156
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "2" }, "2"),
3157
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "3" }, "3")
3158
- ), /* @__PURE__ */ React62.createElement(
3177
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "2" }, "2"),
3178
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "3" }, "3")
3179
+ ), /* @__PURE__ */ React63.createElement(
3159
3180
  ColumnWidthsInput,
3160
3181
  {
3161
3182
  defaultValue: (_b = data.props) == null ? void 0 : _b.fixedWidths,
@@ -3163,11 +3184,11 @@ function ColumnsContainerPanel({ data, setData }) {
3163
3184
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { fixedWidths }) }));
3164
3185
  }
3165
3186
  }
3166
- ), /* @__PURE__ */ React62.createElement(
3187
+ ), /* @__PURE__ */ React63.createElement(
3167
3188
  SliderInput,
3168
3189
  {
3169
3190
  label: t("columns.gap", "Columns gap"),
3170
- iconLabel: /* @__PURE__ */ React62.createElement(SpaceBarOutlined, { sx: { color: "text.secondary" } }),
3191
+ iconLabel: /* @__PURE__ */ React63.createElement(SpaceBarOutlined, { sx: { color: "text.secondary" } }),
3171
3192
  units: "px",
3172
3193
  step: 4,
3173
3194
  marks: true,
@@ -3176,7 +3197,7 @@ function ColumnsContainerPanel({ data, setData }) {
3176
3197
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.columnsGap) != null ? _d : 0,
3177
3198
  onChange: (columnsGap) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { columnsGap }) }))
3178
3199
  }
3179
- ), /* @__PURE__ */ React62.createElement(
3200
+ ), /* @__PURE__ */ React63.createElement(
3180
3201
  RadioGroupInput,
3181
3202
  {
3182
3203
  label: t("style.alignment", "Alignment"),
@@ -3185,10 +3206,10 @@ function ColumnsContainerPanel({ data, setData }) {
3185
3206
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }));
3186
3207
  }
3187
3208
  },
3188
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React62.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
3189
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React62.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
3190
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React62.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
3191
- ), /* @__PURE__ */ React62.createElement(
3209
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React63.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
3210
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React63.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
3211
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React63.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
3212
+ ), /* @__PURE__ */ React63.createElement(
3192
3213
  MultiStylePropertyPanel,
3193
3214
  {
3194
3215
  names: ["backgroundColor", "padding"],
@@ -3217,7 +3238,7 @@ function ContainerSidebarPanel({ data, setData }) {
3217
3238
  setErrors(res.error);
3218
3239
  }
3219
3240
  };
3220
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Container block" }, /* @__PURE__ */ React62.createElement(
3241
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Container block" }, /* @__PURE__ */ React63.createElement(
3221
3242
  MultiStylePropertyPanel,
3222
3243
  {
3223
3244
  names: ["backgroundColor", "borderColor", "borderRadius", "padding"],
@@ -3240,18 +3261,18 @@ function DividerSidebarPanel({ data, setData }) {
3240
3261
  };
3241
3262
  const lineColor = (_b = (_a = data.props) == null ? void 0 : _a.lineColor) != null ? _b : DividerPropsDefaults.lineColor;
3242
3263
  const lineHeight = (_d = (_c = data.props) == null ? void 0 : _c.lineHeight) != null ? _d : DividerPropsDefaults.lineHeight;
3243
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Divider block" }, /* @__PURE__ */ React62.createElement(
3264
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Divider block" }, /* @__PURE__ */ React63.createElement(
3244
3265
  ColorInput2,
3245
3266
  {
3246
3267
  label: t("divider.color", "Color"),
3247
3268
  defaultValue: lineColor,
3248
3269
  onChange: (lineColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { lineColor: lineColor2 }) }))
3249
3270
  }
3250
- ), /* @__PURE__ */ React62.createElement(
3271
+ ), /* @__PURE__ */ React63.createElement(
3251
3272
  SliderInput,
3252
3273
  {
3253
3274
  label: t("field.height", "Height"),
3254
- iconLabel: /* @__PURE__ */ React62.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
3275
+ iconLabel: /* @__PURE__ */ React63.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
3255
3276
  units: "px",
3256
3277
  step: 1,
3257
3278
  min: 1,
@@ -3259,7 +3280,7 @@ function DividerSidebarPanel({ data, setData }) {
3259
3280
  defaultValue: lineHeight,
3260
3281
  onChange: (lineHeight2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { lineHeight: lineHeight2 }) }))
3261
3282
  }
3262
- ), /* @__PURE__ */ React62.createElement(
3283
+ ), /* @__PURE__ */ React63.createElement(
3263
3284
  MultiStylePropertyPanel,
3264
3285
  {
3265
3286
  names: ["backgroundColor", "padding"],
@@ -3303,11 +3324,11 @@ function BooleanInput({ label, defaultValue, onChange }) {
3303
3324
  useEffect(() => {
3304
3325
  setValue(defaultValue);
3305
3326
  }, [defaultValue]);
3306
- return /* @__PURE__ */ React62.createElement(
3327
+ return /* @__PURE__ */ React63.createElement(
3307
3328
  FormControlLabel,
3308
3329
  {
3309
3330
  label,
3310
- control: /* @__PURE__ */ React62.createElement(
3331
+ control: /* @__PURE__ */ React63.createElement(
3311
3332
  Switch,
3312
3333
  {
3313
3334
  checked: value,
@@ -3335,38 +3356,38 @@ function EmailLayoutSidebarFields({ data, setData }) {
3335
3356
  }
3336
3357
  };
3337
3358
  const backdropDisabled = (_a = data.backdropDisabled) != null ? _a : false;
3338
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Global" }, /* @__PURE__ */ React62.createElement(
3359
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Global" }, /* @__PURE__ */ React63.createElement(
3339
3360
  BooleanInput,
3340
3361
  {
3341
3362
  label: t("global.disable-backdrop", "Disable backdrop"),
3342
3363
  defaultValue: backdropDisabled,
3343
3364
  onChange: (backdropDisabled2) => updateData(__spreadProps(__spreadValues({}, data), { backdropDisabled: backdropDisabled2 }))
3344
3365
  }
3345
- ), !backdropDisabled && /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
3366
+ ), !backdropDisabled && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
3346
3367
  ColorInput2,
3347
3368
  {
3348
3369
  label: t("global.backdrop-color", "Backdrop color"),
3349
3370
  defaultValue: (_b = data.backdropColor) != null ? _b : "#F5F5F5",
3350
3371
  onChange: (backdropColor) => updateData(__spreadProps(__spreadValues({}, data), { backdropColor }))
3351
3372
  }
3352
- ), /* @__PURE__ */ React62.createElement(
3373
+ ), /* @__PURE__ */ React63.createElement(
3353
3374
  ColorInput2,
3354
3375
  {
3355
3376
  label: t("global.canvas-color", "Canvas color"),
3356
3377
  defaultValue: (_c = data.canvasColor) != null ? _c : "#FFFFFF",
3357
3378
  onChange: (canvasColor) => updateData(__spreadProps(__spreadValues({}, data), { canvasColor }))
3358
3379
  }
3359
- ), /* @__PURE__ */ React62.createElement(
3380
+ ), /* @__PURE__ */ React63.createElement(
3360
3381
  NullableColorInput,
3361
3382
  {
3362
3383
  label: t("global.canvas-border-color", "Canvas border color"),
3363
3384
  defaultValue: (_d = data.borderColor) != null ? _d : null,
3364
3385
  onChange: (borderColor) => updateData(__spreadProps(__spreadValues({}, data), { borderColor }))
3365
3386
  }
3366
- ), /* @__PURE__ */ React62.createElement(
3387
+ ), /* @__PURE__ */ React63.createElement(
3367
3388
  SliderInput,
3368
3389
  {
3369
- iconLabel: /* @__PURE__ */ React62.createElement(RoundedCornerOutlined, null),
3390
+ iconLabel: /* @__PURE__ */ React63.createElement(RoundedCornerOutlined, null),
3370
3391
  units: "px",
3371
3392
  step: 4,
3372
3393
  marks: true,
@@ -3376,14 +3397,14 @@ function EmailLayoutSidebarFields({ data, setData }) {
3376
3397
  defaultValue: (_e = data.borderRadius) != null ? _e : 0,
3377
3398
  onChange: (borderRadius) => updateData(__spreadProps(__spreadValues({}, data), { borderRadius }))
3378
3399
  }
3379
- )), /* @__PURE__ */ React62.createElement(
3400
+ )), /* @__PURE__ */ React63.createElement(
3380
3401
  NullableFontFamily,
3381
3402
  {
3382
3403
  label: t("style.font-family", "Font family"),
3383
3404
  defaultValue: "MODERN_SANS",
3384
3405
  onChange: (fontFamily) => updateData(__spreadProps(__spreadValues({}, data), { fontFamily }))
3385
3406
  }
3386
- ), /* @__PURE__ */ React62.createElement(
3407
+ ), /* @__PURE__ */ React63.createElement(
3387
3408
  ColorInput2,
3388
3409
  {
3389
3410
  label: t("style.text-color", "Text color"),
@@ -3404,7 +3425,7 @@ function HeadingSidebarPanel({ data, setData }) {
3404
3425
  setErrors(res.error);
3405
3426
  }
3406
3427
  };
3407
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Heading block" }, /* @__PURE__ */ React62.createElement(
3428
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Heading block" }, /* @__PURE__ */ React63.createElement(
3408
3429
  TextInput,
3409
3430
  {
3410
3431
  label: t("field.content", "Content"),
@@ -3414,7 +3435,7 @@ function HeadingSidebarPanel({ data, setData }) {
3414
3435
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text }) }));
3415
3436
  }
3416
3437
  }
3417
- ), /* @__PURE__ */ React62.createElement(
3438
+ ), /* @__PURE__ */ React63.createElement(
3418
3439
  RadioGroupInput,
3419
3440
  {
3420
3441
  label: t("field.level", "Level"),
@@ -3423,10 +3444,10 @@ function HeadingSidebarPanel({ data, setData }) {
3423
3444
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { level }) }));
3424
3445
  }
3425
3446
  },
3426
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "h1" }, "H1"),
3427
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "h2" }, "H2"),
3428
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "h3" }, "H3")
3429
- ), /* @__PURE__ */ React62.createElement(
3447
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "h1" }, "H1"),
3448
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "h2" }, "H2"),
3449
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "h3" }, "H3")
3450
+ ), /* @__PURE__ */ React63.createElement(
3430
3451
  MultiStylePropertyPanel,
3431
3452
  {
3432
3453
  names: [
@@ -3456,7 +3477,7 @@ function HtmlSidebarPanel({ data, setData }) {
3456
3477
  setErrors(res.error);
3457
3478
  }
3458
3479
  };
3459
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Html block" }, /* @__PURE__ */ React62.createElement(
3480
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Html block" }, /* @__PURE__ */ React63.createElement(
3460
3481
  TextInput,
3461
3482
  {
3462
3483
  label: t("field.content", "Content"),
@@ -3464,7 +3485,7 @@ function HtmlSidebarPanel({ data, setData }) {
3464
3485
  defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.contents) != null ? _b : "",
3465
3486
  onChange: (contents) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contents }) }))
3466
3487
  }
3467
- ), /* @__PURE__ */ React62.createElement(
3488
+ ), /* @__PURE__ */ React63.createElement(
3468
3489
  MultiStylePropertyPanel,
3469
3490
  {
3470
3491
  names: ["color", "backgroundColor", "fontFamily", "fontSize", "textAlign", "padding"],
@@ -3521,7 +3542,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
3521
3542
  setBusy(false);
3522
3543
  }
3523
3544
  });
3524
- return /* @__PURE__ */ React62.createElement(Dialog, { open, onClose, maxWidth: "md", fullWidth: true }, /* @__PURE__ */ React62.createElement(DialogTitle, null, "Image library"), /* @__PURE__ */ React62.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React62.createElement(
3545
+ return /* @__PURE__ */ React63.createElement(Dialog, { open, onClose, maxWidth: "md", fullWidth: true }, /* @__PURE__ */ React63.createElement(DialogTitle, null, "Image library"), /* @__PURE__ */ React63.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React63.createElement(
3525
3546
  TextField,
3526
3547
  {
3527
3548
  fullWidth: true,
@@ -3531,11 +3552,11 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
3531
3552
  onChange: (e) => setQuery(e.target.value),
3532
3553
  autoFocus: true,
3533
3554
  InputProps: {
3534
- startAdornment: /* @__PURE__ */ React62.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React62.createElement(SearchOutlined, { fontSize: "small" }))
3555
+ startAdornment: /* @__PURE__ */ React63.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React63.createElement(SearchOutlined, { fontSize: "small" }))
3535
3556
  },
3536
3557
  sx: { mb: 2 }
3537
3558
  }
3538
- ), error && /* @__PURE__ */ React62.createElement(Alert, { severity: "error", sx: { mb: 2 } }, error), busy && !images && /* @__PURE__ */ React62.createElement(Stack, { alignItems: "center", sx: { py: 4 } }, /* @__PURE__ */ React62.createElement(CircularProgress, { size: 28 })), filtered && filtered.length === 0 && /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", textAlign: "center", py: 4 } }, query ? "No images match your search." : "No images in the library yet."), filtered && filtered.length > 0 && /* @__PURE__ */ React62.createElement(
3559
+ ), error && /* @__PURE__ */ React63.createElement(Alert, { severity: "error", sx: { mb: 2 } }, error), busy && !images && /* @__PURE__ */ React63.createElement(Stack, { alignItems: "center", sx: { py: 4 } }, /* @__PURE__ */ React63.createElement(CircularProgress, { size: 28 })), filtered && filtered.length === 0 && /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", textAlign: "center", py: 4 } }, query ? "No images match your search." : "No images in the library yet."), filtered && filtered.length > 0 && /* @__PURE__ */ React63.createElement(
3539
3560
  Box,
3540
3561
  {
3541
3562
  sx: {
@@ -3544,7 +3565,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
3544
3565
  gap: 1.5
3545
3566
  }
3546
3567
  },
3547
- filtered.map((img) => /* @__PURE__ */ React62.createElement(
3568
+ filtered.map((img) => /* @__PURE__ */ React63.createElement(
3548
3569
  ImageTile,
3549
3570
  {
3550
3571
  key: img.url,
@@ -3553,7 +3574,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
3553
3574
  onDelete: deleteImage ? () => handleDelete(img.url) : void 0
3554
3575
  }
3555
3576
  ))
3556
- )), /* @__PURE__ */ React62.createElement(DialogActions, null, /* @__PURE__ */ React62.createElement(Button$1, { onClick: onClose }, "Close")));
3577
+ )), /* @__PURE__ */ React63.createElement(DialogActions, null, /* @__PURE__ */ React63.createElement(Button$1, { onClick: onClose }, "Close")));
3557
3578
  }
3558
3579
  function ImageTile({
3559
3580
  image,
@@ -3563,7 +3584,7 @@ function ImageTile({
3563
3584
  var _a, _b;
3564
3585
  const src = (_a = image.thumbnailUrl) != null ? _a : image.url;
3565
3586
  const label = image.alt || image.url.split("/").pop() || "image";
3566
- return /* @__PURE__ */ React62.createElement(
3587
+ return /* @__PURE__ */ React63.createElement(
3567
3588
  Box,
3568
3589
  {
3569
3590
  sx: {
@@ -3579,7 +3600,7 @@ function ImageTile({
3579
3600
  },
3580
3601
  onClick: onPick
3581
3602
  },
3582
- /* @__PURE__ */ React62.createElement(
3603
+ /* @__PURE__ */ React63.createElement(
3583
3604
  Box,
3584
3605
  {
3585
3606
  component: "img",
@@ -3588,8 +3609,8 @@ function ImageTile({
3588
3609
  sx: { display: "block", width: "100%", aspectRatio: "1 / 1", objectFit: "cover", backgroundColor: "#f5f5f5" }
3589
3610
  }
3590
3611
  ),
3591
- /* @__PURE__ */ React62.createElement(Box, { sx: { p: 0.75, fontSize: 11, color: "text.secondary", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, label),
3592
- onDelete && /* @__PURE__ */ React62.createElement(Tooltip, { title: "Delete from library" }, /* @__PURE__ */ React62.createElement(
3612
+ /* @__PURE__ */ React63.createElement(Box, { sx: { p: 0.75, fontSize: 11, color: "text.secondary", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, label),
3613
+ onDelete && /* @__PURE__ */ React63.createElement(Tooltip, { title: "Delete from library" }, /* @__PURE__ */ React63.createElement(
3593
3614
  IconButton,
3594
3615
  {
3595
3616
  size: "small",
@@ -3609,7 +3630,7 @@ function ImageTile({
3609
3630
  },
3610
3631
  "aria-label": "Delete image"
3611
3632
  },
3612
- /* @__PURE__ */ React62.createElement(DeleteOutline, { fontSize: "small" })
3633
+ /* @__PURE__ */ React63.createElement(DeleteOutline, { fontSize: "small" })
3613
3634
  ))
3614
3635
  );
3615
3636
  }
@@ -3662,13 +3683,13 @@ function ImageSidebarPanel({ data, setData }) {
3662
3683
  });
3663
3684
  const url = (_b = (_a = data.props) == null ? void 0 : _a.url) != null ? _b : "";
3664
3685
  const showHttpWarning = isHttpUrl(url);
3665
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Image block" }, (uploadImage || loadImages) && /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 1 }, uploadImage && /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
3686
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Image block" }, (uploadImage || loadImages) && /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 1 }, uploadImage && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
3666
3687
  Button$1,
3667
3688
  {
3668
3689
  fullWidth: true,
3669
3690
  variant: "outlined",
3670
3691
  size: "small",
3671
- startIcon: uploading ? /* @__PURE__ */ React62.createElement(CircularProgress, { size: 14 }) : /* @__PURE__ */ React62.createElement(CloudUploadOutlined, { fontSize: "small" }),
3692
+ startIcon: uploading ? /* @__PURE__ */ React63.createElement(CircularProgress, { size: 14 }) : /* @__PURE__ */ React63.createElement(CloudUploadOutlined, { fontSize: "small" }),
3672
3693
  disabled: uploading,
3673
3694
  onClick: () => {
3674
3695
  var _a2;
@@ -3676,7 +3697,7 @@ function ImageSidebarPanel({ data, setData }) {
3676
3697
  }
3677
3698
  },
3678
3699
  uploading ? t("image.uploading", "Uploading\u2026") : t("image.upload", "Upload")
3679
- ), /* @__PURE__ */ React62.createElement(
3700
+ ), /* @__PURE__ */ React63.createElement(
3680
3701
  "input",
3681
3702
  {
3682
3703
  ref: fileInputRef,
@@ -3690,17 +3711,17 @@ function ImageSidebarPanel({ data, setData }) {
3690
3711
  if (file) yield handleFile(file);
3691
3712
  })
3692
3713
  }
3693
- )), loadImages && /* @__PURE__ */ React62.createElement(
3714
+ )), loadImages && /* @__PURE__ */ React63.createElement(
3694
3715
  Button$1,
3695
3716
  {
3696
3717
  fullWidth: true,
3697
3718
  variant: "outlined",
3698
3719
  size: "small",
3699
- startIcon: /* @__PURE__ */ React62.createElement(CollectionsOutlined, { fontSize: "small" }),
3720
+ startIcon: /* @__PURE__ */ React63.createElement(CollectionsOutlined, { fontSize: "small" }),
3700
3721
  onClick: () => setLibraryOpen(true)
3701
3722
  },
3702
3723
  t("image.library", "Library")
3703
- )), uploadError && /* @__PURE__ */ React62.createElement(Alert, { severity: "error", onClose: () => setUploadError(null), sx: { mt: 1 } }, uploadError), /* @__PURE__ */ React62.createElement(
3724
+ )), uploadError && /* @__PURE__ */ React63.createElement(Alert, { severity: "error", onClose: () => setUploadError(null), sx: { mt: 1 } }, uploadError), /* @__PURE__ */ React63.createElement(
3704
3725
  TextInput,
3705
3726
  {
3706
3727
  label: t("image.source-url", "Source URL"),
@@ -3710,14 +3731,14 @@ function ImageSidebarPanel({ data, setData }) {
3710
3731
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: next }) }));
3711
3732
  }
3712
3733
  }
3713
- ), showHttpWarning && /* @__PURE__ */ React62.createElement(Box, { sx: { mt: -1, mb: 1, display: "flex", alignItems: "flex-start", gap: 0.75 } }, /* @__PURE__ */ React62.createElement(ErrorOutlineOutlined, { fontSize: "small", sx: { color: "warning.main", mt: "2px" } }), /* @__PURE__ */ React62.createElement(Box, { sx: { fontSize: 12, color: "warning.dark" } }, t("image.http-warning", "Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."))), /* @__PURE__ */ React62.createElement(
3734
+ ), showHttpWarning && /* @__PURE__ */ React63.createElement(Box, { sx: { mt: -1, mb: 1, display: "flex", alignItems: "flex-start", gap: 0.75 } }, /* @__PURE__ */ React63.createElement(ErrorOutlineOutlined, { fontSize: "small", sx: { color: "warning.main", mt: "2px" } }), /* @__PURE__ */ React63.createElement(Box, { sx: { fontSize: 12, color: "warning.dark" } }, t("image.http-warning", "Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery."))), /* @__PURE__ */ React63.createElement(
3714
3735
  TextInput,
3715
3736
  {
3716
3737
  label: t("image.alt-text", "Alt text"),
3717
3738
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.alt) != null ? _d : "",
3718
3739
  onChange: (alt) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt }) }))
3719
3740
  }
3720
- ), /* @__PURE__ */ React62.createElement(
3741
+ ), /* @__PURE__ */ React63.createElement(
3721
3742
  TextInput,
3722
3743
  {
3723
3744
  label: t("image.link-href", "Click through URL"),
@@ -3727,38 +3748,38 @@ function ImageSidebarPanel({ data, setData }) {
3727
3748
  updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { linkHref }) }));
3728
3749
  }
3729
3750
  }
3730
- ), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React62.createElement(
3751
+ ), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React63.createElement(
3731
3752
  TextDimensionInput,
3732
3753
  {
3733
3754
  label: t("field.width", "Width"),
3734
3755
  defaultValue: (_g = data.props) == null ? void 0 : _g.width,
3735
3756
  onChange: (width) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { width }) }))
3736
3757
  }
3737
- ), /* @__PURE__ */ React62.createElement(
3758
+ ), /* @__PURE__ */ React63.createElement(
3738
3759
  TextDimensionInput,
3739
3760
  {
3740
3761
  label: t("field.height", "Height"),
3741
3762
  defaultValue: (_h = data.props) == null ? void 0 : _h.height,
3742
3763
  onChange: (height) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { height }) }))
3743
3764
  }
3744
- )), /* @__PURE__ */ React62.createElement(
3765
+ )), /* @__PURE__ */ React63.createElement(
3745
3766
  RadioGroupInput,
3746
3767
  {
3747
3768
  label: t("style.alignment", "Alignment"),
3748
3769
  defaultValue: (_j = (_i = data.props) == null ? void 0 : _i.contentAlignment) != null ? _j : "middle",
3749
3770
  onChange: (contentAlignment) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }))
3750
3771
  },
3751
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React62.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
3752
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React62.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
3753
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React62.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
3754
- ), /* @__PURE__ */ React62.createElement(
3772
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React63.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
3773
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React63.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
3774
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React63.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
3775
+ ), /* @__PURE__ */ React63.createElement(
3755
3776
  MultiStylePropertyPanel,
3756
3777
  {
3757
3778
  names: ["backgroundColor", "textAlign", "padding"],
3758
3779
  value: data.style,
3759
3780
  onChange: (style) => updateData(__spreadProps(__spreadValues({}, data), { style }))
3760
3781
  }
3761
- ), loadImages && /* @__PURE__ */ React62.createElement(
3782
+ ), loadImages && /* @__PURE__ */ React63.createElement(
3762
3783
  ImageLibraryDialog,
3763
3784
  {
3764
3785
  open: libraryOpen,
@@ -3797,74 +3818,74 @@ function SignatureSidebarPanel({ data, setData }) {
3797
3818
  const nameColor = (_z = (_y = data.props) == null ? void 0 : _y.nameColor) != null ? _z : SignaturePropsDefaults.nameColor;
3798
3819
  const textColor = (_B = (_A = data.props) == null ? void 0 : _A.textColor) != null ? _B : SignaturePropsDefaults.textColor;
3799
3820
  const linkColor = (_D = (_C = data.props) == null ? void 0 : _C.linkColor) != null ? _D : SignaturePropsDefaults.linkColor;
3800
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Signature block" }, /* @__PURE__ */ React62.createElement(
3821
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Signature block" }, /* @__PURE__ */ React63.createElement(
3801
3822
  TextInput,
3802
3823
  {
3803
3824
  label: t("signature.greeting", "Greeting"),
3804
3825
  defaultValue: greeting,
3805
3826
  onChange: (greeting2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { greeting: greeting2 }) }))
3806
3827
  }
3807
- ), /* @__PURE__ */ React62.createElement(
3828
+ ), /* @__PURE__ */ React63.createElement(
3808
3829
  TextInput,
3809
3830
  {
3810
3831
  label: t("signature.name", "Name"),
3811
3832
  defaultValue: name,
3812
3833
  onChange: (name2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { name: name2 }) }))
3813
3834
  }
3814
- ), /* @__PURE__ */ React62.createElement(
3835
+ ), /* @__PURE__ */ React63.createElement(
3815
3836
  TextInput,
3816
3837
  {
3817
3838
  label: t("signature.title", "Title"),
3818
3839
  defaultValue: title,
3819
3840
  onChange: (title2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { title: title2 }) }))
3820
3841
  }
3821
- ), /* @__PURE__ */ React62.createElement(
3842
+ ), /* @__PURE__ */ React63.createElement(
3822
3843
  TextInput,
3823
3844
  {
3824
3845
  label: t("signature.company", "Company"),
3825
3846
  defaultValue: company,
3826
3847
  onChange: (company2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { company: company2 }) }))
3827
3848
  }
3828
- ), /* @__PURE__ */ React62.createElement(
3849
+ ), /* @__PURE__ */ React63.createElement(
3829
3850
  TextInput,
3830
3851
  {
3831
3852
  label: t("signature.address", "Address"),
3832
3853
  defaultValue: address,
3833
3854
  onChange: (address2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { address: address2 }) }))
3834
3855
  }
3835
- ), /* @__PURE__ */ React62.createElement(
3856
+ ), /* @__PURE__ */ React63.createElement(
3836
3857
  TextInput,
3837
3858
  {
3838
3859
  label: t("signature.email", "Email"),
3839
3860
  defaultValue: email,
3840
3861
  onChange: (email2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { email: email2 }) }))
3841
3862
  }
3842
- ), /* @__PURE__ */ React62.createElement(
3863
+ ), /* @__PURE__ */ React63.createElement(
3843
3864
  TextInput,
3844
3865
  {
3845
3866
  label: t("signature.phone", "Phone"),
3846
3867
  defaultValue: phone,
3847
3868
  onChange: (phone2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { phone: phone2 }) }))
3848
3869
  }
3849
- ), /* @__PURE__ */ React62.createElement(
3870
+ ), /* @__PURE__ */ React63.createElement(
3850
3871
  TextInput,
3851
3872
  {
3852
3873
  label: t("signature.website", "Website"),
3853
3874
  defaultValue: website,
3854
3875
  onChange: (website2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { website: website2 }) }))
3855
3876
  }
3856
- ), /* @__PURE__ */ React62.createElement(
3877
+ ), /* @__PURE__ */ React63.createElement(
3857
3878
  TextInput,
3858
3879
  {
3859
3880
  label: t("signature.image-url", "Image URL"),
3860
3881
  defaultValue: imageUrl,
3861
3882
  onChange: (imageUrl2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }))
3862
3883
  }
3863
- ), /* @__PURE__ */ React62.createElement(
3884
+ ), /* @__PURE__ */ React63.createElement(
3864
3885
  SliderInput,
3865
3886
  {
3866
3887
  label: t("signature.image-size", "Image size"),
3867
- iconLabel: /* @__PURE__ */ React62.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
3888
+ iconLabel: /* @__PURE__ */ React63.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
3868
3889
  units: "px",
3869
3890
  step: 4,
3870
3891
  min: 32,
@@ -3872,47 +3893,47 @@ function SignatureSidebarPanel({ data, setData }) {
3872
3893
  defaultValue: imageSize,
3873
3894
  onChange: (imageSize2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageSize: imageSize2 }) }))
3874
3895
  }
3875
- ), /* @__PURE__ */ React62.createElement(
3896
+ ), /* @__PURE__ */ React63.createElement(
3876
3897
  RadioGroupInput,
3877
3898
  {
3878
3899
  label: t("signature.image-shape", "Image shape"),
3879
3900
  defaultValue: imageShape,
3880
3901
  onChange: (imageShape2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageShape: imageShape2 }) }))
3881
3902
  },
3882
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
3883
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
3884
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
3885
- ), /* @__PURE__ */ React62.createElement(
3903
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
3904
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
3905
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
3906
+ ), /* @__PURE__ */ React63.createElement(
3886
3907
  RadioGroupInput,
3887
3908
  {
3888
3909
  label: t("signature.layout", "Layout"),
3889
3910
  defaultValue: layout,
3890
3911
  onChange: (layout2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { layout: layout2 }) }))
3891
3912
  },
3892
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "horizontal" }, t("signature.layout.horizontal", "Horizontal")),
3893
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "vertical" }, t("signature.layout.vertical", "Vertical"))
3894
- ), /* @__PURE__ */ React62.createElement(
3913
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "horizontal" }, t("signature.layout.horizontal", "Horizontal")),
3914
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "vertical" }, t("signature.layout.vertical", "Vertical"))
3915
+ ), /* @__PURE__ */ React63.createElement(
3895
3916
  ColorInput2,
3896
3917
  {
3897
3918
  label: t("signature.name-color", "Name color"),
3898
3919
  defaultValue: nameColor,
3899
3920
  onChange: (nameColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { nameColor: nameColor2 }) }))
3900
3921
  }
3901
- ), /* @__PURE__ */ React62.createElement(
3922
+ ), /* @__PURE__ */ React63.createElement(
3902
3923
  ColorInput2,
3903
3924
  {
3904
3925
  label: t("style.text-color", "Text color"),
3905
3926
  defaultValue: textColor,
3906
3927
  onChange: (textColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { textColor: textColor2 }) }))
3907
3928
  }
3908
- ), /* @__PURE__ */ React62.createElement(
3929
+ ), /* @__PURE__ */ React63.createElement(
3909
3930
  ColorInput2,
3910
3931
  {
3911
3932
  label: t("signature.link-color", "Link color"),
3912
3933
  defaultValue: linkColor,
3913
3934
  onChange: (linkColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { linkColor: linkColor2 }) }))
3914
3935
  }
3915
- ), /* @__PURE__ */ React62.createElement(
3936
+ ), /* @__PURE__ */ React63.createElement(
3916
3937
  MultiStylePropertyPanel,
3917
3938
  {
3918
3939
  names: ["backgroundColor", "fontFamily", "padding"],
@@ -3933,11 +3954,11 @@ function SpacerSidebarPanel({ data, setData }) {
3933
3954
  setErrors(res.error);
3934
3955
  }
3935
3956
  };
3936
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Spacer block" }, /* @__PURE__ */ React62.createElement(
3957
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Spacer block" }, /* @__PURE__ */ React63.createElement(
3937
3958
  SliderInput,
3938
3959
  {
3939
3960
  label: t("field.height", "Height"),
3940
- iconLabel: /* @__PURE__ */ React62.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
3961
+ iconLabel: /* @__PURE__ */ React63.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
3941
3962
  units: "px",
3942
3963
  step: 4,
3943
3964
  min: 4,
@@ -3959,7 +3980,7 @@ function TextSidebarPanel({ data, setData }) {
3959
3980
  setErrors(res.error);
3960
3981
  }
3961
3982
  };
3962
- return /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Text block" }, /* @__PURE__ */ React62.createElement(
3983
+ return /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Text block" }, /* @__PURE__ */ React63.createElement(
3963
3984
  TextInput,
3964
3985
  {
3965
3986
  label: t("field.content", "Content"),
@@ -3967,14 +3988,14 @@ function TextSidebarPanel({ data, setData }) {
3967
3988
  defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.text) != null ? _b : "",
3968
3989
  onChange: (text) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text }) }))
3969
3990
  }
3970
- ), /* @__PURE__ */ React62.createElement(
3991
+ ), /* @__PURE__ */ React63.createElement(
3971
3992
  BooleanInput,
3972
3993
  {
3973
3994
  label: t("field.markdown", "Markdown"),
3974
3995
  defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.markdown) != null ? _d : false,
3975
3996
  onChange: (markdown) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { markdown }) }))
3976
3997
  }
3977
- ), /* @__PURE__ */ React62.createElement(
3998
+ ), /* @__PURE__ */ React63.createElement(
3978
3999
  MultiStylePropertyPanel,
3979
4000
  {
3980
4001
  names: [
@@ -3996,7 +4017,7 @@ function TextSidebarPanel({ data, setData }) {
3996
4017
 
3997
4018
  // src/app/inspector-drawer/configuration-panel/index.tsx
3998
4019
  function renderMessage(val) {
3999
- return /* @__PURE__ */ React62.createElement(Box, { sx: { m: 3, p: 1, border: "1px dashed", borderColor: "divider" } }, /* @__PURE__ */ React62.createElement(Typography, { color: "text.secondary" }, val));
4020
+ return /* @__PURE__ */ React63.createElement(Box, { sx: { m: 3, p: 1, border: "1px dashed", borderColor: "divider" } }, /* @__PURE__ */ React63.createElement(Typography, { color: "text.secondary" }, val));
4000
4021
  }
4001
4022
  function ConfigurationPanel() {
4002
4023
  const document2 = useDocument();
@@ -4012,55 +4033,55 @@ function ConfigurationPanel() {
4012
4033
  const { data, type } = block;
4013
4034
  switch (type) {
4014
4035
  case "Avatar":
4015
- return /* @__PURE__ */ React62.createElement(AvatarSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4036
+ return /* @__PURE__ */ React63.createElement(AvatarSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4016
4037
  case "Button":
4017
- return /* @__PURE__ */ React62.createElement(ButtonSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4038
+ return /* @__PURE__ */ React63.createElement(ButtonSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4018
4039
  case "ColumnsContainer":
4019
- return /* @__PURE__ */ React62.createElement(ColumnsContainerPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4040
+ return /* @__PURE__ */ React63.createElement(ColumnsContainerPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4020
4041
  case "Container":
4021
- return /* @__PURE__ */ React62.createElement(ContainerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4042
+ return /* @__PURE__ */ React63.createElement(ContainerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4022
4043
  case "Divider":
4023
- return /* @__PURE__ */ React62.createElement(DividerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4044
+ return /* @__PURE__ */ React63.createElement(DividerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4024
4045
  case "Heading":
4025
- return /* @__PURE__ */ React62.createElement(HeadingSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4046
+ return /* @__PURE__ */ React63.createElement(HeadingSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4026
4047
  case "Html":
4027
- return /* @__PURE__ */ React62.createElement(HtmlSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4048
+ return /* @__PURE__ */ React63.createElement(HtmlSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4028
4049
  case "Image":
4029
- return /* @__PURE__ */ React62.createElement(ImageSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4050
+ return /* @__PURE__ */ React63.createElement(ImageSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4030
4051
  case "EmailLayout":
4031
- return /* @__PURE__ */ React62.createElement(EmailLayoutSidebarFields, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4052
+ return /* @__PURE__ */ React63.createElement(EmailLayoutSidebarFields, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4032
4053
  case "Spacer":
4033
- return /* @__PURE__ */ React62.createElement(SpacerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4054
+ return /* @__PURE__ */ React63.createElement(SpacerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4034
4055
  case "Signature":
4035
- return /* @__PURE__ */ React62.createElement(SignatureSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4056
+ return /* @__PURE__ */ React63.createElement(SignatureSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4036
4057
  case "Text":
4037
- return /* @__PURE__ */ React62.createElement(TextSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4058
+ return /* @__PURE__ */ React63.createElement(TextSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
4038
4059
  default:
4039
- return /* @__PURE__ */ React62.createElement("pre", null, JSON.stringify(block, null, " "));
4060
+ return /* @__PURE__ */ React63.createElement("pre", null, JSON.stringify(block, null, " "));
4040
4061
  }
4041
4062
  }
4042
4063
  function StylesPanel() {
4043
4064
  const block = useDocument().root;
4044
4065
  if (!block) {
4045
- return /* @__PURE__ */ React62.createElement("p", null, "Block not found");
4066
+ return /* @__PURE__ */ React63.createElement("p", null, "Block not found");
4046
4067
  }
4047
4068
  const { data, type } = block;
4048
4069
  if (type !== "EmailLayout") {
4049
4070
  throw new Error('Expected "root" element to be of type EmailLayout');
4050
4071
  }
4051
- return /* @__PURE__ */ React62.createElement(EmailLayoutSidebarFields, { key: "root", data, setData: (data2) => setDocument({ root: { type, data: data2 } }) });
4072
+ return /* @__PURE__ */ React63.createElement(EmailLayoutSidebarFields, { key: "root", data, setData: (data2) => setDocument({ root: { type, data: data2 } }) });
4052
4073
  }
4053
4074
  function TemplateDownloadButton() {
4054
4075
  const doc = useDocument();
4055
4076
  const href = useMemo(() => {
4056
4077
  return `data:text/plain,${encodeURIComponent(JSON.stringify(doc, null, " "))}`;
4057
4078
  }, [doc]);
4058
- return /* @__PURE__ */ React62.createElement(
4079
+ return /* @__PURE__ */ React63.createElement(
4059
4080
  Button$1,
4060
4081
  {
4061
4082
  variant: "outlined",
4062
4083
  color: "primary",
4063
- startIcon: /* @__PURE__ */ React62.createElement(FileDownloadOutlined, null),
4084
+ startIcon: /* @__PURE__ */ React63.createElement(FileDownloadOutlined, null),
4064
4085
  href,
4065
4086
  download: "emailTemplate.json",
4066
4087
  fullWidth: true
@@ -4102,7 +4123,7 @@ function TemplatePanel({
4102
4123
  window.alert(t("settings.copied", "Template copied successfully!"));
4103
4124
  }
4104
4125
  };
4105
- const workspaceToggle = /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Editor appearance" }, /* @__PURE__ */ React62.createElement(Stack, { spacing: 1 }, /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.secondary" } }, t("settings.workspace-background", "Workspace background")), /* @__PURE__ */ React62.createElement(
4126
+ const workspaceToggle = /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Editor appearance" }, /* @__PURE__ */ React63.createElement(Stack, { spacing: 1 }, /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.secondary" } }, t("settings.workspace-background", "Workspace background")), /* @__PURE__ */ React63.createElement(
4106
4127
  ToggleButtonGroup,
4107
4128
  {
4108
4129
  value: workspaceBackground,
@@ -4110,13 +4131,13 @@ function TemplatePanel({
4110
4131
  size: "small",
4111
4132
  onChange: (_, v) => v && setWorkspaceBackground(v)
4112
4133
  },
4113
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "checkerboard", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React62.createElement(GridOnOutlined, { fontSize: "small" }), t("settings.checkerboard", "Checkerboard")),
4114
- /* @__PURE__ */ React62.createElement(ToggleButton, { value: "solid", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React62.createElement(SquareOutlined, { fontSize: "small" }), t("settings.solid", "Solid"))
4115
- ), /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.disabled" } }, t("settings.editor-only-hint", "Editor-only \u2014 never reaches the rendered email."))));
4134
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "checkerboard", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React63.createElement(GridOnOutlined, { fontSize: "small" }), t("settings.checkerboard", "Checkerboard")),
4135
+ /* @__PURE__ */ React63.createElement(ToggleButton, { value: "solid", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React63.createElement(SquareOutlined, { fontSize: "small" }), t("settings.solid", "Solid"))
4136
+ ), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.disabled" } }, t("settings.editor-only-hint", "Editor-only \u2014 never reaches the rendered email."))));
4116
4137
  if (!currentTemplateId) {
4117
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Template" }, t("settings.no-template", "No template selected")), workspaceToggle);
4138
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Template" }, t("settings.no-template", "No template selected")), workspaceToggle);
4118
4139
  }
4119
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Details" }, /* @__PURE__ */ React62.createElement(
4140
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Details" }, /* @__PURE__ */ React63.createElement(
4120
4141
  DetailsEditor,
4121
4142
  {
4122
4143
  templateId: currentTemplateId,
@@ -4130,7 +4151,7 @@ function TemplatePanel({
4130
4151
  setCurrentTemplateTags(tags);
4131
4152
  })
4132
4153
  }
4133
- )), /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Template" }, /* @__PURE__ */ React62.createElement(Stack, { spacing: 2 }, !persistenceEnabled && /* @__PURE__ */ React62.createElement(
4154
+ )), /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Template" }, /* @__PURE__ */ React63.createElement(Stack, { spacing: 2 }, !persistenceEnabled && /* @__PURE__ */ React63.createElement(
4134
4155
  Typography,
4135
4156
  {
4136
4157
  variant: "body2",
@@ -4143,29 +4164,29 @@ function TemplatePanel({
4143
4164
  }
4144
4165
  },
4145
4166
  t("settings.save-disabled", "Save functionality is disabled. To enable saving, provide the necessary callback functions.")
4146
- ), persistenceEnabled && /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
4167
+ ), persistenceEnabled && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
4147
4168
  Button$1,
4148
4169
  {
4149
4170
  variant: "outlined",
4150
4171
  color: "primary",
4151
- startIcon: /* @__PURE__ */ React62.createElement(ContentCopyOutlined, null),
4172
+ startIcon: /* @__PURE__ */ React63.createElement(ContentCopyOutlined, null),
4152
4173
  onClick: handleCopyToSamples,
4153
4174
  fullWidth: true,
4154
4175
  disabled: !copyTemplate
4155
4176
  },
4156
4177
  t("settings.save-as-sample", "Save as Sample Template")
4157
- ), /* @__PURE__ */ React62.createElement(
4178
+ ), /* @__PURE__ */ React63.createElement(
4158
4179
  Button$1,
4159
4180
  {
4160
4181
  variant: "outlined",
4161
4182
  color: "error",
4162
- startIcon: /* @__PURE__ */ React62.createElement(DeleteOutlined, null),
4183
+ startIcon: /* @__PURE__ */ React63.createElement(DeleteOutlined, null),
4163
4184
  onClick: handleDelete,
4164
4185
  fullWidth: true,
4165
4186
  disabled: !deleteTemplate
4166
4187
  },
4167
4188
  t("settings.delete", "Delete Template")
4168
- )))), persistenceEnabled && /* @__PURE__ */ React62.createElement(BaseSidebarPanel, { title: "Export" }, /* @__PURE__ */ React62.createElement(Stack, { spacing: 2 }, /* @__PURE__ */ React62.createElement(TemplateDownloadButton, null))), workspaceToggle);
4189
+ )))), persistenceEnabled && /* @__PURE__ */ React63.createElement(BaseSidebarPanel, { title: "Export" }, /* @__PURE__ */ React63.createElement(Stack, { spacing: 2 }, /* @__PURE__ */ React63.createElement(TemplateDownloadButton, null))), workspaceToggle);
4169
4190
  }
4170
4191
  function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }) {
4171
4192
  const [name, setName] = useState(currentName);
@@ -4202,7 +4223,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
4202
4223
  setSaving(false);
4203
4224
  }
4204
4225
  });
4205
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 1.5 }, /* @__PURE__ */ React62.createElement(
4226
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 1.5 }, /* @__PURE__ */ React63.createElement(
4206
4227
  TextField,
4207
4228
  {
4208
4229
  size: "small",
@@ -4212,7 +4233,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
4212
4233
  disabled: !canEdit || saving,
4213
4234
  fullWidth: true
4214
4235
  }
4215
- ), /* @__PURE__ */ React62.createElement(Box, null, /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React62.createElement(
4236
+ ), /* @__PURE__ */ React63.createElement(Box, null, /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React63.createElement(
4216
4237
  Chip,
4217
4238
  {
4218
4239
  key: tag,
@@ -4220,7 +4241,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
4220
4241
  size: "small",
4221
4242
  onDelete: canEdit && !saving ? () => removeTag(tag) : void 0
4222
4243
  }
4223
- ))) : /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React62.createElement(
4244
+ ))) : /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React63.createElement(
4224
4245
  TextField,
4225
4246
  {
4226
4247
  size: "small",
@@ -4239,20 +4260,20 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
4239
4260
  }
4240
4261
  },
4241
4262
  InputProps: {
4242
- endAdornment: /* @__PURE__ */ React62.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React62.createElement(
4263
+ endAdornment: /* @__PURE__ */ React63.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React63.createElement(
4243
4264
  Button$1,
4244
4265
  {
4245
4266
  size: "small",
4246
4267
  onClick: addTag,
4247
4268
  disabled: !canEdit || saving || !tagInput.trim(),
4248
- startIcon: /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" }),
4269
+ startIcon: /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" }),
4249
4270
  sx: { textTransform: "none" }
4250
4271
  },
4251
4272
  t("common.add", "Add")
4252
4273
  ))
4253
4274
  }
4254
4275
  }
4255
- )), /* @__PURE__ */ React62.createElement(Tooltip, { title: canEdit ? "" : t("settings.no-rename-cb", "Wire a renameTemplate callback to enable editing from here"), placement: "top" }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
4276
+ )), /* @__PURE__ */ React63.createElement(Tooltip, { title: canEdit ? "" : t("settings.no-rename-cb", "Wire a renameTemplate callback to enable editing from here"), placement: "top" }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
4256
4277
  Button$1,
4257
4278
  {
4258
4279
  variant: "contained",
@@ -4260,7 +4281,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
4260
4281
  fullWidth: true,
4261
4282
  onClick: handleSave,
4262
4283
  disabled: !canEdit || saving || !dirty || !name.trim(),
4263
- startIcon: justSaved ? /* @__PURE__ */ React62.createElement(CheckOutlined, { fontSize: "small" }) : null
4284
+ startIcon: justSaved ? /* @__PURE__ */ React63.createElement(CheckOutlined, { fontSize: "small" }) : null
4264
4285
  },
4265
4286
  saving ? t("common.saving", "Saving\u2026") : justSaved ? t("settings.saved", "Saved") : t("settings.save-details", "Save details")
4266
4287
  ))));
@@ -4437,7 +4458,7 @@ function VariablesPanel() {
4437
4458
  const lastFocused = useLastFocusedEditable();
4438
4459
  const root = document2.root;
4439
4460
  if (!root || root.type !== "EmailLayout") {
4440
- return /* @__PURE__ */ React62.createElement(Box, { p: 2 }, /* @__PURE__ */ React62.createElement(Alert, { severity: "info" }, t("variables.open-template", "Open a template to manage variables.")));
4461
+ return /* @__PURE__ */ React63.createElement(Box, { p: 2 }, /* @__PURE__ */ React63.createElement(Alert, { severity: "info" }, t("variables.open-template", "Open a template to manage variables.")));
4441
4462
  }
4442
4463
  const data = root.data;
4443
4464
  const variables = ((_a = data.variables) != null ? _a : []).map((v) => {
@@ -4532,10 +4553,10 @@ function VariablesPanel() {
4532
4553
  } catch (e) {
4533
4554
  }
4534
4555
  });
4535
- return /* @__PURE__ */ React62.createElement(Box, { p: 2 }, /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { mb: 1 } }, /* @__PURE__ */ React62.createElement(Typography, { variant: "subtitle1", sx: { fontWeight: 600 } }, t("variables.title", "Variables")), /* @__PURE__ */ React62.createElement(Tooltip, { title: t("variables.add", "Add variable") }, /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: add, "aria-label": t("variables.add", "Add variable") }, /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" })))), /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 2 } }, t(
4556
+ return /* @__PURE__ */ React63.createElement(Box, { p: 2 }, /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { mb: 1 } }, /* @__PURE__ */ React63.createElement(Typography, { variant: "subtitle1", sx: { fontWeight: 600 } }, t("variables.title", "Variables")), /* @__PURE__ */ React63.createElement(Tooltip, { title: t("variables.add", "Add variable") }, /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: add, "aria-label": t("variables.add", "Add variable") }, /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" })))), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 2 } }, t(
4536
4557
  "variables.intro",
4537
4558
  "Declared variables travel with the template. Reference them in subject and body as {{name}}. In Preview mode, tokens render with the sample values below."
4538
- )), undeclared.length > 0 && /* @__PURE__ */ React62.createElement(Alert, { severity: "warning", sx: { mb: 2 } }, /* @__PURE__ */ React62.createElement(AlertTitle, { sx: { fontSize: 13 } }, t("variables.undeclared", "Undeclared in body")), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, useFlexGap: true, flexWrap: "wrap" }, undeclared.map((name) => /* @__PURE__ */ React62.createElement(
4559
+ )), undeclared.length > 0 && /* @__PURE__ */ React63.createElement(Alert, { severity: "warning", sx: { mb: 2 } }, /* @__PURE__ */ React63.createElement(AlertTitle, { sx: { fontSize: 13 } }, t("variables.undeclared", "Undeclared in body")), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, useFlexGap: true, flexWrap: "wrap" }, undeclared.map((name) => /* @__PURE__ */ React63.createElement(
4539
4560
  Chip,
4540
4561
  {
4541
4562
  key: name,
@@ -4543,12 +4564,12 @@ function VariablesPanel() {
4543
4564
  label: name,
4544
4565
  onClick: () => addFromToken(name),
4545
4566
  onDelete: () => addFromToken(name),
4546
- deleteIcon: /* @__PURE__ */ React62.createElement(AddOutlined, null),
4567
+ deleteIcon: /* @__PURE__ */ React63.createElement(AddOutlined, null),
4547
4568
  sx: { fontFamily: "monospace" }
4548
4569
  }
4549
- ))), /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 0.5 } }, t("variables.click-to-declare", "Click a token to declare it."))), variables.length === 0 ? /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", sx: { color: "text.secondary" } }, t("variables.none", "No variables declared. Click + to add one.")) : /* @__PURE__ */ React62.createElement(Stack, { spacing: 2 }, variables.map((v, i) => {
4570
+ ))), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 0.5 } }, t("variables.click-to-declare", "Click a token to declare it."))), variables.length === 0 ? /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", sx: { color: "text.secondary" } }, t("variables.none", "No variables declared. Click + to add one.")) : /* @__PURE__ */ React63.createElement(Stack, { spacing: 2 }, variables.map((v, i) => {
4550
4571
  var _a2;
4551
- return /* @__PURE__ */ React62.createElement(
4572
+ return /* @__PURE__ */ React63.createElement(
4552
4573
  VariableRow,
4553
4574
  {
4554
4575
  key: i,
@@ -4599,7 +4620,7 @@ function VariableRow({
4599
4620
  onCommitRename(draftName.trim());
4600
4621
  }
4601
4622
  };
4602
- return /* @__PURE__ */ React62.createElement(Stack, { spacing: 0.75, sx: { pb: 1, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React62.createElement(
4623
+ return /* @__PURE__ */ React63.createElement(Stack, { spacing: 0.75, sx: { pb: 1, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React63.createElement(
4603
4624
  TextField,
4604
4625
  {
4605
4626
  label: t("rename.name-label", "Name"),
@@ -4624,7 +4645,7 @@ function VariableRow({
4624
4645
  error: Boolean(nameError),
4625
4646
  helperText: nameError != null ? nameError : " "
4626
4647
  }
4627
- ), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.25, sx: { mt: 0.5 } }, /* @__PURE__ */ React62.createElement(Tooltip, { title: t("variables.copy-token", "Copy {{name}} token") }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
4648
+ ), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.25, sx: { mt: 0.5 } }, /* @__PURE__ */ React63.createElement(Tooltip, { title: t("variables.copy-token", "Copy {{name}} token") }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
4628
4649
  IconButton,
4629
4650
  {
4630
4651
  size: "small",
@@ -4632,8 +4653,8 @@ function VariableRow({
4632
4653
  disabled: !hasName,
4633
4654
  "aria-label": t("variables.copy-token", "Copy {{name}} token")
4634
4655
  },
4635
- /* @__PURE__ */ React62.createElement(ContentCopyOutlined, { fontSize: "small" })
4636
- ))), /* @__PURE__ */ React62.createElement(Tooltip, { title: canInsert ? t("variables.insert-at-cursor", "Insert at cursor") : t("variables.focus-first", "Focus a text field first") }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
4656
+ /* @__PURE__ */ React63.createElement(ContentCopyOutlined, { fontSize: "small" })
4657
+ ))), /* @__PURE__ */ React63.createElement(Tooltip, { title: canInsert ? t("variables.insert-at-cursor", "Insert at cursor") : t("variables.focus-first", "Focus a text field first") }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
4637
4658
  IconButton,
4638
4659
  {
4639
4660
  size: "small",
@@ -4641,16 +4662,16 @@ function VariableRow({
4641
4662
  disabled: !hasName || !canInsert,
4642
4663
  "aria-label": t("variables.insert-at-cursor", "Insert at cursor")
4643
4664
  },
4644
- /* @__PURE__ */ React62.createElement(InputOutlined, { fontSize: "small" })
4645
- ))), /* @__PURE__ */ React62.createElement(Tooltip, { title: t("variables.remove", "Remove") }, /* @__PURE__ */ React62.createElement(
4665
+ /* @__PURE__ */ React63.createElement(InputOutlined, { fontSize: "small" })
4666
+ ))), /* @__PURE__ */ React63.createElement(Tooltip, { title: t("variables.remove", "Remove") }, /* @__PURE__ */ React63.createElement(
4646
4667
  IconButton,
4647
4668
  {
4648
4669
  size: "small",
4649
4670
  onClick: onRemove,
4650
4671
  "aria-label": t("variables.remove", "Remove")
4651
4672
  },
4652
- /* @__PURE__ */ React62.createElement(DeleteOutline, { fontSize: "small" })
4653
- )))), /* @__PURE__ */ React62.createElement(
4673
+ /* @__PURE__ */ React63.createElement(DeleteOutline, { fontSize: "small" })
4674
+ )))), /* @__PURE__ */ React63.createElement(
4654
4675
  TextField,
4655
4676
  {
4656
4677
  label: t("variables.description", "Description"),
@@ -4660,7 +4681,7 @@ function VariableRow({
4660
4681
  onChange: (e) => onChangeDescription(e.target.value),
4661
4682
  placeholder: t("variables.optional", "Optional")
4662
4683
  }
4663
- ), /* @__PURE__ */ React62.createElement(
4684
+ ), /* @__PURE__ */ React63.createElement(
4664
4685
  TextField,
4665
4686
  {
4666
4687
  label: t("variables.sample-value", "Sample value"),
@@ -4670,7 +4691,7 @@ function VariableRow({
4670
4691
  onChange: (e) => onChangeSampleValue(e.target.value),
4671
4692
  placeholder: t("variables.sample-hint", "Shown in Preview mode"),
4672
4693
  InputProps: {
4673
- startAdornment: /* @__PURE__ */ React62.createElement(
4694
+ startAdornment: /* @__PURE__ */ React63.createElement(
4674
4695
  DataObjectOutlined,
4675
4696
  {
4676
4697
  fontSize: "small",
@@ -4679,7 +4700,7 @@ function VariableRow({
4679
4700
  )
4680
4701
  }
4681
4702
  }
4682
- ), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, sx: { pt: 0.25 } }, hasName && (unused ? /* @__PURE__ */ React62.createElement(Chip, { size: "small", color: "warning", variant: "outlined", label: t("variables.unused", "Unused in body") }) : /* @__PURE__ */ React62.createElement(
4703
+ ), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, sx: { pt: 0.25 } }, hasName && (unused ? /* @__PURE__ */ React63.createElement(Chip, { size: "small", color: "warning", variant: "outlined", label: t("variables.unused", "Unused in body") }) : /* @__PURE__ */ React63.createElement(
4683
4704
  Chip,
4684
4705
  {
4685
4706
  size: "small",
@@ -4704,13 +4725,13 @@ function InspectorDrawer({
4704
4725
  const renderCurrentSidebarPanel = () => {
4705
4726
  switch (selectedSidebarTab) {
4706
4727
  case "block-configuration":
4707
- return /* @__PURE__ */ React62.createElement(ConfigurationPanel, null);
4728
+ return /* @__PURE__ */ React63.createElement(ConfigurationPanel, null);
4708
4729
  case "styles":
4709
- return /* @__PURE__ */ React62.createElement(StylesPanel, null);
4730
+ return /* @__PURE__ */ React63.createElement(StylesPanel, null);
4710
4731
  case "variables":
4711
- return /* @__PURE__ */ React62.createElement(VariablesPanel, null);
4732
+ return /* @__PURE__ */ React63.createElement(VariablesPanel, null);
4712
4733
  case "template-settings":
4713
- return /* @__PURE__ */ React62.createElement(
4734
+ return /* @__PURE__ */ React63.createElement(
4714
4735
  TemplatePanel,
4715
4736
  {
4716
4737
  deleteTemplate,
@@ -4720,7 +4741,7 @@ function InspectorDrawer({
4720
4741
  );
4721
4742
  }
4722
4743
  };
4723
- return /* @__PURE__ */ React62.createElement(
4744
+ return /* @__PURE__ */ React63.createElement(
4724
4745
  Drawer,
4725
4746
  {
4726
4747
  variant: "persistent",
@@ -4742,7 +4763,7 @@ function InspectorDrawer({
4742
4763
  width: inspectorDrawerOpen ? INSPECTOR_DRAWER_WIDTH : 0
4743
4764
  }
4744
4765
  },
4745
- /* @__PURE__ */ React62.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: 49, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React62.createElement(Box, { px: 1 }, /* @__PURE__ */ React62.createElement(
4766
+ /* @__PURE__ */ React63.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: 49, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React63.createElement(Box, { px: 1 }, /* @__PURE__ */ React63.createElement(
4746
4767
  Tabs,
4747
4768
  {
4748
4769
  value: selectedSidebarTab,
@@ -4750,12 +4771,12 @@ function InspectorDrawer({
4750
4771
  variant: "fullWidth",
4751
4772
  sx: { "& .MuiTab-root": { minWidth: 0, px: 1, fontSize: 13 } }
4752
4773
  },
4753
- /* @__PURE__ */ React62.createElement(Tab, { value: "styles", label: t("inspector.tab.styles", "Styles") }),
4754
- /* @__PURE__ */ React62.createElement(Tab, { value: "block-configuration", label: t("inspector.tab.inspect", "Inspect") }),
4755
- /* @__PURE__ */ React62.createElement(Tab, { value: "variables", label: t("inspector.tab.variables", "Variables") }),
4756
- /* @__PURE__ */ React62.createElement(Tab, { value: "template-settings", label: t("inspector.tab.settings", "Settings") })
4774
+ /* @__PURE__ */ React63.createElement(Tab, { value: "styles", label: t("inspector.tab.styles", "Styles") }),
4775
+ /* @__PURE__ */ React63.createElement(Tab, { value: "block-configuration", label: t("inspector.tab.inspect", "Inspect") }),
4776
+ /* @__PURE__ */ React63.createElement(Tab, { value: "variables", label: t("inspector.tab.variables", "Variables") }),
4777
+ /* @__PURE__ */ React63.createElement(Tab, { value: "template-settings", label: t("inspector.tab.settings", "Settings") })
4757
4778
  ))),
4758
- /* @__PURE__ */ React62.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: "calc(100% - 49px)", overflow: "auto" } }, renderCurrentSidebarPanel())
4779
+ /* @__PURE__ */ React63.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: "calc(100% - 49px)", overflow: "auto" } }, renderCurrentSidebarPanel())
4759
4780
  );
4760
4781
  }
4761
4782
  var SnackbarContext = createContext(null);
@@ -4776,7 +4797,7 @@ function SnackbarProvider({ children }) {
4776
4797
  const handleClose = () => {
4777
4798
  setMessage(null);
4778
4799
  };
4779
- return /* @__PURE__ */ React62.createElement(SnackbarContext.Provider, { value: { showMessage } }, children, /* @__PURE__ */ React62.createElement(
4800
+ return /* @__PURE__ */ React63.createElement(SnackbarContext.Provider, { value: { showMessage } }, children, /* @__PURE__ */ React63.createElement(
4780
4801
  Snackbar,
4781
4802
  {
4782
4803
  anchorOrigin: { vertical: "top", horizontal: "center" },
@@ -4853,7 +4874,7 @@ function TemplateRow({
4853
4874
  const hasActions = Boolean(
4854
4875
  onDuplicate || onRename || onDelete || onPromote || onDemote || onDuplicateAsTemplate
4855
4876
  );
4856
- return /* @__PURE__ */ React62.createElement(
4877
+ return /* @__PURE__ */ React63.createElement(
4857
4878
  Box,
4858
4879
  {
4859
4880
  role: "button",
@@ -4879,7 +4900,7 @@ function TemplateRow({
4879
4900
  "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
4880
4901
  }
4881
4902
  },
4882
- /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "flex-start", spacing: 1 }, /* @__PURE__ */ React62.createElement(Box, { sx: { flexGrow: 1, minWidth: 0, pr: hasActions ? 3 : 0 } }, /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "baseline", spacing: 1, sx: { minWidth: 0 } }, /* @__PURE__ */ React62.createElement(
4903
+ /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "flex-start", spacing: 1 }, /* @__PURE__ */ React63.createElement(Box, { sx: { flexGrow: 1, minWidth: 0, pr: hasActions ? 3 : 0 } }, /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "baseline", spacing: 1, sx: { minWidth: 0 } }, /* @__PURE__ */ React63.createElement(
4883
4904
  Typography,
4884
4905
  {
4885
4906
  variant: "body2",
@@ -4893,14 +4914,14 @@ function TemplateRow({
4893
4914
  title: template.slug
4894
4915
  },
4895
4916
  template.slug
4896
- ), updated && !hasActions && /* @__PURE__ */ React62.createElement(
4917
+ ), updated && !hasActions && /* @__PURE__ */ React63.createElement(
4897
4918
  Typography,
4898
4919
  {
4899
4920
  variant: "caption",
4900
4921
  sx: { color: "text.secondary", flexShrink: 0, fontSize: "0.7rem" }
4901
4922
  },
4902
4923
  updated
4903
- )), template.description && /* @__PURE__ */ React62.createElement(
4924
+ )), template.description && /* @__PURE__ */ React63.createElement(
4904
4925
  Typography,
4905
4926
  {
4906
4927
  variant: "caption",
@@ -4914,7 +4935,7 @@ function TemplateRow({
4914
4935
  }
4915
4936
  },
4916
4937
  template.description
4917
- ), template.tags && template.tags.length > 0 && /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, sx: { mt: 0.5, flexWrap: "wrap", gap: 0.5 } }, template.tags.map((tag) => /* @__PURE__ */ React62.createElement(
4938
+ ), template.tags && template.tags.length > 0 && /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, sx: { mt: 0.5, flexWrap: "wrap", gap: 0.5 } }, template.tags.map((tag) => /* @__PURE__ */ React63.createElement(
4918
4939
  Chip,
4919
4940
  {
4920
4941
  key: tag,
@@ -4923,7 +4944,7 @@ function TemplateRow({
4923
4944
  sx: { height: 18, fontSize: "0.65rem", "& .MuiChip-label": { px: 0.75 } }
4924
4945
  }
4925
4946
  ))))),
4926
- hasActions && /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(Tooltip, { title: t("row.more", "More") }, /* @__PURE__ */ React62.createElement(
4947
+ hasActions && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(Tooltip, { title: t("row.more", "More") }, /* @__PURE__ */ React63.createElement(
4927
4948
  IconButton,
4928
4949
  {
4929
4950
  size: "small",
@@ -4939,8 +4960,8 @@ function TemplateRow({
4939
4960
  transition: "opacity 120ms"
4940
4961
  }
4941
4962
  },
4942
- /* @__PURE__ */ React62.createElement(MoreVertOutlined, { fontSize: "small" })
4943
- )), /* @__PURE__ */ React62.createElement(
4963
+ /* @__PURE__ */ React63.createElement(MoreVertOutlined, { fontSize: "small" })
4964
+ )), /* @__PURE__ */ React63.createElement(
4944
4965
  Menu,
4945
4966
  {
4946
4967
  anchorEl: menuAnchor,
@@ -4951,14 +4972,14 @@ function TemplateRow({
4951
4972
  transformOrigin: { vertical: "top", horizontal: "right" },
4952
4973
  slotProps: { paper: { sx: { minWidth: 200 } } }
4953
4974
  },
4954
- onRename && /* @__PURE__ */ React62.createElement(MenuItem, { onClick: runAction(onRename) }, /* @__PURE__ */ React62.createElement(ListItemIcon, null, /* @__PURE__ */ React62.createElement(DriveFileRenameOutlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("row.edit-details", "Edit name & tags\u2026"))),
4955
- onDuplicate && /* @__PURE__ */ React62.createElement(MenuItem, { onClick: runAction(onDuplicate) }, /* @__PURE__ */ React62.createElement(ListItemIcon, null, /* @__PURE__ */ React62.createElement(ContentCopyOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("row.duplicate", "Duplicate"))),
4956
- onDuplicateAsTemplate && /* @__PURE__ */ React62.createElement(MenuItem, { onClick: runAction(onDuplicateAsTemplate) }, /* @__PURE__ */ React62.createElement(ListItemIcon, null, /* @__PURE__ */ React62.createElement(LibraryAddOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("row.duplicate-as-template", "Duplicate as template"))),
4957
- onPromote && /* @__PURE__ */ React62.createElement(MenuItem, { onClick: runAction(onPromote) }, /* @__PURE__ */ React62.createElement(ListItemIcon, null, /* @__PURE__ */ React62.createElement(FileUploadOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("row.promote", "Promote to sample"))),
4958
- onDemote && /* @__PURE__ */ React62.createElement(MenuItem, { onClick: runAction(onDemote) }, /* @__PURE__ */ React62.createElement(ListItemIcon, null, /* @__PURE__ */ React62.createElement(FileDownloadOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("row.demote", "Demote to template"))),
4975
+ onRename && /* @__PURE__ */ React63.createElement(MenuItem, { onClick: runAction(onRename) }, /* @__PURE__ */ React63.createElement(ListItemIcon, null, /* @__PURE__ */ React63.createElement(DriveFileRenameOutlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("row.edit-details", "Edit name & tags\u2026"))),
4976
+ onDuplicate && /* @__PURE__ */ React63.createElement(MenuItem, { onClick: runAction(onDuplicate) }, /* @__PURE__ */ React63.createElement(ListItemIcon, null, /* @__PURE__ */ React63.createElement(ContentCopyOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("row.duplicate", "Duplicate"))),
4977
+ onDuplicateAsTemplate && /* @__PURE__ */ React63.createElement(MenuItem, { onClick: runAction(onDuplicateAsTemplate) }, /* @__PURE__ */ React63.createElement(ListItemIcon, null, /* @__PURE__ */ React63.createElement(LibraryAddOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("row.duplicate-as-template", "Duplicate as template"))),
4978
+ onPromote && /* @__PURE__ */ React63.createElement(MenuItem, { onClick: runAction(onPromote) }, /* @__PURE__ */ React63.createElement(ListItemIcon, null, /* @__PURE__ */ React63.createElement(FileUploadOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("row.promote", "Promote to sample"))),
4979
+ onDemote && /* @__PURE__ */ React63.createElement(MenuItem, { onClick: runAction(onDemote) }, /* @__PURE__ */ React63.createElement(ListItemIcon, null, /* @__PURE__ */ React63.createElement(FileDownloadOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("row.demote", "Demote to template"))),
4959
4980
  onDelete && [
4960
- /* @__PURE__ */ React62.createElement(Divider$1, { key: "divider" }),
4961
- /* @__PURE__ */ React62.createElement(MenuItem, { key: "delete", onClick: runAction(onDelete), sx: { color: "error.main" } }, /* @__PURE__ */ React62.createElement(ListItemIcon, { sx: { color: "error.main" } }, /* @__PURE__ */ React62.createElement(DeleteOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(ListItemText, null, t("tune.delete", "Delete")))
4981
+ /* @__PURE__ */ React63.createElement(Divider$1, { key: "divider" }),
4982
+ /* @__PURE__ */ React63.createElement(MenuItem, { key: "delete", onClick: runAction(onDelete), sx: { color: "error.main" } }, /* @__PURE__ */ React63.createElement(ListItemIcon, { sx: { color: "error.main" } }, /* @__PURE__ */ React63.createElement(DeleteOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(ListItemText, null, t("tune.delete", "Delete")))
4962
4983
  ]
4963
4984
  ))
4964
4985
  );
@@ -5073,31 +5094,31 @@ var PREVIEW_MAX = 36;
5073
5094
  function iconForType(type) {
5074
5095
  switch (type) {
5075
5096
  case "EmailLayout":
5076
- return /* @__PURE__ */ React62.createElement(DashboardOutlined, { fontSize: "small" });
5097
+ return /* @__PURE__ */ React63.createElement(DashboardOutlined, { fontSize: "small" });
5077
5098
  case "Heading":
5078
- return /* @__PURE__ */ React62.createElement(HMobiledataOutlined, { fontSize: "small" });
5099
+ return /* @__PURE__ */ React63.createElement(HMobiledataOutlined, { fontSize: "small" });
5079
5100
  case "Text":
5080
- return /* @__PURE__ */ React62.createElement(NotesOutlined, { fontSize: "small" });
5101
+ return /* @__PURE__ */ React63.createElement(NotesOutlined, { fontSize: "small" });
5081
5102
  case "Button":
5082
- return /* @__PURE__ */ React62.createElement(SmartButtonOutlined, { fontSize: "small" });
5103
+ return /* @__PURE__ */ React63.createElement(SmartButtonOutlined, { fontSize: "small" });
5083
5104
  case "Image":
5084
- return /* @__PURE__ */ React62.createElement(ImageOutlined, { fontSize: "small" });
5105
+ return /* @__PURE__ */ React63.createElement(ImageOutlined, { fontSize: "small" });
5085
5106
  case "Avatar":
5086
- return /* @__PURE__ */ React62.createElement(AccountCircleOutlined, { fontSize: "small" });
5107
+ return /* @__PURE__ */ React63.createElement(AccountCircleOutlined, { fontSize: "small" });
5087
5108
  case "Signature":
5088
- return /* @__PURE__ */ React62.createElement(ContactMailOutlined, { fontSize: "small" });
5109
+ return /* @__PURE__ */ React63.createElement(ContactMailOutlined, { fontSize: "small" });
5089
5110
  case "Divider":
5090
- return /* @__PURE__ */ React62.createElement(HorizontalRuleOutlined, { fontSize: "small" });
5111
+ return /* @__PURE__ */ React63.createElement(HorizontalRuleOutlined, { fontSize: "small" });
5091
5112
  case "Spacer":
5092
- return /* @__PURE__ */ React62.createElement(Crop32Outlined, { fontSize: "small" });
5113
+ return /* @__PURE__ */ React63.createElement(Crop32Outlined, { fontSize: "small" });
5093
5114
  case "Html":
5094
- return /* @__PURE__ */ React62.createElement(HtmlOutlined, { fontSize: "small" });
5115
+ return /* @__PURE__ */ React63.createElement(HtmlOutlined, { fontSize: "small" });
5095
5116
  case "Container":
5096
- return /* @__PURE__ */ React62.createElement(LibraryAddOutlined, { fontSize: "small" });
5117
+ return /* @__PURE__ */ React63.createElement(LibraryAddOutlined, { fontSize: "small" });
5097
5118
  case "ColumnsContainer":
5098
- return /* @__PURE__ */ React62.createElement(ViewColumnOutlined, { fontSize: "small" });
5119
+ return /* @__PURE__ */ React63.createElement(ViewColumnOutlined, { fontSize: "small" });
5099
5120
  default:
5100
- return /* @__PURE__ */ React62.createElement(BusinessOutlined, { fontSize: "small" });
5121
+ return /* @__PURE__ */ React63.createElement(BusinessOutlined, { fontSize: "small" });
5101
5122
  }
5102
5123
  }
5103
5124
  function previewText(text) {
@@ -5175,7 +5196,7 @@ function buildNode(id, doc, ctx) {
5175
5196
  id: `${id}::col${colIdx}`,
5176
5197
  label: `Column ${colIdx + 1}`,
5177
5198
  preview: colChildren.length === 1 ? "1 child" : `${colChildren.length} children`,
5178
- icon: /* @__PURE__ */ React62.createElement(ViewColumnSharp, { fontSize: "small", sx: { opacity: 0.6 } }),
5199
+ icon: /* @__PURE__ */ React63.createElement(ViewColumnSharp, { fontSize: "small", sx: { opacity: 0.6 } }),
5179
5200
  children: colChildren,
5180
5201
  containerChildrenRef: parentForCol
5181
5202
  });
@@ -5237,7 +5258,7 @@ function OutlinePanel() {
5237
5258
  setSelectedBlockId(payload.sourceId);
5238
5259
  }
5239
5260
  };
5240
- return /* @__PURE__ */ React62.createElement(Box, null, /* @__PURE__ */ React62.createElement(Typography, { variant: "subtitle2", component: "h2", sx: { fontWeight: "bold", mb: 0.5, px: 0.5 } }, t("outline.title", "Outline")), /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { display: "block", color: "text.secondary", px: 0.5, mb: 1 } }, t("outline.hint", "Click a row to select. Drag a row to reorder or move it into a container.")), tree ? /* @__PURE__ */ React62.createElement(
5261
+ return /* @__PURE__ */ React63.createElement(Box, null, /* @__PURE__ */ React63.createElement(Typography, { variant: "subtitle2", component: "h2", sx: { fontWeight: "bold", mb: 0.5, px: 0.5 } }, t("outline.title", "Outline")), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { display: "block", color: "text.secondary", px: 0.5, mb: 1 } }, t("outline.hint", "Click a row to select. Drag a row to reorder or move it into a container.")), tree ? /* @__PURE__ */ React63.createElement(
5241
5262
  OutlineRow,
5242
5263
  {
5243
5264
  node: tree,
@@ -5248,7 +5269,7 @@ function OutlinePanel() {
5248
5269
  setDragging,
5249
5270
  performMove
5250
5271
  }
5251
- ) : /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", px: 0.5 } }, "Nothing to outline."));
5272
+ ) : /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", px: 0.5 } }, "Nothing to outline."));
5252
5273
  }
5253
5274
  function OutlineRow({
5254
5275
  node,
@@ -5334,7 +5355,7 @@ function OutlineRow({
5334
5355
  const patch = buildMovePatch(document2, node.id, node.parent, node.parent, nextIndex + (delta > 0 ? 1 : 0));
5335
5356
  if (patch) setDocument(patch);
5336
5357
  };
5337
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(Box, { sx: { position: "relative" } }, dropPos === "before" && /* @__PURE__ */ React62.createElement(DropLine, { depth }), /* @__PURE__ */ React62.createElement(
5358
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(Box, { sx: { position: "relative" } }, dropPos === "before" && /* @__PURE__ */ React63.createElement(DropLine, { depth }), /* @__PURE__ */ React63.createElement(
5338
5359
  Stack,
5339
5360
  {
5340
5361
  direction: "row",
@@ -5367,7 +5388,7 @@ function OutlineRow({
5367
5388
  userSelect: "none"
5368
5389
  }
5369
5390
  },
5370
- hasChildren ? /* @__PURE__ */ React62.createElement(
5391
+ hasChildren ? /* @__PURE__ */ React63.createElement(
5371
5392
  Box,
5372
5393
  {
5373
5394
  role: "button",
@@ -5378,9 +5399,9 @@ function OutlineRow({
5378
5399
  },
5379
5400
  sx: { display: "flex", alignItems: "center", cursor: "pointer" }
5380
5401
  },
5381
- expanded ? /* @__PURE__ */ React62.createElement(ExpandMore, { fontSize: "small" }) : /* @__PURE__ */ React62.createElement(ChevronRight, { fontSize: "small" })
5382
- ) : /* @__PURE__ */ React62.createElement(Box, { sx: { width: 20 } }),
5383
- /* @__PURE__ */ React62.createElement(
5402
+ expanded ? /* @__PURE__ */ React63.createElement(ExpandMore, { fontSize: "small" }) : /* @__PURE__ */ React63.createElement(ChevronRight, { fontSize: "small" })
5403
+ ) : /* @__PURE__ */ React63.createElement(Box, { sx: { width: 20 } }),
5404
+ /* @__PURE__ */ React63.createElement(
5384
5405
  Box,
5385
5406
  {
5386
5407
  sx: {
@@ -5392,7 +5413,7 @@ function OutlineRow({
5392
5413
  },
5393
5414
  node.icon
5394
5415
  ),
5395
- /* @__PURE__ */ React62.createElement(
5416
+ /* @__PURE__ */ React63.createElement(
5396
5417
  Typography,
5397
5418
  {
5398
5419
  variant: "body2",
@@ -5404,7 +5425,7 @@ function OutlineRow({
5404
5425
  },
5405
5426
  node.label
5406
5427
  ),
5407
- node.preview && /* @__PURE__ */ React62.createElement(
5428
+ node.preview && /* @__PURE__ */ React63.createElement(
5408
5429
  Typography,
5409
5430
  {
5410
5431
  variant: "body2",
@@ -5420,7 +5441,7 @@ function OutlineRow({
5420
5441
  "\u2014 ",
5421
5442
  node.preview
5422
5443
  ),
5423
- canMove && /* @__PURE__ */ React62.createElement(
5444
+ canMove && /* @__PURE__ */ React63.createElement(
5424
5445
  Box,
5425
5446
  {
5426
5447
  className: "outline-move-btns",
@@ -5431,7 +5452,7 @@ function OutlineRow({
5431
5452
  transition: "opacity 120ms"
5432
5453
  }
5433
5454
  },
5434
- /* @__PURE__ */ React62.createElement(Tooltip, { title: "Move up" }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
5455
+ /* @__PURE__ */ React63.createElement(Tooltip, { title: "Move up" }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
5435
5456
  IconButton,
5436
5457
  {
5437
5458
  size: "small",
@@ -5443,9 +5464,9 @@ function OutlineRow({
5443
5464
  "aria-label": `Move ${node.label} up`,
5444
5465
  sx: { p: 0.25 }
5445
5466
  },
5446
- /* @__PURE__ */ React62.createElement(KeyboardArrowUp, { fontSize: "small" })
5467
+ /* @__PURE__ */ React63.createElement(KeyboardArrowUp, { fontSize: "small" })
5447
5468
  ))),
5448
- /* @__PURE__ */ React62.createElement(Tooltip, { title: "Move down" }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
5469
+ /* @__PURE__ */ React63.createElement(Tooltip, { title: "Move down" }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
5449
5470
  IconButton,
5450
5471
  {
5451
5472
  size: "small",
@@ -5457,10 +5478,10 @@ function OutlineRow({
5457
5478
  "aria-label": `Move ${node.label} down`,
5458
5479
  sx: { p: 0.25 }
5459
5480
  },
5460
- /* @__PURE__ */ React62.createElement(KeyboardArrowDown, { fontSize: "small" })
5481
+ /* @__PURE__ */ React63.createElement(KeyboardArrowDown, { fontSize: "small" })
5461
5482
  )))
5462
5483
  )
5463
- ), dropPos === "after" && /* @__PURE__ */ React62.createElement(DropLine, { depth })), hasChildren && expanded && /* @__PURE__ */ React62.createElement(Box, null, node.children.map((child) => /* @__PURE__ */ React62.createElement(
5484
+ ), dropPos === "after" && /* @__PURE__ */ React63.createElement(DropLine, { depth })), hasChildren && expanded && /* @__PURE__ */ React63.createElement(Box, null, node.children.map((child) => /* @__PURE__ */ React63.createElement(
5464
5485
  OutlineRow,
5465
5486
  {
5466
5487
  key: child.id,
@@ -5475,7 +5496,7 @@ function OutlineRow({
5475
5496
  ))));
5476
5497
  }
5477
5498
  function DropLine({ depth }) {
5478
- return /* @__PURE__ */ React62.createElement(
5499
+ return /* @__PURE__ */ React63.createElement(
5479
5500
  Box,
5480
5501
  {
5481
5502
  sx: {
@@ -5483,7 +5504,7 @@ function DropLine({ depth }) {
5483
5504
  height: 0
5484
5505
  }
5485
5506
  },
5486
- /* @__PURE__ */ React62.createElement(
5507
+ /* @__PURE__ */ React63.createElement(
5487
5508
  Box,
5488
5509
  {
5489
5510
  sx: {
@@ -5544,7 +5565,7 @@ function NewTemplatePickerDialog({
5544
5565
  }
5545
5566
  });
5546
5567
  const pickable = samples.filter((s) => s.id !== "empty-email");
5547
- return /* @__PURE__ */ React62.createElement(Dialog, { open, onClose: busy ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React62.createElement(DialogTitle, null, kind === "sample" ? t("picker.title-sample", "New sample") : t("picker.title-template", "New template")), /* @__PURE__ */ React62.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React62.createElement(Typography, { variant: "subtitle2", sx: { mb: 1 } }, t("picker.start-from", "Start from")), /* @__PURE__ */ React62.createElement(
5568
+ return /* @__PURE__ */ React63.createElement(Dialog, { open, onClose: busy ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React63.createElement(DialogTitle, null, kind === "sample" ? t("picker.title-sample", "New sample") : t("picker.title-template", "New template")), /* @__PURE__ */ React63.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React63.createElement(Typography, { variant: "subtitle2", sx: { mb: 1 } }, t("picker.start-from", "Start from")), /* @__PURE__ */ React63.createElement(
5548
5569
  List,
5549
5570
  {
5550
5571
  dense: true,
@@ -5558,24 +5579,24 @@ function NewTemplatePickerDialog({
5558
5579
  overflowY: "auto"
5559
5580
  }
5560
5581
  },
5561
- /* @__PURE__ */ React62.createElement(
5582
+ /* @__PURE__ */ React63.createElement(
5562
5583
  ListItemButton,
5563
5584
  {
5564
5585
  selected: selectedStarter === null,
5565
5586
  onClick: () => setSelectedStarter(null)
5566
5587
  },
5567
- /* @__PURE__ */ React62.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React62.createElement(InsertDriveFileOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React62.createElement(ListItemText, { primary: t("picker.blank-title", "Blank"), secondary: t("picker.blank-desc", "Start from an empty email") }))
5588
+ /* @__PURE__ */ React63.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React63.createElement(InsertDriveFileOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React63.createElement(ListItemText, { primary: t("picker.blank-title", "Blank"), secondary: t("picker.blank-desc", "Start from an empty email") }))
5568
5589
  ),
5569
- pickable.map((s) => /* @__PURE__ */ React62.createElement(
5590
+ pickable.map((s) => /* @__PURE__ */ React63.createElement(
5570
5591
  ListItemButton,
5571
5592
  {
5572
5593
  key: s.id,
5573
5594
  selected: selectedStarter === s.id,
5574
5595
  onClick: () => setSelectedStarter(s.id)
5575
5596
  },
5576
- /* @__PURE__ */ React62.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React62.createElement(DescriptionOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React62.createElement(ListItemText, { primary: s.slug, secondary: s.description }))
5597
+ /* @__PURE__ */ React63.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React63.createElement(DescriptionOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React63.createElement(ListItemText, { primary: s.slug, secondary: s.description }))
5577
5598
  ))
5578
- ), /* @__PURE__ */ React62.createElement(
5599
+ ), /* @__PURE__ */ React63.createElement(
5579
5600
  TextField,
5580
5601
  {
5581
5602
  autoFocus: true,
@@ -5595,7 +5616,7 @@ function NewTemplatePickerDialog({
5595
5616
  helperText: error != null ? error : " ",
5596
5617
  disabled: busy
5597
5618
  }
5598
- )), /* @__PURE__ */ React62.createElement(DialogActions, null, /* @__PURE__ */ React62.createElement(Button$1, { onClick: onClose, disabled: busy }, t("common.cancel", "Cancel")), /* @__PURE__ */ React62.createElement(Button$1, { variant: "contained", onClick: handleCreate, disabled: busy }, busy ? t("picker.creating", "Creating\u2026") : kind === "sample" ? t("picker.create-sample", "Create sample") : t("picker.create-template", "Create template"))));
5619
+ )), /* @__PURE__ */ React63.createElement(DialogActions, null, /* @__PURE__ */ React63.createElement(Button$1, { onClick: onClose, disabled: busy }, t("common.cancel", "Cancel")), /* @__PURE__ */ React63.createElement(Button$1, { variant: "contained", onClick: handleCreate, disabled: busy }, busy ? t("picker.creating", "Creating\u2026") : kind === "sample" ? t("picker.create-sample", "Create sample") : t("picker.create-template", "Create template"))));
5599
5620
  }
5600
5621
  function RenameDialog({
5601
5622
  open,
@@ -5657,7 +5678,7 @@ function RenameDialog({
5657
5678
  setSubmitting(false);
5658
5679
  }
5659
5680
  });
5660
- return /* @__PURE__ */ React62.createElement(Dialog, { open, onClose: submitting ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React62.createElement(DialogTitle, null, t("rename.title", "Edit details")), /* @__PURE__ */ React62.createElement(DialogContent, null, /* @__PURE__ */ React62.createElement(
5681
+ return /* @__PURE__ */ React63.createElement(Dialog, { open, onClose: submitting ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React63.createElement(DialogTitle, null, t("rename.title", "Edit details")), /* @__PURE__ */ React63.createElement(DialogContent, null, /* @__PURE__ */ React63.createElement(
5661
5682
  TextField,
5662
5683
  {
5663
5684
  autoFocus: true,
@@ -5677,7 +5698,7 @@ function RenameDialog({
5677
5698
  if (e.key === "Enter" && !submitting) handleSubmit();
5678
5699
  }
5679
5700
  }
5680
- ), /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 1, mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React62.createElement(
5701
+ ), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 1, mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React63.createElement(
5681
5702
  Chip,
5682
5703
  {
5683
5704
  key: tag,
@@ -5685,7 +5706,7 @@ function RenameDialog({
5685
5706
  size: "small",
5686
5707
  onDelete: submitting ? void 0 : () => removeTag(tag)
5687
5708
  }
5688
- ))) : /* @__PURE__ */ React62.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React62.createElement(
5709
+ ))) : /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React63.createElement(
5689
5710
  TextField,
5690
5711
  {
5691
5712
  size: "small",
@@ -5704,20 +5725,20 @@ function RenameDialog({
5704
5725
  }
5705
5726
  },
5706
5727
  InputProps: {
5707
- endAdornment: /* @__PURE__ */ React62.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React62.createElement(
5728
+ endAdornment: /* @__PURE__ */ React63.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React63.createElement(
5708
5729
  Button$1,
5709
5730
  {
5710
5731
  size: "small",
5711
5732
  onClick: addTag,
5712
5733
  disabled: !tagInput.trim() || submitting,
5713
- startIcon: /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" }),
5734
+ startIcon: /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" }),
5714
5735
  sx: { textTransform: "none" }
5715
5736
  },
5716
5737
  t("common.add", "Add")
5717
5738
  ))
5718
5739
  }
5719
5740
  }
5720
- ), /* @__PURE__ */ React62.createElement(Box, { sx: { minHeight: 8 } })), /* @__PURE__ */ React62.createElement(DialogActions, null, /* @__PURE__ */ React62.createElement(Button$1, { onClick: onClose, disabled: submitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React62.createElement(
5741
+ ), /* @__PURE__ */ React63.createElement(Box, { sx: { minHeight: 8 } })), /* @__PURE__ */ React63.createElement(DialogActions, null, /* @__PURE__ */ React63.createElement(Button$1, { onClick: onClose, disabled: submitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React63.createElement(
5721
5742
  Button$1,
5722
5743
  {
5723
5744
  onClick: handleSubmit,
@@ -5787,7 +5808,7 @@ function SaveTemplateDialog({
5787
5808
  setInternalError("");
5788
5809
  onClose();
5789
5810
  };
5790
- return /* @__PURE__ */ React62.createElement(
5811
+ return /* @__PURE__ */ React63.createElement(
5791
5812
  Dialog,
5792
5813
  {
5793
5814
  open,
@@ -5795,8 +5816,8 @@ function SaveTemplateDialog({
5795
5816
  maxWidth: "sm",
5796
5817
  fullWidth: true
5797
5818
  },
5798
- /* @__PURE__ */ React62.createElement(DialogTitle, null, mode === "new" ? t("save-dialog.title-new", "Create a new template") : t("save-dialog.title", "Save as a new template")),
5799
- /* @__PURE__ */ React62.createElement(DialogContent, null, /* @__PURE__ */ React62.createElement(Box, { sx: { pt: 1 } }, /* @__PURE__ */ React62.createElement(
5819
+ /* @__PURE__ */ React63.createElement(DialogTitle, null, mode === "new" ? t("save-dialog.title-new", "Create a new template") : t("save-dialog.title", "Save as a new template")),
5820
+ /* @__PURE__ */ React63.createElement(DialogContent, null, /* @__PURE__ */ React63.createElement(Box, { sx: { pt: 1 } }, /* @__PURE__ */ React63.createElement(
5800
5821
  TextField,
5801
5822
  {
5802
5823
  autoFocus: true,
@@ -5819,7 +5840,7 @@ function SaveTemplateDialog({
5819
5840
  disabled: isSubmitting
5820
5841
  }
5821
5842
  ))),
5822
- /* @__PURE__ */ React62.createElement(DialogActions, null, /* @__PURE__ */ React62.createElement(Button$1, { onClick: handleCancel, disabled: isSubmitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React62.createElement(
5843
+ /* @__PURE__ */ React63.createElement(DialogActions, null, /* @__PURE__ */ React63.createElement(Button$1, { onClick: handleCancel, disabled: isSubmitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React63.createElement(
5823
5844
  Button$1,
5824
5845
  {
5825
5846
  onClick: handleSave,
@@ -6140,7 +6161,7 @@ function SamplesDrawer({
6140
6161
  return null;
6141
6162
  }
6142
6163
  const existingSlugs = templates.map((t2) => t2.slug);
6143
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
6164
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
6144
6165
  Drawer,
6145
6166
  {
6146
6167
  variant: "persistent",
@@ -6155,7 +6176,7 @@ function SamplesDrawer({
6155
6176
  transitionDuration: { enter: enterDuration, exit: exitDuration },
6156
6177
  sx: { width: samplesDrawerOpen ? SAMPLES_DRAWER_WIDTH : 0 }
6157
6178
  },
6158
- /* @__PURE__ */ React62.createElement(
6179
+ /* @__PURE__ */ React63.createElement(
6159
6180
  Stack,
6160
6181
  {
6161
6182
  py: 1,
@@ -6165,16 +6186,16 @@ function SamplesDrawer({
6165
6186
  spacing: 1.5,
6166
6187
  sx: { overflowY: "auto" }
6167
6188
  },
6168
- /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { pt: 1 } }, /* @__PURE__ */ React62.createElement(Typography, { variant: "h6", component: "h1" }, /* @__PURE__ */ React62.createElement(Trans, { id: "drawer.library" }, "Library")), saveAs && (activeLeftTab === "templates" || activeLeftTab === "samples") && /* @__PURE__ */ React62.createElement(Tooltip, { title: activeLeftTab === "samples" ? t("drawer.new-sample", "New sample") : t("drawer.new-template", "New template") }, /* @__PURE__ */ React62.createElement(
6189
+ /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { pt: 1 } }, /* @__PURE__ */ React63.createElement(Typography, { variant: "h6", component: "h1" }, /* @__PURE__ */ React63.createElement(Trans, { id: "drawer.library" }, "Library")), saveAs && (activeLeftTab === "templates" || activeLeftTab === "samples") && /* @__PURE__ */ React63.createElement(Tooltip, { title: activeLeftTab === "samples" ? t("drawer.new-sample", "New sample") : t("drawer.new-template", "New template") }, /* @__PURE__ */ React63.createElement(
6169
6190
  IconButton,
6170
6191
  {
6171
6192
  size: "small",
6172
6193
  onClick: () => openNewPicker(activeLeftTab === "samples" ? "sample" : "template"),
6173
6194
  "aria-label": activeLeftTab === "samples" ? t("drawer.new-sample", "New sample") : t("drawer.new-template", "New template")
6174
6195
  },
6175
- /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" })
6196
+ /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" })
6176
6197
  ))),
6177
- /* @__PURE__ */ React62.createElement(
6198
+ /* @__PURE__ */ React63.createElement(
6178
6199
  Tabs,
6179
6200
  {
6180
6201
  value: activeLeftTab,
@@ -6182,11 +6203,11 @@ function SamplesDrawer({
6182
6203
  variant: "fullWidth",
6183
6204
  sx: { minHeight: 36, "& .MuiTab-root": { minHeight: 36, minWidth: 0, px: 1, fontSize: 13 } }
6184
6205
  },
6185
- /* @__PURE__ */ React62.createElement(Tab, { value: "templates", label: t("drawer.tab.templates", "Templates"), disabled: !loadTemplates }),
6186
- /* @__PURE__ */ React62.createElement(Tab, { value: "samples", label: t("drawer.tab.samples", "Samples") }),
6187
- /* @__PURE__ */ React62.createElement(Tab, { value: "outline", label: t("drawer.tab.outline", "Outline") })
6206
+ /* @__PURE__ */ React63.createElement(Tab, { value: "templates", label: t("drawer.tab.templates", "Templates"), disabled: !loadTemplates }),
6207
+ /* @__PURE__ */ React63.createElement(Tab, { value: "samples", label: t("drawer.tab.samples", "Samples") }),
6208
+ /* @__PURE__ */ React63.createElement(Tab, { value: "outline", label: t("drawer.tab.outline", "Outline") })
6188
6209
  ),
6189
- activeLeftTab === "outline" ? /* @__PURE__ */ React62.createElement(OutlinePanel, null) : /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
6210
+ activeLeftTab === "outline" ? /* @__PURE__ */ React63.createElement(OutlinePanel, null) : /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
6190
6211
  TextField,
6191
6212
  {
6192
6213
  size: "small",
@@ -6194,10 +6215,10 @@ function SamplesDrawer({
6194
6215
  value: search,
6195
6216
  onChange: (e) => setSearch(e.target.value),
6196
6217
  InputProps: {
6197
- startAdornment: /* @__PURE__ */ React62.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React62.createElement(SearchOutlined, { fontSize: "small" }))
6218
+ startAdornment: /* @__PURE__ */ React63.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React63.createElement(SearchOutlined, { fontSize: "small" }))
6198
6219
  }
6199
6220
  }
6200
- ), /* @__PURE__ */ React62.createElement(
6221
+ ), /* @__PURE__ */ React63.createElement(
6201
6222
  TextField,
6202
6223
  {
6203
6224
  select: true,
@@ -6206,8 +6227,8 @@ function SamplesDrawer({
6206
6227
  value: sortKey,
6207
6228
  onChange: (e) => setSortKey(e.target.value)
6208
6229
  },
6209
- SORT_OPTIONS.map((opt) => /* @__PURE__ */ React62.createElement(MenuItem, { key: opt.value, value: opt.value }, t(opt.labelKey, opt.fallback)))
6210
- ), allTags.length > 0 && /* @__PURE__ */ React62.createElement(Stack, { direction: "row", sx: { flexWrap: "wrap", gap: 0.5 } }, /* @__PURE__ */ React62.createElement(
6230
+ SORT_OPTIONS.map((opt) => /* @__PURE__ */ React63.createElement(MenuItem, { key: opt.value, value: opt.value }, t(opt.labelKey, opt.fallback)))
6231
+ ), allTags.length > 0 && /* @__PURE__ */ React63.createElement(Stack, { direction: "row", sx: { flexWrap: "wrap", gap: 0.5 } }, /* @__PURE__ */ React63.createElement(
6211
6232
  Chip,
6212
6233
  {
6213
6234
  label: t("drawer.tag.all", "All"),
@@ -6217,7 +6238,7 @@ function SamplesDrawer({
6217
6238
  variant: activeTags.length === 0 ? "filled" : "outlined",
6218
6239
  onClick: () => setActiveTags([])
6219
6240
  }
6220
- ), allTags.map((tag) => /* @__PURE__ */ React62.createElement(
6241
+ ), allTags.map((tag) => /* @__PURE__ */ React63.createElement(
6221
6242
  Chip,
6222
6243
  {
6223
6244
  key: tag,
@@ -6228,7 +6249,7 @@ function SamplesDrawer({
6228
6249
  variant: activeTags.includes(tag) ? "filled" : "outlined",
6229
6250
  onClick: () => toggleTag(tag)
6230
6251
  }
6231
- ))), activeLeftTab === "templates" ? /* @__PURE__ */ React62.createElement(Box, null, loadingTemplates ? /* @__PURE__ */ React62.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React62.createElement(CircularProgress, { size: 24 })) : templatesError ? /* @__PURE__ */ React62.createElement(Alert, { severity: "error", sx: { my: 1 } }, templatesError) : filteredTemplates.length > 0 ? /* @__PURE__ */ React62.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredTemplates.map((template) => /* @__PURE__ */ React62.createElement(
6252
+ ))), activeLeftTab === "templates" ? /* @__PURE__ */ React63.createElement(Box, null, loadingTemplates ? /* @__PURE__ */ React63.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React63.createElement(CircularProgress, { size: 24 })) : templatesError ? /* @__PURE__ */ React63.createElement(Alert, { severity: "error", sx: { my: 1 } }, templatesError) : filteredTemplates.length > 0 ? /* @__PURE__ */ React63.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredTemplates.map((template) => /* @__PURE__ */ React63.createElement(
6232
6253
  TemplateRow,
6233
6254
  {
6234
6255
  key: template.id,
@@ -6240,7 +6261,7 @@ function SamplesDrawer({
6240
6261
  onDelete: deleteTemplate ? () => handleDelete(template) : void 0,
6241
6262
  onPromote: setTemplateKind ? () => handleSetKind(template, "sample") : void 0
6242
6263
  }
6243
- ))) : /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", py: 1 } }, templateRows.length === 0 ? t("drawer.no-templates", "No saved templates yet") : t("drawer.no-templates-match", "No templates match your filters"))) : /* @__PURE__ */ React62.createElement(Box, null, loadingSamples ? /* @__PURE__ */ React62.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React62.createElement(CircularProgress, { size: 24 })) : filteredSamples.length > 0 ? /* @__PURE__ */ React62.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredSamples.map((sample) => /* @__PURE__ */ React62.createElement(
6264
+ ))) : /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", py: 1 } }, templateRows.length === 0 ? t("drawer.no-templates", "No saved templates yet") : t("drawer.no-templates-match", "No templates match your filters"))) : /* @__PURE__ */ React63.createElement(Box, null, loadingSamples ? /* @__PURE__ */ React63.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React63.createElement(CircularProgress, { size: 24 })) : filteredSamples.length > 0 ? /* @__PURE__ */ React63.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredSamples.map((sample) => /* @__PURE__ */ React63.createElement(
6244
6265
  TemplateRow,
6245
6266
  {
6246
6267
  key: sample.id,
@@ -6252,9 +6273,9 @@ function SamplesDrawer({
6252
6273
  onDelete: deleteTemplate ? () => handleDelete(sample) : void 0,
6253
6274
  onDemote: setTemplateKind ? () => handleSetKind(sample, "template") : void 0
6254
6275
  }
6255
- ))) : /* @__PURE__ */ React62.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", py: 1 } }, sampleRows.length === 0 ? t("drawer.no-samples", "No samples available") : t("drawer.no-samples-match", "No samples match your filters"))))
6276
+ ))) : /* @__PURE__ */ React63.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", py: 1 } }, sampleRows.length === 0 ? t("drawer.no-samples", "No samples available") : t("drawer.no-samples-match", "No samples match your filters"))))
6256
6277
  )
6257
- ), renameTarget && /* @__PURE__ */ React62.createElement(
6278
+ ), renameTarget && /* @__PURE__ */ React63.createElement(
6258
6279
  RenameDialog,
6259
6280
  {
6260
6281
  open: !!renameTarget,
@@ -6264,7 +6285,7 @@ function SamplesDrawer({
6264
6285
  onClose: () => setRenameTarget(null),
6265
6286
  onSubmit: handleRenameSubmit
6266
6287
  }
6267
- ), /* @__PURE__ */ React62.createElement(
6288
+ ), /* @__PURE__ */ React63.createElement(
6268
6289
  SaveTemplateDialog,
6269
6290
  {
6270
6291
  open: !!pendingSaveAs,
@@ -6277,7 +6298,7 @@ function SamplesDrawer({
6277
6298
  defaultName: (_b = pendingSaveAs == null ? void 0 : pendingSaveAs.defaultName) != null ? _b : "New Template",
6278
6299
  error: newError
6279
6300
  }
6280
- ), /* @__PURE__ */ React62.createElement(
6301
+ ), /* @__PURE__ */ React63.createElement(
6281
6302
  NewTemplatePickerDialog,
6282
6303
  {
6283
6304
  open: pickerKind !== null,
@@ -6289,6 +6310,66 @@ function SamplesDrawer({
6289
6310
  }
6290
6311
  ));
6291
6312
  }
6313
+
6314
+ // src/editor/blocks/helpers/block-utils.ts
6315
+ function generateId() {
6316
+ return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
6317
+ }
6318
+ function rekeyBlocks(blocks, rootBlockId) {
6319
+ var _a, _b, _c;
6320
+ const idMap = {};
6321
+ for (const oldId of Object.keys(blocks)) {
6322
+ idMap[oldId] = generateId();
6323
+ }
6324
+ const remapIds = (ids) => ids == null ? void 0 : ids.map((id) => {
6325
+ var _a2;
6326
+ return (_a2 = idMap[id]) != null ? _a2 : id;
6327
+ });
6328
+ const newBlocks = {};
6329
+ for (const [oldId, block] of Object.entries(blocks)) {
6330
+ const b = block;
6331
+ const newId = idMap[oldId];
6332
+ if (b.type === "Container") {
6333
+ newBlocks[newId] = __spreadProps(__spreadValues({}, b), {
6334
+ data: __spreadProps(__spreadValues({}, b.data), {
6335
+ props: __spreadProps(__spreadValues({}, b.data.props), { childrenIds: remapIds((_a = b.data.props) == null ? void 0 : _a.childrenIds) })
6336
+ })
6337
+ });
6338
+ } else if (b.type === "ColumnsContainer") {
6339
+ newBlocks[newId] = __spreadProps(__spreadValues({}, b), {
6340
+ data: __spreadProps(__spreadValues({}, b.data), {
6341
+ props: __spreadProps(__spreadValues({}, b.data.props), {
6342
+ columns: (_c = (_b = b.data.props) == null ? void 0 : _b.columns) == null ? void 0 : _c.map((c) => __spreadProps(__spreadValues({}, c), {
6343
+ childrenIds: remapIds(c.childrenIds)
6344
+ }))
6345
+ })
6346
+ })
6347
+ });
6348
+ } else {
6349
+ newBlocks[newId] = b;
6350
+ }
6351
+ }
6352
+ return { blocks: newBlocks, newRootId: idMap[rootBlockId] };
6353
+ }
6354
+ function collectBlock(blockId, document2) {
6355
+ var _a, _b, _c, _d, _e;
6356
+ const block = document2[blockId];
6357
+ if (!block) return {};
6358
+ const result = { [blockId]: block };
6359
+ if (block.type === "Container") {
6360
+ for (const childId of (_b = (_a = block.data.props) == null ? void 0 : _a.childrenIds) != null ? _b : []) {
6361
+ Object.assign(result, collectBlock(childId, document2));
6362
+ }
6363
+ }
6364
+ if (block.type === "ColumnsContainer") {
6365
+ for (const col of (_d = (_c = block.data.props) == null ? void 0 : _c.columns) != null ? _d : []) {
6366
+ for (const childId of (_e = col.childrenIds) != null ? _e : []) {
6367
+ Object.assign(result, collectBlock(childId, document2));
6368
+ }
6369
+ }
6370
+ }
6371
+ return result;
6372
+ }
6292
6373
  var BUTTON_SX2 = { p: 1.5, display: "flex", flexDirection: "column" };
6293
6374
  var ICON_SX = {
6294
6375
  mb: 0.75,
@@ -6301,7 +6382,7 @@ var ICON_SX = {
6301
6382
  borderColor: "cadet.300"
6302
6383
  };
6303
6384
  function BlockTypeButton({ label, icon, onClick }) {
6304
- return /* @__PURE__ */ React62.createElement(
6385
+ return /* @__PURE__ */ React63.createElement(
6305
6386
  Button$1,
6306
6387
  {
6307
6388
  sx: BUTTON_SX2,
@@ -6310,18 +6391,18 @@ function BlockTypeButton({ label, icon, onClick }) {
6310
6391
  onClick();
6311
6392
  }
6312
6393
  },
6313
- /* @__PURE__ */ React62.createElement(Box, { sx: ICON_SX }, icon),
6314
- /* @__PURE__ */ React62.createElement(Typography, { variant: "body2" }, label)
6394
+ /* @__PURE__ */ React63.createElement(Box, { sx: ICON_SX }, icon),
6395
+ /* @__PURE__ */ React63.createElement(Typography, { variant: "body2" }, label)
6315
6396
  );
6316
6397
  }
6317
6398
  var BUTTONS = [
6318
6399
  {
6319
6400
  label: "Heading",
6320
- icon: /* @__PURE__ */ React62.createElement(HMobiledataOutlined, null),
6401
+ icon: /* @__PURE__ */ React63.createElement(HMobiledataOutlined, null),
6321
6402
  block: () => ({
6322
6403
  type: "Heading",
6323
6404
  data: {
6324
- props: { text: "Hello friend" },
6405
+ props: { text: t("default.heading", "Hello friend") },
6325
6406
  style: {
6326
6407
  padding: { top: 16, bottom: 16, left: 24, right: 24 }
6327
6408
  }
@@ -6330,11 +6411,11 @@ var BUTTONS = [
6330
6411
  },
6331
6412
  {
6332
6413
  label: "Text",
6333
- icon: /* @__PURE__ */ React62.createElement(NotesOutlined, null),
6414
+ icon: /* @__PURE__ */ React63.createElement(NotesOutlined, null),
6334
6415
  block: () => ({
6335
6416
  type: "Text",
6336
6417
  data: {
6337
- props: { text: "My new text block", markdown: true },
6418
+ props: { text: t("default.text", "My new text block"), markdown: true },
6338
6419
  style: {
6339
6420
  padding: { top: 16, bottom: 16, left: 24, right: 24 },
6340
6421
  fontWeight: "normal"
@@ -6344,12 +6425,12 @@ var BUTTONS = [
6344
6425
  },
6345
6426
  {
6346
6427
  label: "Button",
6347
- icon: /* @__PURE__ */ React62.createElement(SmartButtonOutlined, null),
6428
+ icon: /* @__PURE__ */ React63.createElement(SmartButtonOutlined, null),
6348
6429
  block: () => ({
6349
6430
  type: "Button",
6350
6431
  data: {
6351
6432
  props: {
6352
- text: "Button",
6433
+ text: t("default.button", "Button"),
6353
6434
  url: "https://example.com"
6354
6435
  },
6355
6436
  style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } }
@@ -6358,13 +6439,13 @@ var BUTTONS = [
6358
6439
  },
6359
6440
  {
6360
6441
  label: "Image",
6361
- icon: /* @__PURE__ */ React62.createElement(ImageOutlined, null),
6442
+ icon: /* @__PURE__ */ React63.createElement(ImageOutlined, null),
6362
6443
  block: () => ({
6363
6444
  type: "Image",
6364
6445
  data: {
6365
6446
  props: {
6366
6447
  url: "https://placehold.co/600x400/EEE/999?text=Sample+Image",
6367
- alt: "Sample product",
6448
+ alt: t("default.image-alt", "Sample product"),
6368
6449
  contentAlignment: "middle",
6369
6450
  linkHref: null
6370
6451
  },
@@ -6374,7 +6455,7 @@ var BUTTONS = [
6374
6455
  },
6375
6456
  {
6376
6457
  label: "Avatar",
6377
- icon: /* @__PURE__ */ React62.createElement(AccountCircleOutlined, null),
6458
+ icon: /* @__PURE__ */ React63.createElement(AccountCircleOutlined, null),
6378
6459
  block: () => ({
6379
6460
  type: "Avatar",
6380
6461
  data: {
@@ -6388,15 +6469,15 @@ var BUTTONS = [
6388
6469
  },
6389
6470
  {
6390
6471
  label: "Personal Signature",
6391
- icon: /* @__PURE__ */ React62.createElement(ContactMailOutlined, null),
6472
+ icon: /* @__PURE__ */ React63.createElement(ContactMailOutlined, null),
6392
6473
  block: () => ({
6393
6474
  type: "Signature",
6394
6475
  data: {
6395
6476
  props: {
6396
- greeting: "Best regards,",
6397
- name: "John Doe",
6398
- title: "Software Engineer",
6399
- company: "Acme Inc.",
6477
+ greeting: t("default.personal-greeting", "Best regards,"),
6478
+ name: t("default.personal-name", "John Doe"),
6479
+ title: t("default.personal-title", "Software Engineer"),
6480
+ company: t("default.personal-company", "Acme Inc."),
6400
6481
  email: "john@example.com",
6401
6482
  phone: "+1 234 567 890",
6402
6483
  imageUrl: "https://ui-avatars.com/api/?name=John+Doe&size=128",
@@ -6410,13 +6491,13 @@ var BUTTONS = [
6410
6491
  },
6411
6492
  {
6412
6493
  label: "Company Signature",
6413
- icon: /* @__PURE__ */ React62.createElement(BusinessOutlined, null),
6494
+ icon: /* @__PURE__ */ React63.createElement(BusinessOutlined, null),
6414
6495
  block: () => ({
6415
6496
  type: "Signature",
6416
6497
  data: {
6417
6498
  props: {
6418
- company: "Acme Inc.",
6419
- address: "123 Main Street, City, Country",
6499
+ company: t("default.personal-company", "Acme Inc."),
6500
+ address: t("default.company-address", "123 Main Street, City, Country"),
6420
6501
  email: "support@example.com",
6421
6502
  website: "www.example.com",
6422
6503
  imageUrl: "https://placehold.co/128x128/EEE/999?text=Logo",
@@ -6430,7 +6511,7 @@ var BUTTONS = [
6430
6511
  },
6431
6512
  {
6432
6513
  label: "Divider",
6433
- icon: /* @__PURE__ */ React62.createElement(HorizontalRuleOutlined, null),
6514
+ icon: /* @__PURE__ */ React63.createElement(HorizontalRuleOutlined, null),
6434
6515
  block: () => ({
6435
6516
  type: "Divider",
6436
6517
  data: {
@@ -6443,7 +6524,7 @@ var BUTTONS = [
6443
6524
  },
6444
6525
  {
6445
6526
  label: "Spacer",
6446
- icon: /* @__PURE__ */ React62.createElement(Crop32Outlined, null),
6527
+ icon: /* @__PURE__ */ React63.createElement(Crop32Outlined, null),
6447
6528
  block: () => ({
6448
6529
  type: "Spacer",
6449
6530
  data: {}
@@ -6451,11 +6532,11 @@ var BUTTONS = [
6451
6532
  },
6452
6533
  {
6453
6534
  label: "Html",
6454
- icon: /* @__PURE__ */ React62.createElement(HtmlOutlined, null),
6535
+ icon: /* @__PURE__ */ React63.createElement(HtmlOutlined, null),
6455
6536
  block: () => ({
6456
6537
  type: "Html",
6457
6538
  data: {
6458
- props: { contents: "<strong>Hello world</strong>" },
6539
+ props: { contents: `<strong>${t("default.html", "Hello world")}</strong>` },
6459
6540
  style: {
6460
6541
  fontSize: 16,
6461
6542
  textAlign: null,
@@ -6466,7 +6547,7 @@ var BUTTONS = [
6466
6547
  },
6467
6548
  {
6468
6549
  label: "Columns",
6469
- icon: /* @__PURE__ */ React62.createElement(ViewColumnOutlined, null),
6550
+ icon: /* @__PURE__ */ React63.createElement(ViewColumnOutlined, null),
6470
6551
  block: () => ({
6471
6552
  type: "ColumnsContainer",
6472
6553
  data: {
@@ -6481,7 +6562,7 @@ var BUTTONS = [
6481
6562
  },
6482
6563
  {
6483
6564
  label: "Container",
6484
- icon: /* @__PURE__ */ React62.createElement(LibraryAddOutlined, null),
6565
+ icon: /* @__PURE__ */ React63.createElement(LibraryAddOutlined, null),
6485
6566
  block: () => ({
6486
6567
  type: "Container",
6487
6568
  data: {
@@ -6509,6 +6590,7 @@ var LABEL_KEYS = {
6509
6590
  Container: "block-add.container"
6510
6591
  };
6511
6592
  function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
6593
+ const { customBlocks } = useEditorConfig();
6512
6594
  const onClose = () => {
6513
6595
  setAnchorEl(null);
6514
6596
  };
@@ -6516,10 +6598,26 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
6516
6598
  onSelect(block);
6517
6599
  setAnchorEl(null);
6518
6600
  };
6601
+ const onCustomBlockClick = (customBlock) => {
6602
+ const { blocks: rekeyed, newRootId } = rekeyBlocks(customBlock.blocks, customBlock.rootBlockId);
6603
+ const rootBlock = rekeyed[newRootId];
6604
+ const extraBlocks = {};
6605
+ for (const [id, block] of Object.entries(rekeyed)) {
6606
+ if (id !== newRootId) {
6607
+ extraBlocks[id] = block;
6608
+ }
6609
+ }
6610
+ if (Object.keys(extraBlocks).length > 0) {
6611
+ setDocument(extraBlocks);
6612
+ }
6613
+ onSelect(rootBlock);
6614
+ setAnchorEl(null);
6615
+ };
6519
6616
  if (anchorEl === null) {
6520
6617
  return null;
6521
6618
  }
6522
- return /* @__PURE__ */ React62.createElement(
6619
+ const hasCustomBlocks = customBlocks && customBlocks.length > 0;
6620
+ return /* @__PURE__ */ React63.createElement(
6523
6621
  Menu,
6524
6622
  {
6525
6623
  open: true,
@@ -6528,7 +6626,7 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
6528
6626
  anchorOrigin: { vertical: "bottom", horizontal: "center" },
6529
6627
  transformOrigin: { vertical: "top", horizontal: "center" }
6530
6628
  },
6531
- /* @__PURE__ */ React62.createElement(Box, { sx: { p: 1, display: "grid", gridTemplateColumns: "1fr 1fr 1fr 1fr" } }, BUTTONS.map((k, i) => /* @__PURE__ */ React62.createElement(
6629
+ /* @__PURE__ */ React63.createElement(Box, { sx: { p: 1, display: "grid", gridTemplateColumns: "1fr 1fr 1fr 1fr" } }, BUTTONS.map((k, i) => /* @__PURE__ */ React63.createElement(
6532
6630
  BlockTypeButton,
6533
6631
  {
6534
6632
  key: i,
@@ -6536,7 +6634,19 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
6536
6634
  icon: k.icon,
6537
6635
  onClick: () => onClick(k.block())
6538
6636
  }
6539
- )))
6637
+ ))),
6638
+ hasCustomBlocks && /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(Divider$1, { sx: { my: 1 } }), /* @__PURE__ */ React63.createElement(Typography, { variant: "caption", sx: { px: 2, py: 0.5, color: "text.secondary" } }, t("block-add.custom-blocks", "Custom blocks")), /* @__PURE__ */ React63.createElement(Box, { sx: { p: 1, display: "grid", gridTemplateColumns: "1fr 1fr 1fr 1fr" } }, customBlocks.map((cb, i) => {
6639
+ var _a;
6640
+ return /* @__PURE__ */ React63.createElement(
6641
+ BlockTypeButton,
6642
+ {
6643
+ key: `custom-${i}`,
6644
+ label: cb.label,
6645
+ icon: (_a = cb.icon) != null ? _a : /* @__PURE__ */ React63.createElement(WidgetsOutlined, null),
6646
+ onClick: () => onCustomBlockClick(cb)
6647
+ }
6648
+ );
6649
+ })))
6540
6650
  );
6541
6651
  }
6542
6652
  function DividerButton({ buttonElement, onClick }) {
@@ -6563,7 +6673,7 @@ function DividerButton({ buttonElement, onClick }) {
6563
6673
  window.removeEventListener("mousemove", listener);
6564
6674
  };
6565
6675
  }, [buttonElement, setVisible]);
6566
- return /* @__PURE__ */ React62.createElement(Fade, { in: visible }, /* @__PURE__ */ React62.createElement(
6676
+ return /* @__PURE__ */ React63.createElement(Fade, { in: visible }, /* @__PURE__ */ React63.createElement(
6567
6677
  IconButton,
6568
6678
  {
6569
6679
  size: "small",
@@ -6586,11 +6696,11 @@ function DividerButton({ buttonElement, onClick }) {
6586
6696
  onClick();
6587
6697
  }
6588
6698
  },
6589
- /* @__PURE__ */ React62.createElement(AddOutlined, { fontSize: "small" })
6699
+ /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" })
6590
6700
  ));
6591
6701
  }
6592
6702
  function PlaceholderButton({ onClick }) {
6593
- return /* @__PURE__ */ React62.createElement(
6703
+ return /* @__PURE__ */ React63.createElement(
6594
6704
  ButtonBase,
6595
6705
  {
6596
6706
  onClick: (ev) => {
@@ -6606,7 +6716,7 @@ function PlaceholderButton({ onClick }) {
6606
6716
  bgcolor: "rgba(0,0,0, 0.05)"
6607
6717
  }
6608
6718
  },
6609
- /* @__PURE__ */ React62.createElement(
6719
+ /* @__PURE__ */ React63.createElement(
6610
6720
  AddOutlined,
6611
6721
  {
6612
6722
  sx: {
@@ -6630,31 +6740,31 @@ function AddBlockButton({ onSelect, placeholder }) {
6630
6740
  };
6631
6741
  const renderButton2 = () => {
6632
6742
  if (placeholder) {
6633
- return /* @__PURE__ */ React62.createElement(PlaceholderButton, { onClick: handleButtonClick });
6743
+ return /* @__PURE__ */ React63.createElement(PlaceholderButton, { onClick: handleButtonClick });
6634
6744
  } else {
6635
- return /* @__PURE__ */ React62.createElement(DividerButton, { buttonElement, onClick: handleButtonClick });
6745
+ return /* @__PURE__ */ React63.createElement(DividerButton, { buttonElement, onClick: handleButtonClick });
6636
6746
  }
6637
6747
  };
6638
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement("div", { ref: setButtonElement, style: { position: "relative" } }, renderButton2()), /* @__PURE__ */ React62.createElement(BlocksMenu, { anchorEl: menuAnchorEl, setAnchorEl: setMenuAnchorEl, onSelect }));
6748
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement("div", { ref: setButtonElement, style: { position: "relative" } }, renderButton2()), /* @__PURE__ */ React63.createElement(BlocksMenu, { anchorEl: menuAnchorEl, setAnchorEl: setMenuAnchorEl, onSelect }));
6639
6749
  }
6640
6750
  var BlockParentContext = createContext(null);
6641
6751
  function BlockParentProvider({
6642
6752
  info,
6643
6753
  children
6644
6754
  }) {
6645
- return /* @__PURE__ */ React62.createElement(BlockParentContext.Provider, { value: info }, children);
6755
+ return /* @__PURE__ */ React63.createElement(BlockParentContext.Provider, { value: info }, children);
6646
6756
  }
6647
6757
  function useBlockParent() {
6648
6758
  return useContext(BlockParentContext);
6649
6759
  }
6650
6760
 
6651
6761
  // src/editor/blocks/helpers/editor-children-ids/index.tsx
6652
- function generateId() {
6762
+ function generateId2() {
6653
6763
  return `block-${Date.now()}`;
6654
6764
  }
6655
6765
  function EditorChildrenIds({ childrenIds, onChange, parentRef }) {
6656
6766
  const appendBlock = (block) => {
6657
- const blockId = generateId();
6767
+ const blockId = generateId2();
6658
6768
  return onChange({
6659
6769
  blockId,
6660
6770
  block,
@@ -6662,7 +6772,7 @@ function EditorChildrenIds({ childrenIds, onChange, parentRef }) {
6662
6772
  });
6663
6773
  };
6664
6774
  const insertBlock = (block, index) => {
6665
- const blockId = generateId();
6775
+ const blockId = generateId2();
6666
6776
  const newChildrenIds = [...childrenIds || []];
6667
6777
  newChildrenIds.splice(index, 0, blockId);
6668
6778
  return onChange({
@@ -6672,9 +6782,9 @@ function EditorChildrenIds({ childrenIds, onChange, parentRef }) {
6672
6782
  });
6673
6783
  };
6674
6784
  if (!childrenIds || childrenIds.length === 0) {
6675
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(AddBlockButton, { placeholder: true, onSelect: appendBlock }), parentRef && /* @__PURE__ */ React62.createElement(CanvasDropZone, { parentRef, targetIndex: 0, placeholder: true }));
6785
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(AddBlockButton, { placeholder: true, onSelect: appendBlock }), parentRef && /* @__PURE__ */ React63.createElement(CanvasDropZone, { parentRef, targetIndex: 0, placeholder: true }));
6676
6786
  }
6677
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, childrenIds.map((childId, i) => /* @__PURE__ */ React62.createElement(Fragment, { key: childId }, /* @__PURE__ */ React62.createElement(AddBlockButton, { onSelect: (block) => insertBlock(block, i) }), parentRef && /* @__PURE__ */ React62.createElement(CanvasDropZone, { parentRef, targetIndex: i }), parentRef ? /* @__PURE__ */ React62.createElement(BlockParentProvider, { info: { parent: parentRef, indexInParent: i } }, /* @__PURE__ */ React62.createElement(EditorBlock, { id: childId })) : /* @__PURE__ */ React62.createElement(EditorBlock, { id: childId }))), /* @__PURE__ */ React62.createElement(AddBlockButton, { onSelect: appendBlock }), parentRef && /* @__PURE__ */ React62.createElement(CanvasDropZone, { parentRef, targetIndex: childrenIds.length }));
6787
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, childrenIds.map((childId, i) => /* @__PURE__ */ React63.createElement(Fragment, { key: childId }, /* @__PURE__ */ React63.createElement(AddBlockButton, { onSelect: (block) => insertBlock(block, i) }), parentRef && /* @__PURE__ */ React63.createElement(CanvasDropZone, { parentRef, targetIndex: i }), parentRef ? /* @__PURE__ */ React63.createElement(BlockParentProvider, { info: { parent: parentRef, indexInParent: i } }, /* @__PURE__ */ React63.createElement(EditorBlock, { id: childId })) : /* @__PURE__ */ React63.createElement(EditorBlock, { id: childId }))), /* @__PURE__ */ React63.createElement(AddBlockButton, { onSelect: appendBlock }), parentRef && /* @__PURE__ */ React63.createElement(CanvasDropZone, { parentRef, targetIndex: childrenIds.length }));
6678
6788
  }
6679
6789
  function CanvasDropZone({
6680
6790
  parentRef,
@@ -6711,7 +6821,7 @@ function CanvasDropZone({
6711
6821
  }
6712
6822
  setDraggingBlock(null);
6713
6823
  };
6714
- return /* @__PURE__ */ React62.createElement(
6824
+ return /* @__PURE__ */ React63.createElement(
6715
6825
  Box,
6716
6826
  {
6717
6827
  onDragOver: handleDragOver,
@@ -6754,13 +6864,13 @@ function ColumnsContainerEditor({ style, props }) {
6754
6864
  });
6755
6865
  setSelectedBlockId(blockId);
6756
6866
  };
6757
- return /* @__PURE__ */ React62.createElement(
6867
+ return /* @__PURE__ */ React63.createElement(
6758
6868
  columns_container_default,
6759
6869
  {
6760
6870
  props: restProps,
6761
6871
  style,
6762
6872
  columns: [
6763
- /* @__PURE__ */ React62.createElement(
6873
+ /* @__PURE__ */ React63.createElement(
6764
6874
  EditorChildrenIds,
6765
6875
  {
6766
6876
  childrenIds: (_b = columns == null ? void 0 : columns[0]) == null ? void 0 : _b.childrenIds,
@@ -6768,7 +6878,7 @@ function ColumnsContainerEditor({ style, props }) {
6768
6878
  onChange: (change) => updateColumn(0, change)
6769
6879
  }
6770
6880
  ),
6771
- /* @__PURE__ */ React62.createElement(
6881
+ /* @__PURE__ */ React63.createElement(
6772
6882
  EditorChildrenIds,
6773
6883
  {
6774
6884
  childrenIds: (_c = columns == null ? void 0 : columns[1]) == null ? void 0 : _c.childrenIds,
@@ -6776,7 +6886,7 @@ function ColumnsContainerEditor({ style, props }) {
6776
6886
  onChange: (change) => updateColumn(1, change)
6777
6887
  }
6778
6888
  ),
6779
- /* @__PURE__ */ React62.createElement(
6889
+ /* @__PURE__ */ React63.createElement(
6780
6890
  EditorChildrenIds,
6781
6891
  {
6782
6892
  childrenIds: (_d = columns == null ? void 0 : columns[2]) == null ? void 0 : _d.childrenIds,
@@ -6793,7 +6903,7 @@ function ContainerEditor({ style, props }) {
6793
6903
  const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
6794
6904
  const document2 = useDocument();
6795
6905
  const currentBlockId = useCurrentBlockId();
6796
- return /* @__PURE__ */ React62.createElement(container_default, { style }, /* @__PURE__ */ React62.createElement(
6906
+ return /* @__PURE__ */ React63.createElement(container_default, { style }, /* @__PURE__ */ React63.createElement(
6797
6907
  EditorChildrenIds,
6798
6908
  {
6799
6909
  childrenIds,
@@ -6813,64 +6923,6 @@ function ContainerEditor({ style, props }) {
6813
6923
  }
6814
6924
  ));
6815
6925
  }
6816
- function generateId2() {
6817
- return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
6818
- }
6819
- function rekeyBlocks(blocks, rootBlockId) {
6820
- var _a, _b, _c;
6821
- const idMap = {};
6822
- for (const oldId of Object.keys(blocks)) {
6823
- idMap[oldId] = generateId2();
6824
- }
6825
- const remapIds = (ids) => ids == null ? void 0 : ids.map((id) => {
6826
- var _a2;
6827
- return (_a2 = idMap[id]) != null ? _a2 : id;
6828
- });
6829
- const newBlocks = {};
6830
- for (const [oldId, block] of Object.entries(blocks)) {
6831
- const b = block;
6832
- const newId = idMap[oldId];
6833
- if (b.type === "Container") {
6834
- newBlocks[newId] = __spreadProps(__spreadValues({}, b), {
6835
- data: __spreadProps(__spreadValues({}, b.data), {
6836
- props: __spreadProps(__spreadValues({}, b.data.props), { childrenIds: remapIds((_a = b.data.props) == null ? void 0 : _a.childrenIds) })
6837
- })
6838
- });
6839
- } else if (b.type === "ColumnsContainer") {
6840
- newBlocks[newId] = __spreadProps(__spreadValues({}, b), {
6841
- data: __spreadProps(__spreadValues({}, b.data), {
6842
- props: __spreadProps(__spreadValues({}, b.data.props), {
6843
- columns: (_c = (_b = b.data.props) == null ? void 0 : _b.columns) == null ? void 0 : _c.map((c) => __spreadProps(__spreadValues({}, c), {
6844
- childrenIds: remapIds(c.childrenIds)
6845
- }))
6846
- })
6847
- })
6848
- });
6849
- } else {
6850
- newBlocks[newId] = b;
6851
- }
6852
- }
6853
- return { blocks: newBlocks, newRootId: idMap[rootBlockId] };
6854
- }
6855
- function collectBlock(blockId, document2) {
6856
- var _a, _b, _c, _d, _e;
6857
- const block = document2[blockId];
6858
- if (!block) return {};
6859
- const result = { [blockId]: block };
6860
- if (block.type === "Container") {
6861
- for (const childId of (_b = (_a = block.data.props) == null ? void 0 : _a.childrenIds) != null ? _b : []) {
6862
- Object.assign(result, collectBlock(childId, document2));
6863
- }
6864
- }
6865
- if (block.type === "ColumnsContainer") {
6866
- for (const col of (_d = (_c = block.data.props) == null ? void 0 : _c.columns) != null ? _d : []) {
6867
- for (const childId of (_e = col.childrenIds) != null ? _e : []) {
6868
- Object.assign(result, collectBlock(childId, document2));
6869
- }
6870
- }
6871
- }
6872
- return result;
6873
- }
6874
6926
  function getFontFamily7(fontFamily) {
6875
6927
  const f = fontFamily != null ? fontFamily : "MODERN_SANS";
6876
6928
  switch (f) {
@@ -6994,7 +7046,7 @@ function EmailLayoutEditor(props) {
6994
7046
  lineHeight: "1.5",
6995
7047
  margin: "0"
6996
7048
  };
6997
- const editorChildren = /* @__PURE__ */ React62.createElement(
7049
+ const editorChildren = /* @__PURE__ */ React63.createElement(
6998
7050
  EditorChildrenIds,
6999
7051
  {
7000
7052
  childrenIds,
@@ -7021,7 +7073,7 @@ function EmailLayoutEditor(props) {
7021
7073
  boxShadow: "0 1px 2px rgba(33, 36, 67, 0.05), 0 8px 24px rgba(33, 36, 67, 0.08)"
7022
7074
  };
7023
7075
  if (props.backdropDisabled) {
7024
- return /* @__PURE__ */ React62.createElement(
7076
+ return /* @__PURE__ */ React63.createElement(
7025
7077
  "div",
7026
7078
  {
7027
7079
  onClick: () => {
@@ -7033,7 +7085,7 @@ function EmailLayoutEditor(props) {
7033
7085
  minHeight: "100%"
7034
7086
  })
7035
7087
  },
7036
- /* @__PURE__ */ React62.createElement(
7088
+ /* @__PURE__ */ React63.createElement(
7037
7089
  "div",
7038
7090
  {
7039
7091
  style: __spreadProps(__spreadValues({}, cardStyle), {
@@ -7041,11 +7093,11 @@ function EmailLayoutEditor(props) {
7041
7093
  padding: "32px"
7042
7094
  })
7043
7095
  },
7044
- /* @__PURE__ */ React62.createElement("div", { style: { maxWidth: "600px", margin: "0 auto" } }, editorChildren)
7096
+ /* @__PURE__ */ React63.createElement("div", { style: { maxWidth: "600px", margin: "0 auto" } }, editorChildren)
7045
7097
  )
7046
7098
  );
7047
7099
  }
7048
- return /* @__PURE__ */ React62.createElement(
7100
+ return /* @__PURE__ */ React63.createElement(
7049
7101
  "div",
7050
7102
  {
7051
7103
  onClick: () => {
@@ -7057,7 +7109,7 @@ function EmailLayoutEditor(props) {
7057
7109
  minHeight: "100%"
7058
7110
  })
7059
7111
  },
7060
- /* @__PURE__ */ React62.createElement(
7112
+ /* @__PURE__ */ React63.createElement(
7061
7113
  "div",
7062
7114
  {
7063
7115
  style: __spreadProps(__spreadValues({}, cardStyle), {
@@ -7065,7 +7117,7 @@ function EmailLayoutEditor(props) {
7065
7117
  padding: "32px 0"
7066
7118
  })
7067
7119
  },
7068
- /* @__PURE__ */ React62.createElement(
7120
+ /* @__PURE__ */ React63.createElement(
7069
7121
  "table",
7070
7122
  {
7071
7123
  align: "center",
@@ -7089,7 +7141,7 @@ function EmailLayoutEditor(props) {
7089
7141
  cellPadding: "0",
7090
7142
  border: 0
7091
7143
  },
7092
- /* @__PURE__ */ React62.createElement("tbody", null, /* @__PURE__ */ React62.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React62.createElement("td", null, editorChildren)))
7144
+ /* @__PURE__ */ React63.createElement("tbody", null, /* @__PURE__ */ React63.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React63.createElement("td", null, editorChildren)))
7093
7145
  )
7094
7146
  )
7095
7147
  );
@@ -7249,7 +7301,7 @@ function TuneMenu({ blockId }) {
7249
7301
  resetDocument(nDocument);
7250
7302
  setSelectedBlockId(blockId);
7251
7303
  };
7252
- return /* @__PURE__ */ React62.createElement(Paper, { sx, onClick: (ev) => ev.stopPropagation() }, /* @__PURE__ */ React62.createElement(Stack, null, /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tune.move-up", "Move up"), placement: "left-start" }, /* @__PURE__ */ React62.createElement(IconButton, { "aria-label": t("tune.move-up", "Move up"), onClick: () => handleMoveClick("up"), sx: { color: "text.primary" } }, /* @__PURE__ */ React62.createElement(ArrowUpwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tune.move-down", "Move down"), placement: "left-start" }, /* @__PURE__ */ React62.createElement(IconButton, { "aria-label": t("tune.move-down", "Move down"), onClick: () => handleMoveClick("down"), sx: { color: "text.primary" } }, /* @__PURE__ */ React62.createElement(ArrowDownwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tune.copy", "Copy block"), placement: "left-start" }, /* @__PURE__ */ React62.createElement(IconButton, { "aria-label": t("tune.copy", "Copy block"), onClick: handleCopyClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React62.createElement(ContentCopyOutlined, { fontSize: "small" }))), /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tune.delete", "Delete"), placement: "left-start" }, /* @__PURE__ */ React62.createElement(IconButton, { "aria-label": t("tune.delete", "Delete"), onClick: handleDeleteClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React62.createElement(DeleteOutlined, { fontSize: "small" })))));
7304
+ return /* @__PURE__ */ React63.createElement(Paper, { sx, onClick: (ev) => ev.stopPropagation() }, /* @__PURE__ */ React63.createElement(Stack, null, /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tune.move-up", "Move up"), placement: "left-start" }, /* @__PURE__ */ React63.createElement(IconButton, { "aria-label": t("tune.move-up", "Move up"), onClick: () => handleMoveClick("up"), sx: { color: "text.primary" } }, /* @__PURE__ */ React63.createElement(ArrowUpwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tune.move-down", "Move down"), placement: "left-start" }, /* @__PURE__ */ React63.createElement(IconButton, { "aria-label": t("tune.move-down", "Move down"), onClick: () => handleMoveClick("down"), sx: { color: "text.primary" } }, /* @__PURE__ */ React63.createElement(ArrowDownwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tune.copy", "Copy block"), placement: "left-start" }, /* @__PURE__ */ React63.createElement(IconButton, { "aria-label": t("tune.copy", "Copy block"), onClick: handleCopyClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React63.createElement(ContentCopyOutlined, { fontSize: "small" }))), /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tune.delete", "Delete"), placement: "left-start" }, /* @__PURE__ */ React63.createElement(IconButton, { "aria-label": t("tune.delete", "Delete"), onClick: handleDeleteClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React63.createElement(DeleteOutlined, { fontSize: "small" })))));
7253
7305
  }
7254
7306
 
7255
7307
  // src/editor/blocks/helpers/block-wrappers/editor-block-wrapper.tsx
@@ -7271,7 +7323,7 @@ function EditorBlockWrapper({ children }) {
7271
7323
  if (selectedBlockId !== blockId) {
7272
7324
  return null;
7273
7325
  }
7274
- return /* @__PURE__ */ React62.createElement(TuneMenu, { blockId });
7326
+ return /* @__PURE__ */ React63.createElement(TuneMenu, { blockId });
7275
7327
  };
7276
7328
  const draggable = Boolean(blockParent) && selectedBlockId !== blockId;
7277
7329
  const handleDragStart = (e) => {
@@ -7284,7 +7336,7 @@ function EditorBlockWrapper({ children }) {
7284
7336
  const handleDragEnd = () => {
7285
7337
  setDraggingBlock(null);
7286
7338
  };
7287
- return /* @__PURE__ */ React62.createElement(
7339
+ return /* @__PURE__ */ React63.createElement(
7288
7340
  Box,
7289
7341
  {
7290
7342
  draggable,
@@ -7429,7 +7481,7 @@ function ButtonEditor({ style, props }) {
7429
7481
  selectionEnd: (_b2 = el.selectionEnd) != null ? _b2 : el.value.length
7430
7482
  });
7431
7483
  };
7432
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React62.createElement(
7484
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React63.createElement(
7433
7485
  "input",
7434
7486
  {
7435
7487
  type: "text",
@@ -7446,7 +7498,7 @@ function ButtonEditor({ style, props }) {
7446
7498
  }
7447
7499
  ));
7448
7500
  }
7449
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React62.createElement("span", { style: linkStyle }, /* @__PURE__ */ React62.createElement("span", null, text)));
7501
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React63.createElement("span", { style: linkStyle }, /* @__PURE__ */ React63.createElement("span", null, text)));
7450
7502
  }
7451
7503
  function useMarkdownToolbar({ text, isSelected, commitText, trackSelection }) {
7452
7504
  const textareaRef = useRef(null);
@@ -7663,7 +7715,7 @@ function InlineFormattingToolbar({
7663
7715
  }
7664
7716
  }, [activePrompt]);
7665
7717
  const preventBlur = (e) => e.preventDefault();
7666
- return /* @__PURE__ */ React62.createElement(Popper, { open: visible, anchorEl, placement: "top-start", style: { zIndex: 1300 } }, /* @__PURE__ */ React62.createElement(Paper, { elevation: 4, sx: { px: 0.5, py: 0.25, mb: 0.5 }, onMouseDown: preventBlur }, activePrompt === "link" ? /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5 } }, /* @__PURE__ */ React62.createElement(
7718
+ return /* @__PURE__ */ React63.createElement(Popper, { open: visible, anchorEl, placement: "top-start", style: { zIndex: 1300 } }, /* @__PURE__ */ React63.createElement(Paper, { elevation: 4, sx: { px: 0.5, py: 0.25, mb: 0.5 }, onMouseDown: preventBlur }, activePrompt === "link" ? /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5 } }, /* @__PURE__ */ React63.createElement(
7667
7719
  TextField,
7668
7720
  {
7669
7721
  inputRef: urlRef,
@@ -7685,7 +7737,7 @@ function InlineFormattingToolbar({
7685
7737
  },
7686
7738
  sx: { width: 220 }
7687
7739
  }
7688
- )) : activePrompt === "color" ? /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React62.createElement(
7740
+ )) : activePrompt === "color" ? /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React63.createElement(
7689
7741
  "input",
7690
7742
  {
7691
7743
  ref: colorRef,
@@ -7698,7 +7750,7 @@ function InlineFormattingToolbar({
7698
7750
  },
7699
7751
  style: { width: 40, height: 28, border: "none", padding: 0, background: "transparent", cursor: "pointer" }
7700
7752
  }
7701
- ), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React62.createElement(FormatColorTextOutlined, { fontSize: "small" }))) : activePrompt === "font" ? /* @__PURE__ */ React62.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React62.createElement(
7753
+ ), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React63.createElement(FormatColorTextOutlined, { fontSize: "small" }))) : activePrompt === "font" ? /* @__PURE__ */ React63.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React63.createElement(
7702
7754
  Select,
7703
7755
  {
7704
7756
  value: font,
@@ -7711,8 +7763,8 @@ function InlineFormattingToolbar({
7711
7763
  variant: "standard",
7712
7764
  sx: { minWidth: 180, fontSize: 13 }
7713
7765
  },
7714
- FONT_OPTIONS.map((opt) => /* @__PURE__ */ React62.createElement(MenuItem, { key: opt.value, value: opt.value, sx: { fontFamily: opt.value } }, opt.label))
7715
- ), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React62.createElement(TextFieldsOutlined, { fontSize: "small" }))) : /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.25 }, /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onBold, title: t("toolbar.bold-shortcut", "Bold (Cmd+B)"), "aria-label": t("toolbar.bold", "Bold") }, /* @__PURE__ */ React62.createElement(FormatBoldOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onItalic, title: t("toolbar.italic-shortcut", "Italic (Cmd+I)"), "aria-label": t("toolbar.italic", "Italic") }, /* @__PURE__ */ React62.createElement(FormatItalicOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onUnderline, title: t("toolbar.underline-shortcut", "Underline (Cmd+U)"), "aria-label": t("toolbar.underline", "Underline") }, /* @__PURE__ */ React62.createElement(FormatUnderlinedOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onOverline, title: t("toolbar.overline", "Overline"), "aria-label": t("toolbar.overline", "Overline") }, /* @__PURE__ */ React62.createElement(FormatOverlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onColorRequest, title: t("toolbar.text-color", "Text color"), "aria-label": t("toolbar.text-color", "Text color") }, /* @__PURE__ */ React62.createElement(FormatColorTextOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onFontRequest, title: t("toolbar.font-family", "Font family"), "aria-label": t("toolbar.font-family", "Font family") }, /* @__PURE__ */ React62.createElement(TextFieldsOutlined, { fontSize: "small" })), /* @__PURE__ */ React62.createElement(IconButton, { size: "small", onClick: onLinkRequest, title: t("toolbar.link-shortcut", "Link (Cmd+K)"), "aria-label": t("toolbar.link", "Link") }, /* @__PURE__ */ React62.createElement(LinkOutlined, { fontSize: "small" })))));
7766
+ FONT_OPTIONS.map((opt) => /* @__PURE__ */ React63.createElement(MenuItem, { key: opt.value, value: opt.value, sx: { fontFamily: opt.value } }, opt.label))
7767
+ ), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React63.createElement(TextFieldsOutlined, { fontSize: "small" }))) : /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.25 }, /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onBold, title: t("toolbar.bold-shortcut", "Bold (Cmd+B)"), "aria-label": t("toolbar.bold", "Bold") }, /* @__PURE__ */ React63.createElement(FormatBoldOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onItalic, title: t("toolbar.italic-shortcut", "Italic (Cmd+I)"), "aria-label": t("toolbar.italic", "Italic") }, /* @__PURE__ */ React63.createElement(FormatItalicOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onUnderline, title: t("toolbar.underline-shortcut", "Underline (Cmd+U)"), "aria-label": t("toolbar.underline", "Underline") }, /* @__PURE__ */ React63.createElement(FormatUnderlinedOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onOverline, title: t("toolbar.overline", "Overline"), "aria-label": t("toolbar.overline", "Overline") }, /* @__PURE__ */ React63.createElement(FormatOverlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onColorRequest, title: t("toolbar.text-color", "Text color"), "aria-label": t("toolbar.text-color", "Text color") }, /* @__PURE__ */ React63.createElement(FormatColorTextOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onFontRequest, title: t("toolbar.font-family", "Font family"), "aria-label": t("toolbar.font-family", "Font family") }, /* @__PURE__ */ React63.createElement(TextFieldsOutlined, { fontSize: "small" })), /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: onLinkRequest, title: t("toolbar.link-shortcut", "Link (Cmd+K)"), "aria-label": t("toolbar.link", "Link") }, /* @__PURE__ */ React63.createElement(LinkOutlined, { fontSize: "small" })))));
7716
7768
  }
7717
7769
 
7718
7770
  // src/editor/blocks/heading/heading-editor.tsx
@@ -7867,7 +7919,7 @@ function HeadingEditor({ style, props }) {
7867
7919
  if (textareaRef.current) adjustTextareaHeight(textareaRef.current);
7868
7920
  }, [localText, isSelected]);
7869
7921
  if (isSelected) {
7870
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
7922
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
7871
7923
  "textarea",
7872
7924
  {
7873
7925
  ref: textareaRef,
@@ -7885,7 +7937,7 @@ function HeadingEditor({ style, props }) {
7885
7937
  rows: 1,
7886
7938
  onInput: (e) => adjustTextareaHeight(e.target)
7887
7939
  }
7888
- ), /* @__PURE__ */ React62.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
7940
+ ), /* @__PURE__ */ React63.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
7889
7941
  }
7890
7942
  const headingProps = isMarkdown ? {
7891
7943
  ref: displayRef,
@@ -7894,11 +7946,11 @@ function HeadingEditor({ style, props }) {
7894
7946
  } : { ref: displayRef, style: hStyle, children: textContent };
7895
7947
  switch (level) {
7896
7948
  case "h1":
7897
- return /* @__PURE__ */ React62.createElement("h1", __spreadValues({}, headingProps));
7949
+ return /* @__PURE__ */ React63.createElement("h1", __spreadValues({}, headingProps));
7898
7950
  case "h2":
7899
- return /* @__PURE__ */ React62.createElement("h2", __spreadValues({}, headingProps));
7951
+ return /* @__PURE__ */ React63.createElement("h2", __spreadValues({}, headingProps));
7900
7952
  case "h3":
7901
- return /* @__PURE__ */ React62.createElement("h3", __spreadValues({}, headingProps));
7953
+ return /* @__PURE__ */ React63.createElement("h3", __spreadValues({}, headingProps));
7902
7954
  }
7903
7955
  }
7904
7956
  function HtmlEditor({ style, props }) {
@@ -7963,7 +8015,7 @@ function HtmlEditor({ style, props }) {
7963
8015
  selectionEnd: (_b2 = el.selectionEnd) != null ? _b2 : el.value.length
7964
8016
  });
7965
8017
  };
7966
- return /* @__PURE__ */ React62.createElement("div", { style: cssStyle }, /* @__PURE__ */ React62.createElement(
8018
+ return /* @__PURE__ */ React63.createElement("div", { style: cssStyle }, /* @__PURE__ */ React63.createElement(
7967
8019
  "textarea",
7968
8020
  {
7969
8021
  value: localContents,
@@ -7983,9 +8035,9 @@ function HtmlEditor({ style, props }) {
7983
8035
  ));
7984
8036
  }
7985
8037
  if (!contents) {
7986
- return /* @__PURE__ */ React62.createElement("div", { style: cssStyle });
8038
+ return /* @__PURE__ */ React63.createElement("div", { style: cssStyle });
7987
8039
  }
7988
- return /* @__PURE__ */ React62.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: contents } });
8040
+ return /* @__PURE__ */ React63.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: contents } });
7989
8041
  }
7990
8042
  function getImageBorderRadius2(shape, size) {
7991
8043
  switch (shape) {
@@ -8100,7 +8152,7 @@ function SignatureEditor({ style, props }) {
8100
8152
  backgroundColor: (_p = style == null ? void 0 : style.backgroundColor) != null ? _p : void 0,
8101
8153
  padding: (style == null ? void 0 : style.padding) ? `${style.padding.top}px ${style.padding.right}px ${style.padding.bottom}px ${style.padding.left}px` : void 0
8102
8154
  };
8103
- const imageElement = imageUrl ? /* @__PURE__ */ React62.createElement(
8155
+ const imageElement = imageUrl ? /* @__PURE__ */ React63.createElement(
8104
8156
  "img",
8105
8157
  {
8106
8158
  src: imageUrl,
@@ -8118,7 +8170,7 @@ function SignatureEditor({ style, props }) {
8118
8170
  }
8119
8171
  }
8120
8172
  ) : null;
8121
- const greetingElement = isSelected ? /* @__PURE__ */ React62.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React62.createElement(
8173
+ const greetingElement = isSelected ? /* @__PURE__ */ React63.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React63.createElement(
8122
8174
  "input",
8123
8175
  {
8124
8176
  value: localGreeting,
@@ -8129,8 +8181,8 @@ function SignatureEditor({ style, props }) {
8129
8181
  placeholder: "Greeting (e.g. Best regards,)",
8130
8182
  style: __spreadValues(__spreadValues({}, inputBase), greetingStyle)
8131
8183
  }
8132
- )) : greeting ? /* @__PURE__ */ React62.createElement("p", { style: greetingStyle }, greeting) : null;
8133
- const textContent = isSelected ? /* @__PURE__ */ React62.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React62.createElement(
8184
+ )) : greeting ? /* @__PURE__ */ React63.createElement("p", { style: greetingStyle }, greeting) : null;
8185
+ const textContent = isSelected ? /* @__PURE__ */ React63.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React63.createElement(
8134
8186
  "input",
8135
8187
  {
8136
8188
  value: localName,
@@ -8141,7 +8193,7 @@ function SignatureEditor({ style, props }) {
8141
8193
  placeholder: "Name",
8142
8194
  style: __spreadValues(__spreadValues({}, inputBase), nameStyle)
8143
8195
  }
8144
- ), /* @__PURE__ */ React62.createElement(
8196
+ ), /* @__PURE__ */ React63.createElement(
8145
8197
  "input",
8146
8198
  {
8147
8199
  value: localTitle,
@@ -8152,7 +8204,7 @@ function SignatureEditor({ style, props }) {
8152
8204
  placeholder: "Title",
8153
8205
  style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
8154
8206
  }
8155
- ), /* @__PURE__ */ React62.createElement(
8207
+ ), /* @__PURE__ */ React63.createElement(
8156
8208
  "input",
8157
8209
  {
8158
8210
  value: localCompany,
@@ -8163,7 +8215,7 @@ function SignatureEditor({ style, props }) {
8163
8215
  placeholder: "Company",
8164
8216
  style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
8165
8217
  }
8166
- ), /* @__PURE__ */ React62.createElement(
8218
+ ), /* @__PURE__ */ React63.createElement(
8167
8219
  "input",
8168
8220
  {
8169
8221
  value: localAddress,
@@ -8174,7 +8226,7 @@ function SignatureEditor({ style, props }) {
8174
8226
  placeholder: "Address",
8175
8227
  style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
8176
8228
  }
8177
- ), /* @__PURE__ */ React62.createElement(
8229
+ ), /* @__PURE__ */ React63.createElement(
8178
8230
  "input",
8179
8231
  {
8180
8232
  value: localEmail,
@@ -8185,7 +8237,7 @@ function SignatureEditor({ style, props }) {
8185
8237
  placeholder: "Email",
8186
8238
  style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { marginTop: 4, display: "block" })
8187
8239
  }
8188
- ), /* @__PURE__ */ React62.createElement(
8240
+ ), /* @__PURE__ */ React63.createElement(
8189
8241
  "input",
8190
8242
  {
8191
8243
  value: localPhone,
@@ -8196,7 +8248,7 @@ function SignatureEditor({ style, props }) {
8196
8248
  placeholder: "Phone",
8197
8249
  style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { display: "block" })
8198
8250
  }
8199
- ), /* @__PURE__ */ React62.createElement(
8251
+ ), /* @__PURE__ */ React63.createElement(
8200
8252
  "input",
8201
8253
  {
8202
8254
  value: localWebsite,
@@ -8207,11 +8259,11 @@ function SignatureEditor({ style, props }) {
8207
8259
  placeholder: "Website",
8208
8260
  style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { display: "block" })
8209
8261
  }
8210
- )) : /* @__PURE__ */ React62.createElement("div", null, name && /* @__PURE__ */ React62.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, address), (email || phone || website) && /* @__PURE__ */ React62.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, email && /* @__PURE__ */ React62.createElement("span", { style: linkStyle }, email), email && (phone || website) && /* @__PURE__ */ React62.createElement("span", { style: detailStyle }, " \xB7 "), phone && /* @__PURE__ */ React62.createElement("span", { style: linkStyle }, phone), phone && website && /* @__PURE__ */ React62.createElement("span", { style: detailStyle }, " \xB7 "), website && /* @__PURE__ */ React62.createElement("span", { style: linkStyle }, website)), !name && !title && !company && !email && !phone && !website && /* @__PURE__ */ React62.createElement("p", { style: detailStyle }, "Click to edit signature"));
8262
+ )) : /* @__PURE__ */ React63.createElement("div", null, name && /* @__PURE__ */ React63.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, address), (email || phone || website) && /* @__PURE__ */ React63.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, email && /* @__PURE__ */ React63.createElement("span", { style: linkStyle }, email), email && (phone || website) && /* @__PURE__ */ React63.createElement("span", { style: detailStyle }, " \xB7 "), phone && /* @__PURE__ */ React63.createElement("span", { style: linkStyle }, phone), phone && website && /* @__PURE__ */ React63.createElement("span", { style: detailStyle }, " \xB7 "), website && /* @__PURE__ */ React63.createElement("span", { style: linkStyle }, website)), !name && !title && !company && !email && !phone && !website && /* @__PURE__ */ React63.createElement("p", { style: detailStyle }, "Click to edit signature"));
8211
8263
  if (layout === "vertical") {
8212
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React62.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
8264
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React63.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
8213
8265
  }
8214
- return /* @__PURE__ */ React62.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React62.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React62.createElement("tbody", null, /* @__PURE__ */ React62.createElement("tr", null, imageElement && /* @__PURE__ */ React62.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React62.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
8266
+ return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React63.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React63.createElement("tbody", null, /* @__PURE__ */ React63.createElement("tr", null, imageElement && /* @__PURE__ */ React63.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React63.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
8215
8267
  }
8216
8268
  function getFontFamily10(fontFamily) {
8217
8269
  switch (fontFamily) {
@@ -8355,7 +8407,7 @@ function TextEditor({ style, props }) {
8355
8407
  if (textareaRef.current) adjustTextareaHeight(textareaRef.current);
8356
8408
  }, [localText, isSelected]);
8357
8409
  if (isSelected) {
8358
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
8410
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
8359
8411
  "textarea",
8360
8412
  {
8361
8413
  ref: textareaRef,
@@ -8373,10 +8425,10 @@ function TextEditor({ style, props }) {
8373
8425
  rows: 1,
8374
8426
  onInput: (e) => adjustTextareaHeight(e.target)
8375
8427
  }
8376
- ), /* @__PURE__ */ React62.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
8428
+ ), /* @__PURE__ */ React63.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
8377
8429
  }
8378
8430
  if (isMarkdown) {
8379
- return /* @__PURE__ */ React62.createElement(
8431
+ return /* @__PURE__ */ React63.createElement(
8380
8432
  "div",
8381
8433
  {
8382
8434
  ref: displayRef,
@@ -8385,34 +8437,34 @@ function TextEditor({ style, props }) {
8385
8437
  }
8386
8438
  );
8387
8439
  }
8388
- return /* @__PURE__ */ React62.createElement("div", { ref: displayRef, style: wStyle }, textContent);
8440
+ return /* @__PURE__ */ React63.createElement("div", { ref: displayRef, style: wStyle }, textContent);
8389
8441
  }
8390
8442
 
8391
8443
  // src/editor/core.tsx
8392
8444
  var EDITOR_DICTIONARY = buildBlockConfigurationDictionary({
8393
8445
  Avatar: {
8394
8446
  schema: AvatarPropsSchema,
8395
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(avatar_default, __spreadValues({}, props)))
8447
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(avatar_default, __spreadValues({}, props)))
8396
8448
  },
8397
8449
  Button: {
8398
8450
  schema: ButtonPropsSchema,
8399
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(ButtonEditor, __spreadValues({}, props)))
8451
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(ButtonEditor, __spreadValues({}, props)))
8400
8452
  },
8401
8453
  Container: {
8402
8454
  schema: container_props_schema_default,
8403
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(ContainerEditor, __spreadValues({}, props)))
8455
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(ContainerEditor, __spreadValues({}, props)))
8404
8456
  },
8405
8457
  ColumnsContainer: {
8406
8458
  schema: columns_container_props_schema_default2,
8407
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(ColumnsContainerEditor, __spreadValues({}, props)))
8459
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(ColumnsContainerEditor, __spreadValues({}, props)))
8408
8460
  },
8409
8461
  Heading: {
8410
8462
  schema: HeadingPropsSchema,
8411
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(HeadingEditor, __spreadValues({}, props)))
8463
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(HeadingEditor, __spreadValues({}, props)))
8412
8464
  },
8413
8465
  Html: {
8414
8466
  schema: HtmlPropsSchema,
8415
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(HtmlEditor, __spreadValues({}, props)))
8467
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(HtmlEditor, __spreadValues({}, props)))
8416
8468
  },
8417
8469
  Image: {
8418
8470
  schema: ImagePropsSchema,
@@ -8424,28 +8476,28 @@ var EDITOR_DICTIONARY = buildBlockConfigurationDictionary({
8424
8476
  linkHref: null
8425
8477
  })
8426
8478
  });
8427
- return /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(image_default, __spreadValues({}, props)));
8479
+ return /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(image_default, __spreadValues({}, props)));
8428
8480
  }
8429
8481
  },
8430
8482
  Text: {
8431
8483
  schema: TextPropsSchema,
8432
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(TextEditor, __spreadValues({}, props)))
8484
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(TextEditor, __spreadValues({}, props)))
8433
8485
  },
8434
8486
  EmailLayout: {
8435
8487
  schema: email_layout_props_schema_default,
8436
- Component: (p) => /* @__PURE__ */ React62.createElement(EmailLayoutEditor, __spreadValues({}, p))
8488
+ Component: (p) => /* @__PURE__ */ React63.createElement(EmailLayoutEditor, __spreadValues({}, p))
8437
8489
  },
8438
8490
  Spacer: {
8439
8491
  schema: SpacerPropsSchema,
8440
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(spacer_default, __spreadValues({}, props)))
8492
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(spacer_default, __spreadValues({}, props)))
8441
8493
  },
8442
8494
  Divider: {
8443
8495
  schema: DividerPropsSchema,
8444
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(divider_default, __spreadValues({}, props)))
8496
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(divider_default, __spreadValues({}, props)))
8445
8497
  },
8446
8498
  Signature: {
8447
8499
  schema: SignaturePropsSchema,
8448
- Component: (props) => /* @__PURE__ */ React62.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React62.createElement(SignatureEditor, __spreadValues({}, props)))
8500
+ Component: (props) => /* @__PURE__ */ React63.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React63.createElement(SignatureEditor, __spreadValues({}, props)))
8449
8501
  }
8450
8502
  });
8451
8503
  var EditorBlock2 = buildBlockComponent(EDITOR_DICTIONARY);
@@ -8461,7 +8513,7 @@ function EditorBlock({ id }) {
8461
8513
  if (!block) {
8462
8514
  throw new Error("Could not find block");
8463
8515
  }
8464
- return /* @__PURE__ */ React62.createElement(EditorBlockContext.Provider, { value: id }, /* @__PURE__ */ React62.createElement(EditorBlock2, __spreadValues({}, block)));
8516
+ return /* @__PURE__ */ React63.createElement(EditorBlockContext.Provider, { value: id }, /* @__PURE__ */ React63.createElement(EditorBlock2, __spreadValues({}, block)));
8465
8517
  }
8466
8518
  function ToggleInspectorPanelButton() {
8467
8519
  const inspectorDrawerOpen = useInspectorDrawerOpen();
@@ -8469,20 +8521,20 @@ function ToggleInspectorPanelButton() {
8469
8521
  toggleInspectorDrawerOpen();
8470
8522
  };
8471
8523
  if (inspectorDrawerOpen) {
8472
- return /* @__PURE__ */ React62.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React62.createElement(LastPageOutlined, { fontSize: "small" }));
8524
+ return /* @__PURE__ */ React63.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React63.createElement(LastPageOutlined, { fontSize: "small" }));
8473
8525
  }
8474
- return /* @__PURE__ */ React62.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React62.createElement(AppRegistrationOutlined, { fontSize: "small" }));
8526
+ return /* @__PURE__ */ React63.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React63.createElement(AppRegistrationOutlined, { fontSize: "small" }));
8475
8527
  }
8476
8528
  function useIcon() {
8477
8529
  const samplesDrawerOpen = useSamplesDrawerOpen();
8478
8530
  if (samplesDrawerOpen) {
8479
- return /* @__PURE__ */ React62.createElement(FirstPageOutlined, { fontSize: "small" });
8531
+ return /* @__PURE__ */ React63.createElement(FirstPageOutlined, { fontSize: "small" });
8480
8532
  }
8481
- return /* @__PURE__ */ React62.createElement(MenuOutlined, { fontSize: "small" });
8533
+ return /* @__PURE__ */ React63.createElement(MenuOutlined, { fontSize: "small" });
8482
8534
  }
8483
8535
  function ToggleSamplesPanelButton() {
8484
8536
  const icon = useIcon();
8485
- return /* @__PURE__ */ React62.createElement(IconButton, { onClick: toggleSamplesDrawerOpen }, icon);
8537
+ return /* @__PURE__ */ React63.createElement(IconButton, { onClick: toggleSamplesDrawerOpen }, icon);
8486
8538
  }
8487
8539
  function formatHtml(html2, spaces = 2) {
8488
8540
  try {
@@ -8544,7 +8596,7 @@ function HighlightedCodePanel({ type, value }) {
8544
8596
  if (code === null) {
8545
8597
  return null;
8546
8598
  }
8547
- return /* @__PURE__ */ React62.createElement(
8599
+ return /* @__PURE__ */ React63.createElement(
8548
8600
  "pre",
8549
8601
  {
8550
8602
  style: {
@@ -8570,17 +8622,17 @@ function HighlightedCodePanel({ type, value }) {
8570
8622
  function HtmlPanel() {
8571
8623
  const document2 = useDocument();
8572
8624
  const code = useMemo(() => renderToStaticMarkup(document2, { rootBlockId: "root" }), [document2]);
8573
- return /* @__PURE__ */ React62.createElement(HighlightedCodePanel, { type: "html", value: code });
8625
+ return /* @__PURE__ */ React63.createElement(HighlightedCodePanel, { type: "html", value: code });
8574
8626
  }
8575
8627
  function JsonPanel() {
8576
8628
  const document2 = useDocument();
8577
8629
  const code = useMemo(() => JSON.stringify(document2, null, " "), [document2]);
8578
- return /* @__PURE__ */ React62.createElement(HighlightedCodePanel, { type: "json", value: code });
8630
+ return /* @__PURE__ */ React63.createElement(HighlightedCodePanel, { type: "json", value: code });
8579
8631
  }
8580
8632
  function TextPanel() {
8581
8633
  const document2 = useDocument();
8582
8634
  const text = useMemo(() => renderToText(document2, { rootBlockId: "root" }), [document2]);
8583
- return /* @__PURE__ */ React62.createElement(
8635
+ return /* @__PURE__ */ React63.createElement(
8584
8636
  "pre",
8585
8637
  {
8586
8638
  style: {
@@ -8616,35 +8668,35 @@ function MainTabsGroup() {
8616
8668
  setSelectedMainTab("editor");
8617
8669
  }
8618
8670
  };
8619
- return /* @__PURE__ */ React62.createElement(Tabs, { value: selectedMainTab, onChange: handleChange }, /* @__PURE__ */ React62.createElement(
8671
+ return /* @__PURE__ */ React63.createElement(Tabs, { value: selectedMainTab, onChange: handleChange }, /* @__PURE__ */ React63.createElement(
8620
8672
  Tab,
8621
8673
  {
8622
8674
  value: "editor",
8623
- label: /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tab.edit", "Edit") }, /* @__PURE__ */ React62.createElement(EditOutlined, { fontSize: "small" }))
8675
+ label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.edit", "Edit") }, /* @__PURE__ */ React63.createElement(EditOutlined, { fontSize: "small" }))
8624
8676
  }
8625
- ), /* @__PURE__ */ React62.createElement(
8677
+ ), /* @__PURE__ */ React63.createElement(
8626
8678
  Tab,
8627
8679
  {
8628
8680
  value: "preview",
8629
- label: /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tab.preview", "Preview") }, /* @__PURE__ */ React62.createElement(PreviewOutlined, { fontSize: "small" }))
8681
+ label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.preview", "Preview") }, /* @__PURE__ */ React63.createElement(PreviewOutlined, { fontSize: "small" }))
8630
8682
  }
8631
- ), /* @__PURE__ */ React62.createElement(
8683
+ ), /* @__PURE__ */ React63.createElement(
8632
8684
  Tab,
8633
8685
  {
8634
8686
  value: "html",
8635
- label: /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tab.html-output", "HTML output") }, /* @__PURE__ */ React62.createElement(CodeOutlined, { fontSize: "small" }))
8687
+ label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.html-output", "HTML output") }, /* @__PURE__ */ React63.createElement(CodeOutlined, { fontSize: "small" }))
8636
8688
  }
8637
- ), /* @__PURE__ */ React62.createElement(
8689
+ ), /* @__PURE__ */ React63.createElement(
8638
8690
  Tab,
8639
8691
  {
8640
8692
  value: "text",
8641
- label: /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tab.text-output", "Plain text output") }, /* @__PURE__ */ React62.createElement(SubjectOutlined, { fontSize: "small" }))
8693
+ label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.text-output", "Plain text output") }, /* @__PURE__ */ React63.createElement(SubjectOutlined, { fontSize: "small" }))
8642
8694
  }
8643
- ), /* @__PURE__ */ React62.createElement(
8695
+ ), /* @__PURE__ */ React63.createElement(
8644
8696
  Tab,
8645
8697
  {
8646
8698
  value: "json",
8647
- label: /* @__PURE__ */ React62.createElement(Tooltip, { title: t("tab.json-output", "JSON output") }, /* @__PURE__ */ React62.createElement(DataObjectOutlined, { fontSize: "small" }))
8699
+ label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.json-output", "JSON output") }, /* @__PURE__ */ React63.createElement(DataObjectOutlined, { fontSize: "small" }))
8648
8700
  }
8649
8701
  ));
8650
8702
  }
@@ -8699,7 +8751,7 @@ function SaveBar({ loadTemplates, saveAs }) {
8699
8751
  return false;
8700
8752
  }
8701
8753
  });
8702
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
8754
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
8703
8755
  Box,
8704
8756
  {
8705
8757
  sx: {
@@ -8712,7 +8764,7 @@ function SaveBar({ loadTemplates, saveAs }) {
8712
8764
  pb: 3
8713
8765
  }
8714
8766
  },
8715
- /* @__PURE__ */ React62.createElement(
8767
+ /* @__PURE__ */ React63.createElement(
8716
8768
  Box,
8717
8769
  {
8718
8770
  sx: {
@@ -8727,7 +8779,7 @@ function SaveBar({ loadTemplates, saveAs }) {
8727
8779
  boxShadow: "0 2px 6px rgba(33, 36, 67, 0.06), 0 16px 40px rgba(33, 36, 67, 0.14)"
8728
8780
  }
8729
8781
  },
8730
- hasOpenRow && currentTemplateName && /* @__PURE__ */ React62.createElement(
8782
+ hasOpenRow && currentTemplateName && /* @__PURE__ */ React63.createElement(
8731
8783
  Box,
8732
8784
  {
8733
8785
  sx: {
@@ -8743,25 +8795,25 @@ function SaveBar({ loadTemplates, saveAs }) {
8743
8795
  title: currentTemplateName
8744
8796
  },
8745
8797
  isSample ? `${t("savebar.sample-prefix", "Sample")} \xB7 ` : "",
8746
- /* @__PURE__ */ React62.createElement(Box, { component: "span", sx: { color: "text.primary", fontWeight: 600 } }, currentTemplateName)
8798
+ /* @__PURE__ */ React63.createElement(Box, { component: "span", sx: { color: "text.primary", fontWeight: 600 } }, currentTemplateName)
8747
8799
  ),
8748
- /* @__PURE__ */ React62.createElement(Tooltip, { title: hasOpenRow ? isSample ? t("savebar.save-changes-to-sample", "Save changes to this sample") : t("savebar.save-changes", "Save changes") : t("savebar.save-as-new-template", "Save as a new template") }, /* @__PURE__ */ React62.createElement(
8800
+ /* @__PURE__ */ React63.createElement(Tooltip, { title: hasOpenRow ? isSample ? t("savebar.save-changes-to-sample", "Save changes to this sample") : t("savebar.save-changes", "Save changes") : t("savebar.save-as-new-template", "Save as a new template") }, /* @__PURE__ */ React63.createElement(
8749
8801
  Button$1,
8750
8802
  {
8751
8803
  variant: "contained",
8752
8804
  size: "large",
8753
- startIcon: /* @__PURE__ */ React62.createElement(SaveOutlined, null),
8805
+ startIcon: /* @__PURE__ */ React63.createElement(SaveOutlined, null),
8754
8806
  onClick: handlePrimary,
8755
8807
  sx: { borderRadius: 999, textTransform: "none", px: 2.5, fontSize: 15, fontWeight: 600 }
8756
8808
  },
8757
8809
  primaryLabel
8758
8810
  )),
8759
- hasOpenRow && saveAs && /* @__PURE__ */ React62.createElement(Tooltip, { title: t("savebar.save-as-new-template", "Save as a new template") }, /* @__PURE__ */ React62.createElement(
8811
+ hasOpenRow && saveAs && /* @__PURE__ */ React63.createElement(Tooltip, { title: t("savebar.save-as-new-template", "Save as a new template") }, /* @__PURE__ */ React63.createElement(
8760
8812
  Button$1,
8761
8813
  {
8762
8814
  variant: "outlined",
8763
8815
  size: "large",
8764
- startIcon: /* @__PURE__ */ React62.createElement(SaveAsOutlined, null),
8816
+ startIcon: /* @__PURE__ */ React63.createElement(SaveAsOutlined, null),
8765
8817
  onClick: () => {
8766
8818
  setNameError(null);
8767
8819
  setDialogMode("save-as");
@@ -8770,12 +8822,12 @@ function SaveBar({ loadTemplates, saveAs }) {
8770
8822
  },
8771
8823
  t("savebar.save-as", "Save as\u2026")
8772
8824
  )),
8773
- saveAs && /* @__PURE__ */ React62.createElement(Tooltip, { title: t("savebar.start-fresh", "Start a fresh template") }, /* @__PURE__ */ React62.createElement(
8825
+ saveAs && /* @__PURE__ */ React63.createElement(Tooltip, { title: t("savebar.start-fresh", "Start a fresh template") }, /* @__PURE__ */ React63.createElement(
8774
8826
  Button$1,
8775
8827
  {
8776
8828
  variant: "text",
8777
8829
  size: "large",
8778
- startIcon: /* @__PURE__ */ React62.createElement(AddOutlined, null),
8830
+ startIcon: /* @__PURE__ */ React63.createElement(AddOutlined, null),
8779
8831
  onClick: () => {
8780
8832
  setNameError(null);
8781
8833
  setDialogMode("new-blank");
@@ -8785,7 +8837,7 @@ function SaveBar({ loadTemplates, saveAs }) {
8785
8837
  t("savebar.new", "New")
8786
8838
  ))
8787
8839
  )
8788
- ), /* @__PURE__ */ React62.createElement(
8840
+ ), /* @__PURE__ */ React63.createElement(
8789
8841
  SaveTemplateDialog,
8790
8842
  {
8791
8843
  open: dialogMode !== null,
@@ -8839,7 +8891,7 @@ function UndoRedoButtons() {
8839
8891
  window.addEventListener("keydown", onKeyDown);
8840
8892
  return () => window.removeEventListener("keydown", onKeyDown);
8841
8893
  }, [mac]);
8842
- return /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 0.5, alignItems: "center" }, /* @__PURE__ */ React62.createElement(Tooltip, { title: `${t("undo.tooltip", "Undo")} (${undoHint})` }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
8894
+ return /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 0.5, alignItems: "center" }, /* @__PURE__ */ React63.createElement(Tooltip, { title: `${t("undo.tooltip", "Undo")} (${undoHint})` }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
8843
8895
  IconButton,
8844
8896
  {
8845
8897
  size: "small",
@@ -8847,8 +8899,8 @@ function UndoRedoButtons() {
8847
8899
  disabled: !canUndo,
8848
8900
  "aria-label": t("undo.label", "Undo")
8849
8901
  },
8850
- /* @__PURE__ */ React62.createElement(UndoOutlined, { fontSize: "small" })
8851
- ))), /* @__PURE__ */ React62.createElement(Tooltip, { title: `${t("redo.tooltip", "Redo")} (${redoHint})` }, /* @__PURE__ */ React62.createElement("span", null, /* @__PURE__ */ React62.createElement(
8902
+ /* @__PURE__ */ React63.createElement(UndoOutlined, { fontSize: "small" })
8903
+ ))), /* @__PURE__ */ React63.createElement(Tooltip, { title: `${t("redo.tooltip", "Redo")} (${redoHint})` }, /* @__PURE__ */ React63.createElement("span", null, /* @__PURE__ */ React63.createElement(
8852
8904
  IconButton,
8853
8905
  {
8854
8906
  size: "small",
@@ -8856,7 +8908,7 @@ function UndoRedoButtons() {
8856
8908
  disabled: !canRedo,
8857
8909
  "aria-label": t("redo.label", "Redo")
8858
8910
  },
8859
- /* @__PURE__ */ React62.createElement(RedoOutlined, { fontSize: "small" })
8911
+ /* @__PURE__ */ React63.createElement(RedoOutlined, { fontSize: "small" })
8860
8912
  ))));
8861
8913
  }
8862
8914
  function SubjectInput() {
@@ -8882,7 +8934,7 @@ function SubjectInput() {
8882
8934
  selectionEnd: (_b = target.selectionEnd) != null ? _b : target.value.length
8883
8935
  });
8884
8936
  };
8885
- return /* @__PURE__ */ React62.createElement(
8937
+ return /* @__PURE__ */ React63.createElement(
8886
8938
  Box,
8887
8939
  {
8888
8940
  sx: {
@@ -8899,12 +8951,12 @@ function SubjectInput() {
8899
8951
  gap: 1.5
8900
8952
  }
8901
8953
  },
8902
- /* @__PURE__ */ React62.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, "Subject"),
8903
- /* @__PURE__ */ React62.createElement(
8954
+ /* @__PURE__ */ React63.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, t("subject.label", "Subject")),
8955
+ /* @__PURE__ */ React63.createElement(
8904
8956
  InputBase,
8905
8957
  {
8906
8958
  fullWidth: true,
8907
- placeholder: "Email subject \u2014 supports {{variables}}",
8959
+ placeholder: t("subject.placeholder", "Email subject \u2014 supports {{variables}}"),
8908
8960
  value: subject,
8909
8961
  onChange: (e) => handleChange(e.target.value),
8910
8962
  onFocus: trackFocus,
@@ -8926,7 +8978,7 @@ function SubjectPreview() {
8926
8978
  if (!subject) return null;
8927
8979
  const samples = buildSampleValueMap((_b = data.variables) != null ? _b : []);
8928
8980
  const rendered = substituteSampleValues(subject, samples);
8929
- return /* @__PURE__ */ React62.createElement(
8981
+ return /* @__PURE__ */ React63.createElement(
8930
8982
  Box,
8931
8983
  {
8932
8984
  sx: {
@@ -8943,8 +8995,8 @@ function SubjectPreview() {
8943
8995
  gap: 1.5
8944
8996
  }
8945
8997
  },
8946
- /* @__PURE__ */ React62.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, "Subject"),
8947
- /* @__PURE__ */ React62.createElement(Box, { sx: { fontSize: 14 } }, rendered)
8998
+ /* @__PURE__ */ React63.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, t("subject.label", "Subject")),
8999
+ /* @__PURE__ */ React63.createElement(Box, { sx: { fontSize: 14 } }, rendered)
8948
9000
  );
8949
9001
  }
8950
9002
  function generateId3() {
@@ -9017,7 +9069,7 @@ function ImageDropPasteHandler({ enabled, children }) {
9017
9069
  window.addEventListener("paste", handlePaste);
9018
9070
  return () => window.removeEventListener("paste", handlePaste);
9019
9071
  }, [active, uploadImage]);
9020
- if (!active) return /* @__PURE__ */ React62.createElement(React62.Fragment, null, children);
9072
+ if (!active) return /* @__PURE__ */ React63.createElement(React63.Fragment, null, children);
9021
9073
  const onDragEnter = (e) => {
9022
9074
  var _a, _b;
9023
9075
  if (!Array.from((_b = (_a = e.dataTransfer) == null ? void 0 : _a.items) != null ? _b : []).some((i) => i.kind === "file")) return;
@@ -9050,7 +9102,7 @@ function ImageDropPasteHandler({ enabled, children }) {
9050
9102
  setUploading(false);
9051
9103
  }
9052
9104
  });
9053
- return /* @__PURE__ */ React62.createElement(
9105
+ return /* @__PURE__ */ React63.createElement(
9054
9106
  Box,
9055
9107
  {
9056
9108
  ref: wrapperRef,
@@ -9061,7 +9113,7 @@ function ImageDropPasteHandler({ enabled, children }) {
9061
9113
  sx: { position: "relative" }
9062
9114
  },
9063
9115
  children,
9064
- (dragging || uploading) && /* @__PURE__ */ React62.createElement(
9116
+ (dragging || uploading) && /* @__PURE__ */ React63.createElement(
9065
9117
  Box,
9066
9118
  {
9067
9119
  sx: {
@@ -9080,7 +9132,7 @@ function ImageDropPasteHandler({ enabled, children }) {
9080
9132
  zIndex: 10
9081
9133
  }
9082
9134
  },
9083
- /* @__PURE__ */ React62.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1, fontWeight: 600, fontSize: 14 } }, /* @__PURE__ */ React62.createElement(CloudUploadOutlined, null), uploading ? "Uploading\u2026" : "Drop image to insert")
9135
+ /* @__PURE__ */ React63.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1, fontWeight: 600, fontSize: 14 } }, /* @__PURE__ */ React63.createElement(CloudUploadOutlined, null), uploading ? "Uploading\u2026" : "Drop image to insert")
9084
9136
  )
9085
9137
  );
9086
9138
  }
@@ -9094,6 +9146,16 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9094
9146
  const selectedScreenSize = useSelectedScreenSize();
9095
9147
  const persistenceEnabled = usePersistenceEnabled();
9096
9148
  const workspaceBackground = useWorkspaceBackground();
9149
+ const { onTestSend } = useEditorConfig();
9150
+ const handleTestSend = () => {
9151
+ var _a;
9152
+ if (!onTestSend) return;
9153
+ const root = document2.root;
9154
+ const layoutData = root && root.type === "EmailLayout" ? root.data : void 0;
9155
+ const html2 = renderToStaticMarkup(document2, { rootBlockId: "root" });
9156
+ const text = renderToText(document2, { rootBlockId: "root" });
9157
+ onTestSend({ html: html2, text, subject: (_a = layoutData == null ? void 0 : layoutData.subject) != null ? _a : void 0 });
9158
+ };
9097
9159
  let mainBoxSx = {
9098
9160
  height: "100%"
9099
9161
  };
@@ -9120,7 +9182,7 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9120
9182
  var _a;
9121
9183
  switch (selectedMainTab) {
9122
9184
  case "editor":
9123
- return /* @__PURE__ */ React62.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React62.createElement(EditorBlock, { id: "root" }));
9185
+ return /* @__PURE__ */ React63.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React63.createElement(EditorBlock, { id: "root" }));
9124
9186
  case "preview": {
9125
9187
  const rootBlock = document2.root;
9126
9188
  const layoutData = rootBlock && rootBlock.type === "EmailLayout" ? rootBlock.data : void 0;
@@ -9128,18 +9190,18 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9128
9190
  (_a = layoutData == null ? void 0 : layoutData.variables) != null ? _a : []
9129
9191
  );
9130
9192
  const previewDoc = applySampleValuesToDocument(document2, samples);
9131
- return /* @__PURE__ */ React62.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React62.createElement(Reader, { document: previewDoc, rootBlockId: "root" }));
9193
+ return /* @__PURE__ */ React63.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React63.createElement(Reader, { document: previewDoc, rootBlockId: "root" }));
9132
9194
  }
9133
9195
  case "html":
9134
- return /* @__PURE__ */ React62.createElement(HtmlPanel, null);
9196
+ return /* @__PURE__ */ React63.createElement(HtmlPanel, null);
9135
9197
  case "text":
9136
- return /* @__PURE__ */ React62.createElement(TextPanel, null);
9198
+ return /* @__PURE__ */ React63.createElement(TextPanel, null);
9137
9199
  case "json":
9138
- return /* @__PURE__ */ React62.createElement(JsonPanel, null);
9200
+ return /* @__PURE__ */ React63.createElement(JsonPanel, null);
9139
9201
  }
9140
9202
  };
9141
9203
  const showSaveButtons = persistenceEnabled;
9142
- return /* @__PURE__ */ React62.createElement(React62.Fragment, null, /* @__PURE__ */ React62.createElement(
9204
+ return /* @__PURE__ */ React63.createElement(React63.Fragment, null, /* @__PURE__ */ React63.createElement(
9143
9205
  Stack,
9144
9206
  {
9145
9207
  sx: {
@@ -9156,10 +9218,10 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9156
9218
  justifyContent: "space-between",
9157
9219
  alignItems: "center"
9158
9220
  },
9159
- samplesDrawerEnabled && /* @__PURE__ */ React62.createElement(ToggleSamplesPanelButton, null),
9160
- /* @__PURE__ */ React62.createElement(Stack, { px: 2, direction: "row", gap: 2, width: "100%", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React62.createElement(MainTabsGroup, null)), /* @__PURE__ */ React62.createElement(Stack, { direction: "row", spacing: 2, alignItems: "center" }, selectedMainTab === "editor" && /* @__PURE__ */ React62.createElement(UndoRedoButtons, null), /* @__PURE__ */ React62.createElement(ToggleButtonGroup, { value: selectedScreenSize, exclusive: true, size: "small", onChange: handleScreenSizeChange }, /* @__PURE__ */ React62.createElement(ToggleButton, { value: "desktop" }, /* @__PURE__ */ React62.createElement(Tooltip, { title: t("canvas.desktop-view", "Desktop view") }, /* @__PURE__ */ React62.createElement(MonitorOutlined, { fontSize: "small" }))), /* @__PURE__ */ React62.createElement(ToggleButton, { value: "mobile" }, /* @__PURE__ */ React62.createElement(Tooltip, { title: t("canvas.mobile-view", "Mobile view") }, /* @__PURE__ */ React62.createElement(PhoneIphoneOutlined, { fontSize: "small" })))))),
9161
- /* @__PURE__ */ React62.createElement(ToggleInspectorPanelButton, null)
9162
- ), selectedMainTab === "editor" && /* @__PURE__ */ React62.createElement(SubjectInput, null), selectedMainTab === "preview" && /* @__PURE__ */ React62.createElement(SubjectPreview, null), /* @__PURE__ */ React62.createElement(ImageDropPasteHandler, { enabled: selectedMainTab === "editor" }, /* @__PURE__ */ React62.createElement(
9221
+ samplesDrawerEnabled && /* @__PURE__ */ React63.createElement(ToggleSamplesPanelButton, null),
9222
+ /* @__PURE__ */ React63.createElement(Stack, { px: 2, direction: "row", gap: 2, width: "100%", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React63.createElement(MainTabsGroup, null)), /* @__PURE__ */ React63.createElement(Stack, { direction: "row", spacing: 2, alignItems: "center" }, selectedMainTab === "editor" && /* @__PURE__ */ React63.createElement(UndoRedoButtons, null), /* @__PURE__ */ React63.createElement(ToggleButtonGroup, { value: selectedScreenSize, exclusive: true, size: "small", onChange: handleScreenSizeChange }, /* @__PURE__ */ React63.createElement(ToggleButton, { value: "desktop" }, /* @__PURE__ */ React63.createElement(Tooltip, { title: t("canvas.desktop-view", "Desktop view") }, /* @__PURE__ */ React63.createElement(MonitorOutlined, { fontSize: "small" }))), /* @__PURE__ */ React63.createElement(ToggleButton, { value: "mobile" }, /* @__PURE__ */ React63.createElement(Tooltip, { title: t("canvas.mobile-view", "Mobile view") }, /* @__PURE__ */ React63.createElement(PhoneIphoneOutlined, { fontSize: "small" })))), onTestSend && /* @__PURE__ */ React63.createElement(Tooltip, { title: t("canvas.send-test", "Send test") }, /* @__PURE__ */ React63.createElement(IconButton, { size: "small", onClick: handleTestSend }, /* @__PURE__ */ React63.createElement(SendOutlined, { fontSize: "small" }))))),
9223
+ /* @__PURE__ */ React63.createElement(ToggleInspectorPanelButton, null)
9224
+ ), selectedMainTab === "editor" && /* @__PURE__ */ React63.createElement(SubjectInput, null), selectedMainTab === "preview" && /* @__PURE__ */ React63.createElement(SubjectPreview, null), /* @__PURE__ */ React63.createElement(ImageDropPasteHandler, { enabled: selectedMainTab === "editor" }, /* @__PURE__ */ React63.createElement(
9163
9225
  Box,
9164
9226
  {
9165
9227
  sx: {
@@ -9175,8 +9237,8 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
9175
9237
  background: selectedMainTab === "editor" ? workspaceBackground === "checkerboard" ? WORKSPACE_CHECKERBOARD : WORKSPACE_SOLID : void 0
9176
9238
  }
9177
9239
  },
9178
- /* @__PURE__ */ React62.createElement(Box, { sx: { flexGrow: 1 } }, renderMainPanel()),
9179
- showSaveButtons && selectedMainTab === "editor" && /* @__PURE__ */ React62.createElement(SaveBar, { loadTemplates, saveAs })
9240
+ /* @__PURE__ */ React63.createElement(Box, { sx: { flexGrow: 1 } }, renderMainPanel()),
9241
+ showSaveButtons && selectedMainTab === "editor" && /* @__PURE__ */ React63.createElement(SaveBar, { loadTemplates, saveAs })
9180
9242
  )));
9181
9243
  }
9182
9244
 
@@ -9258,7 +9320,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
9258
9320
  return getDocument();
9259
9321
  }
9260
9322
  }));
9261
- return /* @__PURE__ */ React62.createElement(Stack, { position: "relative", id: "drawer-container", sx: { minHeight } }, /* @__PURE__ */ React62.createElement(
9323
+ return /* @__PURE__ */ React63.createElement(Stack, { position: "relative", id: "drawer-container", sx: { minHeight } }, /* @__PURE__ */ React63.createElement(
9262
9324
  InspectorDrawer,
9263
9325
  {
9264
9326
  enterDuration: drawerEnterDuration,
@@ -9267,7 +9329,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
9267
9329
  copyTemplate,
9268
9330
  renameTemplate
9269
9331
  }
9270
- ), /* @__PURE__ */ React62.createElement(
9332
+ ), /* @__PURE__ */ React63.createElement(
9271
9333
  SamplesDrawer,
9272
9334
  {
9273
9335
  enterDuration: drawerEnterDuration,
@@ -9283,7 +9345,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
9283
9345
  setTemplateKind,
9284
9346
  saveAs
9285
9347
  }
9286
- ), /* @__PURE__ */ React62.createElement(
9348
+ ), /* @__PURE__ */ React63.createElement(
9287
9349
  Stack,
9288
9350
  {
9289
9351
  sx: {
@@ -9292,7 +9354,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
9292
9354
  transition: [marginLeftTransition, marginRightTransition].join(", ")
9293
9355
  }
9294
9356
  },
9295
- /* @__PURE__ */ React62.createElement(TemplatePanel2, { loadTemplates, saveAs, samplesDrawerEnabled })
9357
+ /* @__PURE__ */ React63.createElement(TemplatePanel2, { loadTemplates, saveAs, samplesDrawerEnabled })
9296
9358
  ));
9297
9359
  });
9298
9360
  var EmailEditor = forwardRef((props, ref) => {
@@ -9319,7 +9381,10 @@ var EmailEditor = forwardRef((props, ref) => {
9319
9381
  loadImages,
9320
9382
  deleteImage,
9321
9383
  theme,
9322
- locale
9384
+ locale,
9385
+ favoriteColors,
9386
+ customBlocks,
9387
+ onTestSend
9323
9388
  } = props;
9324
9389
  activateLocale(locale);
9325
9390
  const resolvedTemplate = useMemo(
@@ -9338,7 +9403,11 @@ var EmailEditor = forwardRef((props, ref) => {
9338
9403
  () => ({ uploadImage, loadImages, deleteImage }),
9339
9404
  [uploadImage, loadImages, deleteImage]
9340
9405
  );
9341
- return /* @__PURE__ */ React62.createElement(I18nProvider, { i18n }, /* @__PURE__ */ React62.createElement(ThemeProvider, { theme: theme || theme_default }, /* @__PURE__ */ React62.createElement(CssBaseline, null), /* @__PURE__ */ React62.createElement("div", { style: { height: "100%", overflow: "auto" } }, /* @__PURE__ */ React62.createElement(SnackbarProvider, null, /* @__PURE__ */ React62.createElement(ImageCallbacksProvider, { callbacks: imageCallbacks }, /* @__PURE__ */ React62.createElement(
9406
+ const editorConfig = useMemo(
9407
+ () => ({ favoriteColors, customBlocks, onTestSend }),
9408
+ [favoriteColors, customBlocks, onTestSend]
9409
+ );
9410
+ return /* @__PURE__ */ React63.createElement(I18nProvider, { i18n }, /* @__PURE__ */ React63.createElement(ThemeProvider, { theme: theme || theme_default }, /* @__PURE__ */ React63.createElement(CssBaseline, null), /* @__PURE__ */ React63.createElement("div", { style: { height: "100%", overflow: "auto" } }, /* @__PURE__ */ React63.createElement(SnackbarProvider, null, /* @__PURE__ */ React63.createElement(EditorConfigProvider, { config: editorConfig }, /* @__PURE__ */ React63.createElement(ImageCallbacksProvider, { callbacks: imageCallbacks }, /* @__PURE__ */ React63.createElement(
9342
9411
  EmailEditorProvider,
9343
9412
  {
9344
9413
  initialTemplate: resolvedTemplate,
@@ -9347,7 +9416,7 @@ var EmailEditor = forwardRef((props, ref) => {
9347
9416
  onSave,
9348
9417
  onChange
9349
9418
  },
9350
- /* @__PURE__ */ React62.createElement(
9419
+ /* @__PURE__ */ React63.createElement(
9351
9420
  EmailEditorInternal,
9352
9421
  {
9353
9422
  ref,
@@ -9366,7 +9435,7 @@ var EmailEditor = forwardRef((props, ref) => {
9366
9435
  onChange
9367
9436
  }
9368
9437
  )
9369
- ))))));
9438
+ )))))));
9370
9439
  });
9371
9440
  EmailEditor.displayName = "EmailEditor";
9372
9441
  EmailEditorInternal.displayName = "EmailEditorInternal";