@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.cjs +874 -805
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -1
- package/dist/index.d.ts +28 -1
- package/dist/index.js +666 -597
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import DOMPurify from 'dompurify';
|
|
2
2
|
import { marked, Renderer } from 'marked';
|
|
3
|
-
import
|
|
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 {
|
|
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__ */
|
|
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__ */
|
|
276
|
+
return /* @__PURE__ */ React63.createElement(EmailMarkdown, { style: wStyle, markdown: text });
|
|
268
277
|
}
|
|
269
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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> </i><![endif]-->`
|
|
475
484
|
}
|
|
476
485
|
}
|
|
477
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
625
|
+
return /* @__PURE__ */ React63.createElement("div", { style: wStyle });
|
|
616
626
|
}
|
|
617
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
759
|
+
return /* @__PURE__ */ React63.createElement("h1", __spreadValues({}, renderProps));
|
|
750
760
|
case "h2":
|
|
751
|
-
return /* @__PURE__ */
|
|
761
|
+
return /* @__PURE__ */ React63.createElement("h2", __spreadValues({}, renderProps));
|
|
752
762
|
case "h3":
|
|
753
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
845
|
+
return /* @__PURE__ */ React63.createElement("div", { style: cssStyle });
|
|
836
846
|
}
|
|
837
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
903
|
+
return /* @__PURE__ */ React63.createElement("div", { style: sectionStyle }, imageElement);
|
|
894
904
|
}
|
|
895
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1061
|
-
if (phone) contactParts.push(/* @__PURE__ */
|
|
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__ */
|
|
1074
|
+
contactParts.push(/* @__PURE__ */ React63.createElement("a", { key: "website", href, style: linkStyle, target: "_blank" }, website));
|
|
1065
1075
|
}
|
|
1066
|
-
const textContent = /* @__PURE__ */
|
|
1067
|
-
const greetingElement = greeting ? /* @__PURE__ */
|
|
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__ */
|
|
1079
|
+
return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React63.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
|
|
1070
1080
|
}
|
|
1071
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1173
|
+
cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
1164
1174
|
}
|
|
1165
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1259
|
+
return /* @__PURE__ */ React63.createElement("div", { style: baseStyle }, childrenIds.map((childId) => /* @__PURE__ */ React63.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
1250
1260
|
}
|
|
1251
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2575
|
+
return /* @__PURE__ */ React63.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadProps(__spreadValues({}, BUTTON_SX), { bgcolor: value }) });
|
|
2554
2576
|
}
|
|
2555
|
-
return /* @__PURE__ */
|
|
2577
|
+
return /* @__PURE__ */ React63.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadValues({}, BUTTON_SX) }, /* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" }));
|
|
2556
2578
|
};
|
|
2557
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2604
|
+
return /* @__PURE__ */ React63.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: false }));
|
|
2583
2605
|
}
|
|
2584
2606
|
function NullableColorInput(props) {
|
|
2585
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2658
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2798
|
+
), /* @__PURE__ */ React63.createElement(
|
|
2778
2799
|
RawSliderInput,
|
|
2779
2800
|
{
|
|
2780
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
2810
|
+
), /* @__PURE__ */ React63.createElement(
|
|
2790
2811
|
RawSliderInput,
|
|
2791
2812
|
{
|
|
2792
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
2822
|
+
), /* @__PURE__ */ React63.createElement(
|
|
2802
2823
|
RawSliderInput,
|
|
2803
2824
|
{
|
|
2804
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2831
|
-
/* @__PURE__ */
|
|
2832
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2866
|
+
return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.background-color", "Background color"), defaultValue, onChange: handleChange });
|
|
2846
2867
|
case "borderColor":
|
|
2847
|
-
return /* @__PURE__ */
|
|
2868
|
+
return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.border-color", "Border color"), defaultValue, onChange: handleChange });
|
|
2848
2869
|
case "borderRadius":
|
|
2849
|
-
return /* @__PURE__ */
|
|
2870
|
+
return /* @__PURE__ */ React63.createElement(
|
|
2850
2871
|
SliderInput,
|
|
2851
2872
|
{
|
|
2852
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
2885
|
+
return /* @__PURE__ */ React63.createElement(NullableColorInput, { label: t("style.text-color", "Text color"), defaultValue, onChange: handleChange });
|
|
2865
2886
|
case "fontFamily":
|
|
2866
|
-
return /* @__PURE__ */
|
|
2887
|
+
return /* @__PURE__ */ React63.createElement(NullableFontFamily, { label: t("style.font-family", "Font family"), defaultValue, onChange: handleChange });
|
|
2867
2888
|
case "fontSize":
|
|
2868
|
-
return /* @__PURE__ */
|
|
2889
|
+
return /* @__PURE__ */ React63.createElement(FontSizeInput, { label: t("style.font-size", "Font size"), defaultValue, onChange: handleChange });
|
|
2869
2890
|
case "fontWeight":
|
|
2870
|
-
return /* @__PURE__ */
|
|
2891
|
+
return /* @__PURE__ */ React63.createElement(FontWeightInput, { label: t("style.font-weight", "Font weight"), defaultValue, onChange: handleChange });
|
|
2871
2892
|
case "lineHeight":
|
|
2872
|
-
return /* @__PURE__ */
|
|
2893
|
+
return /* @__PURE__ */ React63.createElement(LineHeightInput, { label: t("style.line-height", "Line height"), defaultValue, onChange: handleChange });
|
|
2873
2894
|
case "letterSpacing":
|
|
2874
|
-
return /* @__PURE__ */
|
|
2895
|
+
return /* @__PURE__ */ React63.createElement(LetterSpacingInput, { label: t("style.letter-spacing", "Letter spacing"), defaultValue, onChange: handleChange });
|
|
2875
2896
|
case "textAlign":
|
|
2876
|
-
return /* @__PURE__ */
|
|
2897
|
+
return /* @__PURE__ */ React63.createElement(TextAlignInput, { label: t("style.alignment", "Alignment"), defaultValue, onChange: handleChange });
|
|
2877
2898
|
case "padding":
|
|
2878
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2928
|
-
/* @__PURE__ */
|
|
2929
|
-
/* @__PURE__ */
|
|
2930
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2998
|
-
/* @__PURE__ */
|
|
2999
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
3007
|
-
/* @__PURE__ */
|
|
3008
|
-
/* @__PURE__ */
|
|
3009
|
-
/* @__PURE__ */
|
|
3010
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
3018
|
-
/* @__PURE__ */
|
|
3019
|
-
/* @__PURE__ */
|
|
3020
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3157
|
-
/* @__PURE__ */
|
|
3158
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
3187
|
+
), /* @__PURE__ */ React63.createElement(
|
|
3167
3188
|
SliderInput,
|
|
3168
3189
|
{
|
|
3169
3190
|
label: t("columns.gap", "Columns gap"),
|
|
3170
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3189
|
-
/* @__PURE__ */
|
|
3190
|
-
/* @__PURE__ */
|
|
3191
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3271
|
+
), /* @__PURE__ */ React63.createElement(
|
|
3251
3272
|
SliderInput,
|
|
3252
3273
|
{
|
|
3253
3274
|
label: t("field.height", "Height"),
|
|
3254
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3327
|
+
return /* @__PURE__ */ React63.createElement(
|
|
3307
3328
|
FormControlLabel,
|
|
3308
3329
|
{
|
|
3309
3330
|
label,
|
|
3310
|
-
control: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3387
|
+
), /* @__PURE__ */ React63.createElement(
|
|
3367
3388
|
SliderInput,
|
|
3368
3389
|
{
|
|
3369
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3427
|
-
/* @__PURE__ */
|
|
3428
|
-
/* @__PURE__ */
|
|
3429
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3592
|
-
onDelete && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3720
|
+
startIcon: /* @__PURE__ */ React63.createElement(CollectionsOutlined, { fontSize: "small" }),
|
|
3700
3721
|
onClick: () => setLibraryOpen(true)
|
|
3701
3722
|
},
|
|
3702
3723
|
t("image.library", "Library")
|
|
3703
|
-
)), uploadError && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3752
|
-
/* @__PURE__ */
|
|
3753
|
-
/* @__PURE__ */
|
|
3754
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3884
|
+
), /* @__PURE__ */ React63.createElement(
|
|
3864
3885
|
SliderInput,
|
|
3865
3886
|
{
|
|
3866
3887
|
label: t("signature.image-size", "Image size"),
|
|
3867
|
-
iconLabel: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3883
|
-
/* @__PURE__ */
|
|
3884
|
-
/* @__PURE__ */
|
|
3885
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
3893
|
-
/* @__PURE__ */
|
|
3894
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4036
|
+
return /* @__PURE__ */ React63.createElement(AvatarSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4016
4037
|
case "Button":
|
|
4017
|
-
return /* @__PURE__ */
|
|
4038
|
+
return /* @__PURE__ */ React63.createElement(ButtonSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4018
4039
|
case "ColumnsContainer":
|
|
4019
|
-
return /* @__PURE__ */
|
|
4040
|
+
return /* @__PURE__ */ React63.createElement(ColumnsContainerPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4020
4041
|
case "Container":
|
|
4021
|
-
return /* @__PURE__ */
|
|
4042
|
+
return /* @__PURE__ */ React63.createElement(ContainerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4022
4043
|
case "Divider":
|
|
4023
|
-
return /* @__PURE__ */
|
|
4044
|
+
return /* @__PURE__ */ React63.createElement(DividerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4024
4045
|
case "Heading":
|
|
4025
|
-
return /* @__PURE__ */
|
|
4046
|
+
return /* @__PURE__ */ React63.createElement(HeadingSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4026
4047
|
case "Html":
|
|
4027
|
-
return /* @__PURE__ */
|
|
4048
|
+
return /* @__PURE__ */ React63.createElement(HtmlSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4028
4049
|
case "Image":
|
|
4029
|
-
return /* @__PURE__ */
|
|
4050
|
+
return /* @__PURE__ */ React63.createElement(ImageSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4030
4051
|
case "EmailLayout":
|
|
4031
|
-
return /* @__PURE__ */
|
|
4052
|
+
return /* @__PURE__ */ React63.createElement(EmailLayoutSidebarFields, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4032
4053
|
case "Spacer":
|
|
4033
|
-
return /* @__PURE__ */
|
|
4054
|
+
return /* @__PURE__ */ React63.createElement(SpacerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4034
4055
|
case "Signature":
|
|
4035
|
-
return /* @__PURE__ */
|
|
4056
|
+
return /* @__PURE__ */ React63.createElement(SignatureSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4036
4057
|
case "Text":
|
|
4037
|
-
return /* @__PURE__ */
|
|
4058
|
+
return /* @__PURE__ */ React63.createElement(TextSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4038
4059
|
default:
|
|
4039
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4079
|
+
return /* @__PURE__ */ React63.createElement(
|
|
4059
4080
|
Button$1,
|
|
4060
4081
|
{
|
|
4061
4082
|
variant: "outlined",
|
|
4062
4083
|
color: "primary",
|
|
4063
|
-
startIcon: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4114
|
-
/* @__PURE__ */
|
|
4115
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4178
|
+
), /* @__PURE__ */ React63.createElement(
|
|
4158
4179
|
Button$1,
|
|
4159
4180
|
{
|
|
4160
4181
|
variant: "outlined",
|
|
4161
4182
|
color: "error",
|
|
4162
|
-
startIcon: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4567
|
+
deleteIcon: /* @__PURE__ */ React63.createElement(AddOutlined, null),
|
|
4547
4568
|
sx: { fontFamily: "monospace" }
|
|
4548
4569
|
}
|
|
4549
|
-
))), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4636
|
-
))), /* @__PURE__ */
|
|
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__ */
|
|
4645
|
-
))), /* @__PURE__ */
|
|
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__ */
|
|
4653
|
-
)))), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4728
|
+
return /* @__PURE__ */ React63.createElement(ConfigurationPanel, null);
|
|
4708
4729
|
case "styles":
|
|
4709
|
-
return /* @__PURE__ */
|
|
4730
|
+
return /* @__PURE__ */ React63.createElement(StylesPanel, null);
|
|
4710
4731
|
case "variables":
|
|
4711
|
-
return /* @__PURE__ */
|
|
4732
|
+
return /* @__PURE__ */ React63.createElement(VariablesPanel, null);
|
|
4712
4733
|
case "template-settings":
|
|
4713
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4754
|
-
/* @__PURE__ */
|
|
4755
|
-
/* @__PURE__ */
|
|
4756
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
4943
|
-
)), /* @__PURE__ */
|
|
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__ */
|
|
4955
|
-
onDuplicate && /* @__PURE__ */
|
|
4956
|
-
onDuplicateAsTemplate && /* @__PURE__ */
|
|
4957
|
-
onPromote && /* @__PURE__ */
|
|
4958
|
-
onDemote && /* @__PURE__ */
|
|
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__ */
|
|
4961
|
-
/* @__PURE__ */
|
|
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__ */
|
|
5097
|
+
return /* @__PURE__ */ React63.createElement(DashboardOutlined, { fontSize: "small" });
|
|
5077
5098
|
case "Heading":
|
|
5078
|
-
return /* @__PURE__ */
|
|
5099
|
+
return /* @__PURE__ */ React63.createElement(HMobiledataOutlined, { fontSize: "small" });
|
|
5079
5100
|
case "Text":
|
|
5080
|
-
return /* @__PURE__ */
|
|
5101
|
+
return /* @__PURE__ */ React63.createElement(NotesOutlined, { fontSize: "small" });
|
|
5081
5102
|
case "Button":
|
|
5082
|
-
return /* @__PURE__ */
|
|
5103
|
+
return /* @__PURE__ */ React63.createElement(SmartButtonOutlined, { fontSize: "small" });
|
|
5083
5104
|
case "Image":
|
|
5084
|
-
return /* @__PURE__ */
|
|
5105
|
+
return /* @__PURE__ */ React63.createElement(ImageOutlined, { fontSize: "small" });
|
|
5085
5106
|
case "Avatar":
|
|
5086
|
-
return /* @__PURE__ */
|
|
5107
|
+
return /* @__PURE__ */ React63.createElement(AccountCircleOutlined, { fontSize: "small" });
|
|
5087
5108
|
case "Signature":
|
|
5088
|
-
return /* @__PURE__ */
|
|
5109
|
+
return /* @__PURE__ */ React63.createElement(ContactMailOutlined, { fontSize: "small" });
|
|
5089
5110
|
case "Divider":
|
|
5090
|
-
return /* @__PURE__ */
|
|
5111
|
+
return /* @__PURE__ */ React63.createElement(HorizontalRuleOutlined, { fontSize: "small" });
|
|
5091
5112
|
case "Spacer":
|
|
5092
|
-
return /* @__PURE__ */
|
|
5113
|
+
return /* @__PURE__ */ React63.createElement(Crop32Outlined, { fontSize: "small" });
|
|
5093
5114
|
case "Html":
|
|
5094
|
-
return /* @__PURE__ */
|
|
5115
|
+
return /* @__PURE__ */ React63.createElement(HtmlOutlined, { fontSize: "small" });
|
|
5095
5116
|
case "Container":
|
|
5096
|
-
return /* @__PURE__ */
|
|
5117
|
+
return /* @__PURE__ */ React63.createElement(LibraryAddOutlined, { fontSize: "small" });
|
|
5097
5118
|
case "ColumnsContainer":
|
|
5098
|
-
return /* @__PURE__ */
|
|
5119
|
+
return /* @__PURE__ */ React63.createElement(ViewColumnOutlined, { fontSize: "small" });
|
|
5099
5120
|
default:
|
|
5100
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5382
|
-
) : /* @__PURE__ */
|
|
5383
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5467
|
+
/* @__PURE__ */ React63.createElement(KeyboardArrowUp, { fontSize: "small" })
|
|
5447
5468
|
))),
|
|
5448
|
-
/* @__PURE__ */
|
|
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__ */
|
|
5481
|
+
/* @__PURE__ */ React63.createElement(KeyboardArrowDown, { fontSize: "small" })
|
|
5461
5482
|
)))
|
|
5462
5483
|
)
|
|
5463
|
-
), dropPos === "after" && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5582
|
+
/* @__PURE__ */ React63.createElement(
|
|
5562
5583
|
ListItemButton,
|
|
5563
5584
|
{
|
|
5564
5585
|
selected: selectedStarter === null,
|
|
5565
5586
|
onClick: () => setSelectedStarter(null)
|
|
5566
5587
|
},
|
|
5567
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
5799
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6196
|
+
/* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" })
|
|
6176
6197
|
))),
|
|
6177
|
-
/* @__PURE__ */
|
|
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__ */
|
|
6186
|
-
/* @__PURE__ */
|
|
6187
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
6218
|
+
startAdornment: /* @__PURE__ */ React63.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React63.createElement(SearchOutlined, { fontSize: "small" }))
|
|
6198
6219
|
}
|
|
6199
6220
|
}
|
|
6200
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
6210
|
-
), allTags.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6314
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6535
|
+
icon: /* @__PURE__ */ React63.createElement(HtmlOutlined, null),
|
|
6455
6536
|
block: () => ({
|
|
6456
6537
|
type: "Html",
|
|
6457
6538
|
data: {
|
|
6458
|
-
props: { contents: "
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6699
|
+
/* @__PURE__ */ React63.createElement(AddOutlined, { fontSize: "small" })
|
|
6590
6700
|
));
|
|
6591
6701
|
}
|
|
6592
6702
|
function PlaceholderButton({ onClick }) {
|
|
6593
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
6743
|
+
return /* @__PURE__ */ React63.createElement(PlaceholderButton, { onClick: handleButtonClick });
|
|
6634
6744
|
} else {
|
|
6635
|
-
return /* @__PURE__ */
|
|
6745
|
+
return /* @__PURE__ */ React63.createElement(DividerButton, { buttonElement, onClick: handleButtonClick });
|
|
6636
6746
|
}
|
|
6637
6747
|
};
|
|
6638
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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 =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
6867
|
+
return /* @__PURE__ */ React63.createElement(
|
|
6758
6868
|
columns_container_default,
|
|
6759
6869
|
{
|
|
6760
6870
|
props: restProps,
|
|
6761
6871
|
style,
|
|
6762
6872
|
columns: [
|
|
6763
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7096
|
+
/* @__PURE__ */ React63.createElement("div", { style: { maxWidth: "600px", margin: "0 auto" } }, editorChildren)
|
|
7045
7097
|
)
|
|
7046
7098
|
);
|
|
7047
7099
|
}
|
|
7048
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7715
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7949
|
+
return /* @__PURE__ */ React63.createElement("h1", __spreadValues({}, headingProps));
|
|
7898
7950
|
case "h2":
|
|
7899
|
-
return /* @__PURE__ */
|
|
7951
|
+
return /* @__PURE__ */ React63.createElement("h2", __spreadValues({}, headingProps));
|
|
7900
7952
|
case "h3":
|
|
7901
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
8038
|
+
return /* @__PURE__ */ React63.createElement("div", { style: cssStyle });
|
|
7987
8039
|
}
|
|
7988
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8133
|
-
const textContent = isSelected ? /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8264
|
+
return /* @__PURE__ */ React63.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React63.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
|
|
8213
8265
|
}
|
|
8214
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
8428
|
+
), /* @__PURE__ */ React63.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
|
|
8377
8429
|
}
|
|
8378
8430
|
if (isMarkdown) {
|
|
8379
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8488
|
+
Component: (p) => /* @__PURE__ */ React63.createElement(EmailLayoutEditor, __spreadValues({}, p))
|
|
8437
8489
|
},
|
|
8438
8490
|
Spacer: {
|
|
8439
8491
|
schema: SpacerPropsSchema,
|
|
8440
|
-
Component: (props) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8524
|
+
return /* @__PURE__ */ React63.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React63.createElement(LastPageOutlined, { fontSize: "small" }));
|
|
8473
8525
|
}
|
|
8474
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
8531
|
+
return /* @__PURE__ */ React63.createElement(FirstPageOutlined, { fontSize: "small" });
|
|
8480
8532
|
}
|
|
8481
|
-
return /* @__PURE__ */
|
|
8533
|
+
return /* @__PURE__ */ React63.createElement(MenuOutlined, { fontSize: "small" });
|
|
8482
8534
|
}
|
|
8483
8535
|
function ToggleSamplesPanelButton() {
|
|
8484
8536
|
const icon = useIcon();
|
|
8485
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8675
|
+
label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.edit", "Edit") }, /* @__PURE__ */ React63.createElement(EditOutlined, { fontSize: "small" }))
|
|
8624
8676
|
}
|
|
8625
|
-
), /* @__PURE__ */
|
|
8677
|
+
), /* @__PURE__ */ React63.createElement(
|
|
8626
8678
|
Tab,
|
|
8627
8679
|
{
|
|
8628
8680
|
value: "preview",
|
|
8629
|
-
label: /* @__PURE__ */
|
|
8681
|
+
label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.preview", "Preview") }, /* @__PURE__ */ React63.createElement(PreviewOutlined, { fontSize: "small" }))
|
|
8630
8682
|
}
|
|
8631
|
-
), /* @__PURE__ */
|
|
8683
|
+
), /* @__PURE__ */ React63.createElement(
|
|
8632
8684
|
Tab,
|
|
8633
8685
|
{
|
|
8634
8686
|
value: "html",
|
|
8635
|
-
label: /* @__PURE__ */
|
|
8687
|
+
label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.html-output", "HTML output") }, /* @__PURE__ */ React63.createElement(CodeOutlined, { fontSize: "small" }))
|
|
8636
8688
|
}
|
|
8637
|
-
), /* @__PURE__ */
|
|
8689
|
+
), /* @__PURE__ */ React63.createElement(
|
|
8638
8690
|
Tab,
|
|
8639
8691
|
{
|
|
8640
8692
|
value: "text",
|
|
8641
|
-
label: /* @__PURE__ */
|
|
8693
|
+
label: /* @__PURE__ */ React63.createElement(Tooltip, { title: t("tab.text-output", "Plain text output") }, /* @__PURE__ */ React63.createElement(SubjectOutlined, { fontSize: "small" }))
|
|
8642
8694
|
}
|
|
8643
|
-
), /* @__PURE__ */
|
|
8695
|
+
), /* @__PURE__ */ React63.createElement(
|
|
8644
8696
|
Tab,
|
|
8645
8697
|
{
|
|
8646
8698
|
value: "json",
|
|
8647
|
-
label: /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8798
|
+
/* @__PURE__ */ React63.createElement(Box, { component: "span", sx: { color: "text.primary", fontWeight: 600 } }, currentTemplateName)
|
|
8747
8799
|
),
|
|
8748
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8851
|
-
))), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8903
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
8947
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
9196
|
+
return /* @__PURE__ */ React63.createElement(HtmlPanel, null);
|
|
9135
9197
|
case "text":
|
|
9136
|
-
return /* @__PURE__ */
|
|
9198
|
+
return /* @__PURE__ */ React63.createElement(TextPanel, null);
|
|
9137
9199
|
case "json":
|
|
9138
|
-
return /* @__PURE__ */
|
|
9200
|
+
return /* @__PURE__ */ React63.createElement(JsonPanel, null);
|
|
9139
9201
|
}
|
|
9140
9202
|
};
|
|
9141
9203
|
const showSaveButtons = persistenceEnabled;
|
|
9142
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
9160
|
-
/* @__PURE__ */
|
|
9161
|
-
/* @__PURE__ */
|
|
9162
|
-
), selectedMainTab === "editor" && /* @__PURE__ */
|
|
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__ */
|
|
9179
|
-
showSaveButtons && selectedMainTab === "editor" && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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";
|