@kontakto/email-template-editor 2.12.0 → 2.13.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 +1025 -775
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +589 -33
- package/dist/index.d.ts +589 -33
- package/dist/index.js +810 -564
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DOMPurify from 'dompurify';
|
|
2
2
|
import { marked, Renderer } from 'marked';
|
|
3
|
-
import
|
|
3
|
+
import React65, { 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';
|
|
@@ -10,7 +10,7 @@ import { Stack, ThemeProvider, CssBaseline, useTheme, Drawer, Box, Tabs, Tab, Ty
|
|
|
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, 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';
|
|
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, PinOutlined } 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';
|
|
@@ -193,7 +193,7 @@ function renderInlineMarkdownString(str) {
|
|
|
193
193
|
function EmailMarkdown(_a) {
|
|
194
194
|
var _b = _a, { markdown } = _b, props = __objRest(_b, ["markdown"]);
|
|
195
195
|
const data = useMemo(() => renderMarkdownString(markdown), [markdown]);
|
|
196
|
-
return /* @__PURE__ */
|
|
196
|
+
return /* @__PURE__ */ React65.createElement("div", __spreadProps(__spreadValues({}, props), { dangerouslySetInnerHTML: { __html: data } }));
|
|
197
197
|
}
|
|
198
198
|
var FONT_FAMILY_SCHEMA = z.enum([
|
|
199
199
|
"MODERN_SANS",
|
|
@@ -273,9 +273,9 @@ function Text({ style, props }) {
|
|
|
273
273
|
};
|
|
274
274
|
const text = (_g = props == null ? void 0 : props.text) != null ? _g : TextPropsDefaults.text;
|
|
275
275
|
if (props == null ? void 0 : props.markdown) {
|
|
276
|
-
return /* @__PURE__ */
|
|
276
|
+
return /* @__PURE__ */ React65.createElement(EmailMarkdown, { style: wStyle, markdown: text });
|
|
277
277
|
}
|
|
278
|
-
return /* @__PURE__ */
|
|
278
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wStyle }, text);
|
|
279
279
|
}
|
|
280
280
|
var PADDING_SCHEMA2 = z.object({
|
|
281
281
|
top: z.number(),
|
|
@@ -324,7 +324,7 @@ function Avatar({ style, props }) {
|
|
|
324
324
|
textAlign: (_e = style == null ? void 0 : style.textAlign) != null ? _e : void 0,
|
|
325
325
|
padding: getPadding2(style == null ? void 0 : style.padding)
|
|
326
326
|
};
|
|
327
|
-
return /* @__PURE__ */
|
|
327
|
+
return /* @__PURE__ */ React65.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React65.createElement(
|
|
328
328
|
"img",
|
|
329
329
|
{
|
|
330
330
|
alt,
|
|
@@ -476,14 +476,14 @@ function Button({ style, props }) {
|
|
|
476
476
|
padding: `${padding[0]}px ${padding[1]}px`,
|
|
477
477
|
textDecoration: "none"
|
|
478
478
|
};
|
|
479
|
-
return /* @__PURE__ */
|
|
479
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React65.createElement("a", { href: url, style: linkStyle, target: "_blank" }, /* @__PURE__ */ React65.createElement(
|
|
480
480
|
"span",
|
|
481
481
|
{
|
|
482
482
|
dangerouslySetInnerHTML: {
|
|
483
483
|
__html: `<!--[if mso]><i style="letter-spacing: ${padding[1]}px;mso-font-width:-100%;mso-text-raise:${textRaise}" hidden> </i><![endif]-->`
|
|
484
484
|
}
|
|
485
485
|
}
|
|
486
|
-
), /* @__PURE__ */
|
|
486
|
+
), /* @__PURE__ */ React65.createElement("span", null, text), /* @__PURE__ */ React65.createElement(
|
|
487
487
|
"span",
|
|
488
488
|
{
|
|
489
489
|
dangerouslySetInnerHTML: {
|
|
@@ -532,7 +532,7 @@ function ColumnsContainer({ style, columns, props }) {
|
|
|
532
532
|
contentAlignment: (_d = props == null ? void 0 : props.contentAlignment) != null ? _d : ColumnsContainerPropsDefaults.contentAlignment,
|
|
533
533
|
fixedWidths: props == null ? void 0 : props.fixedWidths
|
|
534
534
|
};
|
|
535
|
-
return /* @__PURE__ */
|
|
535
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wStyle }, /* @__PURE__ */ React65.createElement(
|
|
536
536
|
"table",
|
|
537
537
|
{
|
|
538
538
|
align: "center",
|
|
@@ -541,7 +541,7 @@ function ColumnsContainer({ style, columns, props }) {
|
|
|
541
541
|
border: 0,
|
|
542
542
|
style: { tableLayout: "fixed", borderCollapse: "collapse" }
|
|
543
543
|
},
|
|
544
|
-
/* @__PURE__ */
|
|
544
|
+
/* @__PURE__ */ React65.createElement("tbody", { style: { width: "100%" } }, /* @__PURE__ */ React65.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React65.createElement(TableCell, { index: 0, props: blockProps, columns }), /* @__PURE__ */ React65.createElement(TableCell, { index: 1, props: blockProps, columns }), /* @__PURE__ */ React65.createElement(TableCell, { index: 2, props: blockProps, columns })))
|
|
545
545
|
));
|
|
546
546
|
}
|
|
547
547
|
function TableCell({ index, props, columns }) {
|
|
@@ -559,7 +559,7 @@ function TableCell({ index, props, columns }) {
|
|
|
559
559
|
width: (_d = (_c = props.fixedWidths) == null ? void 0 : _c[index]) != null ? _d : void 0
|
|
560
560
|
};
|
|
561
561
|
const children = (_e = columns && columns[index]) != null ? _e : null;
|
|
562
|
-
return /* @__PURE__ */
|
|
562
|
+
return /* @__PURE__ */ React65.createElement("td", { style }, children);
|
|
563
563
|
}
|
|
564
564
|
function getPaddingBefore(index, { columnsGap, columnsCount }) {
|
|
565
565
|
if (index === 0) {
|
|
@@ -622,9 +622,9 @@ function Container({ style, children }) {
|
|
|
622
622
|
padding: getPadding5(style == null ? void 0 : style.padding)
|
|
623
623
|
};
|
|
624
624
|
if (!children) {
|
|
625
|
-
return /* @__PURE__ */
|
|
625
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wStyle });
|
|
626
626
|
}
|
|
627
|
-
return /* @__PURE__ */
|
|
627
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wStyle }, children);
|
|
628
628
|
}
|
|
629
629
|
var container_default = Container;
|
|
630
630
|
var COLOR_SCHEMA5 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
@@ -658,7 +658,7 @@ function Divider({ style, props }) {
|
|
|
658
658
|
};
|
|
659
659
|
const borderTopWidth = (_b = props == null ? void 0 : props.lineHeight) != null ? _b : DividerPropsDefaults.lineHeight;
|
|
660
660
|
const borderTopColor = (_c = props == null ? void 0 : props.lineColor) != null ? _c : DividerPropsDefaults.lineColor;
|
|
661
|
-
return /* @__PURE__ */
|
|
661
|
+
return /* @__PURE__ */ React65.createElement("div", { style: st }, /* @__PURE__ */ React65.createElement(
|
|
662
662
|
"hr",
|
|
663
663
|
{
|
|
664
664
|
style: {
|
|
@@ -756,11 +756,11 @@ function Heading({ props, style }) {
|
|
|
756
756
|
const renderProps = isMarkdown ? { style: hStyle, dangerouslySetInnerHTML: { __html: html2 != null ? html2 : "" } } : { style: hStyle, children: text };
|
|
757
757
|
switch (level) {
|
|
758
758
|
case "h1":
|
|
759
|
-
return /* @__PURE__ */
|
|
759
|
+
return /* @__PURE__ */ React65.createElement("h1", __spreadValues({}, renderProps));
|
|
760
760
|
case "h2":
|
|
761
|
-
return /* @__PURE__ */
|
|
761
|
+
return /* @__PURE__ */ React65.createElement("h2", __spreadValues({}, renderProps));
|
|
762
762
|
case "h3":
|
|
763
|
-
return /* @__PURE__ */
|
|
763
|
+
return /* @__PURE__ */ React65.createElement("h3", __spreadValues({}, renderProps));
|
|
764
764
|
}
|
|
765
765
|
}
|
|
766
766
|
function getFontSize(level) {
|
|
@@ -842,9 +842,9 @@ function Html({ style, props }) {
|
|
|
842
842
|
padding: getPadding8(style == null ? void 0 : style.padding)
|
|
843
843
|
};
|
|
844
844
|
if (!children) {
|
|
845
|
-
return /* @__PURE__ */
|
|
845
|
+
return /* @__PURE__ */ React65.createElement("div", { style: cssStyle });
|
|
846
846
|
}
|
|
847
|
-
return /* @__PURE__ */
|
|
847
|
+
return /* @__PURE__ */ React65.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: children } });
|
|
848
848
|
}
|
|
849
849
|
var html_default = Html;
|
|
850
850
|
var PADDING_SCHEMA9 = z.object({
|
|
@@ -880,7 +880,7 @@ function Image({ style, props }) {
|
|
|
880
880
|
const linkHref = (_c = props == null ? void 0 : props.linkHref) != null ? _c : null;
|
|
881
881
|
const width = (_d = props == null ? void 0 : props.width) != null ? _d : void 0;
|
|
882
882
|
const height = (_e = props == null ? void 0 : props.height) != null ? _e : void 0;
|
|
883
|
-
const imageElement = /* @__PURE__ */
|
|
883
|
+
const imageElement = /* @__PURE__ */ React65.createElement(
|
|
884
884
|
"img",
|
|
885
885
|
{
|
|
886
886
|
alt: (_f = props == null ? void 0 : props.alt) != null ? _f : "",
|
|
@@ -900,11 +900,19 @@ function Image({ style, props }) {
|
|
|
900
900
|
}
|
|
901
901
|
);
|
|
902
902
|
if (!linkHref) {
|
|
903
|
-
return /* @__PURE__ */
|
|
903
|
+
return /* @__PURE__ */ React65.createElement("div", { style: sectionStyle }, imageElement);
|
|
904
904
|
}
|
|
905
|
-
return /* @__PURE__ */
|
|
905
|
+
return /* @__PURE__ */ React65.createElement("div", { style: sectionStyle }, /* @__PURE__ */ React65.createElement("a", { href: linkHref, style: { textDecoration: "none" }, target: "_blank" }, imageElement));
|
|
906
906
|
}
|
|
907
907
|
var image_default = Image;
|
|
908
|
+
var COLOR_SCHEMA8 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
909
|
+
var PADDING_SCHEMA10 = z.object({
|
|
910
|
+
top: z.number(),
|
|
911
|
+
bottom: z.number(),
|
|
912
|
+
right: z.number(),
|
|
913
|
+
left: z.number()
|
|
914
|
+
}).optional().nullable();
|
|
915
|
+
var getPadding10 = (padding) => padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : void 0;
|
|
908
916
|
var FONT_FAMILY_SCHEMA5 = z.enum([
|
|
909
917
|
"MODERN_SANS",
|
|
910
918
|
"BOOK_SANS",
|
|
@@ -939,19 +947,115 @@ function getFontFamily5(fontFamily) {
|
|
|
939
947
|
}
|
|
940
948
|
return void 0;
|
|
941
949
|
}
|
|
942
|
-
var
|
|
943
|
-
|
|
950
|
+
var OtpPropsSchema = z.object({
|
|
951
|
+
props: z.object({
|
|
952
|
+
code: z.string().optional().nullable()
|
|
953
|
+
}).optional().nullable(),
|
|
954
|
+
style: z.object({
|
|
955
|
+
color: COLOR_SCHEMA8,
|
|
956
|
+
backgroundColor: COLOR_SCHEMA8,
|
|
957
|
+
borderColor: COLOR_SCHEMA8,
|
|
958
|
+
borderRadius: z.number().gte(0).optional().nullable(),
|
|
959
|
+
fontSize: z.number().gte(0).optional().nullable(),
|
|
960
|
+
fontFamily: FONT_FAMILY_SCHEMA5,
|
|
961
|
+
fontWeight: z.enum(["bold", "normal"]).optional().nullable(),
|
|
962
|
+
letterSpacing: z.number().optional().nullable(),
|
|
963
|
+
textAlign: z.enum(["left", "center", "right"]).optional().nullable(),
|
|
964
|
+
padding: PADDING_SCHEMA10
|
|
965
|
+
}).optional().nullable()
|
|
966
|
+
});
|
|
967
|
+
var OtpProps = OtpPropsSchema;
|
|
968
|
+
var OtpPropsDefaults = {
|
|
969
|
+
code: "123456"
|
|
970
|
+
};
|
|
971
|
+
function Otp({ props, style }) {
|
|
972
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
973
|
+
const code = (_a = props == null ? void 0 : props.code) != null ? _a : OtpPropsDefaults.code;
|
|
974
|
+
const wrapperStyle = {
|
|
975
|
+
textAlign: (_b = style == null ? void 0 : style.textAlign) != null ? _b : "center",
|
|
976
|
+
padding: getPadding10(style == null ? void 0 : style.padding)
|
|
977
|
+
};
|
|
978
|
+
const codeStyle = {
|
|
979
|
+
display: "inline-block",
|
|
980
|
+
color: (_c = style == null ? void 0 : style.color) != null ? _c : "#000000",
|
|
981
|
+
backgroundColor: (_d = style == null ? void 0 : style.backgroundColor) != null ? _d : void 0,
|
|
982
|
+
border: (style == null ? void 0 : style.borderColor) ? `1px solid ${style.borderColor}` : void 0,
|
|
983
|
+
borderRadius: (style == null ? void 0 : style.borderRadius) != null ? `${style.borderRadius}px` : void 0,
|
|
984
|
+
fontFamily: (_e = getFontFamily5(style == null ? void 0 : style.fontFamily)) != null ? _e : '"Nimbus Mono PS", "Courier New", "Cutive Mono", monospace',
|
|
985
|
+
fontSize: (_f = style == null ? void 0 : style.fontSize) != null ? _f : 32,
|
|
986
|
+
fontWeight: (_g = style == null ? void 0 : style.fontWeight) != null ? _g : "bold",
|
|
987
|
+
letterSpacing: (style == null ? void 0 : style.letterSpacing) != null ? `${style.letterSpacing}px` : "4px",
|
|
988
|
+
padding: (style == null ? void 0 : style.backgroundColor) || (style == null ? void 0 : style.borderColor) ? "12px 20px" : void 0,
|
|
989
|
+
// Override any auto-link styling that email clients might inject if their
|
|
990
|
+
// data detectors mistakenly fire despite the suppressions below.
|
|
991
|
+
textDecoration: "none"
|
|
992
|
+
};
|
|
993
|
+
const dataDetectorAttrs = {
|
|
994
|
+
"x-apple-data-detectors": "false",
|
|
995
|
+
"data-detect-link": "false"
|
|
996
|
+
};
|
|
997
|
+
return /* @__PURE__ */ React65.createElement("div", __spreadValues({ style: wrapperStyle }, dataDetectorAttrs), /* @__PURE__ */ React65.createElement(
|
|
998
|
+
"a",
|
|
999
|
+
__spreadValues({
|
|
1000
|
+
href: "#",
|
|
1001
|
+
style: __spreadProps(__spreadValues({}, codeStyle), {
|
|
1002
|
+
color: codeStyle.color,
|
|
1003
|
+
textDecoration: "none",
|
|
1004
|
+
cursor: "default",
|
|
1005
|
+
pointerEvents: "none"
|
|
1006
|
+
})
|
|
1007
|
+
}, dataDetectorAttrs),
|
|
1008
|
+
code
|
|
1009
|
+
));
|
|
1010
|
+
}
|
|
1011
|
+
var otp_default = Otp;
|
|
1012
|
+
var FONT_FAMILY_SCHEMA6 = z.enum([
|
|
1013
|
+
"MODERN_SANS",
|
|
1014
|
+
"BOOK_SANS",
|
|
1015
|
+
"ORGANIC_SANS",
|
|
1016
|
+
"GEOMETRIC_SANS",
|
|
1017
|
+
"HEAVY_SANS",
|
|
1018
|
+
"ROUNDED_SANS",
|
|
1019
|
+
"MODERN_SERIF",
|
|
1020
|
+
"BOOK_SERIF",
|
|
1021
|
+
"MONOSPACE"
|
|
1022
|
+
]).nullable().optional();
|
|
1023
|
+
function getFontFamily6(fontFamily) {
|
|
1024
|
+
switch (fontFamily) {
|
|
1025
|
+
case "MODERN_SANS":
|
|
1026
|
+
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
1027
|
+
case "BOOK_SANS":
|
|
1028
|
+
return 'Optima, Candara, "Noto Sans", source-sans-pro, sans-serif';
|
|
1029
|
+
case "ORGANIC_SANS":
|
|
1030
|
+
return 'Seravek, "Gill Sans Nova", Ubuntu, Calibri, "DejaVu Sans", source-sans-pro, sans-serif';
|
|
1031
|
+
case "GEOMETRIC_SANS":
|
|
1032
|
+
return 'Avenir, "Avenir Next LT Pro", Montserrat, Corbel, "URW Gothic", source-sans-pro, sans-serif';
|
|
1033
|
+
case "HEAVY_SANS":
|
|
1034
|
+
return 'Bahnschrift, "DIN Alternate", "Franklin Gothic Medium", "Nimbus Sans Narrow", sans-serif-condensed, sans-serif';
|
|
1035
|
+
case "ROUNDED_SANS":
|
|
1036
|
+
return 'ui-rounded, "Hiragino Maru Gothic ProN", Quicksand, Comfortaa, Manjari, "Arial Rounded MT Bold", Calibri, source-sans-pro, sans-serif';
|
|
1037
|
+
case "MODERN_SERIF":
|
|
1038
|
+
return 'Charter, "Bitstream Charter", "Sitka Text", Cambria, serif';
|
|
1039
|
+
case "BOOK_SERIF":
|
|
1040
|
+
return '"Iowan Old Style", "Palatino Linotype", "URW Palladio L", P052, serif';
|
|
1041
|
+
case "MONOSPACE":
|
|
1042
|
+
return '"Nimbus Mono PS", "Courier New", "Cutive Mono", monospace';
|
|
1043
|
+
}
|
|
1044
|
+
return void 0;
|
|
1045
|
+
}
|
|
1046
|
+
var COLOR_SCHEMA9 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
1047
|
+
var PADDING_SCHEMA11 = z.object({
|
|
944
1048
|
top: z.number(),
|
|
945
1049
|
bottom: z.number(),
|
|
946
1050
|
right: z.number(),
|
|
947
1051
|
left: z.number()
|
|
948
1052
|
}).optional().nullable();
|
|
949
|
-
var
|
|
1053
|
+
var getPadding11 = (padding) => padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : void 0;
|
|
950
1054
|
var SignaturePropsSchema = z.object({
|
|
951
1055
|
style: z.object({
|
|
952
|
-
backgroundColor:
|
|
953
|
-
fontFamily:
|
|
954
|
-
padding:
|
|
1056
|
+
backgroundColor: COLOR_SCHEMA9,
|
|
1057
|
+
fontFamily: FONT_FAMILY_SCHEMA6,
|
|
1058
|
+
padding: PADDING_SCHEMA11
|
|
955
1059
|
}).optional().nullable(),
|
|
956
1060
|
props: z.object({
|
|
957
1061
|
greeting: z.string().optional().nullable(),
|
|
@@ -966,9 +1070,9 @@ var SignaturePropsSchema = z.object({
|
|
|
966
1070
|
imageSize: z.number().optional().nullable(),
|
|
967
1071
|
imageShape: z.enum(["circle", "square", "rounded"]).optional().nullable(),
|
|
968
1072
|
layout: z.enum(["horizontal", "vertical"]).optional().nullable(),
|
|
969
|
-
nameColor:
|
|
970
|
-
textColor:
|
|
971
|
-
linkColor:
|
|
1073
|
+
nameColor: COLOR_SCHEMA9,
|
|
1074
|
+
textColor: COLOR_SCHEMA9,
|
|
1075
|
+
linkColor: COLOR_SCHEMA9
|
|
972
1076
|
}).optional().nullable()
|
|
973
1077
|
});
|
|
974
1078
|
var SignatureProps = SignaturePropsSchema;
|
|
@@ -1019,8 +1123,8 @@ function Signature({ style, props }) {
|
|
|
1019
1123
|
const linkColor = (_o = props == null ? void 0 : props.linkColor) != null ? _o : SignaturePropsDefaults.linkColor;
|
|
1020
1124
|
const wrapperStyle = {
|
|
1021
1125
|
backgroundColor: (_p = style == null ? void 0 : style.backgroundColor) != null ? _p : void 0,
|
|
1022
|
-
fontFamily:
|
|
1023
|
-
padding:
|
|
1126
|
+
fontFamily: getFontFamily6(style == null ? void 0 : style.fontFamily),
|
|
1127
|
+
padding: getPadding11(style == null ? void 0 : style.padding)
|
|
1024
1128
|
};
|
|
1025
1129
|
const greetingStyle = {
|
|
1026
1130
|
fontSize: 14,
|
|
@@ -1048,7 +1152,7 @@ function Signature({ style, props }) {
|
|
|
1048
1152
|
color: linkColor,
|
|
1049
1153
|
textDecoration: "none"
|
|
1050
1154
|
};
|
|
1051
|
-
const imageElement = imageUrl ? /* @__PURE__ */
|
|
1155
|
+
const imageElement = imageUrl ? /* @__PURE__ */ React65.createElement(
|
|
1052
1156
|
"img",
|
|
1053
1157
|
{
|
|
1054
1158
|
src: imageUrl,
|
|
@@ -1067,18 +1171,18 @@ function Signature({ style, props }) {
|
|
|
1067
1171
|
}
|
|
1068
1172
|
) : null;
|
|
1069
1173
|
const contactParts = [];
|
|
1070
|
-
if (email) contactParts.push(/* @__PURE__ */
|
|
1071
|
-
if (phone) contactParts.push(/* @__PURE__ */
|
|
1174
|
+
if (email) contactParts.push(/* @__PURE__ */ React65.createElement("a", { key: "email", href: `mailto:${email}`, style: linkStyle }, email));
|
|
1175
|
+
if (phone) contactParts.push(/* @__PURE__ */ React65.createElement("a", { key: "phone", href: `tel:${phone}`, style: linkStyle }, phone));
|
|
1072
1176
|
if (website) {
|
|
1073
1177
|
const href = website.startsWith("http") ? website : `https://${website}`;
|
|
1074
|
-
contactParts.push(/* @__PURE__ */
|
|
1178
|
+
contactParts.push(/* @__PURE__ */ React65.createElement("a", { key: "website", href, style: linkStyle, target: "_blank" }, website));
|
|
1075
1179
|
}
|
|
1076
|
-
const textContent = /* @__PURE__ */
|
|
1077
|
-
const greetingElement = greeting ? /* @__PURE__ */
|
|
1180
|
+
const textContent = /* @__PURE__ */ React65.createElement("div", null, name && /* @__PURE__ */ React65.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, address), contactParts.length > 0 && /* @__PURE__ */ React65.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, contactParts.map((part, i) => /* @__PURE__ */ React65.createElement(React65.Fragment, { key: i }, i > 0 && /* @__PURE__ */ React65.createElement("span", { style: detailStyle }, " \xB7 "), part))));
|
|
1181
|
+
const greetingElement = greeting ? /* @__PURE__ */ React65.createElement("p", { style: greetingStyle }, greeting) : null;
|
|
1078
1182
|
if (layout === "vertical") {
|
|
1079
|
-
return /* @__PURE__ */
|
|
1183
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React65.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
|
|
1080
1184
|
}
|
|
1081
|
-
return /* @__PURE__ */
|
|
1185
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React65.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React65.createElement("tbody", null, /* @__PURE__ */ React65.createElement("tr", null, imageElement && /* @__PURE__ */ React65.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React65.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
|
|
1082
1186
|
}
|
|
1083
1187
|
var signature_default = Signature;
|
|
1084
1188
|
var SpacerPropsSchema = z.object({
|
|
@@ -1095,13 +1199,13 @@ function Spacer({ props }) {
|
|
|
1095
1199
|
const style = {
|
|
1096
1200
|
height: (_a = props == null ? void 0 : props.height) != null ? _a : SpacerPropsDefaults.height
|
|
1097
1201
|
};
|
|
1098
|
-
return /* @__PURE__ */
|
|
1202
|
+
return /* @__PURE__ */ React65.createElement("div", { style });
|
|
1099
1203
|
}
|
|
1100
1204
|
var spacer_default = Spacer;
|
|
1101
1205
|
function buildBlockComponent(blocks) {
|
|
1102
1206
|
return function BlockComponent({ type, data }) {
|
|
1103
1207
|
const Component = blocks[type].Component;
|
|
1104
|
-
return /* @__PURE__ */
|
|
1208
|
+
return /* @__PURE__ */ React65.createElement(Component, __spreadValues({}, data));
|
|
1105
1209
|
};
|
|
1106
1210
|
}
|
|
1107
1211
|
function buildBlockConfigurationSchema(blocks) {
|
|
@@ -1170,9 +1274,9 @@ function ColumnsContainerReader({ style, props }) {
|
|
|
1170
1274
|
const _a = props != null ? props : {}, { columns } = _a, restProps = __objRest(_a, ["columns"]);
|
|
1171
1275
|
let cols = void 0;
|
|
1172
1276
|
if (columns) {
|
|
1173
|
-
cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */
|
|
1277
|
+
cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ React65.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
1174
1278
|
}
|
|
1175
|
-
return /* @__PURE__ */
|
|
1279
|
+
return /* @__PURE__ */ React65.createElement(columns_container_default, { props: restProps, columns: cols, style });
|
|
1176
1280
|
}
|
|
1177
1281
|
var ContainerPropsSchema2 = z.object({
|
|
1178
1282
|
style: ContainerPropsSchema.shape.style,
|
|
@@ -1183,10 +1287,10 @@ var ContainerPropsSchema2 = z.object({
|
|
|
1183
1287
|
function ContainerReader({ style, props }) {
|
|
1184
1288
|
var _a;
|
|
1185
1289
|
const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
|
|
1186
|
-
return /* @__PURE__ */
|
|
1290
|
+
return /* @__PURE__ */ React65.createElement(container_default, { style }, childrenIds.map((childId) => /* @__PURE__ */ React65.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
1187
1291
|
}
|
|
1188
|
-
var
|
|
1189
|
-
var
|
|
1292
|
+
var COLOR_SCHEMA10 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
1293
|
+
var FONT_FAMILY_SCHEMA7 = z.enum([
|
|
1190
1294
|
"MODERN_SANS",
|
|
1191
1295
|
"BOOK_SANS",
|
|
1192
1296
|
"ORGANIC_SANS",
|
|
@@ -1203,18 +1307,18 @@ var TemplateVariableSchema = z.object({
|
|
|
1203
1307
|
sampleValue: z.string().optional().nullable()
|
|
1204
1308
|
});
|
|
1205
1309
|
var EmailLayoutPropsSchema = z.object({
|
|
1206
|
-
backdropColor:
|
|
1310
|
+
backdropColor: COLOR_SCHEMA10,
|
|
1207
1311
|
backdropDisabled: z.boolean().optional().nullable(),
|
|
1208
|
-
borderColor:
|
|
1312
|
+
borderColor: COLOR_SCHEMA10,
|
|
1209
1313
|
borderRadius: z.number().optional().nullable(),
|
|
1210
|
-
canvasColor:
|
|
1211
|
-
textColor:
|
|
1212
|
-
fontFamily:
|
|
1314
|
+
canvasColor: COLOR_SCHEMA10,
|
|
1315
|
+
textColor: COLOR_SCHEMA10,
|
|
1316
|
+
fontFamily: FONT_FAMILY_SCHEMA7,
|
|
1213
1317
|
childrenIds: z.array(z.string()).optional().nullable(),
|
|
1214
1318
|
subject: z.string().optional().nullable(),
|
|
1215
1319
|
variables: z.array(TemplateVariableSchema).optional().nullable()
|
|
1216
1320
|
});
|
|
1217
|
-
function
|
|
1321
|
+
function getFontFamily7(fontFamily) {
|
|
1218
1322
|
const f = fontFamily != null ? fontFamily : "MODERN_SANS";
|
|
1219
1323
|
switch (f) {
|
|
1220
1324
|
case "MODERN_SANS":
|
|
@@ -1248,7 +1352,7 @@ function EmailLayoutReader(props) {
|
|
|
1248
1352
|
const childrenIds = (_a = props.childrenIds) != null ? _a : [];
|
|
1249
1353
|
const baseStyle = {
|
|
1250
1354
|
color: (_b = props.textColor) != null ? _b : "#262626",
|
|
1251
|
-
fontFamily:
|
|
1355
|
+
fontFamily: getFontFamily7(props.fontFamily),
|
|
1252
1356
|
fontSize: "16px",
|
|
1253
1357
|
fontWeight: "400",
|
|
1254
1358
|
letterSpacing: "0.15008px",
|
|
@@ -1256,9 +1360,9 @@ function EmailLayoutReader(props) {
|
|
|
1256
1360
|
margin: "0"
|
|
1257
1361
|
};
|
|
1258
1362
|
if (props.backdropDisabled) {
|
|
1259
|
-
return /* @__PURE__ */
|
|
1363
|
+
return /* @__PURE__ */ React65.createElement("div", { style: baseStyle }, childrenIds.map((childId) => /* @__PURE__ */ React65.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
1260
1364
|
}
|
|
1261
|
-
return /* @__PURE__ */
|
|
1365
|
+
return /* @__PURE__ */ React65.createElement(
|
|
1262
1366
|
"div",
|
|
1263
1367
|
{
|
|
1264
1368
|
style: __spreadProps(__spreadValues({}, baseStyle), {
|
|
@@ -1268,7 +1372,7 @@ function EmailLayoutReader(props) {
|
|
|
1268
1372
|
width: "100%"
|
|
1269
1373
|
})
|
|
1270
1374
|
},
|
|
1271
|
-
/* @__PURE__ */
|
|
1375
|
+
/* @__PURE__ */ React65.createElement(
|
|
1272
1376
|
"table",
|
|
1273
1377
|
{
|
|
1274
1378
|
align: "center",
|
|
@@ -1286,7 +1390,7 @@ function EmailLayoutReader(props) {
|
|
|
1286
1390
|
cellPadding: "0",
|
|
1287
1391
|
border: 0
|
|
1288
1392
|
},
|
|
1289
|
-
/* @__PURE__ */
|
|
1393
|
+
/* @__PURE__ */ React65.createElement("tbody", null, /* @__PURE__ */ React65.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React65.createElement("td", null, childrenIds.map((childId) => /* @__PURE__ */ React65.createElement(ReaderBlock, { key: childId, id: childId })))))
|
|
1290
1394
|
)
|
|
1291
1395
|
);
|
|
1292
1396
|
}
|
|
@@ -1298,7 +1402,7 @@ function useReaderDocument() {
|
|
|
1298
1402
|
}
|
|
1299
1403
|
function ReaderBlock({ id }) {
|
|
1300
1404
|
const document2 = useReaderDocument();
|
|
1301
|
-
return document2[id] ? /* @__PURE__ */
|
|
1405
|
+
return document2[id] ? /* @__PURE__ */ React65.createElement(BaseReaderBlock, __spreadValues({}, document2[id])) : null;
|
|
1302
1406
|
}
|
|
1303
1407
|
var READER_DICTIONARY = buildBlockConfigurationDictionary({
|
|
1304
1408
|
ColumnsContainer: {
|
|
@@ -1338,6 +1442,10 @@ var READER_DICTIONARY = buildBlockConfigurationDictionary({
|
|
|
1338
1442
|
schema: ImagePropsSchema,
|
|
1339
1443
|
Component: image_default
|
|
1340
1444
|
},
|
|
1445
|
+
Otp: {
|
|
1446
|
+
schema: OtpPropsSchema,
|
|
1447
|
+
Component: otp_default
|
|
1448
|
+
},
|
|
1341
1449
|
Spacer: {
|
|
1342
1450
|
schema: SpacerPropsSchema,
|
|
1343
1451
|
Component: spacer_default
|
|
@@ -1355,13 +1463,13 @@ var ReaderBlockSchema = buildBlockConfigurationSchema(READER_DICTIONARY);
|
|
|
1355
1463
|
var ReaderDocumentSchema = z.record(z.string(), ReaderBlockSchema);
|
|
1356
1464
|
var BaseReaderBlock = buildBlockComponent(READER_DICTIONARY);
|
|
1357
1465
|
function Reader({ document: document2, rootBlockId }) {
|
|
1358
|
-
return /* @__PURE__ */
|
|
1466
|
+
return /* @__PURE__ */ React65.createElement(ReaderContext.Provider, { value: document2 }, /* @__PURE__ */ React65.createElement(ReaderBlock, { id: rootBlockId }));
|
|
1359
1467
|
}
|
|
1360
1468
|
|
|
1361
1469
|
// src/email-builder/renderers/render-to-static-markup.tsx
|
|
1362
1470
|
function renderToStaticMarkup(document2, { rootBlockId, variables }) {
|
|
1363
1471
|
const html2 = "<!DOCTYPE html>" + renderToStaticMarkup$1(
|
|
1364
|
-
/* @__PURE__ */
|
|
1472
|
+
/* @__PURE__ */ React65.createElement("html", null, /* @__PURE__ */ React65.createElement("body", null, /* @__PURE__ */ React65.createElement(Reader, { document: document2, rootBlockId })))
|
|
1365
1473
|
);
|
|
1366
1474
|
if (!variables) return html2;
|
|
1367
1475
|
return evaluateHandlebars(html2, variables);
|
|
@@ -1408,6 +1516,9 @@ function renderBlock(document2, blockId, lines) {
|
|
|
1408
1516
|
case "Html":
|
|
1409
1517
|
renderHtml(data, lines);
|
|
1410
1518
|
break;
|
|
1519
|
+
case "Otp":
|
|
1520
|
+
renderOtp(data, lines);
|
|
1521
|
+
break;
|
|
1411
1522
|
case "Divider":
|
|
1412
1523
|
lines.push("");
|
|
1413
1524
|
lines.push("---");
|
|
@@ -1489,6 +1600,13 @@ function renderAvatar(data, lines) {
|
|
|
1489
1600
|
lines.push("");
|
|
1490
1601
|
}
|
|
1491
1602
|
}
|
|
1603
|
+
function renderOtp(data, lines) {
|
|
1604
|
+
var _a, _b;
|
|
1605
|
+
const code = (_b = (_a = data == null ? void 0 : data.props) == null ? void 0 : _a.code) != null ? _b : "";
|
|
1606
|
+
if (!code) return;
|
|
1607
|
+
lines.push(code);
|
|
1608
|
+
lines.push("");
|
|
1609
|
+
}
|
|
1492
1610
|
function renderHtml(data, lines) {
|
|
1493
1611
|
var _a, _b;
|
|
1494
1612
|
const contents = (_b = (_a = data == null ? void 0 : data.props) == null ? void 0 : _a.contents) != null ? _b : "";
|
|
@@ -2308,7 +2426,7 @@ var EmailEditorProvider = ({
|
|
|
2308
2426
|
setCurrentTemplateTags
|
|
2309
2427
|
]
|
|
2310
2428
|
);
|
|
2311
|
-
return /* @__PURE__ */
|
|
2429
|
+
return /* @__PURE__ */ React65.createElement(EmailEditorContext.Provider, { value }, children);
|
|
2312
2430
|
};
|
|
2313
2431
|
var useEmailEditor = () => {
|
|
2314
2432
|
const context = useContext(EmailEditorContext);
|
|
@@ -2322,7 +2440,7 @@ function EditorConfigProvider({
|
|
|
2322
2440
|
config,
|
|
2323
2441
|
children
|
|
2324
2442
|
}) {
|
|
2325
|
-
return /* @__PURE__ */
|
|
2443
|
+
return /* @__PURE__ */ React65.createElement(EditorConfigContext.Provider, { value: config }, children);
|
|
2326
2444
|
}
|
|
2327
2445
|
function useEditorConfig() {
|
|
2328
2446
|
return useContext(EditorConfigContext);
|
|
@@ -2332,7 +2450,7 @@ function ImageCallbacksProvider({
|
|
|
2332
2450
|
callbacks,
|
|
2333
2451
|
children
|
|
2334
2452
|
}) {
|
|
2335
|
-
return /* @__PURE__ */
|
|
2453
|
+
return /* @__PURE__ */ React65.createElement(ImageCallbacksContext.Provider, { value: callbacks }, children);
|
|
2336
2454
|
}
|
|
2337
2455
|
function useImageCallbacks() {
|
|
2338
2456
|
return useContext(ImageCallbacksContext);
|
|
@@ -2358,14 +2476,14 @@ var TITLE_KEYS = {
|
|
|
2358
2476
|
function BaseSidebarPanel({ title, children }) {
|
|
2359
2477
|
const key = TITLE_KEYS[title];
|
|
2360
2478
|
const displayTitle = key ? t(key, title) : title;
|
|
2361
|
-
return /* @__PURE__ */
|
|
2479
|
+
return /* @__PURE__ */ React65.createElement(Box, { p: 2 }, /* @__PURE__ */ React65.createElement(Typography, { variant: "overline", color: "text.secondary", sx: { display: "block", mb: 2 } }, displayTitle), /* @__PURE__ */ React65.createElement(Stack, { spacing: 5, mb: 3 }, children));
|
|
2362
2480
|
}
|
|
2363
2481
|
function RadioGroupInput({ label, children, defaultValue, onChange }) {
|
|
2364
2482
|
const [value, setValue] = useState(defaultValue);
|
|
2365
2483
|
useEffect(() => {
|
|
2366
2484
|
setValue(defaultValue);
|
|
2367
2485
|
}, [defaultValue]);
|
|
2368
|
-
return /* @__PURE__ */
|
|
2486
|
+
return /* @__PURE__ */ React65.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2369
2487
|
ToggleButtonGroup,
|
|
2370
2488
|
{
|
|
2371
2489
|
exclusive: true,
|
|
@@ -2385,7 +2503,7 @@ function RadioGroupInput({ label, children, defaultValue, onChange }) {
|
|
|
2385
2503
|
}
|
|
2386
2504
|
function RawSliderInput(_a) {
|
|
2387
2505
|
var _b = _a, { iconLabel, value, setValue, units } = _b, props = __objRest(_b, ["iconLabel", "value", "setValue", "units"]);
|
|
2388
|
-
return /* @__PURE__ */
|
|
2506
|
+
return /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", spacing: 2, justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React65.createElement(Box, { sx: { minWidth: 24, lineHeight: 1, flexShrink: 0 } }, iconLabel), /* @__PURE__ */ React65.createElement(
|
|
2389
2507
|
Slider,
|
|
2390
2508
|
__spreadProps(__spreadValues({}, props), {
|
|
2391
2509
|
value,
|
|
@@ -2396,14 +2514,14 @@ function RawSliderInput(_a) {
|
|
|
2396
2514
|
setValue(value2);
|
|
2397
2515
|
}
|
|
2398
2516
|
})
|
|
2399
|
-
), /* @__PURE__ */
|
|
2517
|
+
), /* @__PURE__ */ React65.createElement(Box, { sx: { minWidth: 32, textAlign: "right", flexShrink: 0 } }, /* @__PURE__ */ React65.createElement(Typography, { variant: "body2", color: "text.secondary", sx: { lineHeight: 1 } }, value, units)));
|
|
2400
2518
|
}
|
|
2401
2519
|
|
|
2402
2520
|
// src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/slider-input.tsx
|
|
2403
2521
|
function SliderInput(_a) {
|
|
2404
2522
|
var _b = _a, { label, defaultValue, onChange } = _b, props = __objRest(_b, ["label", "defaultValue", "onChange"]);
|
|
2405
2523
|
const [value, setValue] = useState(defaultValue);
|
|
2406
|
-
return /* @__PURE__ */
|
|
2524
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2407
2525
|
RawSliderInput,
|
|
2408
2526
|
__spreadValues({
|
|
2409
2527
|
value,
|
|
@@ -2420,7 +2538,7 @@ function TextInput({ helperText, label, placeholder, rows, InputProps: InputProp
|
|
|
2420
2538
|
useEffect(() => {
|
|
2421
2539
|
setValue(defaultValue);
|
|
2422
2540
|
}, [defaultValue]);
|
|
2423
|
-
return /* @__PURE__ */
|
|
2541
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2424
2542
|
TextField,
|
|
2425
2543
|
{
|
|
2426
2544
|
fullWidth: true,
|
|
@@ -2446,7 +2564,7 @@ var TILE_BUTTON = {
|
|
|
2446
2564
|
};
|
|
2447
2565
|
function Swatch({ paletteColors, value, onChange }) {
|
|
2448
2566
|
const renderButton2 = (colorValue) => {
|
|
2449
|
-
return /* @__PURE__ */
|
|
2567
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2450
2568
|
Button$1,
|
|
2451
2569
|
{
|
|
2452
2570
|
key: colorValue,
|
|
@@ -2465,7 +2583,7 @@ function Swatch({ paletteColors, value, onChange }) {
|
|
|
2465
2583
|
}
|
|
2466
2584
|
);
|
|
2467
2585
|
};
|
|
2468
|
-
return /* @__PURE__ */
|
|
2586
|
+
return /* @__PURE__ */ React65.createElement(Box, { width: "100%", sx: { display: "grid", gap: 1, gridTemplateColumns: "1fr 1fr 1fr 1fr 1fr 1fr" } }, paletteColors.map((c) => renderButton2(c)));
|
|
2469
2587
|
}
|
|
2470
2588
|
|
|
2471
2589
|
// src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/picker.tsx
|
|
@@ -2534,7 +2652,7 @@ var SX = {
|
|
|
2534
2652
|
function Picker({ value, onChange }) {
|
|
2535
2653
|
const { favoriteColors } = useEditorConfig();
|
|
2536
2654
|
const hasFavorites = favoriteColors && favoriteColors.length > 0;
|
|
2537
|
-
return /* @__PURE__ */
|
|
2655
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1, sx: SX }, /* @__PURE__ */ React65.createElement(HexColorPicker, { color: value, onChange }), hasFavorites && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(Swatch, { paletteColors: favoriteColors, value, onChange }), /* @__PURE__ */ React65.createElement(Divider$1, null)), /* @__PURE__ */ React65.createElement(Swatch, { paletteColors: DEFAULT_PRESET_COLORS, value, onChange }), /* @__PURE__ */ React65.createElement(Box, { pt: 1 }, /* @__PURE__ */ React65.createElement(HexColorInput, { prefixed: true, color: value, onChange })));
|
|
2538
2656
|
}
|
|
2539
2657
|
|
|
2540
2658
|
// src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/base-color-input.tsx
|
|
@@ -2559,7 +2677,7 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
|
|
|
2559
2677
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
2560
2678
|
return null;
|
|
2561
2679
|
}
|
|
2562
|
-
return /* @__PURE__ */
|
|
2680
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2563
2681
|
ButtonBase,
|
|
2564
2682
|
{
|
|
2565
2683
|
onClick: () => {
|
|
@@ -2567,16 +2685,16 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
|
|
|
2567
2685
|
onChange(null);
|
|
2568
2686
|
}
|
|
2569
2687
|
},
|
|
2570
|
-
/* @__PURE__ */
|
|
2688
|
+
/* @__PURE__ */ React65.createElement(CloseOutlined, { fontSize: "small", sx: { color: "grey.600" } })
|
|
2571
2689
|
);
|
|
2572
2690
|
};
|
|
2573
2691
|
const renderOpenButton = () => {
|
|
2574
2692
|
if (value) {
|
|
2575
|
-
return /* @__PURE__ */
|
|
2693
|
+
return /* @__PURE__ */ React65.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadProps(__spreadValues({}, BUTTON_SX), { bgcolor: value }) });
|
|
2576
2694
|
}
|
|
2577
|
-
return /* @__PURE__ */
|
|
2695
|
+
return /* @__PURE__ */ React65.createElement(ButtonBase, { onClick: handleClickOpen, sx: __spreadValues({}, BUTTON_SX) }, /* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" }));
|
|
2578
2696
|
};
|
|
2579
|
-
return /* @__PURE__ */
|
|
2697
|
+
return /* @__PURE__ */ React65.createElement(Stack, { alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { sx: { mb: 0.5 } }, label), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 1 }, renderOpenButton(), renderResetButton()), /* @__PURE__ */ React65.createElement(
|
|
2580
2698
|
Menu,
|
|
2581
2699
|
{
|
|
2582
2700
|
anchorEl,
|
|
@@ -2586,7 +2704,7 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
|
|
|
2586
2704
|
sx: { height: "auto", padding: 0 }
|
|
2587
2705
|
}
|
|
2588
2706
|
},
|
|
2589
|
-
/* @__PURE__ */
|
|
2707
|
+
/* @__PURE__ */ React65.createElement(
|
|
2590
2708
|
Picker,
|
|
2591
2709
|
{
|
|
2592
2710
|
value: value || "",
|
|
@@ -2601,10 +2719,10 @@ function ColorInput({ label, defaultValue, onChange, nullable }) {
|
|
|
2601
2719
|
|
|
2602
2720
|
// src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/index.tsx
|
|
2603
2721
|
function ColorInput2(props) {
|
|
2604
|
-
return /* @__PURE__ */
|
|
2722
|
+
return /* @__PURE__ */ React65.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: false }));
|
|
2605
2723
|
}
|
|
2606
2724
|
function NullableColorInput(props) {
|
|
2607
|
-
return /* @__PURE__ */
|
|
2725
|
+
return /* @__PURE__ */ React65.createElement(ColorInput, __spreadProps(__spreadValues({}, props), { nullable: true }));
|
|
2608
2726
|
}
|
|
2609
2727
|
|
|
2610
2728
|
// src/editor/blocks/helpers/font-family.ts
|
|
@@ -2662,7 +2780,7 @@ function NullableFontFamily({ label, onChange, defaultValue }) {
|
|
|
2662
2780
|
useEffect(() => {
|
|
2663
2781
|
setValue(defaultValue != null ? defaultValue : "inherit");
|
|
2664
2782
|
}, [defaultValue]);
|
|
2665
|
-
return /* @__PURE__ */
|
|
2783
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2666
2784
|
TextField,
|
|
2667
2785
|
{
|
|
2668
2786
|
select: true,
|
|
@@ -2675,8 +2793,8 @@ function NullableFontFamily({ label, onChange, defaultValue }) {
|
|
|
2675
2793
|
onChange(v === null ? null : v);
|
|
2676
2794
|
}
|
|
2677
2795
|
},
|
|
2678
|
-
/* @__PURE__ */
|
|
2679
|
-
FONT_FAMILIES.map((option) => /* @__PURE__ */
|
|
2796
|
+
/* @__PURE__ */ React65.createElement(MenuItem, { value: "inherit" }, t("font-family.inherit", "Match email settings")),
|
|
2797
|
+
FONT_FAMILIES.map((option) => /* @__PURE__ */ React65.createElement(MenuItem, { key: option.key, value: option.key, sx: { fontFamily: option.value } }, t(`font-family.${option.key.toLowerCase()}`, option.label)))
|
|
2680
2798
|
);
|
|
2681
2799
|
}
|
|
2682
2800
|
function FontSizeInput({ label, defaultValue, onChange }) {
|
|
@@ -2688,10 +2806,10 @@ function FontSizeInput({ label, defaultValue, onChange }) {
|
|
|
2688
2806
|
setValue(value2);
|
|
2689
2807
|
onChange(value2);
|
|
2690
2808
|
};
|
|
2691
|
-
return /* @__PURE__ */
|
|
2809
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2692
2810
|
RawSliderInput,
|
|
2693
2811
|
{
|
|
2694
|
-
iconLabel: /* @__PURE__ */
|
|
2812
|
+
iconLabel: /* @__PURE__ */ React65.createElement(TextFieldsOutlined, { sx: { fontSize: 16 } }),
|
|
2695
2813
|
value,
|
|
2696
2814
|
setValue: handleChange,
|
|
2697
2815
|
units: "px",
|
|
@@ -2706,7 +2824,7 @@ function FontWeightInput({ label, defaultValue, onChange }) {
|
|
|
2706
2824
|
useEffect(() => {
|
|
2707
2825
|
setValue(defaultValue);
|
|
2708
2826
|
}, [defaultValue]);
|
|
2709
|
-
return /* @__PURE__ */
|
|
2827
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2710
2828
|
RadioGroupInput,
|
|
2711
2829
|
{
|
|
2712
2830
|
label,
|
|
@@ -2716,8 +2834,8 @@ function FontWeightInput({ label, defaultValue, onChange }) {
|
|
|
2716
2834
|
onChange(fontWeight);
|
|
2717
2835
|
}
|
|
2718
2836
|
},
|
|
2719
|
-
/* @__PURE__ */
|
|
2720
|
-
/* @__PURE__ */
|
|
2837
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "normal" }, t("font-weight.regular", "Regular")),
|
|
2838
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "bold" }, t("font-weight.bold", "Bold"))
|
|
2721
2839
|
);
|
|
2722
2840
|
}
|
|
2723
2841
|
function LetterSpacingInput({ label, defaultValue, onChange }) {
|
|
@@ -2729,10 +2847,10 @@ function LetterSpacingInput({ label, defaultValue, onChange }) {
|
|
|
2729
2847
|
setValue(v);
|
|
2730
2848
|
onChange(v === 0 ? null : v);
|
|
2731
2849
|
};
|
|
2732
|
-
return /* @__PURE__ */
|
|
2850
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2733
2851
|
RawSliderInput,
|
|
2734
2852
|
{
|
|
2735
|
-
iconLabel: /* @__PURE__ */
|
|
2853
|
+
iconLabel: /* @__PURE__ */ React65.createElement(SpaceBarOutlined, { sx: { fontSize: 16 } }),
|
|
2736
2854
|
value,
|
|
2737
2855
|
setValue: handleChange,
|
|
2738
2856
|
units: "px",
|
|
@@ -2751,10 +2869,10 @@ function LineHeightInput({ label, defaultValue, onChange }) {
|
|
|
2751
2869
|
setValue(v);
|
|
2752
2870
|
onChange(v === 0 ? null : v);
|
|
2753
2871
|
};
|
|
2754
|
-
return /* @__PURE__ */
|
|
2872
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2755
2873
|
RawSliderInput,
|
|
2756
2874
|
{
|
|
2757
|
-
iconLabel: /* @__PURE__ */
|
|
2875
|
+
iconLabel: /* @__PURE__ */ React65.createElement(FormatLineSpacingOutlined, { sx: { fontSize: 16 } }),
|
|
2758
2876
|
value,
|
|
2759
2877
|
setValue: handleChange,
|
|
2760
2878
|
units: "",
|
|
@@ -2783,10 +2901,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
|
|
|
2783
2901
|
setValue(v);
|
|
2784
2902
|
onChange(v);
|
|
2785
2903
|
}
|
|
2786
|
-
return /* @__PURE__ */
|
|
2904
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 2, alignItems: "flex-start", pb: 1 }, /* @__PURE__ */ React65.createElement(InputLabel, { shrink: true }, label), /* @__PURE__ */ React65.createElement(
|
|
2787
2905
|
RawSliderInput,
|
|
2788
2906
|
{
|
|
2789
|
-
iconLabel: /* @__PURE__ */
|
|
2907
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AlignVerticalTopOutlined, { sx: { fontSize: 16 } }),
|
|
2790
2908
|
value: value.top,
|
|
2791
2909
|
setValue: (num) => handleChange("top", num),
|
|
2792
2910
|
units: "px",
|
|
@@ -2795,10 +2913,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
|
|
|
2795
2913
|
max: 80,
|
|
2796
2914
|
marks: true
|
|
2797
2915
|
}
|
|
2798
|
-
), /* @__PURE__ */
|
|
2916
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2799
2917
|
RawSliderInput,
|
|
2800
2918
|
{
|
|
2801
|
-
iconLabel: /* @__PURE__ */
|
|
2919
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AlignVerticalBottomOutlined, { sx: { fontSize: 16 } }),
|
|
2802
2920
|
value: value.bottom,
|
|
2803
2921
|
setValue: (num) => handleChange("bottom", num),
|
|
2804
2922
|
units: "px",
|
|
@@ -2807,10 +2925,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
|
|
|
2807
2925
|
max: 80,
|
|
2808
2926
|
marks: true
|
|
2809
2927
|
}
|
|
2810
|
-
), /* @__PURE__ */
|
|
2928
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2811
2929
|
RawSliderInput,
|
|
2812
2930
|
{
|
|
2813
|
-
iconLabel: /* @__PURE__ */
|
|
2931
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AlignHorizontalLeftOutlined, { sx: { fontSize: 16 } }),
|
|
2814
2932
|
value: value.left,
|
|
2815
2933
|
setValue: (num) => handleChange("left", num),
|
|
2816
2934
|
units: "px",
|
|
@@ -2819,10 +2937,10 @@ function PaddingInput({ label, defaultValue, onChange }) {
|
|
|
2819
2937
|
max: 80,
|
|
2820
2938
|
marks: true
|
|
2821
2939
|
}
|
|
2822
|
-
), /* @__PURE__ */
|
|
2940
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2823
2941
|
RawSliderInput,
|
|
2824
2942
|
{
|
|
2825
|
-
iconLabel: /* @__PURE__ */
|
|
2943
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AlignHorizontalRightOutlined, { sx: { fontSize: 16 } }),
|
|
2826
2944
|
value: value.right,
|
|
2827
2945
|
setValue: (num) => handleChange("right", num),
|
|
2828
2946
|
units: "px",
|
|
@@ -2838,7 +2956,7 @@ function TextAlignInput({ label, defaultValue, onChange }) {
|
|
|
2838
2956
|
useEffect(() => {
|
|
2839
2957
|
setValue(defaultValue != null ? defaultValue : "left");
|
|
2840
2958
|
}, [defaultValue]);
|
|
2841
|
-
return /* @__PURE__ */
|
|
2959
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2842
2960
|
RadioGroupInput,
|
|
2843
2961
|
{
|
|
2844
2962
|
label,
|
|
@@ -2848,9 +2966,9 @@ function TextAlignInput({ label, defaultValue, onChange }) {
|
|
|
2848
2966
|
onChange(value2);
|
|
2849
2967
|
}
|
|
2850
2968
|
},
|
|
2851
|
-
/* @__PURE__ */
|
|
2852
|
-
/* @__PURE__ */
|
|
2853
|
-
/* @__PURE__ */
|
|
2969
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "left" }, /* @__PURE__ */ React65.createElement(FormatAlignLeftOutlined, { fontSize: "small" })),
|
|
2970
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "center" }, /* @__PURE__ */ React65.createElement(FormatAlignCenterOutlined, { fontSize: "small" })),
|
|
2971
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "right" }, /* @__PURE__ */ React65.createElement(FormatAlignRightOutlined, { fontSize: "small" }))
|
|
2854
2972
|
);
|
|
2855
2973
|
}
|
|
2856
2974
|
|
|
@@ -2863,14 +2981,14 @@ function SingleStylePropertyPanel({ name, value, onChange }) {
|
|
|
2863
2981
|
};
|
|
2864
2982
|
switch (name) {
|
|
2865
2983
|
case "backgroundColor":
|
|
2866
|
-
return /* @__PURE__ */
|
|
2984
|
+
return /* @__PURE__ */ React65.createElement(NullableColorInput, { label: t("style.background-color", "Background color"), defaultValue, onChange: handleChange });
|
|
2867
2985
|
case "borderColor":
|
|
2868
|
-
return /* @__PURE__ */
|
|
2986
|
+
return /* @__PURE__ */ React65.createElement(NullableColorInput, { label: t("style.border-color", "Border color"), defaultValue, onChange: handleChange });
|
|
2869
2987
|
case "borderRadius":
|
|
2870
|
-
return /* @__PURE__ */
|
|
2988
|
+
return /* @__PURE__ */ React65.createElement(
|
|
2871
2989
|
SliderInput,
|
|
2872
2990
|
{
|
|
2873
|
-
iconLabel: /* @__PURE__ */
|
|
2991
|
+
iconLabel: /* @__PURE__ */ React65.createElement(RoundedCornerOutlined, null),
|
|
2874
2992
|
units: "px",
|
|
2875
2993
|
step: 4,
|
|
2876
2994
|
marks: true,
|
|
@@ -2882,27 +3000,27 @@ function SingleStylePropertyPanel({ name, value, onChange }) {
|
|
|
2882
3000
|
}
|
|
2883
3001
|
);
|
|
2884
3002
|
case "color":
|
|
2885
|
-
return /* @__PURE__ */
|
|
3003
|
+
return /* @__PURE__ */ React65.createElement(NullableColorInput, { label: t("style.text-color", "Text color"), defaultValue, onChange: handleChange });
|
|
2886
3004
|
case "fontFamily":
|
|
2887
|
-
return /* @__PURE__ */
|
|
3005
|
+
return /* @__PURE__ */ React65.createElement(NullableFontFamily, { label: t("style.font-family", "Font family"), defaultValue, onChange: handleChange });
|
|
2888
3006
|
case "fontSize":
|
|
2889
|
-
return /* @__PURE__ */
|
|
3007
|
+
return /* @__PURE__ */ React65.createElement(FontSizeInput, { label: t("style.font-size", "Font size"), defaultValue, onChange: handleChange });
|
|
2890
3008
|
case "fontWeight":
|
|
2891
|
-
return /* @__PURE__ */
|
|
3009
|
+
return /* @__PURE__ */ React65.createElement(FontWeightInput, { label: t("style.font-weight", "Font weight"), defaultValue, onChange: handleChange });
|
|
2892
3010
|
case "lineHeight":
|
|
2893
|
-
return /* @__PURE__ */
|
|
3011
|
+
return /* @__PURE__ */ React65.createElement(LineHeightInput, { label: t("style.line-height", "Line height"), defaultValue, onChange: handleChange });
|
|
2894
3012
|
case "letterSpacing":
|
|
2895
|
-
return /* @__PURE__ */
|
|
3013
|
+
return /* @__PURE__ */ React65.createElement(LetterSpacingInput, { label: t("style.letter-spacing", "Letter spacing"), defaultValue, onChange: handleChange });
|
|
2896
3014
|
case "textAlign":
|
|
2897
|
-
return /* @__PURE__ */
|
|
3015
|
+
return /* @__PURE__ */ React65.createElement(TextAlignInput, { label: t("style.alignment", "Alignment"), defaultValue, onChange: handleChange });
|
|
2898
3016
|
case "padding":
|
|
2899
|
-
return /* @__PURE__ */
|
|
3017
|
+
return /* @__PURE__ */ React65.createElement(PaddingInput, { label: t("style.padding", "Padding"), defaultValue, onChange: handleChange });
|
|
2900
3018
|
}
|
|
2901
3019
|
}
|
|
2902
3020
|
|
|
2903
3021
|
// src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/multi-style-property-panel.tsx
|
|
2904
3022
|
function MultiStylePropertyPanel({ names, value, onChange }) {
|
|
2905
|
-
return /* @__PURE__ */
|
|
3023
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, names.map((name) => /* @__PURE__ */ React65.createElement(SingleStylePropertyPanel, { key: name, name, value: value || {}, onChange })));
|
|
2906
3024
|
}
|
|
2907
3025
|
|
|
2908
3026
|
// src/app/inspector-drawer/configuration-panel/input-panels/avatar-sidebar-panel.tsx
|
|
@@ -2922,11 +3040,11 @@ function AvatarSidebarPanel({ data, setData }) {
|
|
|
2922
3040
|
const imageUrl = (_d = (_c = data.props) == null ? void 0 : _c.imageUrl) != null ? _d : AvatarPropsDefaults.imageUrl;
|
|
2923
3041
|
const alt = (_f = (_e = data.props) == null ? void 0 : _e.alt) != null ? _f : AvatarPropsDefaults.alt;
|
|
2924
3042
|
const shape = (_h = (_g = data.props) == null ? void 0 : _g.shape) != null ? _h : AvatarPropsDefaults.shape;
|
|
2925
|
-
return /* @__PURE__ */
|
|
3043
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Avatar block" }, /* @__PURE__ */ React65.createElement(
|
|
2926
3044
|
SliderInput,
|
|
2927
3045
|
{
|
|
2928
3046
|
label: t("field.size", "Size"),
|
|
2929
|
-
iconLabel: /* @__PURE__ */
|
|
3047
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
|
|
2930
3048
|
units: "px",
|
|
2931
3049
|
step: 3,
|
|
2932
3050
|
min: 32,
|
|
@@ -2936,7 +3054,7 @@ function AvatarSidebarPanel({ data, setData }) {
|
|
|
2936
3054
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { size: size2 }) }));
|
|
2937
3055
|
}
|
|
2938
3056
|
}
|
|
2939
|
-
), /* @__PURE__ */
|
|
3057
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2940
3058
|
RadioGroupInput,
|
|
2941
3059
|
{
|
|
2942
3060
|
label: t("avatar.shape", "Shape"),
|
|
@@ -2945,10 +3063,10 @@ function AvatarSidebarPanel({ data, setData }) {
|
|
|
2945
3063
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { shape: shape2 }) }));
|
|
2946
3064
|
}
|
|
2947
3065
|
},
|
|
2948
|
-
/* @__PURE__ */
|
|
2949
|
-
/* @__PURE__ */
|
|
2950
|
-
/* @__PURE__ */
|
|
2951
|
-
), /* @__PURE__ */
|
|
3066
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
|
|
3067
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
|
|
3068
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
|
|
3069
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2952
3070
|
TextInput,
|
|
2953
3071
|
{
|
|
2954
3072
|
label: t("signature.image-url", "Image URL"),
|
|
@@ -2957,7 +3075,7 @@ function AvatarSidebarPanel({ data, setData }) {
|
|
|
2957
3075
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }));
|
|
2958
3076
|
}
|
|
2959
3077
|
}
|
|
2960
|
-
), /* @__PURE__ */
|
|
3078
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2961
3079
|
TextInput,
|
|
2962
3080
|
{
|
|
2963
3081
|
label: t("image.alt-text", "Alt text"),
|
|
@@ -2966,7 +3084,7 @@ function AvatarSidebarPanel({ data, setData }) {
|
|
|
2966
3084
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt: alt2 }) }));
|
|
2967
3085
|
}
|
|
2968
3086
|
}
|
|
2969
|
-
), /* @__PURE__ */
|
|
3087
|
+
), /* @__PURE__ */ React65.createElement(
|
|
2970
3088
|
MultiStylePropertyPanel,
|
|
2971
3089
|
{
|
|
2972
3090
|
names: ["textAlign", "padding"],
|
|
@@ -2994,65 +3112,65 @@ function ButtonSidebarPanel({ data, setData }) {
|
|
|
2994
3112
|
const buttonStyle = (_j = (_i = data.props) == null ? void 0 : _i.buttonStyle) != null ? _j : ButtonPropsDefaults.buttonStyle;
|
|
2995
3113
|
const buttonTextColor = (_l = (_k = data.props) == null ? void 0 : _k.buttonTextColor) != null ? _l : ButtonPropsDefaults.buttonTextColor;
|
|
2996
3114
|
const buttonBackgroundColor = (_n = (_m = data.props) == null ? void 0 : _m.buttonBackgroundColor) != null ? _n : ButtonPropsDefaults.buttonBackgroundColor;
|
|
2997
|
-
return /* @__PURE__ */
|
|
3115
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Button block" }, /* @__PURE__ */ React65.createElement(
|
|
2998
3116
|
TextInput,
|
|
2999
3117
|
{
|
|
3000
3118
|
label: t("field.text", "Text"),
|
|
3001
3119
|
defaultValue: text,
|
|
3002
3120
|
onChange: (text2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text: text2 }) }))
|
|
3003
3121
|
}
|
|
3004
|
-
), /* @__PURE__ */
|
|
3122
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3005
3123
|
TextInput,
|
|
3006
3124
|
{
|
|
3007
3125
|
label: t("field.url", "Url"),
|
|
3008
3126
|
defaultValue: url,
|
|
3009
3127
|
onChange: (url2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: url2 }) }))
|
|
3010
3128
|
}
|
|
3011
|
-
), /* @__PURE__ */
|
|
3129
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3012
3130
|
RadioGroupInput,
|
|
3013
3131
|
{
|
|
3014
3132
|
label: t("field.width", "Width"),
|
|
3015
3133
|
defaultValue: fullWidth ? "FULL_WIDTH" : "AUTO",
|
|
3016
3134
|
onChange: (v) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { fullWidth: v === "FULL_WIDTH" }) }))
|
|
3017
3135
|
},
|
|
3018
|
-
/* @__PURE__ */
|
|
3019
|
-
/* @__PURE__ */
|
|
3020
|
-
), /* @__PURE__ */
|
|
3136
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "FULL_WIDTH" }, t("button.width.full", "Full")),
|
|
3137
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "AUTO" }, t("button.width.auto", "Auto"))
|
|
3138
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3021
3139
|
RadioGroupInput,
|
|
3022
3140
|
{
|
|
3023
3141
|
label: t("field.size", "Size"),
|
|
3024
3142
|
defaultValue: size,
|
|
3025
3143
|
onChange: (size2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { size: size2 }) }))
|
|
3026
3144
|
},
|
|
3027
|
-
/* @__PURE__ */
|
|
3028
|
-
/* @__PURE__ */
|
|
3029
|
-
/* @__PURE__ */
|
|
3030
|
-
/* @__PURE__ */
|
|
3031
|
-
), /* @__PURE__ */
|
|
3145
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "x-small" }, t("size.xs", "Xs")),
|
|
3146
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "small" }, t("size.sm", "Sm")),
|
|
3147
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "medium" }, t("size.md", "Md")),
|
|
3148
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "large" }, t("size.lg", "Lg"))
|
|
3149
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3032
3150
|
RadioGroupInput,
|
|
3033
3151
|
{
|
|
3034
3152
|
label: t("field.style", "Style"),
|
|
3035
3153
|
defaultValue: buttonStyle,
|
|
3036
3154
|
onChange: (buttonStyle2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonStyle: buttonStyle2 }) }))
|
|
3037
3155
|
},
|
|
3038
|
-
/* @__PURE__ */
|
|
3039
|
-
/* @__PURE__ */
|
|
3040
|
-
/* @__PURE__ */
|
|
3041
|
-
), /* @__PURE__ */
|
|
3156
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "rectangle" }, t("button.style.rectangle", "Rectangle")),
|
|
3157
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "rounded" }, t("button.style.rounded", "Rounded")),
|
|
3158
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "pill" }, t("button.style.pill", "Pill"))
|
|
3159
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3042
3160
|
ColorInput2,
|
|
3043
3161
|
{
|
|
3044
3162
|
label: t("style.text-color", "Text color"),
|
|
3045
3163
|
defaultValue: buttonTextColor,
|
|
3046
3164
|
onChange: (buttonTextColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonTextColor: buttonTextColor2 }) }))
|
|
3047
3165
|
}
|
|
3048
|
-
), /* @__PURE__ */
|
|
3166
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3049
3167
|
ColorInput2,
|
|
3050
3168
|
{
|
|
3051
3169
|
label: t("button.color", "Button color"),
|
|
3052
3170
|
defaultValue: buttonBackgroundColor,
|
|
3053
3171
|
onChange: (buttonBackgroundColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { buttonBackgroundColor: buttonBackgroundColor2 }) }))
|
|
3054
3172
|
}
|
|
3055
|
-
), /* @__PURE__ */
|
|
3173
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3056
3174
|
MultiStylePropertyPanel,
|
|
3057
3175
|
{
|
|
3058
3176
|
names: [
|
|
@@ -3087,7 +3205,7 @@ function TextDimensionInput({ label, defaultValue, onChange }) {
|
|
|
3087
3205
|
const value = parseInt(ev.target.value);
|
|
3088
3206
|
onChange(isNaN(value) ? null : value);
|
|
3089
3207
|
};
|
|
3090
|
-
return /* @__PURE__ */
|
|
3208
|
+
return /* @__PURE__ */ React65.createElement(
|
|
3091
3209
|
TextField,
|
|
3092
3210
|
{
|
|
3093
3211
|
fullWidth: true,
|
|
@@ -3098,7 +3216,7 @@ function TextDimensionInput({ label, defaultValue, onChange }) {
|
|
|
3098
3216
|
placeholder: "auto",
|
|
3099
3217
|
size: "small",
|
|
3100
3218
|
InputProps: {
|
|
3101
|
-
endAdornment: /* @__PURE__ */
|
|
3219
|
+
endAdornment: /* @__PURE__ */ React65.createElement(Typography, { variant: "body2", color: "text.secondary" }, "px")
|
|
3102
3220
|
}
|
|
3103
3221
|
}
|
|
3104
3222
|
);
|
|
@@ -3120,7 +3238,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
|
|
|
3120
3238
|
};
|
|
3121
3239
|
let column3 = null;
|
|
3122
3240
|
{
|
|
3123
|
-
column3 = /* @__PURE__ */
|
|
3241
|
+
column3 = /* @__PURE__ */ React65.createElement(
|
|
3124
3242
|
TextDimensionInput,
|
|
3125
3243
|
{
|
|
3126
3244
|
label: "Column 3",
|
|
@@ -3131,7 +3249,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
|
|
|
3131
3249
|
}
|
|
3132
3250
|
);
|
|
3133
3251
|
}
|
|
3134
|
-
return /* @__PURE__ */
|
|
3252
|
+
return /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 1 }, /* @__PURE__ */ React65.createElement(
|
|
3135
3253
|
TextDimensionInput,
|
|
3136
3254
|
{
|
|
3137
3255
|
label: "Column 1",
|
|
@@ -3140,7 +3258,7 @@ function ColumnWidthsInput({ defaultValue, onChange }) {
|
|
|
3140
3258
|
setIndexValue(0, v);
|
|
3141
3259
|
}
|
|
3142
3260
|
}
|
|
3143
|
-
), /* @__PURE__ */
|
|
3261
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3144
3262
|
TextDimensionInput,
|
|
3145
3263
|
{
|
|
3146
3264
|
label: "Column 2",
|
|
@@ -3165,7 +3283,7 @@ function ColumnsContainerPanel({ data, setData }) {
|
|
|
3165
3283
|
setErrors(res.error);
|
|
3166
3284
|
}
|
|
3167
3285
|
};
|
|
3168
|
-
return /* @__PURE__ */
|
|
3286
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Columns block" }, /* @__PURE__ */ React65.createElement(
|
|
3169
3287
|
RadioGroupInput,
|
|
3170
3288
|
{
|
|
3171
3289
|
label: t("columns.count", "Number of columns"),
|
|
@@ -3174,9 +3292,9 @@ function ColumnsContainerPanel({ data, setData }) {
|
|
|
3174
3292
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { columnsCount: v === "2" ? 2 : 3 }) }));
|
|
3175
3293
|
}
|
|
3176
3294
|
},
|
|
3177
|
-
/* @__PURE__ */
|
|
3178
|
-
/* @__PURE__ */
|
|
3179
|
-
), /* @__PURE__ */
|
|
3295
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "2" }, "2"),
|
|
3296
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "3" }, "3")
|
|
3297
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3180
3298
|
ColumnWidthsInput,
|
|
3181
3299
|
{
|
|
3182
3300
|
defaultValue: (_b = data.props) == null ? void 0 : _b.fixedWidths,
|
|
@@ -3184,11 +3302,11 @@ function ColumnsContainerPanel({ data, setData }) {
|
|
|
3184
3302
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { fixedWidths }) }));
|
|
3185
3303
|
}
|
|
3186
3304
|
}
|
|
3187
|
-
), /* @__PURE__ */
|
|
3305
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3188
3306
|
SliderInput,
|
|
3189
3307
|
{
|
|
3190
3308
|
label: t("columns.gap", "Columns gap"),
|
|
3191
|
-
iconLabel: /* @__PURE__ */
|
|
3309
|
+
iconLabel: /* @__PURE__ */ React65.createElement(SpaceBarOutlined, { sx: { color: "text.secondary" } }),
|
|
3192
3310
|
units: "px",
|
|
3193
3311
|
step: 4,
|
|
3194
3312
|
marks: true,
|
|
@@ -3197,7 +3315,7 @@ function ColumnsContainerPanel({ data, setData }) {
|
|
|
3197
3315
|
defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.columnsGap) != null ? _d : 0,
|
|
3198
3316
|
onChange: (columnsGap) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { columnsGap }) }))
|
|
3199
3317
|
}
|
|
3200
|
-
), /* @__PURE__ */
|
|
3318
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3201
3319
|
RadioGroupInput,
|
|
3202
3320
|
{
|
|
3203
3321
|
label: t("style.alignment", "Alignment"),
|
|
@@ -3206,10 +3324,10 @@ function ColumnsContainerPanel({ data, setData }) {
|
|
|
3206
3324
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }));
|
|
3207
3325
|
}
|
|
3208
3326
|
},
|
|
3209
|
-
/* @__PURE__ */
|
|
3210
|
-
/* @__PURE__ */
|
|
3211
|
-
/* @__PURE__ */
|
|
3212
|
-
), /* @__PURE__ */
|
|
3327
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React65.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
|
|
3328
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React65.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
|
|
3329
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React65.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
|
|
3330
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3213
3331
|
MultiStylePropertyPanel,
|
|
3214
3332
|
{
|
|
3215
3333
|
names: ["backgroundColor", "padding"],
|
|
@@ -3238,7 +3356,7 @@ function ContainerSidebarPanel({ data, setData }) {
|
|
|
3238
3356
|
setErrors(res.error);
|
|
3239
3357
|
}
|
|
3240
3358
|
};
|
|
3241
|
-
return /* @__PURE__ */
|
|
3359
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Container block" }, /* @__PURE__ */ React65.createElement(
|
|
3242
3360
|
MultiStylePropertyPanel,
|
|
3243
3361
|
{
|
|
3244
3362
|
names: ["backgroundColor", "borderColor", "borderRadius", "padding"],
|
|
@@ -3261,18 +3379,18 @@ function DividerSidebarPanel({ data, setData }) {
|
|
|
3261
3379
|
};
|
|
3262
3380
|
const lineColor = (_b = (_a = data.props) == null ? void 0 : _a.lineColor) != null ? _b : DividerPropsDefaults.lineColor;
|
|
3263
3381
|
const lineHeight = (_d = (_c = data.props) == null ? void 0 : _c.lineHeight) != null ? _d : DividerPropsDefaults.lineHeight;
|
|
3264
|
-
return /* @__PURE__ */
|
|
3382
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Divider block" }, /* @__PURE__ */ React65.createElement(
|
|
3265
3383
|
ColorInput2,
|
|
3266
3384
|
{
|
|
3267
3385
|
label: t("divider.color", "Color"),
|
|
3268
3386
|
defaultValue: lineColor,
|
|
3269
3387
|
onChange: (lineColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { lineColor: lineColor2 }) }))
|
|
3270
3388
|
}
|
|
3271
|
-
), /* @__PURE__ */
|
|
3389
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3272
3390
|
SliderInput,
|
|
3273
3391
|
{
|
|
3274
3392
|
label: t("field.height", "Height"),
|
|
3275
|
-
iconLabel: /* @__PURE__ */
|
|
3393
|
+
iconLabel: /* @__PURE__ */ React65.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
|
|
3276
3394
|
units: "px",
|
|
3277
3395
|
step: 1,
|
|
3278
3396
|
min: 1,
|
|
@@ -3280,7 +3398,7 @@ function DividerSidebarPanel({ data, setData }) {
|
|
|
3280
3398
|
defaultValue: lineHeight,
|
|
3281
3399
|
onChange: (lineHeight2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { lineHeight: lineHeight2 }) }))
|
|
3282
3400
|
}
|
|
3283
|
-
), /* @__PURE__ */
|
|
3401
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3284
3402
|
MultiStylePropertyPanel,
|
|
3285
3403
|
{
|
|
3286
3404
|
names: ["backgroundColor", "padding"],
|
|
@@ -3289,8 +3407,8 @@ function DividerSidebarPanel({ data, setData }) {
|
|
|
3289
3407
|
}
|
|
3290
3408
|
));
|
|
3291
3409
|
}
|
|
3292
|
-
var
|
|
3293
|
-
var
|
|
3410
|
+
var COLOR_SCHEMA11 = z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
3411
|
+
var FONT_FAMILY_SCHEMA8 = z.enum([
|
|
3294
3412
|
"MODERN_SANS",
|
|
3295
3413
|
"BOOK_SANS",
|
|
3296
3414
|
"ORGANIC_SANS",
|
|
@@ -3307,13 +3425,13 @@ var TemplateVariableSchema2 = z.object({
|
|
|
3307
3425
|
sampleValue: z.string().optional().nullable()
|
|
3308
3426
|
});
|
|
3309
3427
|
var EmailLayoutPropsSchema2 = z.object({
|
|
3310
|
-
backdropColor:
|
|
3428
|
+
backdropColor: COLOR_SCHEMA11,
|
|
3311
3429
|
backdropDisabled: z.boolean().optional().nullable(),
|
|
3312
|
-
borderColor:
|
|
3430
|
+
borderColor: COLOR_SCHEMA11,
|
|
3313
3431
|
borderRadius: z.number().optional().nullable(),
|
|
3314
|
-
canvasColor:
|
|
3315
|
-
textColor:
|
|
3316
|
-
fontFamily:
|
|
3432
|
+
canvasColor: COLOR_SCHEMA11,
|
|
3433
|
+
textColor: COLOR_SCHEMA11,
|
|
3434
|
+
fontFamily: FONT_FAMILY_SCHEMA8,
|
|
3317
3435
|
childrenIds: z.array(z.string()).optional().nullable(),
|
|
3318
3436
|
subject: z.string().optional().nullable(),
|
|
3319
3437
|
variables: z.array(TemplateVariableSchema2).optional().nullable()
|
|
@@ -3324,11 +3442,11 @@ function BooleanInput({ label, defaultValue, onChange }) {
|
|
|
3324
3442
|
useEffect(() => {
|
|
3325
3443
|
setValue(defaultValue);
|
|
3326
3444
|
}, [defaultValue]);
|
|
3327
|
-
return /* @__PURE__ */
|
|
3445
|
+
return /* @__PURE__ */ React65.createElement(
|
|
3328
3446
|
FormControlLabel,
|
|
3329
3447
|
{
|
|
3330
3448
|
label,
|
|
3331
|
-
control: /* @__PURE__ */
|
|
3449
|
+
control: /* @__PURE__ */ React65.createElement(
|
|
3332
3450
|
Switch,
|
|
3333
3451
|
{
|
|
3334
3452
|
checked: value,
|
|
@@ -3356,38 +3474,38 @@ function EmailLayoutSidebarFields({ data, setData }) {
|
|
|
3356
3474
|
}
|
|
3357
3475
|
};
|
|
3358
3476
|
const backdropDisabled = (_a = data.backdropDisabled) != null ? _a : false;
|
|
3359
|
-
return /* @__PURE__ */
|
|
3477
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Global" }, /* @__PURE__ */ React65.createElement(
|
|
3360
3478
|
BooleanInput,
|
|
3361
3479
|
{
|
|
3362
3480
|
label: t("global.disable-backdrop", "Disable backdrop"),
|
|
3363
3481
|
defaultValue: backdropDisabled,
|
|
3364
3482
|
onChange: (backdropDisabled2) => updateData(__spreadProps(__spreadValues({}, data), { backdropDisabled: backdropDisabled2 }))
|
|
3365
3483
|
}
|
|
3366
|
-
), !backdropDisabled && /* @__PURE__ */
|
|
3484
|
+
), !backdropDisabled && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
3367
3485
|
ColorInput2,
|
|
3368
3486
|
{
|
|
3369
3487
|
label: t("global.backdrop-color", "Backdrop color"),
|
|
3370
3488
|
defaultValue: (_b = data.backdropColor) != null ? _b : "#F5F5F5",
|
|
3371
3489
|
onChange: (backdropColor) => updateData(__spreadProps(__spreadValues({}, data), { backdropColor }))
|
|
3372
3490
|
}
|
|
3373
|
-
), /* @__PURE__ */
|
|
3491
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3374
3492
|
ColorInput2,
|
|
3375
3493
|
{
|
|
3376
3494
|
label: t("global.canvas-color", "Canvas color"),
|
|
3377
3495
|
defaultValue: (_c = data.canvasColor) != null ? _c : "#FFFFFF",
|
|
3378
3496
|
onChange: (canvasColor) => updateData(__spreadProps(__spreadValues({}, data), { canvasColor }))
|
|
3379
3497
|
}
|
|
3380
|
-
), /* @__PURE__ */
|
|
3498
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3381
3499
|
NullableColorInput,
|
|
3382
3500
|
{
|
|
3383
3501
|
label: t("global.canvas-border-color", "Canvas border color"),
|
|
3384
3502
|
defaultValue: (_d = data.borderColor) != null ? _d : null,
|
|
3385
3503
|
onChange: (borderColor) => updateData(__spreadProps(__spreadValues({}, data), { borderColor }))
|
|
3386
3504
|
}
|
|
3387
|
-
), /* @__PURE__ */
|
|
3505
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3388
3506
|
SliderInput,
|
|
3389
3507
|
{
|
|
3390
|
-
iconLabel: /* @__PURE__ */
|
|
3508
|
+
iconLabel: /* @__PURE__ */ React65.createElement(RoundedCornerOutlined, null),
|
|
3391
3509
|
units: "px",
|
|
3392
3510
|
step: 4,
|
|
3393
3511
|
marks: true,
|
|
@@ -3397,14 +3515,14 @@ function EmailLayoutSidebarFields({ data, setData }) {
|
|
|
3397
3515
|
defaultValue: (_e = data.borderRadius) != null ? _e : 0,
|
|
3398
3516
|
onChange: (borderRadius) => updateData(__spreadProps(__spreadValues({}, data), { borderRadius }))
|
|
3399
3517
|
}
|
|
3400
|
-
)), /* @__PURE__ */
|
|
3518
|
+
)), /* @__PURE__ */ React65.createElement(
|
|
3401
3519
|
NullableFontFamily,
|
|
3402
3520
|
{
|
|
3403
3521
|
label: t("style.font-family", "Font family"),
|
|
3404
3522
|
defaultValue: "MODERN_SANS",
|
|
3405
3523
|
onChange: (fontFamily) => updateData(__spreadProps(__spreadValues({}, data), { fontFamily }))
|
|
3406
3524
|
}
|
|
3407
|
-
), /* @__PURE__ */
|
|
3525
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3408
3526
|
ColorInput2,
|
|
3409
3527
|
{
|
|
3410
3528
|
label: t("style.text-color", "Text color"),
|
|
@@ -3425,7 +3543,7 @@ function HeadingSidebarPanel({ data, setData }) {
|
|
|
3425
3543
|
setErrors(res.error);
|
|
3426
3544
|
}
|
|
3427
3545
|
};
|
|
3428
|
-
return /* @__PURE__ */
|
|
3546
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Heading block" }, /* @__PURE__ */ React65.createElement(
|
|
3429
3547
|
TextInput,
|
|
3430
3548
|
{
|
|
3431
3549
|
label: t("field.content", "Content"),
|
|
@@ -3435,7 +3553,7 @@ function HeadingSidebarPanel({ data, setData }) {
|
|
|
3435
3553
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text }) }));
|
|
3436
3554
|
}
|
|
3437
3555
|
}
|
|
3438
|
-
), /* @__PURE__ */
|
|
3556
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3439
3557
|
RadioGroupInput,
|
|
3440
3558
|
{
|
|
3441
3559
|
label: t("field.level", "Level"),
|
|
@@ -3444,10 +3562,10 @@ function HeadingSidebarPanel({ data, setData }) {
|
|
|
3444
3562
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { level }) }));
|
|
3445
3563
|
}
|
|
3446
3564
|
},
|
|
3447
|
-
/* @__PURE__ */
|
|
3448
|
-
/* @__PURE__ */
|
|
3449
|
-
/* @__PURE__ */
|
|
3450
|
-
), /* @__PURE__ */
|
|
3565
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "h1" }, "H1"),
|
|
3566
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "h2" }, "H2"),
|
|
3567
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "h3" }, "H3")
|
|
3568
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3451
3569
|
MultiStylePropertyPanel,
|
|
3452
3570
|
{
|
|
3453
3571
|
names: [
|
|
@@ -3477,7 +3595,7 @@ function HtmlSidebarPanel({ data, setData }) {
|
|
|
3477
3595
|
setErrors(res.error);
|
|
3478
3596
|
}
|
|
3479
3597
|
};
|
|
3480
|
-
return /* @__PURE__ */
|
|
3598
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Html block" }, /* @__PURE__ */ React65.createElement(
|
|
3481
3599
|
TextInput,
|
|
3482
3600
|
{
|
|
3483
3601
|
label: t("field.content", "Content"),
|
|
@@ -3485,7 +3603,7 @@ function HtmlSidebarPanel({ data, setData }) {
|
|
|
3485
3603
|
defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.contents) != null ? _b : "",
|
|
3486
3604
|
onChange: (contents) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contents }) }))
|
|
3487
3605
|
}
|
|
3488
|
-
), /* @__PURE__ */
|
|
3606
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3489
3607
|
MultiStylePropertyPanel,
|
|
3490
3608
|
{
|
|
3491
3609
|
names: ["color", "backgroundColor", "fontFamily", "fontSize", "textAlign", "padding"],
|
|
@@ -3542,7 +3660,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
|
|
|
3542
3660
|
setBusy(false);
|
|
3543
3661
|
}
|
|
3544
3662
|
});
|
|
3545
|
-
return /* @__PURE__ */
|
|
3663
|
+
return /* @__PURE__ */ React65.createElement(Dialog, { open, onClose, maxWidth: "md", fullWidth: true }, /* @__PURE__ */ React65.createElement(DialogTitle, null, "Image library"), /* @__PURE__ */ React65.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React65.createElement(
|
|
3546
3664
|
TextField,
|
|
3547
3665
|
{
|
|
3548
3666
|
fullWidth: true,
|
|
@@ -3552,11 +3670,11 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
|
|
|
3552
3670
|
onChange: (e) => setQuery(e.target.value),
|
|
3553
3671
|
autoFocus: true,
|
|
3554
3672
|
InputProps: {
|
|
3555
|
-
startAdornment: /* @__PURE__ */
|
|
3673
|
+
startAdornment: /* @__PURE__ */ React65.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React65.createElement(SearchOutlined, { fontSize: "small" }))
|
|
3556
3674
|
},
|
|
3557
3675
|
sx: { mb: 2 }
|
|
3558
3676
|
}
|
|
3559
|
-
), error && /* @__PURE__ */
|
|
3677
|
+
), error && /* @__PURE__ */ React65.createElement(Alert, { severity: "error", sx: { mb: 2 } }, error), busy && !images && /* @__PURE__ */ React65.createElement(Stack, { alignItems: "center", sx: { py: 4 } }, /* @__PURE__ */ React65.createElement(CircularProgress, { size: 28 })), filtered && filtered.length === 0 && /* @__PURE__ */ React65.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__ */ React65.createElement(
|
|
3560
3678
|
Box,
|
|
3561
3679
|
{
|
|
3562
3680
|
sx: {
|
|
@@ -3565,7 +3683,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
|
|
|
3565
3683
|
gap: 1.5
|
|
3566
3684
|
}
|
|
3567
3685
|
},
|
|
3568
|
-
filtered.map((img) => /* @__PURE__ */
|
|
3686
|
+
filtered.map((img) => /* @__PURE__ */ React65.createElement(
|
|
3569
3687
|
ImageTile,
|
|
3570
3688
|
{
|
|
3571
3689
|
key: img.url,
|
|
@@ -3574,7 +3692,7 @@ function ImageLibraryDialog({ open, onClose, onPick }) {
|
|
|
3574
3692
|
onDelete: deleteImage ? () => handleDelete(img.url) : void 0
|
|
3575
3693
|
}
|
|
3576
3694
|
))
|
|
3577
|
-
)), /* @__PURE__ */
|
|
3695
|
+
)), /* @__PURE__ */ React65.createElement(DialogActions, null, /* @__PURE__ */ React65.createElement(Button$1, { onClick: onClose }, "Close")));
|
|
3578
3696
|
}
|
|
3579
3697
|
function ImageTile({
|
|
3580
3698
|
image,
|
|
@@ -3584,7 +3702,7 @@ function ImageTile({
|
|
|
3584
3702
|
var _a, _b;
|
|
3585
3703
|
const src = (_a = image.thumbnailUrl) != null ? _a : image.url;
|
|
3586
3704
|
const label = image.alt || image.url.split("/").pop() || "image";
|
|
3587
|
-
return /* @__PURE__ */
|
|
3705
|
+
return /* @__PURE__ */ React65.createElement(
|
|
3588
3706
|
Box,
|
|
3589
3707
|
{
|
|
3590
3708
|
sx: {
|
|
@@ -3600,7 +3718,7 @@ function ImageTile({
|
|
|
3600
3718
|
},
|
|
3601
3719
|
onClick: onPick
|
|
3602
3720
|
},
|
|
3603
|
-
/* @__PURE__ */
|
|
3721
|
+
/* @__PURE__ */ React65.createElement(
|
|
3604
3722
|
Box,
|
|
3605
3723
|
{
|
|
3606
3724
|
component: "img",
|
|
@@ -3609,8 +3727,8 @@ function ImageTile({
|
|
|
3609
3727
|
sx: { display: "block", width: "100%", aspectRatio: "1 / 1", objectFit: "cover", backgroundColor: "#f5f5f5" }
|
|
3610
3728
|
}
|
|
3611
3729
|
),
|
|
3612
|
-
/* @__PURE__ */
|
|
3613
|
-
onDelete && /* @__PURE__ */
|
|
3730
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { p: 0.75, fontSize: 11, color: "text.secondary", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, label),
|
|
3731
|
+
onDelete && /* @__PURE__ */ React65.createElement(Tooltip, { title: "Delete from library" }, /* @__PURE__ */ React65.createElement(
|
|
3614
3732
|
IconButton,
|
|
3615
3733
|
{
|
|
3616
3734
|
size: "small",
|
|
@@ -3630,7 +3748,7 @@ function ImageTile({
|
|
|
3630
3748
|
},
|
|
3631
3749
|
"aria-label": "Delete image"
|
|
3632
3750
|
},
|
|
3633
|
-
/* @__PURE__ */
|
|
3751
|
+
/* @__PURE__ */ React65.createElement(DeleteOutline, { fontSize: "small" })
|
|
3634
3752
|
))
|
|
3635
3753
|
);
|
|
3636
3754
|
}
|
|
@@ -3683,13 +3801,13 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3683
3801
|
});
|
|
3684
3802
|
const url = (_b = (_a = data.props) == null ? void 0 : _a.url) != null ? _b : "";
|
|
3685
3803
|
const showHttpWarning = isHttpUrl(url);
|
|
3686
|
-
return /* @__PURE__ */
|
|
3804
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Image block" }, (uploadImage || loadImages) && /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 1 }, uploadImage && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
3687
3805
|
Button$1,
|
|
3688
3806
|
{
|
|
3689
3807
|
fullWidth: true,
|
|
3690
3808
|
variant: "outlined",
|
|
3691
3809
|
size: "small",
|
|
3692
|
-
startIcon: uploading ? /* @__PURE__ */
|
|
3810
|
+
startIcon: uploading ? /* @__PURE__ */ React65.createElement(CircularProgress, { size: 14 }) : /* @__PURE__ */ React65.createElement(CloudUploadOutlined, { fontSize: "small" }),
|
|
3693
3811
|
disabled: uploading,
|
|
3694
3812
|
onClick: () => {
|
|
3695
3813
|
var _a2;
|
|
@@ -3697,7 +3815,7 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3697
3815
|
}
|
|
3698
3816
|
},
|
|
3699
3817
|
uploading ? t("image.uploading", "Uploading\u2026") : t("image.upload", "Upload")
|
|
3700
|
-
), /* @__PURE__ */
|
|
3818
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3701
3819
|
"input",
|
|
3702
3820
|
{
|
|
3703
3821
|
ref: fileInputRef,
|
|
@@ -3711,17 +3829,17 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3711
3829
|
if (file) yield handleFile(file);
|
|
3712
3830
|
})
|
|
3713
3831
|
}
|
|
3714
|
-
)), loadImages && /* @__PURE__ */
|
|
3832
|
+
)), loadImages && /* @__PURE__ */ React65.createElement(
|
|
3715
3833
|
Button$1,
|
|
3716
3834
|
{
|
|
3717
3835
|
fullWidth: true,
|
|
3718
3836
|
variant: "outlined",
|
|
3719
3837
|
size: "small",
|
|
3720
|
-
startIcon: /* @__PURE__ */
|
|
3838
|
+
startIcon: /* @__PURE__ */ React65.createElement(CollectionsOutlined, { fontSize: "small" }),
|
|
3721
3839
|
onClick: () => setLibraryOpen(true)
|
|
3722
3840
|
},
|
|
3723
3841
|
t("image.library", "Library")
|
|
3724
|
-
)), uploadError && /* @__PURE__ */
|
|
3842
|
+
)), uploadError && /* @__PURE__ */ React65.createElement(Alert, { severity: "error", onClose: () => setUploadError(null), sx: { mt: 1 } }, uploadError), /* @__PURE__ */ React65.createElement(
|
|
3725
3843
|
TextInput,
|
|
3726
3844
|
{
|
|
3727
3845
|
label: t("image.source-url", "Source URL"),
|
|
@@ -3731,14 +3849,14 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3731
3849
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { url: next }) }));
|
|
3732
3850
|
}
|
|
3733
3851
|
}
|
|
3734
|
-
), showHttpWarning && /* @__PURE__ */
|
|
3852
|
+
), showHttpWarning && /* @__PURE__ */ React65.createElement(Box, { sx: { mt: -1, mb: 1, display: "flex", alignItems: "flex-start", gap: 0.75 } }, /* @__PURE__ */ React65.createElement(ErrorOutlineOutlined, { fontSize: "small", sx: { color: "warning.main", mt: "2px" } }), /* @__PURE__ */ React65.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__ */ React65.createElement(
|
|
3735
3853
|
TextInput,
|
|
3736
3854
|
{
|
|
3737
3855
|
label: t("image.alt-text", "Alt text"),
|
|
3738
3856
|
defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.alt) != null ? _d : "",
|
|
3739
3857
|
onChange: (alt) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { alt }) }))
|
|
3740
3858
|
}
|
|
3741
|
-
), /* @__PURE__ */
|
|
3859
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3742
3860
|
TextInput,
|
|
3743
3861
|
{
|
|
3744
3862
|
label: t("image.link-href", "Click through URL"),
|
|
@@ -3748,38 +3866,38 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3748
3866
|
updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { linkHref }) }));
|
|
3749
3867
|
}
|
|
3750
3868
|
}
|
|
3751
|
-
), /* @__PURE__ */
|
|
3869
|
+
), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React65.createElement(
|
|
3752
3870
|
TextDimensionInput,
|
|
3753
3871
|
{
|
|
3754
3872
|
label: t("field.width", "Width"),
|
|
3755
3873
|
defaultValue: (_g = data.props) == null ? void 0 : _g.width,
|
|
3756
3874
|
onChange: (width) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { width }) }))
|
|
3757
3875
|
}
|
|
3758
|
-
), /* @__PURE__ */
|
|
3876
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3759
3877
|
TextDimensionInput,
|
|
3760
3878
|
{
|
|
3761
3879
|
label: t("field.height", "Height"),
|
|
3762
3880
|
defaultValue: (_h = data.props) == null ? void 0 : _h.height,
|
|
3763
3881
|
onChange: (height) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { height }) }))
|
|
3764
3882
|
}
|
|
3765
|
-
)), /* @__PURE__ */
|
|
3883
|
+
)), /* @__PURE__ */ React65.createElement(
|
|
3766
3884
|
RadioGroupInput,
|
|
3767
3885
|
{
|
|
3768
3886
|
label: t("style.alignment", "Alignment"),
|
|
3769
3887
|
defaultValue: (_j = (_i = data.props) == null ? void 0 : _i.contentAlignment) != null ? _j : "middle",
|
|
3770
3888
|
onChange: (contentAlignment) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { contentAlignment }) }))
|
|
3771
3889
|
},
|
|
3772
|
-
/* @__PURE__ */
|
|
3773
|
-
/* @__PURE__ */
|
|
3774
|
-
/* @__PURE__ */
|
|
3775
|
-
), /* @__PURE__ */
|
|
3890
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "top" }, /* @__PURE__ */ React65.createElement(VerticalAlignTopOutlined, { fontSize: "small" })),
|
|
3891
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "middle" }, /* @__PURE__ */ React65.createElement(VerticalAlignCenterOutlined, { fontSize: "small" })),
|
|
3892
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "bottom" }, /* @__PURE__ */ React65.createElement(VerticalAlignBottomOutlined, { fontSize: "small" }))
|
|
3893
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3776
3894
|
MultiStylePropertyPanel,
|
|
3777
3895
|
{
|
|
3778
3896
|
names: ["backgroundColor", "textAlign", "padding"],
|
|
3779
3897
|
value: data.style,
|
|
3780
3898
|
onChange: (style) => updateData(__spreadProps(__spreadValues({}, data), { style }))
|
|
3781
3899
|
}
|
|
3782
|
-
), loadImages && /* @__PURE__ */
|
|
3900
|
+
), loadImages && /* @__PURE__ */ React65.createElement(
|
|
3783
3901
|
ImageLibraryDialog,
|
|
3784
3902
|
{
|
|
3785
3903
|
open: libraryOpen,
|
|
@@ -3791,6 +3909,46 @@ function ImageSidebarPanel({ data, setData }) {
|
|
|
3791
3909
|
}
|
|
3792
3910
|
));
|
|
3793
3911
|
}
|
|
3912
|
+
function OtpSidebarPanel({ data, setData }) {
|
|
3913
|
+
var _a, _b;
|
|
3914
|
+
const [, setErrors] = useState(null);
|
|
3915
|
+
const updateData = (d) => {
|
|
3916
|
+
const res = OtpPropsSchema.safeParse(d);
|
|
3917
|
+
if (res.success) {
|
|
3918
|
+
setData(res.data);
|
|
3919
|
+
setErrors(null);
|
|
3920
|
+
} else {
|
|
3921
|
+
setErrors(res.error);
|
|
3922
|
+
}
|
|
3923
|
+
};
|
|
3924
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: t("otp.title", "OTP / Code block") }, /* @__PURE__ */ React65.createElement(
|
|
3925
|
+
TextInput,
|
|
3926
|
+
{
|
|
3927
|
+
label: t("otp.code", "Code"),
|
|
3928
|
+
rows: 1,
|
|
3929
|
+
defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.code) != null ? _b : OtpPropsDefaults.code,
|
|
3930
|
+
onChange: (code) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { code }) }))
|
|
3931
|
+
}
|
|
3932
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3933
|
+
MultiStylePropertyPanel,
|
|
3934
|
+
{
|
|
3935
|
+
names: [
|
|
3936
|
+
"color",
|
|
3937
|
+
"backgroundColor",
|
|
3938
|
+
"borderColor",
|
|
3939
|
+
"borderRadius",
|
|
3940
|
+
"fontFamily",
|
|
3941
|
+
"fontSize",
|
|
3942
|
+
"fontWeight",
|
|
3943
|
+
"letterSpacing",
|
|
3944
|
+
"textAlign",
|
|
3945
|
+
"padding"
|
|
3946
|
+
],
|
|
3947
|
+
value: data.style,
|
|
3948
|
+
onChange: (style) => updateData(__spreadProps(__spreadValues({}, data), { style }))
|
|
3949
|
+
}
|
|
3950
|
+
));
|
|
3951
|
+
}
|
|
3794
3952
|
function SignatureSidebarPanel({ data, setData }) {
|
|
3795
3953
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D;
|
|
3796
3954
|
const [, setErrors] = useState(null);
|
|
@@ -3818,74 +3976,74 @@ function SignatureSidebarPanel({ data, setData }) {
|
|
|
3818
3976
|
const nameColor = (_z = (_y = data.props) == null ? void 0 : _y.nameColor) != null ? _z : SignaturePropsDefaults.nameColor;
|
|
3819
3977
|
const textColor = (_B = (_A = data.props) == null ? void 0 : _A.textColor) != null ? _B : SignaturePropsDefaults.textColor;
|
|
3820
3978
|
const linkColor = (_D = (_C = data.props) == null ? void 0 : _C.linkColor) != null ? _D : SignaturePropsDefaults.linkColor;
|
|
3821
|
-
return /* @__PURE__ */
|
|
3979
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Signature block" }, /* @__PURE__ */ React65.createElement(
|
|
3822
3980
|
TextInput,
|
|
3823
3981
|
{
|
|
3824
3982
|
label: t("signature.greeting", "Greeting"),
|
|
3825
3983
|
defaultValue: greeting,
|
|
3826
3984
|
onChange: (greeting2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { greeting: greeting2 }) }))
|
|
3827
3985
|
}
|
|
3828
|
-
), /* @__PURE__ */
|
|
3986
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3829
3987
|
TextInput,
|
|
3830
3988
|
{
|
|
3831
3989
|
label: t("signature.name", "Name"),
|
|
3832
3990
|
defaultValue: name,
|
|
3833
3991
|
onChange: (name2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { name: name2 }) }))
|
|
3834
3992
|
}
|
|
3835
|
-
), /* @__PURE__ */
|
|
3993
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3836
3994
|
TextInput,
|
|
3837
3995
|
{
|
|
3838
3996
|
label: t("signature.title", "Title"),
|
|
3839
3997
|
defaultValue: title,
|
|
3840
3998
|
onChange: (title2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { title: title2 }) }))
|
|
3841
3999
|
}
|
|
3842
|
-
), /* @__PURE__ */
|
|
4000
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3843
4001
|
TextInput,
|
|
3844
4002
|
{
|
|
3845
4003
|
label: t("signature.company", "Company"),
|
|
3846
4004
|
defaultValue: company,
|
|
3847
4005
|
onChange: (company2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { company: company2 }) }))
|
|
3848
4006
|
}
|
|
3849
|
-
), /* @__PURE__ */
|
|
4007
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3850
4008
|
TextInput,
|
|
3851
4009
|
{
|
|
3852
4010
|
label: t("signature.address", "Address"),
|
|
3853
4011
|
defaultValue: address,
|
|
3854
4012
|
onChange: (address2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { address: address2 }) }))
|
|
3855
4013
|
}
|
|
3856
|
-
), /* @__PURE__ */
|
|
4014
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3857
4015
|
TextInput,
|
|
3858
4016
|
{
|
|
3859
4017
|
label: t("signature.email", "Email"),
|
|
3860
4018
|
defaultValue: email,
|
|
3861
4019
|
onChange: (email2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { email: email2 }) }))
|
|
3862
4020
|
}
|
|
3863
|
-
), /* @__PURE__ */
|
|
4021
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3864
4022
|
TextInput,
|
|
3865
4023
|
{
|
|
3866
4024
|
label: t("signature.phone", "Phone"),
|
|
3867
4025
|
defaultValue: phone,
|
|
3868
4026
|
onChange: (phone2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { phone: phone2 }) }))
|
|
3869
4027
|
}
|
|
3870
|
-
), /* @__PURE__ */
|
|
4028
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3871
4029
|
TextInput,
|
|
3872
4030
|
{
|
|
3873
4031
|
label: t("signature.website", "Website"),
|
|
3874
4032
|
defaultValue: website,
|
|
3875
4033
|
onChange: (website2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { website: website2 }) }))
|
|
3876
4034
|
}
|
|
3877
|
-
), /* @__PURE__ */
|
|
4035
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3878
4036
|
TextInput,
|
|
3879
4037
|
{
|
|
3880
4038
|
label: t("signature.image-url", "Image URL"),
|
|
3881
4039
|
defaultValue: imageUrl,
|
|
3882
4040
|
onChange: (imageUrl2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageUrl: imageUrl2 }) }))
|
|
3883
4041
|
}
|
|
3884
|
-
), /* @__PURE__ */
|
|
4042
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3885
4043
|
SliderInput,
|
|
3886
4044
|
{
|
|
3887
4045
|
label: t("signature.image-size", "Image size"),
|
|
3888
|
-
iconLabel: /* @__PURE__ */
|
|
4046
|
+
iconLabel: /* @__PURE__ */ React65.createElement(AspectRatioOutlined, { sx: { color: "text.secondary" } }),
|
|
3889
4047
|
units: "px",
|
|
3890
4048
|
step: 4,
|
|
3891
4049
|
min: 32,
|
|
@@ -3893,47 +4051,47 @@ function SignatureSidebarPanel({ data, setData }) {
|
|
|
3893
4051
|
defaultValue: imageSize,
|
|
3894
4052
|
onChange: (imageSize2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageSize: imageSize2 }) }))
|
|
3895
4053
|
}
|
|
3896
|
-
), /* @__PURE__ */
|
|
4054
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3897
4055
|
RadioGroupInput,
|
|
3898
4056
|
{
|
|
3899
4057
|
label: t("signature.image-shape", "Image shape"),
|
|
3900
4058
|
defaultValue: imageShape,
|
|
3901
4059
|
onChange: (imageShape2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { imageShape: imageShape2 }) }))
|
|
3902
4060
|
},
|
|
3903
|
-
/* @__PURE__ */
|
|
3904
|
-
/* @__PURE__ */
|
|
3905
|
-
/* @__PURE__ */
|
|
3906
|
-
), /* @__PURE__ */
|
|
4061
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "circle" }, t("signature.shape.circle", "Circle")),
|
|
4062
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "square" }, t("signature.shape.square", "Square")),
|
|
4063
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "rounded" }, t("signature.shape.rounded", "Rounded"))
|
|
4064
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3907
4065
|
RadioGroupInput,
|
|
3908
4066
|
{
|
|
3909
4067
|
label: t("signature.layout", "Layout"),
|
|
3910
4068
|
defaultValue: layout,
|
|
3911
4069
|
onChange: (layout2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { layout: layout2 }) }))
|
|
3912
4070
|
},
|
|
3913
|
-
/* @__PURE__ */
|
|
3914
|
-
/* @__PURE__ */
|
|
3915
|
-
), /* @__PURE__ */
|
|
4071
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "horizontal" }, t("signature.layout.horizontal", "Horizontal")),
|
|
4072
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "vertical" }, t("signature.layout.vertical", "Vertical"))
|
|
4073
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3916
4074
|
ColorInput2,
|
|
3917
4075
|
{
|
|
3918
4076
|
label: t("signature.name-color", "Name color"),
|
|
3919
4077
|
defaultValue: nameColor,
|
|
3920
4078
|
onChange: (nameColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { nameColor: nameColor2 }) }))
|
|
3921
4079
|
}
|
|
3922
|
-
), /* @__PURE__ */
|
|
4080
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3923
4081
|
ColorInput2,
|
|
3924
4082
|
{
|
|
3925
4083
|
label: t("style.text-color", "Text color"),
|
|
3926
4084
|
defaultValue: textColor,
|
|
3927
4085
|
onChange: (textColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { textColor: textColor2 }) }))
|
|
3928
4086
|
}
|
|
3929
|
-
), /* @__PURE__ */
|
|
4087
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3930
4088
|
ColorInput2,
|
|
3931
4089
|
{
|
|
3932
4090
|
label: t("signature.link-color", "Link color"),
|
|
3933
4091
|
defaultValue: linkColor,
|
|
3934
4092
|
onChange: (linkColor2) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { linkColor: linkColor2 }) }))
|
|
3935
4093
|
}
|
|
3936
|
-
), /* @__PURE__ */
|
|
4094
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3937
4095
|
MultiStylePropertyPanel,
|
|
3938
4096
|
{
|
|
3939
4097
|
names: ["backgroundColor", "fontFamily", "padding"],
|
|
@@ -3954,11 +4112,11 @@ function SpacerSidebarPanel({ data, setData }) {
|
|
|
3954
4112
|
setErrors(res.error);
|
|
3955
4113
|
}
|
|
3956
4114
|
};
|
|
3957
|
-
return /* @__PURE__ */
|
|
4115
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Spacer block" }, /* @__PURE__ */ React65.createElement(
|
|
3958
4116
|
SliderInput,
|
|
3959
4117
|
{
|
|
3960
4118
|
label: t("field.height", "Height"),
|
|
3961
|
-
iconLabel: /* @__PURE__ */
|
|
4119
|
+
iconLabel: /* @__PURE__ */ React65.createElement(HeightOutlined, { sx: { color: "text.secondary" } }),
|
|
3962
4120
|
units: "px",
|
|
3963
4121
|
step: 4,
|
|
3964
4122
|
min: 4,
|
|
@@ -3980,7 +4138,7 @@ function TextSidebarPanel({ data, setData }) {
|
|
|
3980
4138
|
setErrors(res.error);
|
|
3981
4139
|
}
|
|
3982
4140
|
};
|
|
3983
|
-
return /* @__PURE__ */
|
|
4141
|
+
return /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Text block" }, /* @__PURE__ */ React65.createElement(
|
|
3984
4142
|
TextInput,
|
|
3985
4143
|
{
|
|
3986
4144
|
label: t("field.content", "Content"),
|
|
@@ -3988,14 +4146,14 @@ function TextSidebarPanel({ data, setData }) {
|
|
|
3988
4146
|
defaultValue: (_b = (_a = data.props) == null ? void 0 : _a.text) != null ? _b : "",
|
|
3989
4147
|
onChange: (text) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { text }) }))
|
|
3990
4148
|
}
|
|
3991
|
-
), /* @__PURE__ */
|
|
4149
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3992
4150
|
BooleanInput,
|
|
3993
4151
|
{
|
|
3994
4152
|
label: t("field.markdown", "Markdown"),
|
|
3995
4153
|
defaultValue: (_d = (_c = data.props) == null ? void 0 : _c.markdown) != null ? _d : false,
|
|
3996
4154
|
onChange: (markdown) => updateData(__spreadProps(__spreadValues({}, data), { props: __spreadProps(__spreadValues({}, data.props), { markdown }) }))
|
|
3997
4155
|
}
|
|
3998
|
-
), /* @__PURE__ */
|
|
4156
|
+
), /* @__PURE__ */ React65.createElement(
|
|
3999
4157
|
MultiStylePropertyPanel,
|
|
4000
4158
|
{
|
|
4001
4159
|
names: [
|
|
@@ -4017,7 +4175,7 @@ function TextSidebarPanel({ data, setData }) {
|
|
|
4017
4175
|
|
|
4018
4176
|
// src/app/inspector-drawer/configuration-panel/index.tsx
|
|
4019
4177
|
function renderMessage(val) {
|
|
4020
|
-
return /* @__PURE__ */
|
|
4178
|
+
return /* @__PURE__ */ React65.createElement(Box, { sx: { m: 3, p: 1, border: "1px dashed", borderColor: "divider" } }, /* @__PURE__ */ React65.createElement(Typography, { color: "text.secondary" }, val));
|
|
4021
4179
|
}
|
|
4022
4180
|
function ConfigurationPanel() {
|
|
4023
4181
|
const document2 = useDocument();
|
|
@@ -4033,55 +4191,57 @@ function ConfigurationPanel() {
|
|
|
4033
4191
|
const { data, type } = block;
|
|
4034
4192
|
switch (type) {
|
|
4035
4193
|
case "Avatar":
|
|
4036
|
-
return /* @__PURE__ */
|
|
4194
|
+
return /* @__PURE__ */ React65.createElement(AvatarSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4037
4195
|
case "Button":
|
|
4038
|
-
return /* @__PURE__ */
|
|
4196
|
+
return /* @__PURE__ */ React65.createElement(ButtonSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4039
4197
|
case "ColumnsContainer":
|
|
4040
|
-
return /* @__PURE__ */
|
|
4198
|
+
return /* @__PURE__ */ React65.createElement(ColumnsContainerPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4041
4199
|
case "Container":
|
|
4042
|
-
return /* @__PURE__ */
|
|
4200
|
+
return /* @__PURE__ */ React65.createElement(ContainerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4043
4201
|
case "Divider":
|
|
4044
|
-
return /* @__PURE__ */
|
|
4202
|
+
return /* @__PURE__ */ React65.createElement(DividerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4045
4203
|
case "Heading":
|
|
4046
|
-
return /* @__PURE__ */
|
|
4204
|
+
return /* @__PURE__ */ React65.createElement(HeadingSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4047
4205
|
case "Html":
|
|
4048
|
-
return /* @__PURE__ */
|
|
4206
|
+
return /* @__PURE__ */ React65.createElement(HtmlSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4049
4207
|
case "Image":
|
|
4050
|
-
return /* @__PURE__ */
|
|
4208
|
+
return /* @__PURE__ */ React65.createElement(ImageSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4051
4209
|
case "EmailLayout":
|
|
4052
|
-
return /* @__PURE__ */
|
|
4210
|
+
return /* @__PURE__ */ React65.createElement(EmailLayoutSidebarFields, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4211
|
+
case "Otp":
|
|
4212
|
+
return /* @__PURE__ */ React65.createElement(OtpSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4053
4213
|
case "Spacer":
|
|
4054
|
-
return /* @__PURE__ */
|
|
4214
|
+
return /* @__PURE__ */ React65.createElement(SpacerSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4055
4215
|
case "Signature":
|
|
4056
|
-
return /* @__PURE__ */
|
|
4216
|
+
return /* @__PURE__ */ React65.createElement(SignatureSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4057
4217
|
case "Text":
|
|
4058
|
-
return /* @__PURE__ */
|
|
4218
|
+
return /* @__PURE__ */ React65.createElement(TextSidebarPanel, { key: selectedBlockId, data, setData: (data2) => setBlock({ type, data: data2 }) });
|
|
4059
4219
|
default:
|
|
4060
|
-
return /* @__PURE__ */
|
|
4220
|
+
return /* @__PURE__ */ React65.createElement("pre", null, JSON.stringify(block, null, " "));
|
|
4061
4221
|
}
|
|
4062
4222
|
}
|
|
4063
4223
|
function StylesPanel() {
|
|
4064
4224
|
const block = useDocument().root;
|
|
4065
4225
|
if (!block) {
|
|
4066
|
-
return /* @__PURE__ */
|
|
4226
|
+
return /* @__PURE__ */ React65.createElement("p", null, "Block not found");
|
|
4067
4227
|
}
|
|
4068
4228
|
const { data, type } = block;
|
|
4069
4229
|
if (type !== "EmailLayout") {
|
|
4070
4230
|
throw new Error('Expected "root" element to be of type EmailLayout');
|
|
4071
4231
|
}
|
|
4072
|
-
return /* @__PURE__ */
|
|
4232
|
+
return /* @__PURE__ */ React65.createElement(EmailLayoutSidebarFields, { key: "root", data, setData: (data2) => setDocument({ root: { type, data: data2 } }) });
|
|
4073
4233
|
}
|
|
4074
4234
|
function TemplateDownloadButton() {
|
|
4075
4235
|
const doc = useDocument();
|
|
4076
4236
|
const href = useMemo(() => {
|
|
4077
4237
|
return `data:text/plain,${encodeURIComponent(JSON.stringify(doc, null, " "))}`;
|
|
4078
4238
|
}, [doc]);
|
|
4079
|
-
return /* @__PURE__ */
|
|
4239
|
+
return /* @__PURE__ */ React65.createElement(
|
|
4080
4240
|
Button$1,
|
|
4081
4241
|
{
|
|
4082
4242
|
variant: "outlined",
|
|
4083
4243
|
color: "primary",
|
|
4084
|
-
startIcon: /* @__PURE__ */
|
|
4244
|
+
startIcon: /* @__PURE__ */ React65.createElement(FileDownloadOutlined, null),
|
|
4085
4245
|
href,
|
|
4086
4246
|
download: "emailTemplate.json",
|
|
4087
4247
|
fullWidth: true
|
|
@@ -4123,7 +4283,7 @@ function TemplatePanel({
|
|
|
4123
4283
|
window.alert(t("settings.copied", "Template copied successfully!"));
|
|
4124
4284
|
}
|
|
4125
4285
|
};
|
|
4126
|
-
const workspaceToggle = /* @__PURE__ */
|
|
4286
|
+
const workspaceToggle = /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Editor appearance" }, /* @__PURE__ */ React65.createElement(Stack, { spacing: 1 }, /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.secondary" } }, t("settings.workspace-background", "Workspace background")), /* @__PURE__ */ React65.createElement(
|
|
4127
4287
|
ToggleButtonGroup,
|
|
4128
4288
|
{
|
|
4129
4289
|
value: workspaceBackground,
|
|
@@ -4131,13 +4291,13 @@ function TemplatePanel({
|
|
|
4131
4291
|
size: "small",
|
|
4132
4292
|
onChange: (_, v) => v && setWorkspaceBackground(v)
|
|
4133
4293
|
},
|
|
4134
|
-
/* @__PURE__ */
|
|
4135
|
-
/* @__PURE__ */
|
|
4136
|
-
), /* @__PURE__ */
|
|
4294
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "checkerboard", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React65.createElement(GridOnOutlined, { fontSize: "small" }), t("settings.checkerboard", "Checkerboard")),
|
|
4295
|
+
/* @__PURE__ */ React65.createElement(ToggleButton, { value: "solid", sx: { textTransform: "none", gap: 0.75 } }, /* @__PURE__ */ React65.createElement(SquareOutlined, { fontSize: "small" }), t("settings.solid", "Solid"))
|
|
4296
|
+
), /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.disabled" } }, t("settings.editor-only-hint", "Editor-only \u2014 never reaches the rendered email."))));
|
|
4137
4297
|
if (!currentTemplateId) {
|
|
4138
|
-
return /* @__PURE__ */
|
|
4298
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Template" }, t("settings.no-template", "No template selected")), workspaceToggle);
|
|
4139
4299
|
}
|
|
4140
|
-
return /* @__PURE__ */
|
|
4300
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Details" }, /* @__PURE__ */ React65.createElement(
|
|
4141
4301
|
DetailsEditor,
|
|
4142
4302
|
{
|
|
4143
4303
|
templateId: currentTemplateId,
|
|
@@ -4151,7 +4311,7 @@ function TemplatePanel({
|
|
|
4151
4311
|
setCurrentTemplateTags(tags);
|
|
4152
4312
|
})
|
|
4153
4313
|
}
|
|
4154
|
-
)), /* @__PURE__ */
|
|
4314
|
+
)), /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Template" }, /* @__PURE__ */ React65.createElement(Stack, { spacing: 2 }, !persistenceEnabled && /* @__PURE__ */ React65.createElement(
|
|
4155
4315
|
Typography,
|
|
4156
4316
|
{
|
|
4157
4317
|
variant: "body2",
|
|
@@ -4164,29 +4324,29 @@ function TemplatePanel({
|
|
|
4164
4324
|
}
|
|
4165
4325
|
},
|
|
4166
4326
|
t("settings.save-disabled", "Save functionality is disabled. To enable saving, provide the necessary callback functions.")
|
|
4167
|
-
), persistenceEnabled && /* @__PURE__ */
|
|
4327
|
+
), persistenceEnabled && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
4168
4328
|
Button$1,
|
|
4169
4329
|
{
|
|
4170
4330
|
variant: "outlined",
|
|
4171
4331
|
color: "primary",
|
|
4172
|
-
startIcon: /* @__PURE__ */
|
|
4332
|
+
startIcon: /* @__PURE__ */ React65.createElement(ContentCopyOutlined, null),
|
|
4173
4333
|
onClick: handleCopyToSamples,
|
|
4174
4334
|
fullWidth: true,
|
|
4175
4335
|
disabled: !copyTemplate
|
|
4176
4336
|
},
|
|
4177
4337
|
t("settings.save-as-sample", "Save as Sample Template")
|
|
4178
|
-
), /* @__PURE__ */
|
|
4338
|
+
), /* @__PURE__ */ React65.createElement(
|
|
4179
4339
|
Button$1,
|
|
4180
4340
|
{
|
|
4181
4341
|
variant: "outlined",
|
|
4182
4342
|
color: "error",
|
|
4183
|
-
startIcon: /* @__PURE__ */
|
|
4343
|
+
startIcon: /* @__PURE__ */ React65.createElement(DeleteOutlined, null),
|
|
4184
4344
|
onClick: handleDelete,
|
|
4185
4345
|
fullWidth: true,
|
|
4186
4346
|
disabled: !deleteTemplate
|
|
4187
4347
|
},
|
|
4188
4348
|
t("settings.delete", "Delete Template")
|
|
4189
|
-
)))), persistenceEnabled && /* @__PURE__ */
|
|
4349
|
+
)))), persistenceEnabled && /* @__PURE__ */ React65.createElement(BaseSidebarPanel, { title: "Export" }, /* @__PURE__ */ React65.createElement(Stack, { spacing: 2 }, /* @__PURE__ */ React65.createElement(TemplateDownloadButton, null))), workspaceToggle);
|
|
4190
4350
|
}
|
|
4191
4351
|
function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }) {
|
|
4192
4352
|
const [name, setName] = useState(currentName);
|
|
@@ -4223,7 +4383,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
|
|
|
4223
4383
|
setSaving(false);
|
|
4224
4384
|
}
|
|
4225
4385
|
});
|
|
4226
|
-
return /* @__PURE__ */
|
|
4386
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 1.5 }, /* @__PURE__ */ React65.createElement(
|
|
4227
4387
|
TextField,
|
|
4228
4388
|
{
|
|
4229
4389
|
size: "small",
|
|
@@ -4233,7 +4393,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
|
|
|
4233
4393
|
disabled: !canEdit || saving,
|
|
4234
4394
|
fullWidth: true
|
|
4235
4395
|
}
|
|
4236
|
-
), /* @__PURE__ */
|
|
4396
|
+
), /* @__PURE__ */ React65.createElement(Box, null, /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React65.createElement(
|
|
4237
4397
|
Chip,
|
|
4238
4398
|
{
|
|
4239
4399
|
key: tag,
|
|
@@ -4241,7 +4401,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
|
|
|
4241
4401
|
size: "small",
|
|
4242
4402
|
onDelete: canEdit && !saving ? () => removeTag(tag) : void 0
|
|
4243
4403
|
}
|
|
4244
|
-
))) : /* @__PURE__ */
|
|
4404
|
+
))) : /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React65.createElement(
|
|
4245
4405
|
TextField,
|
|
4246
4406
|
{
|
|
4247
4407
|
size: "small",
|
|
@@ -4260,20 +4420,20 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
|
|
|
4260
4420
|
}
|
|
4261
4421
|
},
|
|
4262
4422
|
InputProps: {
|
|
4263
|
-
endAdornment: /* @__PURE__ */
|
|
4423
|
+
endAdornment: /* @__PURE__ */ React65.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React65.createElement(
|
|
4264
4424
|
Button$1,
|
|
4265
4425
|
{
|
|
4266
4426
|
size: "small",
|
|
4267
4427
|
onClick: addTag,
|
|
4268
4428
|
disabled: !canEdit || saving || !tagInput.trim(),
|
|
4269
|
-
startIcon: /* @__PURE__ */
|
|
4429
|
+
startIcon: /* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" }),
|
|
4270
4430
|
sx: { textTransform: "none" }
|
|
4271
4431
|
},
|
|
4272
4432
|
t("common.add", "Add")
|
|
4273
4433
|
))
|
|
4274
4434
|
}
|
|
4275
4435
|
}
|
|
4276
|
-
)), /* @__PURE__ */
|
|
4436
|
+
)), /* @__PURE__ */ React65.createElement(Tooltip, { title: canEdit ? "" : t("settings.no-rename-cb", "Wire a renameTemplate callback to enable editing from here"), placement: "top" }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
4277
4437
|
Button$1,
|
|
4278
4438
|
{
|
|
4279
4439
|
variant: "contained",
|
|
@@ -4281,7 +4441,7 @@ function DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }
|
|
|
4281
4441
|
fullWidth: true,
|
|
4282
4442
|
onClick: handleSave,
|
|
4283
4443
|
disabled: !canEdit || saving || !dirty || !name.trim(),
|
|
4284
|
-
startIcon: justSaved ? /* @__PURE__ */
|
|
4444
|
+
startIcon: justSaved ? /* @__PURE__ */ React65.createElement(CheckOutlined, { fontSize: "small" }) : null
|
|
4285
4445
|
},
|
|
4286
4446
|
saving ? t("common.saving", "Saving\u2026") : justSaved ? t("settings.saved", "Saved") : t("settings.save-details", "Save details")
|
|
4287
4447
|
))));
|
|
@@ -4458,7 +4618,7 @@ function VariablesPanel() {
|
|
|
4458
4618
|
const lastFocused = useLastFocusedEditable();
|
|
4459
4619
|
const root = document2.root;
|
|
4460
4620
|
if (!root || root.type !== "EmailLayout") {
|
|
4461
|
-
return /* @__PURE__ */
|
|
4621
|
+
return /* @__PURE__ */ React65.createElement(Box, { p: 2 }, /* @__PURE__ */ React65.createElement(Alert, { severity: "info" }, t("variables.open-template", "Open a template to manage variables.")));
|
|
4462
4622
|
}
|
|
4463
4623
|
const data = root.data;
|
|
4464
4624
|
const variables = ((_a = data.variables) != null ? _a : []).map((v) => {
|
|
@@ -4553,10 +4713,10 @@ function VariablesPanel() {
|
|
|
4553
4713
|
} catch (e) {
|
|
4554
4714
|
}
|
|
4555
4715
|
});
|
|
4556
|
-
return /* @__PURE__ */
|
|
4716
|
+
return /* @__PURE__ */ React65.createElement(Box, { p: 2 }, /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { mb: 1 } }, /* @__PURE__ */ React65.createElement(Typography, { variant: "subtitle1", sx: { fontWeight: 600 } }, t("variables.title", "Variables")), /* @__PURE__ */ React65.createElement(Tooltip, { title: t("variables.add", "Add variable") }, /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: add, "aria-label": t("variables.add", "Add variable") }, /* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" })))), /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mb: 2 } }, t(
|
|
4557
4717
|
"variables.intro",
|
|
4558
4718
|
"Declared variables travel with the template. Reference them in subject and body as {{name}}. In Preview mode, tokens render with the sample values below."
|
|
4559
|
-
)), undeclared.length > 0 && /* @__PURE__ */
|
|
4719
|
+
)), undeclared.length > 0 && /* @__PURE__ */ React65.createElement(Alert, { severity: "warning", sx: { mb: 2 } }, /* @__PURE__ */ React65.createElement(AlertTitle, { sx: { fontSize: 13 } }, t("variables.undeclared", "Undeclared in body")), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, useFlexGap: true, flexWrap: "wrap" }, undeclared.map((name) => /* @__PURE__ */ React65.createElement(
|
|
4560
4720
|
Chip,
|
|
4561
4721
|
{
|
|
4562
4722
|
key: name,
|
|
@@ -4564,12 +4724,12 @@ function VariablesPanel() {
|
|
|
4564
4724
|
label: name,
|
|
4565
4725
|
onClick: () => addFromToken(name),
|
|
4566
4726
|
onDelete: () => addFromToken(name),
|
|
4567
|
-
deleteIcon: /* @__PURE__ */
|
|
4727
|
+
deleteIcon: /* @__PURE__ */ React65.createElement(AddOutlined, null),
|
|
4568
4728
|
sx: { fontFamily: "monospace" }
|
|
4569
4729
|
}
|
|
4570
|
-
))), /* @__PURE__ */
|
|
4730
|
+
))), /* @__PURE__ */ React65.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__ */ React65.createElement(Typography, { variant: "body2", sx: { color: "text.secondary" } }, t("variables.none", "No variables declared. Click + to add one.")) : /* @__PURE__ */ React65.createElement(Stack, { spacing: 2 }, variables.map((v, i) => {
|
|
4571
4731
|
var _a2;
|
|
4572
|
-
return /* @__PURE__ */
|
|
4732
|
+
return /* @__PURE__ */ React65.createElement(
|
|
4573
4733
|
VariableRow,
|
|
4574
4734
|
{
|
|
4575
4735
|
key: i,
|
|
@@ -4620,7 +4780,7 @@ function VariableRow({
|
|
|
4620
4780
|
onCommitRename(draftName.trim());
|
|
4621
4781
|
}
|
|
4622
4782
|
};
|
|
4623
|
-
return /* @__PURE__ */
|
|
4783
|
+
return /* @__PURE__ */ React65.createElement(Stack, { spacing: 0.75, sx: { pb: 1, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 1, alignItems: "flex-start" }, /* @__PURE__ */ React65.createElement(
|
|
4624
4784
|
TextField,
|
|
4625
4785
|
{
|
|
4626
4786
|
label: t("rename.name-label", "Name"),
|
|
@@ -4645,7 +4805,7 @@ function VariableRow({
|
|
|
4645
4805
|
error: Boolean(nameError),
|
|
4646
4806
|
helperText: nameError != null ? nameError : " "
|
|
4647
4807
|
}
|
|
4648
|
-
), /* @__PURE__ */
|
|
4808
|
+
), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.25, sx: { mt: 0.5 } }, /* @__PURE__ */ React65.createElement(Tooltip, { title: t("variables.copy-token", "Copy {{name}} token") }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
4649
4809
|
IconButton,
|
|
4650
4810
|
{
|
|
4651
4811
|
size: "small",
|
|
@@ -4653,8 +4813,8 @@ function VariableRow({
|
|
|
4653
4813
|
disabled: !hasName,
|
|
4654
4814
|
"aria-label": t("variables.copy-token", "Copy {{name}} token")
|
|
4655
4815
|
},
|
|
4656
|
-
/* @__PURE__ */
|
|
4657
|
-
))), /* @__PURE__ */
|
|
4816
|
+
/* @__PURE__ */ React65.createElement(ContentCopyOutlined, { fontSize: "small" })
|
|
4817
|
+
))), /* @__PURE__ */ React65.createElement(Tooltip, { title: canInsert ? t("variables.insert-at-cursor", "Insert at cursor") : t("variables.focus-first", "Focus a text field first") }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
4658
4818
|
IconButton,
|
|
4659
4819
|
{
|
|
4660
4820
|
size: "small",
|
|
@@ -4662,16 +4822,16 @@ function VariableRow({
|
|
|
4662
4822
|
disabled: !hasName || !canInsert,
|
|
4663
4823
|
"aria-label": t("variables.insert-at-cursor", "Insert at cursor")
|
|
4664
4824
|
},
|
|
4665
|
-
/* @__PURE__ */
|
|
4666
|
-
))), /* @__PURE__ */
|
|
4825
|
+
/* @__PURE__ */ React65.createElement(InputOutlined, { fontSize: "small" })
|
|
4826
|
+
))), /* @__PURE__ */ React65.createElement(Tooltip, { title: t("variables.remove", "Remove") }, /* @__PURE__ */ React65.createElement(
|
|
4667
4827
|
IconButton,
|
|
4668
4828
|
{
|
|
4669
4829
|
size: "small",
|
|
4670
4830
|
onClick: onRemove,
|
|
4671
4831
|
"aria-label": t("variables.remove", "Remove")
|
|
4672
4832
|
},
|
|
4673
|
-
/* @__PURE__ */
|
|
4674
|
-
)))), /* @__PURE__ */
|
|
4833
|
+
/* @__PURE__ */ React65.createElement(DeleteOutline, { fontSize: "small" })
|
|
4834
|
+
)))), /* @__PURE__ */ React65.createElement(
|
|
4675
4835
|
TextField,
|
|
4676
4836
|
{
|
|
4677
4837
|
label: t("variables.description", "Description"),
|
|
@@ -4681,7 +4841,7 @@ function VariableRow({
|
|
|
4681
4841
|
onChange: (e) => onChangeDescription(e.target.value),
|
|
4682
4842
|
placeholder: t("variables.optional", "Optional")
|
|
4683
4843
|
}
|
|
4684
|
-
), /* @__PURE__ */
|
|
4844
|
+
), /* @__PURE__ */ React65.createElement(
|
|
4685
4845
|
TextField,
|
|
4686
4846
|
{
|
|
4687
4847
|
label: t("variables.sample-value", "Sample value"),
|
|
@@ -4691,7 +4851,7 @@ function VariableRow({
|
|
|
4691
4851
|
onChange: (e) => onChangeSampleValue(e.target.value),
|
|
4692
4852
|
placeholder: t("variables.sample-hint", "Shown in Preview mode"),
|
|
4693
4853
|
InputProps: {
|
|
4694
|
-
startAdornment: /* @__PURE__ */
|
|
4854
|
+
startAdornment: /* @__PURE__ */ React65.createElement(
|
|
4695
4855
|
DataObjectOutlined,
|
|
4696
4856
|
{
|
|
4697
4857
|
fontSize: "small",
|
|
@@ -4700,7 +4860,7 @@ function VariableRow({
|
|
|
4700
4860
|
)
|
|
4701
4861
|
}
|
|
4702
4862
|
}
|
|
4703
|
-
), /* @__PURE__ */
|
|
4863
|
+
), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, sx: { pt: 0.25 } }, hasName && (unused ? /* @__PURE__ */ React65.createElement(Chip, { size: "small", color: "warning", variant: "outlined", label: t("variables.unused", "Unused in body") }) : /* @__PURE__ */ React65.createElement(
|
|
4704
4864
|
Chip,
|
|
4705
4865
|
{
|
|
4706
4866
|
size: "small",
|
|
@@ -4725,13 +4885,13 @@ function InspectorDrawer({
|
|
|
4725
4885
|
const renderCurrentSidebarPanel = () => {
|
|
4726
4886
|
switch (selectedSidebarTab) {
|
|
4727
4887
|
case "block-configuration":
|
|
4728
|
-
return /* @__PURE__ */
|
|
4888
|
+
return /* @__PURE__ */ React65.createElement(ConfigurationPanel, null);
|
|
4729
4889
|
case "styles":
|
|
4730
|
-
return /* @__PURE__ */
|
|
4890
|
+
return /* @__PURE__ */ React65.createElement(StylesPanel, null);
|
|
4731
4891
|
case "variables":
|
|
4732
|
-
return /* @__PURE__ */
|
|
4892
|
+
return /* @__PURE__ */ React65.createElement(VariablesPanel, null);
|
|
4733
4893
|
case "template-settings":
|
|
4734
|
-
return /* @__PURE__ */
|
|
4894
|
+
return /* @__PURE__ */ React65.createElement(
|
|
4735
4895
|
TemplatePanel,
|
|
4736
4896
|
{
|
|
4737
4897
|
deleteTemplate,
|
|
@@ -4741,7 +4901,7 @@ function InspectorDrawer({
|
|
|
4741
4901
|
);
|
|
4742
4902
|
}
|
|
4743
4903
|
};
|
|
4744
|
-
return /* @__PURE__ */
|
|
4904
|
+
return /* @__PURE__ */ React65.createElement(
|
|
4745
4905
|
Drawer,
|
|
4746
4906
|
{
|
|
4747
4907
|
variant: "persistent",
|
|
@@ -4763,7 +4923,7 @@ function InspectorDrawer({
|
|
|
4763
4923
|
width: inspectorDrawerOpen ? INSPECTOR_DRAWER_WIDTH : 0
|
|
4764
4924
|
}
|
|
4765
4925
|
},
|
|
4766
|
-
/* @__PURE__ */
|
|
4926
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: 49, borderBottom: 1, borderColor: "divider" } }, /* @__PURE__ */ React65.createElement(Box, { px: 1 }, /* @__PURE__ */ React65.createElement(
|
|
4767
4927
|
Tabs,
|
|
4768
4928
|
{
|
|
4769
4929
|
value: selectedSidebarTab,
|
|
@@ -4771,12 +4931,12 @@ function InspectorDrawer({
|
|
|
4771
4931
|
variant: "fullWidth",
|
|
4772
4932
|
sx: { "& .MuiTab-root": { minWidth: 0, px: 1, fontSize: 13 } }
|
|
4773
4933
|
},
|
|
4774
|
-
/* @__PURE__ */
|
|
4775
|
-
/* @__PURE__ */
|
|
4776
|
-
/* @__PURE__ */
|
|
4777
|
-
/* @__PURE__ */
|
|
4934
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "styles", label: t("inspector.tab.styles", "Styles") }),
|
|
4935
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "block-configuration", label: t("inspector.tab.inspect", "Inspect") }),
|
|
4936
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "variables", label: t("inspector.tab.variables", "Variables") }),
|
|
4937
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "template-settings", label: t("inspector.tab.settings", "Settings") })
|
|
4778
4938
|
))),
|
|
4779
|
-
/* @__PURE__ */
|
|
4939
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { width: INSPECTOR_DRAWER_WIDTH, height: "calc(100% - 49px)", overflow: "auto" } }, renderCurrentSidebarPanel())
|
|
4780
4940
|
);
|
|
4781
4941
|
}
|
|
4782
4942
|
var SnackbarContext = createContext(null);
|
|
@@ -4797,7 +4957,7 @@ function SnackbarProvider({ children }) {
|
|
|
4797
4957
|
const handleClose = () => {
|
|
4798
4958
|
setMessage(null);
|
|
4799
4959
|
};
|
|
4800
|
-
return /* @__PURE__ */
|
|
4960
|
+
return /* @__PURE__ */ React65.createElement(SnackbarContext.Provider, { value: { showMessage } }, children, /* @__PURE__ */ React65.createElement(
|
|
4801
4961
|
Snackbar,
|
|
4802
4962
|
{
|
|
4803
4963
|
anchorOrigin: { vertical: "top", horizontal: "center" },
|
|
@@ -4874,7 +5034,7 @@ function TemplateRow({
|
|
|
4874
5034
|
const hasActions = Boolean(
|
|
4875
5035
|
onDuplicate || onRename || onDelete || onPromote || onDemote || onDuplicateAsTemplate
|
|
4876
5036
|
);
|
|
4877
|
-
return /* @__PURE__ */
|
|
5037
|
+
return /* @__PURE__ */ React65.createElement(
|
|
4878
5038
|
Box,
|
|
4879
5039
|
{
|
|
4880
5040
|
role: "button",
|
|
@@ -4900,7 +5060,7 @@ function TemplateRow({
|
|
|
4900
5060
|
"&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
|
|
4901
5061
|
}
|
|
4902
5062
|
},
|
|
4903
|
-
/* @__PURE__ */
|
|
5063
|
+
/* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "flex-start", spacing: 1 }, /* @__PURE__ */ React65.createElement(Box, { sx: { flexGrow: 1, minWidth: 0, pr: hasActions ? 3 : 0 } }, /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "baseline", spacing: 1, sx: { minWidth: 0 } }, /* @__PURE__ */ React65.createElement(
|
|
4904
5064
|
Typography,
|
|
4905
5065
|
{
|
|
4906
5066
|
variant: "body2",
|
|
@@ -4914,14 +5074,14 @@ function TemplateRow({
|
|
|
4914
5074
|
title: template.slug
|
|
4915
5075
|
},
|
|
4916
5076
|
template.slug
|
|
4917
|
-
), updated && !hasActions && /* @__PURE__ */
|
|
5077
|
+
), updated && !hasActions && /* @__PURE__ */ React65.createElement(
|
|
4918
5078
|
Typography,
|
|
4919
5079
|
{
|
|
4920
5080
|
variant: "caption",
|
|
4921
5081
|
sx: { color: "text.secondary", flexShrink: 0, fontSize: "0.7rem" }
|
|
4922
5082
|
},
|
|
4923
5083
|
updated
|
|
4924
|
-
)), template.description && /* @__PURE__ */
|
|
5084
|
+
)), template.description && /* @__PURE__ */ React65.createElement(
|
|
4925
5085
|
Typography,
|
|
4926
5086
|
{
|
|
4927
5087
|
variant: "caption",
|
|
@@ -4935,7 +5095,7 @@ function TemplateRow({
|
|
|
4935
5095
|
}
|
|
4936
5096
|
},
|
|
4937
5097
|
template.description
|
|
4938
|
-
), template.tags && template.tags.length > 0 && /* @__PURE__ */
|
|
5098
|
+
), template.tags && template.tags.length > 0 && /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, sx: { mt: 0.5, flexWrap: "wrap", gap: 0.5 } }, template.tags.map((tag) => /* @__PURE__ */ React65.createElement(
|
|
4939
5099
|
Chip,
|
|
4940
5100
|
{
|
|
4941
5101
|
key: tag,
|
|
@@ -4944,7 +5104,7 @@ function TemplateRow({
|
|
|
4944
5104
|
sx: { height: 18, fontSize: "0.65rem", "& .MuiChip-label": { px: 0.75 } }
|
|
4945
5105
|
}
|
|
4946
5106
|
))))),
|
|
4947
|
-
hasActions && /* @__PURE__ */
|
|
5107
|
+
hasActions && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(Tooltip, { title: t("row.more", "More") }, /* @__PURE__ */ React65.createElement(
|
|
4948
5108
|
IconButton,
|
|
4949
5109
|
{
|
|
4950
5110
|
size: "small",
|
|
@@ -4960,8 +5120,8 @@ function TemplateRow({
|
|
|
4960
5120
|
transition: "opacity 120ms"
|
|
4961
5121
|
}
|
|
4962
5122
|
},
|
|
4963
|
-
/* @__PURE__ */
|
|
4964
|
-
)), /* @__PURE__ */
|
|
5123
|
+
/* @__PURE__ */ React65.createElement(MoreVertOutlined, { fontSize: "small" })
|
|
5124
|
+
)), /* @__PURE__ */ React65.createElement(
|
|
4965
5125
|
Menu,
|
|
4966
5126
|
{
|
|
4967
5127
|
anchorEl: menuAnchor,
|
|
@@ -4972,14 +5132,14 @@ function TemplateRow({
|
|
|
4972
5132
|
transformOrigin: { vertical: "top", horizontal: "right" },
|
|
4973
5133
|
slotProps: { paper: { sx: { minWidth: 200 } } }
|
|
4974
5134
|
},
|
|
4975
|
-
onRename && /* @__PURE__ */
|
|
4976
|
-
onDuplicate && /* @__PURE__ */
|
|
4977
|
-
onDuplicateAsTemplate && /* @__PURE__ */
|
|
4978
|
-
onPromote && /* @__PURE__ */
|
|
4979
|
-
onDemote && /* @__PURE__ */
|
|
5135
|
+
onRename && /* @__PURE__ */ React65.createElement(MenuItem, { onClick: runAction(onRename) }, /* @__PURE__ */ React65.createElement(ListItemIcon, null, /* @__PURE__ */ React65.createElement(DriveFileRenameOutlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("row.edit-details", "Edit name & tags\u2026"))),
|
|
5136
|
+
onDuplicate && /* @__PURE__ */ React65.createElement(MenuItem, { onClick: runAction(onDuplicate) }, /* @__PURE__ */ React65.createElement(ListItemIcon, null, /* @__PURE__ */ React65.createElement(ContentCopyOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("row.duplicate", "Duplicate"))),
|
|
5137
|
+
onDuplicateAsTemplate && /* @__PURE__ */ React65.createElement(MenuItem, { onClick: runAction(onDuplicateAsTemplate) }, /* @__PURE__ */ React65.createElement(ListItemIcon, null, /* @__PURE__ */ React65.createElement(LibraryAddOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("row.duplicate-as-template", "Duplicate as template"))),
|
|
5138
|
+
onPromote && /* @__PURE__ */ React65.createElement(MenuItem, { onClick: runAction(onPromote) }, /* @__PURE__ */ React65.createElement(ListItemIcon, null, /* @__PURE__ */ React65.createElement(FileUploadOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("row.promote", "Promote to sample"))),
|
|
5139
|
+
onDemote && /* @__PURE__ */ React65.createElement(MenuItem, { onClick: runAction(onDemote) }, /* @__PURE__ */ React65.createElement(ListItemIcon, null, /* @__PURE__ */ React65.createElement(FileDownloadOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("row.demote", "Demote to template"))),
|
|
4980
5140
|
onDelete && [
|
|
4981
|
-
/* @__PURE__ */
|
|
4982
|
-
/* @__PURE__ */
|
|
5141
|
+
/* @__PURE__ */ React65.createElement(Divider$1, { key: "divider" }),
|
|
5142
|
+
/* @__PURE__ */ React65.createElement(MenuItem, { key: "delete", onClick: runAction(onDelete), sx: { color: "error.main" } }, /* @__PURE__ */ React65.createElement(ListItemIcon, { sx: { color: "error.main" } }, /* @__PURE__ */ React65.createElement(DeleteOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(ListItemText, null, t("tune.delete", "Delete")))
|
|
4983
5143
|
]
|
|
4984
5144
|
))
|
|
4985
5145
|
);
|
|
@@ -5094,31 +5254,31 @@ var PREVIEW_MAX = 36;
|
|
|
5094
5254
|
function iconForType(type) {
|
|
5095
5255
|
switch (type) {
|
|
5096
5256
|
case "EmailLayout":
|
|
5097
|
-
return /* @__PURE__ */
|
|
5257
|
+
return /* @__PURE__ */ React65.createElement(DashboardOutlined, { fontSize: "small" });
|
|
5098
5258
|
case "Heading":
|
|
5099
|
-
return /* @__PURE__ */
|
|
5259
|
+
return /* @__PURE__ */ React65.createElement(HMobiledataOutlined, { fontSize: "small" });
|
|
5100
5260
|
case "Text":
|
|
5101
|
-
return /* @__PURE__ */
|
|
5261
|
+
return /* @__PURE__ */ React65.createElement(NotesOutlined, { fontSize: "small" });
|
|
5102
5262
|
case "Button":
|
|
5103
|
-
return /* @__PURE__ */
|
|
5263
|
+
return /* @__PURE__ */ React65.createElement(SmartButtonOutlined, { fontSize: "small" });
|
|
5104
5264
|
case "Image":
|
|
5105
|
-
return /* @__PURE__ */
|
|
5265
|
+
return /* @__PURE__ */ React65.createElement(ImageOutlined, { fontSize: "small" });
|
|
5106
5266
|
case "Avatar":
|
|
5107
|
-
return /* @__PURE__ */
|
|
5267
|
+
return /* @__PURE__ */ React65.createElement(AccountCircleOutlined, { fontSize: "small" });
|
|
5108
5268
|
case "Signature":
|
|
5109
|
-
return /* @__PURE__ */
|
|
5269
|
+
return /* @__PURE__ */ React65.createElement(ContactMailOutlined, { fontSize: "small" });
|
|
5110
5270
|
case "Divider":
|
|
5111
|
-
return /* @__PURE__ */
|
|
5271
|
+
return /* @__PURE__ */ React65.createElement(HorizontalRuleOutlined, { fontSize: "small" });
|
|
5112
5272
|
case "Spacer":
|
|
5113
|
-
return /* @__PURE__ */
|
|
5273
|
+
return /* @__PURE__ */ React65.createElement(Crop32Outlined, { fontSize: "small" });
|
|
5114
5274
|
case "Html":
|
|
5115
|
-
return /* @__PURE__ */
|
|
5275
|
+
return /* @__PURE__ */ React65.createElement(HtmlOutlined, { fontSize: "small" });
|
|
5116
5276
|
case "Container":
|
|
5117
|
-
return /* @__PURE__ */
|
|
5277
|
+
return /* @__PURE__ */ React65.createElement(LibraryAddOutlined, { fontSize: "small" });
|
|
5118
5278
|
case "ColumnsContainer":
|
|
5119
|
-
return /* @__PURE__ */
|
|
5279
|
+
return /* @__PURE__ */ React65.createElement(ViewColumnOutlined, { fontSize: "small" });
|
|
5120
5280
|
default:
|
|
5121
|
-
return /* @__PURE__ */
|
|
5281
|
+
return /* @__PURE__ */ React65.createElement(BusinessOutlined, { fontSize: "small" });
|
|
5122
5282
|
}
|
|
5123
5283
|
}
|
|
5124
5284
|
function previewText(text) {
|
|
@@ -5196,7 +5356,7 @@ function buildNode(id, doc, ctx) {
|
|
|
5196
5356
|
id: `${id}::col${colIdx}`,
|
|
5197
5357
|
label: `Column ${colIdx + 1}`,
|
|
5198
5358
|
preview: colChildren.length === 1 ? "1 child" : `${colChildren.length} children`,
|
|
5199
|
-
icon: /* @__PURE__ */
|
|
5359
|
+
icon: /* @__PURE__ */ React65.createElement(ViewColumnSharp, { fontSize: "small", sx: { opacity: 0.6 } }),
|
|
5200
5360
|
children: colChildren,
|
|
5201
5361
|
containerChildrenRef: parentForCol
|
|
5202
5362
|
});
|
|
@@ -5258,7 +5418,7 @@ function OutlinePanel() {
|
|
|
5258
5418
|
setSelectedBlockId(payload.sourceId);
|
|
5259
5419
|
}
|
|
5260
5420
|
};
|
|
5261
|
-
return /* @__PURE__ */
|
|
5421
|
+
return /* @__PURE__ */ React65.createElement(Box, null, /* @__PURE__ */ React65.createElement(Typography, { variant: "subtitle2", component: "h2", sx: { fontWeight: "bold", mb: 0.5, px: 0.5 } }, t("outline.title", "Outline")), /* @__PURE__ */ React65.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__ */ React65.createElement(
|
|
5262
5422
|
OutlineRow,
|
|
5263
5423
|
{
|
|
5264
5424
|
node: tree,
|
|
@@ -5269,7 +5429,7 @@ function OutlinePanel() {
|
|
|
5269
5429
|
setDragging,
|
|
5270
5430
|
performMove
|
|
5271
5431
|
}
|
|
5272
|
-
) : /* @__PURE__ */
|
|
5432
|
+
) : /* @__PURE__ */ React65.createElement(Typography, { variant: "body2", sx: { color: "text.secondary", px: 0.5 } }, "Nothing to outline."));
|
|
5273
5433
|
}
|
|
5274
5434
|
function OutlineRow({
|
|
5275
5435
|
node,
|
|
@@ -5355,7 +5515,7 @@ function OutlineRow({
|
|
|
5355
5515
|
const patch = buildMovePatch(document2, node.id, node.parent, node.parent, nextIndex + (delta > 0 ? 1 : 0));
|
|
5356
5516
|
if (patch) setDocument(patch);
|
|
5357
5517
|
};
|
|
5358
|
-
return /* @__PURE__ */
|
|
5518
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(Box, { sx: { position: "relative" } }, dropPos === "before" && /* @__PURE__ */ React65.createElement(DropLine, { depth }), /* @__PURE__ */ React65.createElement(
|
|
5359
5519
|
Stack,
|
|
5360
5520
|
{
|
|
5361
5521
|
direction: "row",
|
|
@@ -5388,7 +5548,7 @@ function OutlineRow({
|
|
|
5388
5548
|
userSelect: "none"
|
|
5389
5549
|
}
|
|
5390
5550
|
},
|
|
5391
|
-
hasChildren ? /* @__PURE__ */
|
|
5551
|
+
hasChildren ? /* @__PURE__ */ React65.createElement(
|
|
5392
5552
|
Box,
|
|
5393
5553
|
{
|
|
5394
5554
|
role: "button",
|
|
@@ -5399,9 +5559,9 @@ function OutlineRow({
|
|
|
5399
5559
|
},
|
|
5400
5560
|
sx: { display: "flex", alignItems: "center", cursor: "pointer" }
|
|
5401
5561
|
},
|
|
5402
|
-
expanded ? /* @__PURE__ */
|
|
5403
|
-
) : /* @__PURE__ */
|
|
5404
|
-
/* @__PURE__ */
|
|
5562
|
+
expanded ? /* @__PURE__ */ React65.createElement(ExpandMore, { fontSize: "small" }) : /* @__PURE__ */ React65.createElement(ChevronRight, { fontSize: "small" })
|
|
5563
|
+
) : /* @__PURE__ */ React65.createElement(Box, { sx: { width: 20 } }),
|
|
5564
|
+
/* @__PURE__ */ React65.createElement(
|
|
5405
5565
|
Box,
|
|
5406
5566
|
{
|
|
5407
5567
|
sx: {
|
|
@@ -5413,7 +5573,7 @@ function OutlineRow({
|
|
|
5413
5573
|
},
|
|
5414
5574
|
node.icon
|
|
5415
5575
|
),
|
|
5416
|
-
/* @__PURE__ */
|
|
5576
|
+
/* @__PURE__ */ React65.createElement(
|
|
5417
5577
|
Typography,
|
|
5418
5578
|
{
|
|
5419
5579
|
variant: "body2",
|
|
@@ -5425,7 +5585,7 @@ function OutlineRow({
|
|
|
5425
5585
|
},
|
|
5426
5586
|
node.label
|
|
5427
5587
|
),
|
|
5428
|
-
node.preview && /* @__PURE__ */
|
|
5588
|
+
node.preview && /* @__PURE__ */ React65.createElement(
|
|
5429
5589
|
Typography,
|
|
5430
5590
|
{
|
|
5431
5591
|
variant: "body2",
|
|
@@ -5441,7 +5601,7 @@ function OutlineRow({
|
|
|
5441
5601
|
"\u2014 ",
|
|
5442
5602
|
node.preview
|
|
5443
5603
|
),
|
|
5444
|
-
canMove && /* @__PURE__ */
|
|
5604
|
+
canMove && /* @__PURE__ */ React65.createElement(
|
|
5445
5605
|
Box,
|
|
5446
5606
|
{
|
|
5447
5607
|
className: "outline-move-btns",
|
|
@@ -5452,7 +5612,7 @@ function OutlineRow({
|
|
|
5452
5612
|
transition: "opacity 120ms"
|
|
5453
5613
|
}
|
|
5454
5614
|
},
|
|
5455
|
-
/* @__PURE__ */
|
|
5615
|
+
/* @__PURE__ */ React65.createElement(Tooltip, { title: "Move up" }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
5456
5616
|
IconButton,
|
|
5457
5617
|
{
|
|
5458
5618
|
size: "small",
|
|
@@ -5464,9 +5624,9 @@ function OutlineRow({
|
|
|
5464
5624
|
"aria-label": `Move ${node.label} up`,
|
|
5465
5625
|
sx: { p: 0.25 }
|
|
5466
5626
|
},
|
|
5467
|
-
/* @__PURE__ */
|
|
5627
|
+
/* @__PURE__ */ React65.createElement(KeyboardArrowUp, { fontSize: "small" })
|
|
5468
5628
|
))),
|
|
5469
|
-
/* @__PURE__ */
|
|
5629
|
+
/* @__PURE__ */ React65.createElement(Tooltip, { title: "Move down" }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
5470
5630
|
IconButton,
|
|
5471
5631
|
{
|
|
5472
5632
|
size: "small",
|
|
@@ -5478,10 +5638,10 @@ function OutlineRow({
|
|
|
5478
5638
|
"aria-label": `Move ${node.label} down`,
|
|
5479
5639
|
sx: { p: 0.25 }
|
|
5480
5640
|
},
|
|
5481
|
-
/* @__PURE__ */
|
|
5641
|
+
/* @__PURE__ */ React65.createElement(KeyboardArrowDown, { fontSize: "small" })
|
|
5482
5642
|
)))
|
|
5483
5643
|
)
|
|
5484
|
-
), dropPos === "after" && /* @__PURE__ */
|
|
5644
|
+
), dropPos === "after" && /* @__PURE__ */ React65.createElement(DropLine, { depth })), hasChildren && expanded && /* @__PURE__ */ React65.createElement(Box, null, node.children.map((child) => /* @__PURE__ */ React65.createElement(
|
|
5485
5645
|
OutlineRow,
|
|
5486
5646
|
{
|
|
5487
5647
|
key: child.id,
|
|
@@ -5496,7 +5656,7 @@ function OutlineRow({
|
|
|
5496
5656
|
))));
|
|
5497
5657
|
}
|
|
5498
5658
|
function DropLine({ depth }) {
|
|
5499
|
-
return /* @__PURE__ */
|
|
5659
|
+
return /* @__PURE__ */ React65.createElement(
|
|
5500
5660
|
Box,
|
|
5501
5661
|
{
|
|
5502
5662
|
sx: {
|
|
@@ -5504,7 +5664,7 @@ function DropLine({ depth }) {
|
|
|
5504
5664
|
height: 0
|
|
5505
5665
|
}
|
|
5506
5666
|
},
|
|
5507
|
-
/* @__PURE__ */
|
|
5667
|
+
/* @__PURE__ */ React65.createElement(
|
|
5508
5668
|
Box,
|
|
5509
5669
|
{
|
|
5510
5670
|
sx: {
|
|
@@ -5565,7 +5725,7 @@ function NewTemplatePickerDialog({
|
|
|
5565
5725
|
}
|
|
5566
5726
|
});
|
|
5567
5727
|
const pickable = samples.filter((s) => s.id !== "empty-email");
|
|
5568
|
-
return /* @__PURE__ */
|
|
5728
|
+
return /* @__PURE__ */ React65.createElement(Dialog, { open, onClose: busy ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React65.createElement(DialogTitle, null, kind === "sample" ? t("picker.title-sample", "New sample") : t("picker.title-template", "New template")), /* @__PURE__ */ React65.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React65.createElement(Typography, { variant: "subtitle2", sx: { mb: 1 } }, t("picker.start-from", "Start from")), /* @__PURE__ */ React65.createElement(
|
|
5569
5729
|
List,
|
|
5570
5730
|
{
|
|
5571
5731
|
dense: true,
|
|
@@ -5579,24 +5739,24 @@ function NewTemplatePickerDialog({
|
|
|
5579
5739
|
overflowY: "auto"
|
|
5580
5740
|
}
|
|
5581
5741
|
},
|
|
5582
|
-
/* @__PURE__ */
|
|
5742
|
+
/* @__PURE__ */ React65.createElement(
|
|
5583
5743
|
ListItemButton,
|
|
5584
5744
|
{
|
|
5585
5745
|
selected: selectedStarter === null,
|
|
5586
5746
|
onClick: () => setSelectedStarter(null)
|
|
5587
5747
|
},
|
|
5588
|
-
/* @__PURE__ */
|
|
5748
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React65.createElement(InsertDriveFileOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React65.createElement(ListItemText, { primary: t("picker.blank-title", "Blank"), secondary: t("picker.blank-desc", "Start from an empty email") }))
|
|
5589
5749
|
),
|
|
5590
|
-
pickable.map((s) => /* @__PURE__ */
|
|
5750
|
+
pickable.map((s) => /* @__PURE__ */ React65.createElement(
|
|
5591
5751
|
ListItemButton,
|
|
5592
5752
|
{
|
|
5593
5753
|
key: s.id,
|
|
5594
5754
|
selected: selectedStarter === s.id,
|
|
5595
5755
|
onClick: () => setSelectedStarter(s.id)
|
|
5596
5756
|
},
|
|
5597
|
-
/* @__PURE__ */
|
|
5757
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1.5, flex: 1 } }, /* @__PURE__ */ React65.createElement(DescriptionOutlined, { fontSize: "small", sx: { color: "text.secondary" } }), /* @__PURE__ */ React65.createElement(ListItemText, { primary: s.slug, secondary: s.description }))
|
|
5598
5758
|
))
|
|
5599
|
-
), /* @__PURE__ */
|
|
5759
|
+
), /* @__PURE__ */ React65.createElement(
|
|
5600
5760
|
TextField,
|
|
5601
5761
|
{
|
|
5602
5762
|
autoFocus: true,
|
|
@@ -5616,7 +5776,7 @@ function NewTemplatePickerDialog({
|
|
|
5616
5776
|
helperText: error != null ? error : " ",
|
|
5617
5777
|
disabled: busy
|
|
5618
5778
|
}
|
|
5619
|
-
)), /* @__PURE__ */
|
|
5779
|
+
)), /* @__PURE__ */ React65.createElement(DialogActions, null, /* @__PURE__ */ React65.createElement(Button$1, { onClick: onClose, disabled: busy }, t("common.cancel", "Cancel")), /* @__PURE__ */ React65.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"))));
|
|
5620
5780
|
}
|
|
5621
5781
|
function RenameDialog({
|
|
5622
5782
|
open,
|
|
@@ -5678,7 +5838,7 @@ function RenameDialog({
|
|
|
5678
5838
|
setSubmitting(false);
|
|
5679
5839
|
}
|
|
5680
5840
|
});
|
|
5681
|
-
return /* @__PURE__ */
|
|
5841
|
+
return /* @__PURE__ */ React65.createElement(Dialog, { open, onClose: submitting ? void 0 : onClose, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ React65.createElement(DialogTitle, null, t("rename.title", "Edit details")), /* @__PURE__ */ React65.createElement(DialogContent, null, /* @__PURE__ */ React65.createElement(
|
|
5682
5842
|
TextField,
|
|
5683
5843
|
{
|
|
5684
5844
|
autoFocus: true,
|
|
@@ -5698,7 +5858,7 @@ function RenameDialog({
|
|
|
5698
5858
|
if (e.key === "Enter" && !submitting) handleSubmit();
|
|
5699
5859
|
}
|
|
5700
5860
|
}
|
|
5701
|
-
), /* @__PURE__ */
|
|
5861
|
+
), /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.secondary", display: "block", mt: 1, mb: 0.5 } }, t("rename.tags", "Tags")), tags.length > 0 ? /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, sx: { flexWrap: "wrap", gap: 0.5, mb: 1 } }, tags.map((tag) => /* @__PURE__ */ React65.createElement(
|
|
5702
5862
|
Chip,
|
|
5703
5863
|
{
|
|
5704
5864
|
key: tag,
|
|
@@ -5706,7 +5866,7 @@ function RenameDialog({
|
|
|
5706
5866
|
size: "small",
|
|
5707
5867
|
onDelete: submitting ? void 0 : () => removeTag(tag)
|
|
5708
5868
|
}
|
|
5709
|
-
))) : /* @__PURE__ */
|
|
5869
|
+
))) : /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { color: "text.disabled", display: "block", mb: 1 } }, t("rename.no-tags", "No tags yet.")), /* @__PURE__ */ React65.createElement(
|
|
5710
5870
|
TextField,
|
|
5711
5871
|
{
|
|
5712
5872
|
size: "small",
|
|
@@ -5725,20 +5885,20 @@ function RenameDialog({
|
|
|
5725
5885
|
}
|
|
5726
5886
|
},
|
|
5727
5887
|
InputProps: {
|
|
5728
|
-
endAdornment: /* @__PURE__ */
|
|
5888
|
+
endAdornment: /* @__PURE__ */ React65.createElement(InputAdornment, { position: "end" }, /* @__PURE__ */ React65.createElement(
|
|
5729
5889
|
Button$1,
|
|
5730
5890
|
{
|
|
5731
5891
|
size: "small",
|
|
5732
5892
|
onClick: addTag,
|
|
5733
5893
|
disabled: !tagInput.trim() || submitting,
|
|
5734
|
-
startIcon: /* @__PURE__ */
|
|
5894
|
+
startIcon: /* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" }),
|
|
5735
5895
|
sx: { textTransform: "none" }
|
|
5736
5896
|
},
|
|
5737
5897
|
t("common.add", "Add")
|
|
5738
5898
|
))
|
|
5739
5899
|
}
|
|
5740
5900
|
}
|
|
5741
|
-
), /* @__PURE__ */
|
|
5901
|
+
), /* @__PURE__ */ React65.createElement(Box, { sx: { minHeight: 8 } })), /* @__PURE__ */ React65.createElement(DialogActions, null, /* @__PURE__ */ React65.createElement(Button$1, { onClick: onClose, disabled: submitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React65.createElement(
|
|
5742
5902
|
Button$1,
|
|
5743
5903
|
{
|
|
5744
5904
|
onClick: handleSubmit,
|
|
@@ -5808,7 +5968,7 @@ function SaveTemplateDialog({
|
|
|
5808
5968
|
setInternalError("");
|
|
5809
5969
|
onClose();
|
|
5810
5970
|
};
|
|
5811
|
-
return /* @__PURE__ */
|
|
5971
|
+
return /* @__PURE__ */ React65.createElement(
|
|
5812
5972
|
Dialog,
|
|
5813
5973
|
{
|
|
5814
5974
|
open,
|
|
@@ -5816,8 +5976,8 @@ function SaveTemplateDialog({
|
|
|
5816
5976
|
maxWidth: "sm",
|
|
5817
5977
|
fullWidth: true
|
|
5818
5978
|
},
|
|
5819
|
-
/* @__PURE__ */
|
|
5820
|
-
/* @__PURE__ */
|
|
5979
|
+
/* @__PURE__ */ React65.createElement(DialogTitle, null, mode === "new" ? t("save-dialog.title-new", "Create a new template") : t("save-dialog.title", "Save as a new template")),
|
|
5980
|
+
/* @__PURE__ */ React65.createElement(DialogContent, null, /* @__PURE__ */ React65.createElement(Box, { sx: { pt: 1 } }, /* @__PURE__ */ React65.createElement(
|
|
5821
5981
|
TextField,
|
|
5822
5982
|
{
|
|
5823
5983
|
autoFocus: true,
|
|
@@ -5840,7 +6000,7 @@ function SaveTemplateDialog({
|
|
|
5840
6000
|
disabled: isSubmitting
|
|
5841
6001
|
}
|
|
5842
6002
|
))),
|
|
5843
|
-
/* @__PURE__ */
|
|
6003
|
+
/* @__PURE__ */ React65.createElement(DialogActions, null, /* @__PURE__ */ React65.createElement(Button$1, { onClick: handleCancel, disabled: isSubmitting }, t("common.cancel", "Cancel")), /* @__PURE__ */ React65.createElement(
|
|
5844
6004
|
Button$1,
|
|
5845
6005
|
{
|
|
5846
6006
|
onClick: handleSave,
|
|
@@ -6161,7 +6321,7 @@ function SamplesDrawer({
|
|
|
6161
6321
|
return null;
|
|
6162
6322
|
}
|
|
6163
6323
|
const existingSlugs = templates.map((t2) => t2.slug);
|
|
6164
|
-
return /* @__PURE__ */
|
|
6324
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
6165
6325
|
Drawer,
|
|
6166
6326
|
{
|
|
6167
6327
|
variant: "persistent",
|
|
@@ -6176,7 +6336,7 @@ function SamplesDrawer({
|
|
|
6176
6336
|
transitionDuration: { enter: enterDuration, exit: exitDuration },
|
|
6177
6337
|
sx: { width: samplesDrawerOpen ? SAMPLES_DRAWER_WIDTH : 0 }
|
|
6178
6338
|
},
|
|
6179
|
-
/* @__PURE__ */
|
|
6339
|
+
/* @__PURE__ */ React65.createElement(
|
|
6180
6340
|
Stack,
|
|
6181
6341
|
{
|
|
6182
6342
|
py: 1,
|
|
@@ -6186,16 +6346,16 @@ function SamplesDrawer({
|
|
|
6186
6346
|
spacing: 1.5,
|
|
6187
6347
|
sx: { overflowY: "auto" }
|
|
6188
6348
|
},
|
|
6189
|
-
/* @__PURE__ */
|
|
6349
|
+
/* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", sx: { pt: 1 } }, /* @__PURE__ */ React65.createElement(Typography, { variant: "h6", component: "h1" }, /* @__PURE__ */ React65.createElement(Trans, { id: "drawer.library" }, "Library")), saveAs && (activeLeftTab === "templates" || activeLeftTab === "samples") && /* @__PURE__ */ React65.createElement(Tooltip, { title: activeLeftTab === "samples" ? t("drawer.new-sample", "New sample") : t("drawer.new-template", "New template") }, /* @__PURE__ */ React65.createElement(
|
|
6190
6350
|
IconButton,
|
|
6191
6351
|
{
|
|
6192
6352
|
size: "small",
|
|
6193
6353
|
onClick: () => openNewPicker(activeLeftTab === "samples" ? "sample" : "template"),
|
|
6194
6354
|
"aria-label": activeLeftTab === "samples" ? t("drawer.new-sample", "New sample") : t("drawer.new-template", "New template")
|
|
6195
6355
|
},
|
|
6196
|
-
/* @__PURE__ */
|
|
6356
|
+
/* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" })
|
|
6197
6357
|
))),
|
|
6198
|
-
/* @__PURE__ */
|
|
6358
|
+
/* @__PURE__ */ React65.createElement(
|
|
6199
6359
|
Tabs,
|
|
6200
6360
|
{
|
|
6201
6361
|
value: activeLeftTab,
|
|
@@ -6203,11 +6363,11 @@ function SamplesDrawer({
|
|
|
6203
6363
|
variant: "fullWidth",
|
|
6204
6364
|
sx: { minHeight: 36, "& .MuiTab-root": { minHeight: 36, minWidth: 0, px: 1, fontSize: 13 } }
|
|
6205
6365
|
},
|
|
6206
|
-
/* @__PURE__ */
|
|
6207
|
-
/* @__PURE__ */
|
|
6208
|
-
/* @__PURE__ */
|
|
6366
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "templates", label: t("drawer.tab.templates", "Templates"), disabled: !loadTemplates }),
|
|
6367
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "samples", label: t("drawer.tab.samples", "Samples") }),
|
|
6368
|
+
/* @__PURE__ */ React65.createElement(Tab, { value: "outline", label: t("drawer.tab.outline", "Outline") })
|
|
6209
6369
|
),
|
|
6210
|
-
activeLeftTab === "outline" ? /* @__PURE__ */
|
|
6370
|
+
activeLeftTab === "outline" ? /* @__PURE__ */ React65.createElement(OutlinePanel, null) : /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
6211
6371
|
TextField,
|
|
6212
6372
|
{
|
|
6213
6373
|
size: "small",
|
|
@@ -6215,10 +6375,10 @@ function SamplesDrawer({
|
|
|
6215
6375
|
value: search,
|
|
6216
6376
|
onChange: (e) => setSearch(e.target.value),
|
|
6217
6377
|
InputProps: {
|
|
6218
|
-
startAdornment: /* @__PURE__ */
|
|
6378
|
+
startAdornment: /* @__PURE__ */ React65.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React65.createElement(SearchOutlined, { fontSize: "small" }))
|
|
6219
6379
|
}
|
|
6220
6380
|
}
|
|
6221
|
-
), /* @__PURE__ */
|
|
6381
|
+
), /* @__PURE__ */ React65.createElement(
|
|
6222
6382
|
TextField,
|
|
6223
6383
|
{
|
|
6224
6384
|
select: true,
|
|
@@ -6227,8 +6387,8 @@ function SamplesDrawer({
|
|
|
6227
6387
|
value: sortKey,
|
|
6228
6388
|
onChange: (e) => setSortKey(e.target.value)
|
|
6229
6389
|
},
|
|
6230
|
-
SORT_OPTIONS.map((opt) => /* @__PURE__ */
|
|
6231
|
-
), allTags.length > 0 && /* @__PURE__ */
|
|
6390
|
+
SORT_OPTIONS.map((opt) => /* @__PURE__ */ React65.createElement(MenuItem, { key: opt.value, value: opt.value }, t(opt.labelKey, opt.fallback)))
|
|
6391
|
+
), allTags.length > 0 && /* @__PURE__ */ React65.createElement(Stack, { direction: "row", sx: { flexWrap: "wrap", gap: 0.5 } }, /* @__PURE__ */ React65.createElement(
|
|
6232
6392
|
Chip,
|
|
6233
6393
|
{
|
|
6234
6394
|
label: t("drawer.tag.all", "All"),
|
|
@@ -6238,7 +6398,7 @@ function SamplesDrawer({
|
|
|
6238
6398
|
variant: activeTags.length === 0 ? "filled" : "outlined",
|
|
6239
6399
|
onClick: () => setActiveTags([])
|
|
6240
6400
|
}
|
|
6241
|
-
), allTags.map((tag) => /* @__PURE__ */
|
|
6401
|
+
), allTags.map((tag) => /* @__PURE__ */ React65.createElement(
|
|
6242
6402
|
Chip,
|
|
6243
6403
|
{
|
|
6244
6404
|
key: tag,
|
|
@@ -6249,7 +6409,7 @@ function SamplesDrawer({
|
|
|
6249
6409
|
variant: activeTags.includes(tag) ? "filled" : "outlined",
|
|
6250
6410
|
onClick: () => toggleTag(tag)
|
|
6251
6411
|
}
|
|
6252
|
-
))), activeLeftTab === "templates" ? /* @__PURE__ */
|
|
6412
|
+
))), activeLeftTab === "templates" ? /* @__PURE__ */ React65.createElement(Box, null, loadingTemplates ? /* @__PURE__ */ React65.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React65.createElement(CircularProgress, { size: 24 })) : templatesError ? /* @__PURE__ */ React65.createElement(Alert, { severity: "error", sx: { my: 1 } }, templatesError) : filteredTemplates.length > 0 ? /* @__PURE__ */ React65.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredTemplates.map((template) => /* @__PURE__ */ React65.createElement(
|
|
6253
6413
|
TemplateRow,
|
|
6254
6414
|
{
|
|
6255
6415
|
key: template.id,
|
|
@@ -6261,7 +6421,7 @@ function SamplesDrawer({
|
|
|
6261
6421
|
onDelete: deleteTemplate ? () => handleDelete(template) : void 0,
|
|
6262
6422
|
onPromote: setTemplateKind ? () => handleSetKind(template, "sample") : void 0
|
|
6263
6423
|
}
|
|
6264
|
-
))) : /* @__PURE__ */
|
|
6424
|
+
))) : /* @__PURE__ */ React65.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__ */ React65.createElement(Box, null, loadingSamples ? /* @__PURE__ */ React65.createElement(Stack, { alignItems: "center", width: "100%", py: 2 }, /* @__PURE__ */ React65.createElement(CircularProgress, { size: 24 })) : filteredSamples.length > 0 ? /* @__PURE__ */ React65.createElement(Stack, { spacing: 0.25, sx: { width: "100%" } }, filteredSamples.map((sample) => /* @__PURE__ */ React65.createElement(
|
|
6265
6425
|
TemplateRow,
|
|
6266
6426
|
{
|
|
6267
6427
|
key: sample.id,
|
|
@@ -6273,9 +6433,9 @@ function SamplesDrawer({
|
|
|
6273
6433
|
onDelete: deleteTemplate ? () => handleDelete(sample) : void 0,
|
|
6274
6434
|
onDemote: setTemplateKind ? () => handleSetKind(sample, "template") : void 0
|
|
6275
6435
|
}
|
|
6276
|
-
))) : /* @__PURE__ */
|
|
6436
|
+
))) : /* @__PURE__ */ React65.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"))))
|
|
6277
6437
|
)
|
|
6278
|
-
), renameTarget && /* @__PURE__ */
|
|
6438
|
+
), renameTarget && /* @__PURE__ */ React65.createElement(
|
|
6279
6439
|
RenameDialog,
|
|
6280
6440
|
{
|
|
6281
6441
|
open: !!renameTarget,
|
|
@@ -6285,7 +6445,7 @@ function SamplesDrawer({
|
|
|
6285
6445
|
onClose: () => setRenameTarget(null),
|
|
6286
6446
|
onSubmit: handleRenameSubmit
|
|
6287
6447
|
}
|
|
6288
|
-
), /* @__PURE__ */
|
|
6448
|
+
), /* @__PURE__ */ React65.createElement(
|
|
6289
6449
|
SaveTemplateDialog,
|
|
6290
6450
|
{
|
|
6291
6451
|
open: !!pendingSaveAs,
|
|
@@ -6298,7 +6458,7 @@ function SamplesDrawer({
|
|
|
6298
6458
|
defaultName: (_b = pendingSaveAs == null ? void 0 : pendingSaveAs.defaultName) != null ? _b : "New Template",
|
|
6299
6459
|
error: newError
|
|
6300
6460
|
}
|
|
6301
|
-
), /* @__PURE__ */
|
|
6461
|
+
), /* @__PURE__ */ React65.createElement(
|
|
6302
6462
|
NewTemplatePickerDialog,
|
|
6303
6463
|
{
|
|
6304
6464
|
open: pickerKind !== null,
|
|
@@ -6382,7 +6542,7 @@ var ICON_SX = {
|
|
|
6382
6542
|
borderColor: "cadet.300"
|
|
6383
6543
|
};
|
|
6384
6544
|
function BlockTypeButton({ label, icon, onClick }) {
|
|
6385
|
-
return /* @__PURE__ */
|
|
6545
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6386
6546
|
Button$1,
|
|
6387
6547
|
{
|
|
6388
6548
|
sx: BUTTON_SX2,
|
|
@@ -6391,14 +6551,14 @@ function BlockTypeButton({ label, icon, onClick }) {
|
|
|
6391
6551
|
onClick();
|
|
6392
6552
|
}
|
|
6393
6553
|
},
|
|
6394
|
-
/* @__PURE__ */
|
|
6395
|
-
/* @__PURE__ */
|
|
6554
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: ICON_SX }, icon),
|
|
6555
|
+
/* @__PURE__ */ React65.createElement(Typography, { variant: "body2" }, label)
|
|
6396
6556
|
);
|
|
6397
6557
|
}
|
|
6398
6558
|
var BUTTONS = [
|
|
6399
6559
|
{
|
|
6400
6560
|
label: "Heading",
|
|
6401
|
-
icon: /* @__PURE__ */
|
|
6561
|
+
icon: /* @__PURE__ */ React65.createElement(HMobiledataOutlined, null),
|
|
6402
6562
|
block: () => ({
|
|
6403
6563
|
type: "Heading",
|
|
6404
6564
|
data: {
|
|
@@ -6411,7 +6571,7 @@ var BUTTONS = [
|
|
|
6411
6571
|
},
|
|
6412
6572
|
{
|
|
6413
6573
|
label: "Text",
|
|
6414
|
-
icon: /* @__PURE__ */
|
|
6574
|
+
icon: /* @__PURE__ */ React65.createElement(NotesOutlined, null),
|
|
6415
6575
|
block: () => ({
|
|
6416
6576
|
type: "Text",
|
|
6417
6577
|
data: {
|
|
@@ -6423,9 +6583,28 @@ var BUTTONS = [
|
|
|
6423
6583
|
}
|
|
6424
6584
|
})
|
|
6425
6585
|
},
|
|
6586
|
+
{
|
|
6587
|
+
label: "OTP / Code",
|
|
6588
|
+
icon: /* @__PURE__ */ React65.createElement(PinOutlined, null),
|
|
6589
|
+
block: () => ({
|
|
6590
|
+
type: "Otp",
|
|
6591
|
+
data: {
|
|
6592
|
+
props: { code: t("default.otp", "123456") },
|
|
6593
|
+
style: {
|
|
6594
|
+
padding: { top: 16, bottom: 16, left: 24, right: 24 },
|
|
6595
|
+
textAlign: "center",
|
|
6596
|
+
letterSpacing: 8,
|
|
6597
|
+
fontSize: 32,
|
|
6598
|
+
fontWeight: "bold",
|
|
6599
|
+
backgroundColor: "#F4F4F4",
|
|
6600
|
+
borderRadius: 8
|
|
6601
|
+
}
|
|
6602
|
+
}
|
|
6603
|
+
})
|
|
6604
|
+
},
|
|
6426
6605
|
{
|
|
6427
6606
|
label: "Button",
|
|
6428
|
-
icon: /* @__PURE__ */
|
|
6607
|
+
icon: /* @__PURE__ */ React65.createElement(SmartButtonOutlined, null),
|
|
6429
6608
|
block: () => ({
|
|
6430
6609
|
type: "Button",
|
|
6431
6610
|
data: {
|
|
@@ -6439,7 +6618,7 @@ var BUTTONS = [
|
|
|
6439
6618
|
},
|
|
6440
6619
|
{
|
|
6441
6620
|
label: "Image",
|
|
6442
|
-
icon: /* @__PURE__ */
|
|
6621
|
+
icon: /* @__PURE__ */ React65.createElement(ImageOutlined, null),
|
|
6443
6622
|
block: () => ({
|
|
6444
6623
|
type: "Image",
|
|
6445
6624
|
data: {
|
|
@@ -6455,7 +6634,7 @@ var BUTTONS = [
|
|
|
6455
6634
|
},
|
|
6456
6635
|
{
|
|
6457
6636
|
label: "Avatar",
|
|
6458
|
-
icon: /* @__PURE__ */
|
|
6637
|
+
icon: /* @__PURE__ */ React65.createElement(AccountCircleOutlined, null),
|
|
6459
6638
|
block: () => ({
|
|
6460
6639
|
type: "Avatar",
|
|
6461
6640
|
data: {
|
|
@@ -6469,7 +6648,7 @@ var BUTTONS = [
|
|
|
6469
6648
|
},
|
|
6470
6649
|
{
|
|
6471
6650
|
label: "Personal Signature",
|
|
6472
|
-
icon: /* @__PURE__ */
|
|
6651
|
+
icon: /* @__PURE__ */ React65.createElement(ContactMailOutlined, null),
|
|
6473
6652
|
block: () => ({
|
|
6474
6653
|
type: "Signature",
|
|
6475
6654
|
data: {
|
|
@@ -6491,7 +6670,7 @@ var BUTTONS = [
|
|
|
6491
6670
|
},
|
|
6492
6671
|
{
|
|
6493
6672
|
label: "Company Signature",
|
|
6494
|
-
icon: /* @__PURE__ */
|
|
6673
|
+
icon: /* @__PURE__ */ React65.createElement(BusinessOutlined, null),
|
|
6495
6674
|
block: () => ({
|
|
6496
6675
|
type: "Signature",
|
|
6497
6676
|
data: {
|
|
@@ -6511,7 +6690,7 @@ var BUTTONS = [
|
|
|
6511
6690
|
},
|
|
6512
6691
|
{
|
|
6513
6692
|
label: "Divider",
|
|
6514
|
-
icon: /* @__PURE__ */
|
|
6693
|
+
icon: /* @__PURE__ */ React65.createElement(HorizontalRuleOutlined, null),
|
|
6515
6694
|
block: () => ({
|
|
6516
6695
|
type: "Divider",
|
|
6517
6696
|
data: {
|
|
@@ -6524,7 +6703,7 @@ var BUTTONS = [
|
|
|
6524
6703
|
},
|
|
6525
6704
|
{
|
|
6526
6705
|
label: "Spacer",
|
|
6527
|
-
icon: /* @__PURE__ */
|
|
6706
|
+
icon: /* @__PURE__ */ React65.createElement(Crop32Outlined, null),
|
|
6528
6707
|
block: () => ({
|
|
6529
6708
|
type: "Spacer",
|
|
6530
6709
|
data: {}
|
|
@@ -6532,7 +6711,7 @@ var BUTTONS = [
|
|
|
6532
6711
|
},
|
|
6533
6712
|
{
|
|
6534
6713
|
label: "Html",
|
|
6535
|
-
icon: /* @__PURE__ */
|
|
6714
|
+
icon: /* @__PURE__ */ React65.createElement(HtmlOutlined, null),
|
|
6536
6715
|
block: () => ({
|
|
6537
6716
|
type: "Html",
|
|
6538
6717
|
data: {
|
|
@@ -6547,7 +6726,7 @@ var BUTTONS = [
|
|
|
6547
6726
|
},
|
|
6548
6727
|
{
|
|
6549
6728
|
label: "Columns",
|
|
6550
|
-
icon: /* @__PURE__ */
|
|
6729
|
+
icon: /* @__PURE__ */ React65.createElement(ViewColumnOutlined, null),
|
|
6551
6730
|
block: () => ({
|
|
6552
6731
|
type: "ColumnsContainer",
|
|
6553
6732
|
data: {
|
|
@@ -6562,7 +6741,7 @@ var BUTTONS = [
|
|
|
6562
6741
|
},
|
|
6563
6742
|
{
|
|
6564
6743
|
label: "Container",
|
|
6565
|
-
icon: /* @__PURE__ */
|
|
6744
|
+
icon: /* @__PURE__ */ React65.createElement(LibraryAddOutlined, null),
|
|
6566
6745
|
block: () => ({
|
|
6567
6746
|
type: "Container",
|
|
6568
6747
|
data: {
|
|
@@ -6617,7 +6796,7 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
|
|
|
6617
6796
|
return null;
|
|
6618
6797
|
}
|
|
6619
6798
|
const hasCustomBlocks = customBlocks && customBlocks.length > 0;
|
|
6620
|
-
return /* @__PURE__ */
|
|
6799
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6621
6800
|
Menu,
|
|
6622
6801
|
{
|
|
6623
6802
|
open: true,
|
|
@@ -6626,7 +6805,7 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
|
|
|
6626
6805
|
anchorOrigin: { vertical: "bottom", horizontal: "center" },
|
|
6627
6806
|
transformOrigin: { vertical: "top", horizontal: "center" }
|
|
6628
6807
|
},
|
|
6629
|
-
/* @__PURE__ */
|
|
6808
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { p: 1, display: "grid", gridTemplateColumns: "1fr 1fr 1fr 1fr" } }, BUTTONS.map((k, i) => /* @__PURE__ */ React65.createElement(
|
|
6630
6809
|
BlockTypeButton,
|
|
6631
6810
|
{
|
|
6632
6811
|
key: i,
|
|
@@ -6635,14 +6814,14 @@ function BlocksMenu({ anchorEl, setAnchorEl, onSelect }) {
|
|
|
6635
6814
|
onClick: () => onClick(k.block())
|
|
6636
6815
|
}
|
|
6637
6816
|
))),
|
|
6638
|
-
hasCustomBlocks && /* @__PURE__ */
|
|
6817
|
+
hasCustomBlocks && /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(Divider$1, { sx: { my: 1 } }), /* @__PURE__ */ React65.createElement(Typography, { variant: "caption", sx: { px: 2, py: 0.5, color: "text.secondary" } }, t("block-add.custom-blocks", "Custom blocks")), /* @__PURE__ */ React65.createElement(Box, { sx: { p: 1, display: "grid", gridTemplateColumns: "1fr 1fr 1fr 1fr" } }, customBlocks.map((cb, i) => {
|
|
6639
6818
|
var _a;
|
|
6640
|
-
return /* @__PURE__ */
|
|
6819
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6641
6820
|
BlockTypeButton,
|
|
6642
6821
|
{
|
|
6643
6822
|
key: `custom-${i}`,
|
|
6644
6823
|
label: cb.label,
|
|
6645
|
-
icon: (_a = cb.icon) != null ? _a : /* @__PURE__ */
|
|
6824
|
+
icon: (_a = cb.icon) != null ? _a : /* @__PURE__ */ React65.createElement(WidgetsOutlined, null),
|
|
6646
6825
|
onClick: () => onCustomBlockClick(cb)
|
|
6647
6826
|
}
|
|
6648
6827
|
);
|
|
@@ -6673,7 +6852,7 @@ function DividerButton({ buttonElement, onClick }) {
|
|
|
6673
6852
|
window.removeEventListener("mousemove", listener);
|
|
6674
6853
|
};
|
|
6675
6854
|
}, [buttonElement, setVisible]);
|
|
6676
|
-
return /* @__PURE__ */
|
|
6855
|
+
return /* @__PURE__ */ React65.createElement(Fade, { in: visible }, /* @__PURE__ */ React65.createElement(
|
|
6677
6856
|
IconButton,
|
|
6678
6857
|
{
|
|
6679
6858
|
size: "small",
|
|
@@ -6696,11 +6875,11 @@ function DividerButton({ buttonElement, onClick }) {
|
|
|
6696
6875
|
onClick();
|
|
6697
6876
|
}
|
|
6698
6877
|
},
|
|
6699
|
-
/* @__PURE__ */
|
|
6878
|
+
/* @__PURE__ */ React65.createElement(AddOutlined, { fontSize: "small" })
|
|
6700
6879
|
));
|
|
6701
6880
|
}
|
|
6702
6881
|
function PlaceholderButton({ onClick }) {
|
|
6703
|
-
return /* @__PURE__ */
|
|
6882
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6704
6883
|
ButtonBase,
|
|
6705
6884
|
{
|
|
6706
6885
|
onClick: (ev) => {
|
|
@@ -6716,7 +6895,7 @@ function PlaceholderButton({ onClick }) {
|
|
|
6716
6895
|
bgcolor: "rgba(0,0,0, 0.05)"
|
|
6717
6896
|
}
|
|
6718
6897
|
},
|
|
6719
|
-
/* @__PURE__ */
|
|
6898
|
+
/* @__PURE__ */ React65.createElement(
|
|
6720
6899
|
AddOutlined,
|
|
6721
6900
|
{
|
|
6722
6901
|
sx: {
|
|
@@ -6740,19 +6919,19 @@ function AddBlockButton({ onSelect, placeholder }) {
|
|
|
6740
6919
|
};
|
|
6741
6920
|
const renderButton2 = () => {
|
|
6742
6921
|
if (placeholder) {
|
|
6743
|
-
return /* @__PURE__ */
|
|
6922
|
+
return /* @__PURE__ */ React65.createElement(PlaceholderButton, { onClick: handleButtonClick });
|
|
6744
6923
|
} else {
|
|
6745
|
-
return /* @__PURE__ */
|
|
6924
|
+
return /* @__PURE__ */ React65.createElement(DividerButton, { buttonElement, onClick: handleButtonClick });
|
|
6746
6925
|
}
|
|
6747
6926
|
};
|
|
6748
|
-
return /* @__PURE__ */
|
|
6927
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement("div", { ref: setButtonElement, style: { position: "relative" } }, renderButton2()), /* @__PURE__ */ React65.createElement(BlocksMenu, { anchorEl: menuAnchorEl, setAnchorEl: setMenuAnchorEl, onSelect }));
|
|
6749
6928
|
}
|
|
6750
6929
|
var BlockParentContext = createContext(null);
|
|
6751
6930
|
function BlockParentProvider({
|
|
6752
6931
|
info,
|
|
6753
6932
|
children
|
|
6754
6933
|
}) {
|
|
6755
|
-
return /* @__PURE__ */
|
|
6934
|
+
return /* @__PURE__ */ React65.createElement(BlockParentContext.Provider, { value: info }, children);
|
|
6756
6935
|
}
|
|
6757
6936
|
function useBlockParent() {
|
|
6758
6937
|
return useContext(BlockParentContext);
|
|
@@ -6782,9 +6961,9 @@ function EditorChildrenIds({ childrenIds, onChange, parentRef }) {
|
|
|
6782
6961
|
});
|
|
6783
6962
|
};
|
|
6784
6963
|
if (!childrenIds || childrenIds.length === 0) {
|
|
6785
|
-
return /* @__PURE__ */
|
|
6964
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(AddBlockButton, { placeholder: true, onSelect: appendBlock }), parentRef && /* @__PURE__ */ React65.createElement(CanvasDropZone, { parentRef, targetIndex: 0, placeholder: true }));
|
|
6786
6965
|
}
|
|
6787
|
-
return /* @__PURE__ */
|
|
6966
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, childrenIds.map((childId, i) => /* @__PURE__ */ React65.createElement(Fragment, { key: childId }, /* @__PURE__ */ React65.createElement(AddBlockButton, { onSelect: (block) => insertBlock(block, i) }), parentRef && /* @__PURE__ */ React65.createElement(CanvasDropZone, { parentRef, targetIndex: i }), parentRef ? /* @__PURE__ */ React65.createElement(BlockParentProvider, { info: { parent: parentRef, indexInParent: i } }, /* @__PURE__ */ React65.createElement(EditorBlock, { id: childId })) : /* @__PURE__ */ React65.createElement(EditorBlock, { id: childId }))), /* @__PURE__ */ React65.createElement(AddBlockButton, { onSelect: appendBlock }), parentRef && /* @__PURE__ */ React65.createElement(CanvasDropZone, { parentRef, targetIndex: childrenIds.length }));
|
|
6788
6967
|
}
|
|
6789
6968
|
function CanvasDropZone({
|
|
6790
6969
|
parentRef,
|
|
@@ -6821,7 +7000,7 @@ function CanvasDropZone({
|
|
|
6821
7000
|
}
|
|
6822
7001
|
setDraggingBlock(null);
|
|
6823
7002
|
};
|
|
6824
|
-
return /* @__PURE__ */
|
|
7003
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6825
7004
|
Box,
|
|
6826
7005
|
{
|
|
6827
7006
|
onDragOver: handleDragOver,
|
|
@@ -6864,13 +7043,13 @@ function ColumnsContainerEditor({ style, props }) {
|
|
|
6864
7043
|
});
|
|
6865
7044
|
setSelectedBlockId(blockId);
|
|
6866
7045
|
};
|
|
6867
|
-
return /* @__PURE__ */
|
|
7046
|
+
return /* @__PURE__ */ React65.createElement(
|
|
6868
7047
|
columns_container_default,
|
|
6869
7048
|
{
|
|
6870
7049
|
props: restProps,
|
|
6871
7050
|
style,
|
|
6872
7051
|
columns: [
|
|
6873
|
-
/* @__PURE__ */
|
|
7052
|
+
/* @__PURE__ */ React65.createElement(
|
|
6874
7053
|
EditorChildrenIds,
|
|
6875
7054
|
{
|
|
6876
7055
|
childrenIds: (_b = columns == null ? void 0 : columns[0]) == null ? void 0 : _b.childrenIds,
|
|
@@ -6878,7 +7057,7 @@ function ColumnsContainerEditor({ style, props }) {
|
|
|
6878
7057
|
onChange: (change) => updateColumn(0, change)
|
|
6879
7058
|
}
|
|
6880
7059
|
),
|
|
6881
|
-
/* @__PURE__ */
|
|
7060
|
+
/* @__PURE__ */ React65.createElement(
|
|
6882
7061
|
EditorChildrenIds,
|
|
6883
7062
|
{
|
|
6884
7063
|
childrenIds: (_c = columns == null ? void 0 : columns[1]) == null ? void 0 : _c.childrenIds,
|
|
@@ -6886,7 +7065,7 @@ function ColumnsContainerEditor({ style, props }) {
|
|
|
6886
7065
|
onChange: (change) => updateColumn(1, change)
|
|
6887
7066
|
}
|
|
6888
7067
|
),
|
|
6889
|
-
/* @__PURE__ */
|
|
7068
|
+
/* @__PURE__ */ React65.createElement(
|
|
6890
7069
|
EditorChildrenIds,
|
|
6891
7070
|
{
|
|
6892
7071
|
childrenIds: (_d = columns == null ? void 0 : columns[2]) == null ? void 0 : _d.childrenIds,
|
|
@@ -6903,7 +7082,7 @@ function ContainerEditor({ style, props }) {
|
|
|
6903
7082
|
const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
|
|
6904
7083
|
const document2 = useDocument();
|
|
6905
7084
|
const currentBlockId = useCurrentBlockId();
|
|
6906
|
-
return /* @__PURE__ */
|
|
7085
|
+
return /* @__PURE__ */ React65.createElement(container_default, { style }, /* @__PURE__ */ React65.createElement(
|
|
6907
7086
|
EditorChildrenIds,
|
|
6908
7087
|
{
|
|
6909
7088
|
childrenIds,
|
|
@@ -6923,7 +7102,7 @@ function ContainerEditor({ style, props }) {
|
|
|
6923
7102
|
}
|
|
6924
7103
|
));
|
|
6925
7104
|
}
|
|
6926
|
-
function
|
|
7105
|
+
function getFontFamily8(fontFamily) {
|
|
6927
7106
|
const f = fontFamily != null ? fontFamily : "MODERN_SANS";
|
|
6928
7107
|
switch (f) {
|
|
6929
7108
|
case "MODERN_SANS":
|
|
@@ -7039,14 +7218,14 @@ function EmailLayoutEditor(props) {
|
|
|
7039
7218
|
}, [handleDelete, handleCopy, handlePaste]);
|
|
7040
7219
|
const baseStyle = {
|
|
7041
7220
|
color: (_b = props.textColor) != null ? _b : "#262626",
|
|
7042
|
-
fontFamily:
|
|
7221
|
+
fontFamily: getFontFamily8(props.fontFamily),
|
|
7043
7222
|
fontSize: "16px",
|
|
7044
7223
|
fontWeight: "400",
|
|
7045
7224
|
letterSpacing: "0.15008px",
|
|
7046
7225
|
lineHeight: "1.5",
|
|
7047
7226
|
margin: "0"
|
|
7048
7227
|
};
|
|
7049
|
-
const editorChildren = /* @__PURE__ */
|
|
7228
|
+
const editorChildren = /* @__PURE__ */ React65.createElement(
|
|
7050
7229
|
EditorChildrenIds,
|
|
7051
7230
|
{
|
|
7052
7231
|
childrenIds,
|
|
@@ -7073,7 +7252,7 @@ function EmailLayoutEditor(props) {
|
|
|
7073
7252
|
boxShadow: "0 1px 2px rgba(33, 36, 67, 0.05), 0 8px 24px rgba(33, 36, 67, 0.08)"
|
|
7074
7253
|
};
|
|
7075
7254
|
if (props.backdropDisabled) {
|
|
7076
|
-
return /* @__PURE__ */
|
|
7255
|
+
return /* @__PURE__ */ React65.createElement(
|
|
7077
7256
|
"div",
|
|
7078
7257
|
{
|
|
7079
7258
|
onClick: () => {
|
|
@@ -7085,7 +7264,7 @@ function EmailLayoutEditor(props) {
|
|
|
7085
7264
|
minHeight: "100%"
|
|
7086
7265
|
})
|
|
7087
7266
|
},
|
|
7088
|
-
/* @__PURE__ */
|
|
7267
|
+
/* @__PURE__ */ React65.createElement(
|
|
7089
7268
|
"div",
|
|
7090
7269
|
{
|
|
7091
7270
|
style: __spreadProps(__spreadValues({}, cardStyle), {
|
|
@@ -7093,11 +7272,11 @@ function EmailLayoutEditor(props) {
|
|
|
7093
7272
|
padding: "32px"
|
|
7094
7273
|
})
|
|
7095
7274
|
},
|
|
7096
|
-
/* @__PURE__ */
|
|
7275
|
+
/* @__PURE__ */ React65.createElement("div", { style: { maxWidth: "600px", margin: "0 auto" } }, editorChildren)
|
|
7097
7276
|
)
|
|
7098
7277
|
);
|
|
7099
7278
|
}
|
|
7100
|
-
return /* @__PURE__ */
|
|
7279
|
+
return /* @__PURE__ */ React65.createElement(
|
|
7101
7280
|
"div",
|
|
7102
7281
|
{
|
|
7103
7282
|
onClick: () => {
|
|
@@ -7109,7 +7288,7 @@ function EmailLayoutEditor(props) {
|
|
|
7109
7288
|
minHeight: "100%"
|
|
7110
7289
|
})
|
|
7111
7290
|
},
|
|
7112
|
-
/* @__PURE__ */
|
|
7291
|
+
/* @__PURE__ */ React65.createElement(
|
|
7113
7292
|
"div",
|
|
7114
7293
|
{
|
|
7115
7294
|
style: __spreadProps(__spreadValues({}, cardStyle), {
|
|
@@ -7117,7 +7296,7 @@ function EmailLayoutEditor(props) {
|
|
|
7117
7296
|
padding: "32px 0"
|
|
7118
7297
|
})
|
|
7119
7298
|
},
|
|
7120
|
-
/* @__PURE__ */
|
|
7299
|
+
/* @__PURE__ */ React65.createElement(
|
|
7121
7300
|
"table",
|
|
7122
7301
|
{
|
|
7123
7302
|
align: "center",
|
|
@@ -7141,7 +7320,7 @@ function EmailLayoutEditor(props) {
|
|
|
7141
7320
|
cellPadding: "0",
|
|
7142
7321
|
border: 0
|
|
7143
7322
|
},
|
|
7144
|
-
/* @__PURE__ */
|
|
7323
|
+
/* @__PURE__ */ React65.createElement("tbody", null, /* @__PURE__ */ React65.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React65.createElement("td", null, editorChildren)))
|
|
7145
7324
|
)
|
|
7146
7325
|
)
|
|
7147
7326
|
);
|
|
@@ -7301,7 +7480,7 @@ function TuneMenu({ blockId }) {
|
|
|
7301
7480
|
resetDocument(nDocument);
|
|
7302
7481
|
setSelectedBlockId(blockId);
|
|
7303
7482
|
};
|
|
7304
|
-
return /* @__PURE__ */
|
|
7483
|
+
return /* @__PURE__ */ React65.createElement(Paper, { sx, onClick: (ev) => ev.stopPropagation() }, /* @__PURE__ */ React65.createElement(Stack, null, /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tune.move-up", "Move up"), placement: "left-start" }, /* @__PURE__ */ React65.createElement(IconButton, { "aria-label": t("tune.move-up", "Move up"), onClick: () => handleMoveClick("up"), sx: { color: "text.primary" } }, /* @__PURE__ */ React65.createElement(ArrowUpwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tune.move-down", "Move down"), placement: "left-start" }, /* @__PURE__ */ React65.createElement(IconButton, { "aria-label": t("tune.move-down", "Move down"), onClick: () => handleMoveClick("down"), sx: { color: "text.primary" } }, /* @__PURE__ */ React65.createElement(ArrowDownwardOutlined, { fontSize: "small" }))), /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tune.copy", "Copy block"), placement: "left-start" }, /* @__PURE__ */ React65.createElement(IconButton, { "aria-label": t("tune.copy", "Copy block"), onClick: handleCopyClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React65.createElement(ContentCopyOutlined, { fontSize: "small" }))), /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tune.delete", "Delete"), placement: "left-start" }, /* @__PURE__ */ React65.createElement(IconButton, { "aria-label": t("tune.delete", "Delete"), onClick: handleDeleteClick, sx: { color: "text.primary" } }, /* @__PURE__ */ React65.createElement(DeleteOutlined, { fontSize: "small" })))));
|
|
7305
7484
|
}
|
|
7306
7485
|
|
|
7307
7486
|
// src/editor/blocks/helpers/block-wrappers/editor-block-wrapper.tsx
|
|
@@ -7323,7 +7502,7 @@ function EditorBlockWrapper({ children }) {
|
|
|
7323
7502
|
if (selectedBlockId !== blockId) {
|
|
7324
7503
|
return null;
|
|
7325
7504
|
}
|
|
7326
|
-
return /* @__PURE__ */
|
|
7505
|
+
return /* @__PURE__ */ React65.createElement(TuneMenu, { blockId });
|
|
7327
7506
|
};
|
|
7328
7507
|
const draggable = Boolean(blockParent) && selectedBlockId !== blockId;
|
|
7329
7508
|
const handleDragStart = (e) => {
|
|
@@ -7336,7 +7515,7 @@ function EditorBlockWrapper({ children }) {
|
|
|
7336
7515
|
const handleDragEnd = () => {
|
|
7337
7516
|
setDraggingBlock(null);
|
|
7338
7517
|
};
|
|
7339
|
-
return /* @__PURE__ */
|
|
7518
|
+
return /* @__PURE__ */ React65.createElement(
|
|
7340
7519
|
Box,
|
|
7341
7520
|
{
|
|
7342
7521
|
draggable,
|
|
@@ -7366,7 +7545,7 @@ function EditorBlockWrapper({ children }) {
|
|
|
7366
7545
|
children
|
|
7367
7546
|
);
|
|
7368
7547
|
}
|
|
7369
|
-
function
|
|
7548
|
+
function getFontFamily9(fontFamily) {
|
|
7370
7549
|
switch (fontFamily) {
|
|
7371
7550
|
case "MODERN_SANS":
|
|
7372
7551
|
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
@@ -7389,7 +7568,7 @@ function getFontFamily8(fontFamily) {
|
|
|
7389
7568
|
}
|
|
7390
7569
|
return void 0;
|
|
7391
7570
|
}
|
|
7392
|
-
var
|
|
7571
|
+
var getPadding12 = (padding) => padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : void 0;
|
|
7393
7572
|
function getRoundedCorners2(props) {
|
|
7394
7573
|
var _a;
|
|
7395
7574
|
const buttonStyle = (_a = props == null ? void 0 : props.buttonStyle) != null ? _a : ButtonPropsDefaults.buttonStyle;
|
|
@@ -7435,12 +7614,12 @@ function ButtonEditor({ style, props }) {
|
|
|
7435
7614
|
const wrapperStyle = {
|
|
7436
7615
|
backgroundColor: (_e = style == null ? void 0 : style.backgroundColor) != null ? _e : void 0,
|
|
7437
7616
|
textAlign: (_f = style == null ? void 0 : style.textAlign) != null ? _f : void 0,
|
|
7438
|
-
padding:
|
|
7617
|
+
padding: getPadding12(style == null ? void 0 : style.padding)
|
|
7439
7618
|
};
|
|
7440
7619
|
const linkStyle = {
|
|
7441
7620
|
color: buttonTextColor,
|
|
7442
7621
|
fontSize: (_g = style == null ? void 0 : style.fontSize) != null ? _g : 16,
|
|
7443
|
-
fontFamily:
|
|
7622
|
+
fontFamily: getFontFamily9(style == null ? void 0 : style.fontFamily),
|
|
7444
7623
|
fontWeight: (_h = style == null ? void 0 : style.fontWeight) != null ? _h : "bold",
|
|
7445
7624
|
backgroundColor: buttonBackgroundColor,
|
|
7446
7625
|
borderRadius: getRoundedCorners2(props),
|
|
@@ -7481,7 +7660,7 @@ function ButtonEditor({ style, props }) {
|
|
|
7481
7660
|
selectionEnd: (_b2 = el.selectionEnd) != null ? _b2 : el.value.length
|
|
7482
7661
|
});
|
|
7483
7662
|
};
|
|
7484
|
-
return /* @__PURE__ */
|
|
7663
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React65.createElement(
|
|
7485
7664
|
"input",
|
|
7486
7665
|
{
|
|
7487
7666
|
type: "text",
|
|
@@ -7498,7 +7677,7 @@ function ButtonEditor({ style, props }) {
|
|
|
7498
7677
|
}
|
|
7499
7678
|
));
|
|
7500
7679
|
}
|
|
7501
|
-
return /* @__PURE__ */
|
|
7680
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React65.createElement("span", { style: linkStyle }, /* @__PURE__ */ React65.createElement("span", null, text)));
|
|
7502
7681
|
}
|
|
7503
7682
|
function useMarkdownToolbar({ text, isSelected, commitText, trackSelection }) {
|
|
7504
7683
|
const textareaRef = useRef(null);
|
|
@@ -7715,7 +7894,7 @@ function InlineFormattingToolbar({
|
|
|
7715
7894
|
}
|
|
7716
7895
|
}, [activePrompt]);
|
|
7717
7896
|
const preventBlur = (e) => e.preventDefault();
|
|
7718
|
-
return /* @__PURE__ */
|
|
7897
|
+
return /* @__PURE__ */ React65.createElement(Popper, { open: visible, anchorEl, placement: "top-start", style: { zIndex: 1300 } }, /* @__PURE__ */ React65.createElement(Paper, { elevation: 4, sx: { px: 0.5, py: 0.25, mb: 0.5 }, onMouseDown: preventBlur }, activePrompt === "link" ? /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5 } }, /* @__PURE__ */ React65.createElement(
|
|
7719
7898
|
TextField,
|
|
7720
7899
|
{
|
|
7721
7900
|
inputRef: urlRef,
|
|
@@ -7737,7 +7916,7 @@ function InlineFormattingToolbar({
|
|
|
7737
7916
|
},
|
|
7738
7917
|
sx: { width: 220 }
|
|
7739
7918
|
}
|
|
7740
|
-
)) : activePrompt === "color" ? /* @__PURE__ */
|
|
7919
|
+
)) : activePrompt === "color" ? /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React65.createElement(
|
|
7741
7920
|
"input",
|
|
7742
7921
|
{
|
|
7743
7922
|
ref: colorRef,
|
|
@@ -7750,7 +7929,7 @@ function InlineFormattingToolbar({
|
|
|
7750
7929
|
},
|
|
7751
7930
|
style: { width: 40, height: 28, border: "none", padding: 0, background: "transparent", cursor: "pointer" }
|
|
7752
7931
|
}
|
|
7753
|
-
), /* @__PURE__ */
|
|
7932
|
+
), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React65.createElement(FormatColorTextOutlined, { fontSize: "small" }))) : activePrompt === "font" ? /* @__PURE__ */ React65.createElement(Stack, { direction: "row", alignItems: "center", spacing: 0.5, sx: { px: 0.5, py: 0.25 } }, /* @__PURE__ */ React65.createElement(
|
|
7754
7933
|
Select,
|
|
7755
7934
|
{
|
|
7756
7935
|
value: font,
|
|
@@ -7763,12 +7942,12 @@ function InlineFormattingToolbar({
|
|
|
7763
7942
|
variant: "standard",
|
|
7764
7943
|
sx: { minWidth: 180, fontSize: 13 }
|
|
7765
7944
|
},
|
|
7766
|
-
FONT_OPTIONS.map((opt) => /* @__PURE__ */
|
|
7767
|
-
), /* @__PURE__ */
|
|
7945
|
+
FONT_OPTIONS.map((opt) => /* @__PURE__ */ React65.createElement(MenuItem, { key: opt.value, value: opt.value, sx: { fontFamily: opt.value } }, opt.label))
|
|
7946
|
+
), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onPromptCancel, title: t("common.cancel", "Cancel") }, /* @__PURE__ */ React65.createElement(TextFieldsOutlined, { fontSize: "small" }))) : /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.25 }, /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onBold, title: t("toolbar.bold-shortcut", "Bold (Cmd+B)"), "aria-label": t("toolbar.bold", "Bold") }, /* @__PURE__ */ React65.createElement(FormatBoldOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onItalic, title: t("toolbar.italic-shortcut", "Italic (Cmd+I)"), "aria-label": t("toolbar.italic", "Italic") }, /* @__PURE__ */ React65.createElement(FormatItalicOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onUnderline, title: t("toolbar.underline-shortcut", "Underline (Cmd+U)"), "aria-label": t("toolbar.underline", "Underline") }, /* @__PURE__ */ React65.createElement(FormatUnderlinedOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onOverline, title: t("toolbar.overline", "Overline"), "aria-label": t("toolbar.overline", "Overline") }, /* @__PURE__ */ React65.createElement(FormatOverlineOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onColorRequest, title: t("toolbar.text-color", "Text color"), "aria-label": t("toolbar.text-color", "Text color") }, /* @__PURE__ */ React65.createElement(FormatColorTextOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onFontRequest, title: t("toolbar.font-family", "Font family"), "aria-label": t("toolbar.font-family", "Font family") }, /* @__PURE__ */ React65.createElement(TextFieldsOutlined, { fontSize: "small" })), /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: onLinkRequest, title: t("toolbar.link-shortcut", "Link (Cmd+K)"), "aria-label": t("toolbar.link", "Link") }, /* @__PURE__ */ React65.createElement(LinkOutlined, { fontSize: "small" })))));
|
|
7768
7947
|
}
|
|
7769
7948
|
|
|
7770
7949
|
// src/editor/blocks/heading/heading-editor.tsx
|
|
7771
|
-
function
|
|
7950
|
+
function getFontFamily10(fontFamily) {
|
|
7772
7951
|
switch (fontFamily) {
|
|
7773
7952
|
case "MODERN_SANS":
|
|
7774
7953
|
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
@@ -7795,7 +7974,7 @@ function getFontFamily9(fontFamily) {
|
|
|
7795
7974
|
}
|
|
7796
7975
|
return void 0;
|
|
7797
7976
|
}
|
|
7798
|
-
function
|
|
7977
|
+
function getPadding13(padding) {
|
|
7799
7978
|
if (!padding) return void 0;
|
|
7800
7979
|
if (typeof padding === "object" && !Array.isArray(padding) && "top" in padding && "right" in padding && "bottom" in padding && "left" in padding) {
|
|
7801
7980
|
return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;
|
|
@@ -7840,11 +8019,11 @@ function HeadingEditor({ style, props }) {
|
|
|
7840
8019
|
const [localText, setLocalText] = useState(textContent);
|
|
7841
8020
|
const isMarkdown = (_c = props == null ? void 0 : props.markdown) != null ? _c : false;
|
|
7842
8021
|
const rootBlock = document2.root;
|
|
7843
|
-
const rootFontFamily = rootBlock && rootBlock.type === "EmailLayout" ?
|
|
8022
|
+
const rootFontFamily = rootBlock && rootBlock.type === "EmailLayout" ? getFontFamily10(rootBlock.data.fontFamily) : '"Helvetica Neue", Arial, sans-serif';
|
|
7844
8023
|
useEffect(() => {
|
|
7845
8024
|
setLocalText(textContent);
|
|
7846
8025
|
}, [textContent]);
|
|
7847
|
-
const fontFamily =
|
|
8026
|
+
const fontFamily = getFontFamily10(style == null ? void 0 : style.fontFamily) || rootFontFamily;
|
|
7848
8027
|
const hStyle = {
|
|
7849
8028
|
color: (_d = style == null ? void 0 : style.color) != null ? _d : void 0,
|
|
7850
8029
|
backgroundColor: (_e = style == null ? void 0 : style.backgroundColor) != null ? _e : void 0,
|
|
@@ -7855,7 +8034,7 @@ function HeadingEditor({ style, props }) {
|
|
|
7855
8034
|
margin: 0,
|
|
7856
8035
|
fontFamily,
|
|
7857
8036
|
fontSize: getFontSize2(level),
|
|
7858
|
-
padding:
|
|
8037
|
+
padding: getPadding13(style == null ? void 0 : style.padding),
|
|
7859
8038
|
width: "100%",
|
|
7860
8039
|
minHeight: "1em"
|
|
7861
8040
|
};
|
|
@@ -7919,7 +8098,7 @@ function HeadingEditor({ style, props }) {
|
|
|
7919
8098
|
if (textareaRef.current) adjustTextareaHeight(textareaRef.current);
|
|
7920
8099
|
}, [localText, isSelected]);
|
|
7921
8100
|
if (isSelected) {
|
|
7922
|
-
return /* @__PURE__ */
|
|
8101
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
7923
8102
|
"textarea",
|
|
7924
8103
|
{
|
|
7925
8104
|
ref: textareaRef,
|
|
@@ -7937,7 +8116,7 @@ function HeadingEditor({ style, props }) {
|
|
|
7937
8116
|
rows: 1,
|
|
7938
8117
|
onInput: (e) => adjustTextareaHeight(e.target)
|
|
7939
8118
|
}
|
|
7940
|
-
), /* @__PURE__ */
|
|
8119
|
+
), /* @__PURE__ */ React65.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
|
|
7941
8120
|
}
|
|
7942
8121
|
const headingProps = isMarkdown ? {
|
|
7943
8122
|
ref: displayRef,
|
|
@@ -7946,11 +8125,11 @@ function HeadingEditor({ style, props }) {
|
|
|
7946
8125
|
} : { ref: displayRef, style: hStyle, children: textContent };
|
|
7947
8126
|
switch (level) {
|
|
7948
8127
|
case "h1":
|
|
7949
|
-
return /* @__PURE__ */
|
|
8128
|
+
return /* @__PURE__ */ React65.createElement("h1", __spreadValues({}, headingProps));
|
|
7950
8129
|
case "h2":
|
|
7951
|
-
return /* @__PURE__ */
|
|
8130
|
+
return /* @__PURE__ */ React65.createElement("h2", __spreadValues({}, headingProps));
|
|
7952
8131
|
case "h3":
|
|
7953
|
-
return /* @__PURE__ */
|
|
8132
|
+
return /* @__PURE__ */ React65.createElement("h3", __spreadValues({}, headingProps));
|
|
7954
8133
|
}
|
|
7955
8134
|
}
|
|
7956
8135
|
function HtmlEditor({ style, props }) {
|
|
@@ -8015,7 +8194,7 @@ function HtmlEditor({ style, props }) {
|
|
|
8015
8194
|
selectionEnd: (_b2 = el.selectionEnd) != null ? _b2 : el.value.length
|
|
8016
8195
|
});
|
|
8017
8196
|
};
|
|
8018
|
-
return /* @__PURE__ */
|
|
8197
|
+
return /* @__PURE__ */ React65.createElement("div", { style: cssStyle }, /* @__PURE__ */ React65.createElement(
|
|
8019
8198
|
"textarea",
|
|
8020
8199
|
{
|
|
8021
8200
|
value: localContents,
|
|
@@ -8035,9 +8214,72 @@ function HtmlEditor({ style, props }) {
|
|
|
8035
8214
|
));
|
|
8036
8215
|
}
|
|
8037
8216
|
if (!contents) {
|
|
8038
|
-
return /* @__PURE__ */
|
|
8217
|
+
return /* @__PURE__ */ React65.createElement("div", { style: cssStyle });
|
|
8039
8218
|
}
|
|
8040
|
-
return /* @__PURE__ */
|
|
8219
|
+
return /* @__PURE__ */ React65.createElement("div", { style: cssStyle, dangerouslySetInnerHTML: { __html: contents } });
|
|
8220
|
+
}
|
|
8221
|
+
function OtpEditor({ props, style }) {
|
|
8222
|
+
var _a, _b, _c, _d, _e, _f;
|
|
8223
|
+
const blockId = useCurrentBlockId();
|
|
8224
|
+
const selectedBlockId = useSelectedBlockId();
|
|
8225
|
+
const isSelected = selectedBlockId === blockId;
|
|
8226
|
+
const code = (_a = props == null ? void 0 : props.code) != null ? _a : OtpPropsDefaults.code;
|
|
8227
|
+
const [localCode, setLocalCode] = useState(code);
|
|
8228
|
+
const inputRef = useRef(null);
|
|
8229
|
+
useEffect(() => {
|
|
8230
|
+
setLocalCode(code);
|
|
8231
|
+
}, [code]);
|
|
8232
|
+
useEffect(() => {
|
|
8233
|
+
if (isSelected && inputRef.current) {
|
|
8234
|
+
inputRef.current.focus();
|
|
8235
|
+
inputRef.current.select();
|
|
8236
|
+
}
|
|
8237
|
+
}, [isSelected]);
|
|
8238
|
+
if (!isSelected) {
|
|
8239
|
+
return /* @__PURE__ */ React65.createElement(otp_default, { props, style });
|
|
8240
|
+
}
|
|
8241
|
+
const commit = (newCode) => {
|
|
8242
|
+
setLocalCode(newCode);
|
|
8243
|
+
setDocument({
|
|
8244
|
+
[blockId]: {
|
|
8245
|
+
type: "Otp",
|
|
8246
|
+
data: {
|
|
8247
|
+
style,
|
|
8248
|
+
props: __spreadProps(__spreadValues({}, props), { code: newCode })
|
|
8249
|
+
}
|
|
8250
|
+
}
|
|
8251
|
+
});
|
|
8252
|
+
};
|
|
8253
|
+
const wrapperStyle = {
|
|
8254
|
+
textAlign: (_b = style == null ? void 0 : style.textAlign) != null ? _b : "center",
|
|
8255
|
+
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
|
|
8256
|
+
};
|
|
8257
|
+
const inputStyle = {
|
|
8258
|
+
display: "inline-block",
|
|
8259
|
+
color: (_c = style == null ? void 0 : style.color) != null ? _c : "#000000",
|
|
8260
|
+
backgroundColor: (_d = style == null ? void 0 : style.backgroundColor) != null ? _d : "transparent",
|
|
8261
|
+
border: (style == null ? void 0 : style.borderColor) ? `1px solid ${style.borderColor}` : "1px dashed #999",
|
|
8262
|
+
borderRadius: (style == null ? void 0 : style.borderRadius) != null ? `${style.borderRadius}px` : 4,
|
|
8263
|
+
fontFamily: '"Nimbus Mono PS", "Courier New", "Cutive Mono", monospace',
|
|
8264
|
+
fontSize: (_e = style == null ? void 0 : style.fontSize) != null ? _e : 32,
|
|
8265
|
+
fontWeight: (_f = style == null ? void 0 : style.fontWeight) != null ? _f : "bold",
|
|
8266
|
+
letterSpacing: (style == null ? void 0 : style.letterSpacing) != null ? `${style.letterSpacing}px` : "4px",
|
|
8267
|
+
textAlign: "center",
|
|
8268
|
+
padding: "12px 20px",
|
|
8269
|
+
outline: "none",
|
|
8270
|
+
minWidth: 120
|
|
8271
|
+
};
|
|
8272
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, /* @__PURE__ */ React65.createElement(
|
|
8273
|
+
"input",
|
|
8274
|
+
{
|
|
8275
|
+
ref: inputRef,
|
|
8276
|
+
type: "text",
|
|
8277
|
+
value: localCode,
|
|
8278
|
+
onChange: (e) => commit(e.target.value),
|
|
8279
|
+
style: inputStyle,
|
|
8280
|
+
onClick: (e) => e.stopPropagation()
|
|
8281
|
+
}
|
|
8282
|
+
));
|
|
8041
8283
|
}
|
|
8042
8284
|
function getImageBorderRadius2(shape, size) {
|
|
8043
8285
|
switch (shape) {
|
|
@@ -8152,7 +8394,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8152
8394
|
backgroundColor: (_p = style == null ? void 0 : style.backgroundColor) != null ? _p : void 0,
|
|
8153
8395
|
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
|
|
8154
8396
|
};
|
|
8155
|
-
const imageElement = imageUrl ? /* @__PURE__ */
|
|
8397
|
+
const imageElement = imageUrl ? /* @__PURE__ */ React65.createElement(
|
|
8156
8398
|
"img",
|
|
8157
8399
|
{
|
|
8158
8400
|
src: imageUrl,
|
|
@@ -8170,7 +8412,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8170
8412
|
}
|
|
8171
8413
|
}
|
|
8172
8414
|
) : null;
|
|
8173
|
-
const greetingElement = isSelected ? /* @__PURE__ */
|
|
8415
|
+
const greetingElement = isSelected ? /* @__PURE__ */ React65.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React65.createElement(
|
|
8174
8416
|
"input",
|
|
8175
8417
|
{
|
|
8176
8418
|
value: localGreeting,
|
|
@@ -8181,8 +8423,8 @@ function SignatureEditor({ style, props }) {
|
|
|
8181
8423
|
placeholder: "Greeting (e.g. Best regards,)",
|
|
8182
8424
|
style: __spreadValues(__spreadValues({}, inputBase), greetingStyle)
|
|
8183
8425
|
}
|
|
8184
|
-
)) : greeting ? /* @__PURE__ */
|
|
8185
|
-
const textContent = isSelected ? /* @__PURE__ */
|
|
8426
|
+
)) : greeting ? /* @__PURE__ */ React65.createElement("p", { style: greetingStyle }, greeting) : null;
|
|
8427
|
+
const textContent = isSelected ? /* @__PURE__ */ React65.createElement("div", { onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React65.createElement(
|
|
8186
8428
|
"input",
|
|
8187
8429
|
{
|
|
8188
8430
|
value: localName,
|
|
@@ -8193,7 +8435,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8193
8435
|
placeholder: "Name",
|
|
8194
8436
|
style: __spreadValues(__spreadValues({}, inputBase), nameStyle)
|
|
8195
8437
|
}
|
|
8196
|
-
), /* @__PURE__ */
|
|
8438
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8197
8439
|
"input",
|
|
8198
8440
|
{
|
|
8199
8441
|
value: localTitle,
|
|
@@ -8204,7 +8446,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8204
8446
|
placeholder: "Title",
|
|
8205
8447
|
style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
|
|
8206
8448
|
}
|
|
8207
|
-
), /* @__PURE__ */
|
|
8449
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8208
8450
|
"input",
|
|
8209
8451
|
{
|
|
8210
8452
|
value: localCompany,
|
|
@@ -8215,7 +8457,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8215
8457
|
placeholder: "Company",
|
|
8216
8458
|
style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
|
|
8217
8459
|
}
|
|
8218
|
-
), /* @__PURE__ */
|
|
8460
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8219
8461
|
"input",
|
|
8220
8462
|
{
|
|
8221
8463
|
value: localAddress,
|
|
@@ -8226,7 +8468,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8226
8468
|
placeholder: "Address",
|
|
8227
8469
|
style: __spreadValues(__spreadValues({}, inputBase), detailStyle)
|
|
8228
8470
|
}
|
|
8229
|
-
), /* @__PURE__ */
|
|
8471
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8230
8472
|
"input",
|
|
8231
8473
|
{
|
|
8232
8474
|
value: localEmail,
|
|
@@ -8237,7 +8479,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8237
8479
|
placeholder: "Email",
|
|
8238
8480
|
style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { marginTop: 4, display: "block" })
|
|
8239
8481
|
}
|
|
8240
|
-
), /* @__PURE__ */
|
|
8482
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8241
8483
|
"input",
|
|
8242
8484
|
{
|
|
8243
8485
|
value: localPhone,
|
|
@@ -8248,7 +8490,7 @@ function SignatureEditor({ style, props }) {
|
|
|
8248
8490
|
placeholder: "Phone",
|
|
8249
8491
|
style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { display: "block" })
|
|
8250
8492
|
}
|
|
8251
|
-
), /* @__PURE__ */
|
|
8493
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8252
8494
|
"input",
|
|
8253
8495
|
{
|
|
8254
8496
|
value: localWebsite,
|
|
@@ -8259,13 +8501,13 @@ function SignatureEditor({ style, props }) {
|
|
|
8259
8501
|
placeholder: "Website",
|
|
8260
8502
|
style: __spreadProps(__spreadValues(__spreadValues({}, inputBase), linkStyle), { display: "block" })
|
|
8261
8503
|
}
|
|
8262
|
-
)) : /* @__PURE__ */
|
|
8504
|
+
)) : /* @__PURE__ */ React65.createElement("div", null, name && /* @__PURE__ */ React65.createElement("p", { style: nameStyle }, name), title && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, title), company && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, company), address && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, address), (email || phone || website) && /* @__PURE__ */ React65.createElement("p", { style: __spreadProps(__spreadValues({}, detailStyle), { marginTop: 4 }) }, email && /* @__PURE__ */ React65.createElement("span", { style: linkStyle }, email), email && (phone || website) && /* @__PURE__ */ React65.createElement("span", { style: detailStyle }, " \xB7 "), phone && /* @__PURE__ */ React65.createElement("span", { style: linkStyle }, phone), phone && website && /* @__PURE__ */ React65.createElement("span", { style: detailStyle }, " \xB7 "), website && /* @__PURE__ */ React65.createElement("span", { style: linkStyle }, website)), !name && !title && !company && !email && !phone && !website && /* @__PURE__ */ React65.createElement("p", { style: detailStyle }, "Click to edit signature"));
|
|
8263
8505
|
if (layout === "vertical") {
|
|
8264
|
-
return /* @__PURE__ */
|
|
8506
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, greetingElement, imageElement && /* @__PURE__ */ React65.createElement("div", { style: { marginBottom: 12 } }, imageElement), textContent);
|
|
8265
8507
|
}
|
|
8266
|
-
return /* @__PURE__ */
|
|
8508
|
+
return /* @__PURE__ */ React65.createElement("div", { style: wrapperStyle }, greetingElement, /* @__PURE__ */ React65.createElement("table", { cellPadding: "0", cellSpacing: "0", border: 0, role: "presentation" }, /* @__PURE__ */ React65.createElement("tbody", null, /* @__PURE__ */ React65.createElement("tr", null, imageElement && /* @__PURE__ */ React65.createElement("td", { style: { verticalAlign: "middle", paddingRight: 16 } }, imageElement), /* @__PURE__ */ React65.createElement("td", { style: { verticalAlign: "middle" } }, textContent)))));
|
|
8267
8509
|
}
|
|
8268
|
-
function
|
|
8510
|
+
function getFontFamily11(fontFamily) {
|
|
8269
8511
|
switch (fontFamily) {
|
|
8270
8512
|
case "MODERN_SANS":
|
|
8271
8513
|
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
@@ -8292,7 +8534,7 @@ function getFontFamily10(fontFamily) {
|
|
|
8292
8534
|
}
|
|
8293
8535
|
return void 0;
|
|
8294
8536
|
}
|
|
8295
|
-
function
|
|
8537
|
+
function getPadding14(padding) {
|
|
8296
8538
|
if (!padding) return void 0;
|
|
8297
8539
|
if (typeof padding === "object" && !Array.isArray(padding) && "top" in padding && "right" in padding && "bottom" in padding && "left" in padding) {
|
|
8298
8540
|
return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;
|
|
@@ -8326,11 +8568,11 @@ function TextEditor({ style, props }) {
|
|
|
8326
8568
|
const [localText, setLocalText] = useState(textContent);
|
|
8327
8569
|
const isMarkdown = (_b = props == null ? void 0 : props.markdown) != null ? _b : false;
|
|
8328
8570
|
const rootBlock = document2.root;
|
|
8329
|
-
const rootFontFamily = rootBlock && rootBlock.type === "EmailLayout" ?
|
|
8571
|
+
const rootFontFamily = rootBlock && rootBlock.type === "EmailLayout" ? getFontFamily11(rootBlock.data.fontFamily) : '"Helvetica Neue", Arial, sans-serif';
|
|
8330
8572
|
useEffect(() => {
|
|
8331
8573
|
setLocalText(textContent);
|
|
8332
8574
|
}, [textContent]);
|
|
8333
|
-
const fontFamily =
|
|
8575
|
+
const fontFamily = getFontFamily11(style == null ? void 0 : style.fontFamily) || rootFontFamily;
|
|
8334
8576
|
const wStyle = {
|
|
8335
8577
|
color: (_c = style == null ? void 0 : style.color) != null ? _c : void 0,
|
|
8336
8578
|
backgroundColor: (_d = style == null ? void 0 : style.backgroundColor) != null ? _d : void 0,
|
|
@@ -8340,7 +8582,7 @@ function TextEditor({ style, props }) {
|
|
|
8340
8582
|
lineHeight: (_g = style == null ? void 0 : style.lineHeight) != null ? _g : void 0,
|
|
8341
8583
|
letterSpacing: (style == null ? void 0 : style.letterSpacing) != null ? `${style.letterSpacing}px` : void 0,
|
|
8342
8584
|
textAlign: (_h = style == null ? void 0 : style.textAlign) != null ? _h : void 0,
|
|
8343
|
-
padding:
|
|
8585
|
+
padding: getPadding14(style == null ? void 0 : style.padding),
|
|
8344
8586
|
width: "100%",
|
|
8345
8587
|
minHeight: "1em"
|
|
8346
8588
|
};
|
|
@@ -8407,7 +8649,7 @@ function TextEditor({ style, props }) {
|
|
|
8407
8649
|
if (textareaRef.current) adjustTextareaHeight(textareaRef.current);
|
|
8408
8650
|
}, [localText, isSelected]);
|
|
8409
8651
|
if (isSelected) {
|
|
8410
|
-
return /* @__PURE__ */
|
|
8652
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
8411
8653
|
"textarea",
|
|
8412
8654
|
{
|
|
8413
8655
|
ref: textareaRef,
|
|
@@ -8425,10 +8667,10 @@ function TextEditor({ style, props }) {
|
|
|
8425
8667
|
rows: 1,
|
|
8426
8668
|
onInput: (e) => adjustTextareaHeight(e.target)
|
|
8427
8669
|
}
|
|
8428
|
-
), /* @__PURE__ */
|
|
8670
|
+
), /* @__PURE__ */ React65.createElement(InlineFormattingToolbar, __spreadValues({ anchorEl: textareaRef.current }, toolbarProps)));
|
|
8429
8671
|
}
|
|
8430
8672
|
if (isMarkdown) {
|
|
8431
|
-
return /* @__PURE__ */
|
|
8673
|
+
return /* @__PURE__ */ React65.createElement(
|
|
8432
8674
|
"div",
|
|
8433
8675
|
{
|
|
8434
8676
|
ref: displayRef,
|
|
@@ -8437,34 +8679,34 @@ function TextEditor({ style, props }) {
|
|
|
8437
8679
|
}
|
|
8438
8680
|
);
|
|
8439
8681
|
}
|
|
8440
|
-
return /* @__PURE__ */
|
|
8682
|
+
return /* @__PURE__ */ React65.createElement("div", { ref: displayRef, style: wStyle }, textContent);
|
|
8441
8683
|
}
|
|
8442
8684
|
|
|
8443
8685
|
// src/editor/core.tsx
|
|
8444
8686
|
var EDITOR_DICTIONARY = buildBlockConfigurationDictionary({
|
|
8445
8687
|
Avatar: {
|
|
8446
8688
|
schema: AvatarPropsSchema,
|
|
8447
|
-
Component: (props) => /* @__PURE__ */
|
|
8689
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(avatar_default, __spreadValues({}, props)))
|
|
8448
8690
|
},
|
|
8449
8691
|
Button: {
|
|
8450
8692
|
schema: ButtonPropsSchema,
|
|
8451
|
-
Component: (props) => /* @__PURE__ */
|
|
8693
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(ButtonEditor, __spreadValues({}, props)))
|
|
8452
8694
|
},
|
|
8453
8695
|
Container: {
|
|
8454
8696
|
schema: container_props_schema_default,
|
|
8455
|
-
Component: (props) => /* @__PURE__ */
|
|
8697
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(ContainerEditor, __spreadValues({}, props)))
|
|
8456
8698
|
},
|
|
8457
8699
|
ColumnsContainer: {
|
|
8458
8700
|
schema: columns_container_props_schema_default2,
|
|
8459
|
-
Component: (props) => /* @__PURE__ */
|
|
8701
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(ColumnsContainerEditor, __spreadValues({}, props)))
|
|
8460
8702
|
},
|
|
8461
8703
|
Heading: {
|
|
8462
8704
|
schema: HeadingPropsSchema,
|
|
8463
|
-
Component: (props) => /* @__PURE__ */
|
|
8705
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(HeadingEditor, __spreadValues({}, props)))
|
|
8464
8706
|
},
|
|
8465
8707
|
Html: {
|
|
8466
8708
|
schema: HtmlPropsSchema,
|
|
8467
|
-
Component: (props) => /* @__PURE__ */
|
|
8709
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(HtmlEditor, __spreadValues({}, props)))
|
|
8468
8710
|
},
|
|
8469
8711
|
Image: {
|
|
8470
8712
|
schema: ImagePropsSchema,
|
|
@@ -8476,28 +8718,32 @@ var EDITOR_DICTIONARY = buildBlockConfigurationDictionary({
|
|
|
8476
8718
|
linkHref: null
|
|
8477
8719
|
})
|
|
8478
8720
|
});
|
|
8479
|
-
return /* @__PURE__ */
|
|
8721
|
+
return /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(image_default, __spreadValues({}, props)));
|
|
8480
8722
|
}
|
|
8481
8723
|
},
|
|
8724
|
+
Otp: {
|
|
8725
|
+
schema: OtpPropsSchema,
|
|
8726
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(OtpEditor, __spreadValues({}, props)))
|
|
8727
|
+
},
|
|
8482
8728
|
Text: {
|
|
8483
8729
|
schema: TextPropsSchema,
|
|
8484
|
-
Component: (props) => /* @__PURE__ */
|
|
8730
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(TextEditor, __spreadValues({}, props)))
|
|
8485
8731
|
},
|
|
8486
8732
|
EmailLayout: {
|
|
8487
8733
|
schema: email_layout_props_schema_default,
|
|
8488
|
-
Component: (p) => /* @__PURE__ */
|
|
8734
|
+
Component: (p) => /* @__PURE__ */ React65.createElement(EmailLayoutEditor, __spreadValues({}, p))
|
|
8489
8735
|
},
|
|
8490
8736
|
Spacer: {
|
|
8491
8737
|
schema: SpacerPropsSchema,
|
|
8492
|
-
Component: (props) => /* @__PURE__ */
|
|
8738
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(spacer_default, __spreadValues({}, props)))
|
|
8493
8739
|
},
|
|
8494
8740
|
Divider: {
|
|
8495
8741
|
schema: DividerPropsSchema,
|
|
8496
|
-
Component: (props) => /* @__PURE__ */
|
|
8742
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(divider_default, __spreadValues({}, props)))
|
|
8497
8743
|
},
|
|
8498
8744
|
Signature: {
|
|
8499
8745
|
schema: SignaturePropsSchema,
|
|
8500
|
-
Component: (props) => /* @__PURE__ */
|
|
8746
|
+
Component: (props) => /* @__PURE__ */ React65.createElement(EditorBlockWrapper, null, /* @__PURE__ */ React65.createElement(SignatureEditor, __spreadValues({}, props)))
|
|
8501
8747
|
}
|
|
8502
8748
|
});
|
|
8503
8749
|
var EditorBlock2 = buildBlockComponent(EDITOR_DICTIONARY);
|
|
@@ -8513,7 +8759,7 @@ function EditorBlock({ id }) {
|
|
|
8513
8759
|
if (!block) {
|
|
8514
8760
|
throw new Error("Could not find block");
|
|
8515
8761
|
}
|
|
8516
|
-
return /* @__PURE__ */
|
|
8762
|
+
return /* @__PURE__ */ React65.createElement(EditorBlockContext.Provider, { value: id }, /* @__PURE__ */ React65.createElement(EditorBlock2, __spreadValues({}, block)));
|
|
8517
8763
|
}
|
|
8518
8764
|
function ToggleInspectorPanelButton() {
|
|
8519
8765
|
const inspectorDrawerOpen = useInspectorDrawerOpen();
|
|
@@ -8521,20 +8767,20 @@ function ToggleInspectorPanelButton() {
|
|
|
8521
8767
|
toggleInspectorDrawerOpen();
|
|
8522
8768
|
};
|
|
8523
8769
|
if (inspectorDrawerOpen) {
|
|
8524
|
-
return /* @__PURE__ */
|
|
8770
|
+
return /* @__PURE__ */ React65.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React65.createElement(LastPageOutlined, { fontSize: "small" }));
|
|
8525
8771
|
}
|
|
8526
|
-
return /* @__PURE__ */
|
|
8772
|
+
return /* @__PURE__ */ React65.createElement(IconButton, { onClick: handleClick }, /* @__PURE__ */ React65.createElement(AppRegistrationOutlined, { fontSize: "small" }));
|
|
8527
8773
|
}
|
|
8528
8774
|
function useIcon() {
|
|
8529
8775
|
const samplesDrawerOpen = useSamplesDrawerOpen();
|
|
8530
8776
|
if (samplesDrawerOpen) {
|
|
8531
|
-
return /* @__PURE__ */
|
|
8777
|
+
return /* @__PURE__ */ React65.createElement(FirstPageOutlined, { fontSize: "small" });
|
|
8532
8778
|
}
|
|
8533
|
-
return /* @__PURE__ */
|
|
8779
|
+
return /* @__PURE__ */ React65.createElement(MenuOutlined, { fontSize: "small" });
|
|
8534
8780
|
}
|
|
8535
8781
|
function ToggleSamplesPanelButton() {
|
|
8536
8782
|
const icon = useIcon();
|
|
8537
|
-
return /* @__PURE__ */
|
|
8783
|
+
return /* @__PURE__ */ React65.createElement(IconButton, { onClick: toggleSamplesDrawerOpen }, icon);
|
|
8538
8784
|
}
|
|
8539
8785
|
function formatHtml(html2, spaces = 2) {
|
|
8540
8786
|
try {
|
|
@@ -8596,7 +8842,7 @@ function HighlightedCodePanel({ type, value }) {
|
|
|
8596
8842
|
if (code === null) {
|
|
8597
8843
|
return null;
|
|
8598
8844
|
}
|
|
8599
|
-
return /* @__PURE__ */
|
|
8845
|
+
return /* @__PURE__ */ React65.createElement(
|
|
8600
8846
|
"pre",
|
|
8601
8847
|
{
|
|
8602
8848
|
style: {
|
|
@@ -8622,17 +8868,17 @@ function HighlightedCodePanel({ type, value }) {
|
|
|
8622
8868
|
function HtmlPanel() {
|
|
8623
8869
|
const document2 = useDocument();
|
|
8624
8870
|
const code = useMemo(() => renderToStaticMarkup(document2, { rootBlockId: "root" }), [document2]);
|
|
8625
|
-
return /* @__PURE__ */
|
|
8871
|
+
return /* @__PURE__ */ React65.createElement(HighlightedCodePanel, { type: "html", value: code });
|
|
8626
8872
|
}
|
|
8627
8873
|
function JsonPanel() {
|
|
8628
8874
|
const document2 = useDocument();
|
|
8629
8875
|
const code = useMemo(() => JSON.stringify(document2, null, " "), [document2]);
|
|
8630
|
-
return /* @__PURE__ */
|
|
8876
|
+
return /* @__PURE__ */ React65.createElement(HighlightedCodePanel, { type: "json", value: code });
|
|
8631
8877
|
}
|
|
8632
8878
|
function TextPanel() {
|
|
8633
8879
|
const document2 = useDocument();
|
|
8634
8880
|
const text = useMemo(() => renderToText(document2, { rootBlockId: "root" }), [document2]);
|
|
8635
|
-
return /* @__PURE__ */
|
|
8881
|
+
return /* @__PURE__ */ React65.createElement(
|
|
8636
8882
|
"pre",
|
|
8637
8883
|
{
|
|
8638
8884
|
style: {
|
|
@@ -8668,35 +8914,35 @@ function MainTabsGroup() {
|
|
|
8668
8914
|
setSelectedMainTab("editor");
|
|
8669
8915
|
}
|
|
8670
8916
|
};
|
|
8671
|
-
return /* @__PURE__ */
|
|
8917
|
+
return /* @__PURE__ */ React65.createElement(Tabs, { value: selectedMainTab, onChange: handleChange }, /* @__PURE__ */ React65.createElement(
|
|
8672
8918
|
Tab,
|
|
8673
8919
|
{
|
|
8674
8920
|
value: "editor",
|
|
8675
|
-
label: /* @__PURE__ */
|
|
8921
|
+
label: /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tab.edit", "Edit") }, /* @__PURE__ */ React65.createElement(EditOutlined, { fontSize: "small" }))
|
|
8676
8922
|
}
|
|
8677
|
-
), /* @__PURE__ */
|
|
8923
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8678
8924
|
Tab,
|
|
8679
8925
|
{
|
|
8680
8926
|
value: "preview",
|
|
8681
|
-
label: /* @__PURE__ */
|
|
8927
|
+
label: /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tab.preview", "Preview") }, /* @__PURE__ */ React65.createElement(PreviewOutlined, { fontSize: "small" }))
|
|
8682
8928
|
}
|
|
8683
|
-
), /* @__PURE__ */
|
|
8929
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8684
8930
|
Tab,
|
|
8685
8931
|
{
|
|
8686
8932
|
value: "html",
|
|
8687
|
-
label: /* @__PURE__ */
|
|
8933
|
+
label: /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tab.html-output", "HTML output") }, /* @__PURE__ */ React65.createElement(CodeOutlined, { fontSize: "small" }))
|
|
8688
8934
|
}
|
|
8689
|
-
), /* @__PURE__ */
|
|
8935
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8690
8936
|
Tab,
|
|
8691
8937
|
{
|
|
8692
8938
|
value: "text",
|
|
8693
|
-
label: /* @__PURE__ */
|
|
8939
|
+
label: /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tab.text-output", "Plain text output") }, /* @__PURE__ */ React65.createElement(SubjectOutlined, { fontSize: "small" }))
|
|
8694
8940
|
}
|
|
8695
|
-
), /* @__PURE__ */
|
|
8941
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8696
8942
|
Tab,
|
|
8697
8943
|
{
|
|
8698
8944
|
value: "json",
|
|
8699
|
-
label: /* @__PURE__ */
|
|
8945
|
+
label: /* @__PURE__ */ React65.createElement(Tooltip, { title: t("tab.json-output", "JSON output") }, /* @__PURE__ */ React65.createElement(DataObjectOutlined, { fontSize: "small" }))
|
|
8700
8946
|
}
|
|
8701
8947
|
));
|
|
8702
8948
|
}
|
|
@@ -8751,7 +8997,7 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8751
8997
|
return false;
|
|
8752
8998
|
}
|
|
8753
8999
|
});
|
|
8754
|
-
return /* @__PURE__ */
|
|
9000
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
8755
9001
|
Box,
|
|
8756
9002
|
{
|
|
8757
9003
|
sx: {
|
|
@@ -8764,7 +9010,7 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8764
9010
|
pb: 3
|
|
8765
9011
|
}
|
|
8766
9012
|
},
|
|
8767
|
-
/* @__PURE__ */
|
|
9013
|
+
/* @__PURE__ */ React65.createElement(
|
|
8768
9014
|
Box,
|
|
8769
9015
|
{
|
|
8770
9016
|
sx: {
|
|
@@ -8779,7 +9025,7 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8779
9025
|
boxShadow: "0 2px 6px rgba(33, 36, 67, 0.06), 0 16px 40px rgba(33, 36, 67, 0.14)"
|
|
8780
9026
|
}
|
|
8781
9027
|
},
|
|
8782
|
-
hasOpenRow && currentTemplateName && /* @__PURE__ */
|
|
9028
|
+
hasOpenRow && currentTemplateName && /* @__PURE__ */ React65.createElement(
|
|
8783
9029
|
Box,
|
|
8784
9030
|
{
|
|
8785
9031
|
sx: {
|
|
@@ -8795,25 +9041,25 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8795
9041
|
title: currentTemplateName
|
|
8796
9042
|
},
|
|
8797
9043
|
isSample ? `${t("savebar.sample-prefix", "Sample")} \xB7 ` : "",
|
|
8798
|
-
/* @__PURE__ */
|
|
9044
|
+
/* @__PURE__ */ React65.createElement(Box, { component: "span", sx: { color: "text.primary", fontWeight: 600 } }, currentTemplateName)
|
|
8799
9045
|
),
|
|
8800
|
-
/* @__PURE__ */
|
|
9046
|
+
/* @__PURE__ */ React65.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__ */ React65.createElement(
|
|
8801
9047
|
Button$1,
|
|
8802
9048
|
{
|
|
8803
9049
|
variant: "contained",
|
|
8804
9050
|
size: "large",
|
|
8805
|
-
startIcon: /* @__PURE__ */
|
|
9051
|
+
startIcon: /* @__PURE__ */ React65.createElement(SaveOutlined, null),
|
|
8806
9052
|
onClick: handlePrimary,
|
|
8807
9053
|
sx: { borderRadius: 999, textTransform: "none", px: 2.5, fontSize: 15, fontWeight: 600 }
|
|
8808
9054
|
},
|
|
8809
9055
|
primaryLabel
|
|
8810
9056
|
)),
|
|
8811
|
-
hasOpenRow && saveAs && /* @__PURE__ */
|
|
9057
|
+
hasOpenRow && saveAs && /* @__PURE__ */ React65.createElement(Tooltip, { title: t("savebar.save-as-new-template", "Save as a new template") }, /* @__PURE__ */ React65.createElement(
|
|
8812
9058
|
Button$1,
|
|
8813
9059
|
{
|
|
8814
9060
|
variant: "outlined",
|
|
8815
9061
|
size: "large",
|
|
8816
|
-
startIcon: /* @__PURE__ */
|
|
9062
|
+
startIcon: /* @__PURE__ */ React65.createElement(SaveAsOutlined, null),
|
|
8817
9063
|
onClick: () => {
|
|
8818
9064
|
setNameError(null);
|
|
8819
9065
|
setDialogMode("save-as");
|
|
@@ -8822,12 +9068,12 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8822
9068
|
},
|
|
8823
9069
|
t("savebar.save-as", "Save as\u2026")
|
|
8824
9070
|
)),
|
|
8825
|
-
saveAs && /* @__PURE__ */
|
|
9071
|
+
saveAs && /* @__PURE__ */ React65.createElement(Tooltip, { title: t("savebar.start-fresh", "Start a fresh template") }, /* @__PURE__ */ React65.createElement(
|
|
8826
9072
|
Button$1,
|
|
8827
9073
|
{
|
|
8828
9074
|
variant: "text",
|
|
8829
9075
|
size: "large",
|
|
8830
|
-
startIcon: /* @__PURE__ */
|
|
9076
|
+
startIcon: /* @__PURE__ */ React65.createElement(AddOutlined, null),
|
|
8831
9077
|
onClick: () => {
|
|
8832
9078
|
setNameError(null);
|
|
8833
9079
|
setDialogMode("new-blank");
|
|
@@ -8837,7 +9083,7 @@ function SaveBar({ loadTemplates, saveAs }) {
|
|
|
8837
9083
|
t("savebar.new", "New")
|
|
8838
9084
|
))
|
|
8839
9085
|
)
|
|
8840
|
-
), /* @__PURE__ */
|
|
9086
|
+
), /* @__PURE__ */ React65.createElement(
|
|
8841
9087
|
SaveTemplateDialog,
|
|
8842
9088
|
{
|
|
8843
9089
|
open: dialogMode !== null,
|
|
@@ -8891,7 +9137,7 @@ function UndoRedoButtons() {
|
|
|
8891
9137
|
window.addEventListener("keydown", onKeyDown);
|
|
8892
9138
|
return () => window.removeEventListener("keydown", onKeyDown);
|
|
8893
9139
|
}, [mac]);
|
|
8894
|
-
return /* @__PURE__ */
|
|
9140
|
+
return /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 0.5, alignItems: "center" }, /* @__PURE__ */ React65.createElement(Tooltip, { title: `${t("undo.tooltip", "Undo")} (${undoHint})` }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
8895
9141
|
IconButton,
|
|
8896
9142
|
{
|
|
8897
9143
|
size: "small",
|
|
@@ -8899,8 +9145,8 @@ function UndoRedoButtons() {
|
|
|
8899
9145
|
disabled: !canUndo,
|
|
8900
9146
|
"aria-label": t("undo.label", "Undo")
|
|
8901
9147
|
},
|
|
8902
|
-
/* @__PURE__ */
|
|
8903
|
-
))), /* @__PURE__ */
|
|
9148
|
+
/* @__PURE__ */ React65.createElement(UndoOutlined, { fontSize: "small" })
|
|
9149
|
+
))), /* @__PURE__ */ React65.createElement(Tooltip, { title: `${t("redo.tooltip", "Redo")} (${redoHint})` }, /* @__PURE__ */ React65.createElement("span", null, /* @__PURE__ */ React65.createElement(
|
|
8904
9150
|
IconButton,
|
|
8905
9151
|
{
|
|
8906
9152
|
size: "small",
|
|
@@ -8908,7 +9154,7 @@ function UndoRedoButtons() {
|
|
|
8908
9154
|
disabled: !canRedo,
|
|
8909
9155
|
"aria-label": t("redo.label", "Redo")
|
|
8910
9156
|
},
|
|
8911
|
-
/* @__PURE__ */
|
|
9157
|
+
/* @__PURE__ */ React65.createElement(RedoOutlined, { fontSize: "small" })
|
|
8912
9158
|
))));
|
|
8913
9159
|
}
|
|
8914
9160
|
function SubjectInput() {
|
|
@@ -8934,7 +9180,7 @@ function SubjectInput() {
|
|
|
8934
9180
|
selectionEnd: (_b = target.selectionEnd) != null ? _b : target.value.length
|
|
8935
9181
|
});
|
|
8936
9182
|
};
|
|
8937
|
-
return /* @__PURE__ */
|
|
9183
|
+
return /* @__PURE__ */ React65.createElement(
|
|
8938
9184
|
Box,
|
|
8939
9185
|
{
|
|
8940
9186
|
sx: {
|
|
@@ -8951,8 +9197,8 @@ function SubjectInput() {
|
|
|
8951
9197
|
gap: 1.5
|
|
8952
9198
|
}
|
|
8953
9199
|
},
|
|
8954
|
-
/* @__PURE__ */
|
|
8955
|
-
/* @__PURE__ */
|
|
9200
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, t("subject.label", "Subject")),
|
|
9201
|
+
/* @__PURE__ */ React65.createElement(
|
|
8956
9202
|
InputBase,
|
|
8957
9203
|
{
|
|
8958
9204
|
fullWidth: true,
|
|
@@ -8978,7 +9224,7 @@ function SubjectPreview() {
|
|
|
8978
9224
|
if (!subject) return null;
|
|
8979
9225
|
const samples = buildSampleValueMap((_b = data.variables) != null ? _b : []);
|
|
8980
9226
|
const rendered = substituteSampleValues(subject, samples);
|
|
8981
|
-
return /* @__PURE__ */
|
|
9227
|
+
return /* @__PURE__ */ React65.createElement(
|
|
8982
9228
|
Box,
|
|
8983
9229
|
{
|
|
8984
9230
|
sx: {
|
|
@@ -8995,8 +9241,8 @@ function SubjectPreview() {
|
|
|
8995
9241
|
gap: 1.5
|
|
8996
9242
|
}
|
|
8997
9243
|
},
|
|
8998
|
-
/* @__PURE__ */
|
|
8999
|
-
/* @__PURE__ */
|
|
9244
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { color: "text.secondary", fontSize: 13, fontWeight: 600, minWidth: 56 } }, t("subject.label", "Subject")),
|
|
9245
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { fontSize: 14 } }, rendered)
|
|
9000
9246
|
);
|
|
9001
9247
|
}
|
|
9002
9248
|
function generateId3() {
|
|
@@ -9069,7 +9315,7 @@ function ImageDropPasteHandler({ enabled, children }) {
|
|
|
9069
9315
|
window.addEventListener("paste", handlePaste);
|
|
9070
9316
|
return () => window.removeEventListener("paste", handlePaste);
|
|
9071
9317
|
}, [active, uploadImage]);
|
|
9072
|
-
if (!active) return /* @__PURE__ */
|
|
9318
|
+
if (!active) return /* @__PURE__ */ React65.createElement(React65.Fragment, null, children);
|
|
9073
9319
|
const onDragEnter = (e) => {
|
|
9074
9320
|
var _a, _b;
|
|
9075
9321
|
if (!Array.from((_b = (_a = e.dataTransfer) == null ? void 0 : _a.items) != null ? _b : []).some((i) => i.kind === "file")) return;
|
|
@@ -9102,7 +9348,7 @@ function ImageDropPasteHandler({ enabled, children }) {
|
|
|
9102
9348
|
setUploading(false);
|
|
9103
9349
|
}
|
|
9104
9350
|
});
|
|
9105
|
-
return /* @__PURE__ */
|
|
9351
|
+
return /* @__PURE__ */ React65.createElement(
|
|
9106
9352
|
Box,
|
|
9107
9353
|
{
|
|
9108
9354
|
ref: wrapperRef,
|
|
@@ -9113,7 +9359,7 @@ function ImageDropPasteHandler({ enabled, children }) {
|
|
|
9113
9359
|
sx: { position: "relative" }
|
|
9114
9360
|
},
|
|
9115
9361
|
children,
|
|
9116
|
-
(dragging || uploading) && /* @__PURE__ */
|
|
9362
|
+
(dragging || uploading) && /* @__PURE__ */ React65.createElement(
|
|
9117
9363
|
Box,
|
|
9118
9364
|
{
|
|
9119
9365
|
sx: {
|
|
@@ -9132,7 +9378,7 @@ function ImageDropPasteHandler({ enabled, children }) {
|
|
|
9132
9378
|
zIndex: 10
|
|
9133
9379
|
}
|
|
9134
9380
|
},
|
|
9135
|
-
/* @__PURE__ */
|
|
9381
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { display: "flex", alignItems: "center", gap: 1, fontWeight: 600, fontSize: 14 } }, /* @__PURE__ */ React65.createElement(CloudUploadOutlined, null), uploading ? "Uploading\u2026" : "Drop image to insert")
|
|
9136
9382
|
)
|
|
9137
9383
|
);
|
|
9138
9384
|
}
|
|
@@ -9182,7 +9428,7 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
|
|
|
9182
9428
|
var _a;
|
|
9183
9429
|
switch (selectedMainTab) {
|
|
9184
9430
|
case "editor":
|
|
9185
|
-
return /* @__PURE__ */
|
|
9431
|
+
return /* @__PURE__ */ React65.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React65.createElement(EditorBlock, { id: "root" }));
|
|
9186
9432
|
case "preview": {
|
|
9187
9433
|
const rootBlock = document2.root;
|
|
9188
9434
|
const layoutData = rootBlock && rootBlock.type === "EmailLayout" ? rootBlock.data : void 0;
|
|
@@ -9190,18 +9436,18 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
|
|
|
9190
9436
|
(_a = layoutData == null ? void 0 : layoutData.variables) != null ? _a : []
|
|
9191
9437
|
);
|
|
9192
9438
|
const previewDoc = applySampleValuesToDocument(document2, samples);
|
|
9193
|
-
return /* @__PURE__ */
|
|
9439
|
+
return /* @__PURE__ */ React65.createElement(Box, { sx: mainBoxSx }, /* @__PURE__ */ React65.createElement(Reader, { document: previewDoc, rootBlockId: "root" }));
|
|
9194
9440
|
}
|
|
9195
9441
|
case "html":
|
|
9196
|
-
return /* @__PURE__ */
|
|
9442
|
+
return /* @__PURE__ */ React65.createElement(HtmlPanel, null);
|
|
9197
9443
|
case "text":
|
|
9198
|
-
return /* @__PURE__ */
|
|
9444
|
+
return /* @__PURE__ */ React65.createElement(TextPanel, null);
|
|
9199
9445
|
case "json":
|
|
9200
|
-
return /* @__PURE__ */
|
|
9446
|
+
return /* @__PURE__ */ React65.createElement(JsonPanel, null);
|
|
9201
9447
|
}
|
|
9202
9448
|
};
|
|
9203
9449
|
const showSaveButtons = persistenceEnabled;
|
|
9204
|
-
return /* @__PURE__ */
|
|
9450
|
+
return /* @__PURE__ */ React65.createElement(React65.Fragment, null, /* @__PURE__ */ React65.createElement(
|
|
9205
9451
|
Stack,
|
|
9206
9452
|
{
|
|
9207
9453
|
sx: {
|
|
@@ -9218,10 +9464,10 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
|
|
|
9218
9464
|
justifyContent: "space-between",
|
|
9219
9465
|
alignItems: "center"
|
|
9220
9466
|
},
|
|
9221
|
-
samplesDrawerEnabled && /* @__PURE__ */
|
|
9222
|
-
/* @__PURE__ */
|
|
9223
|
-
/* @__PURE__ */
|
|
9224
|
-
), selectedMainTab === "editor" && /* @__PURE__ */
|
|
9467
|
+
samplesDrawerEnabled && /* @__PURE__ */ React65.createElement(ToggleSamplesPanelButton, null),
|
|
9468
|
+
/* @__PURE__ */ React65.createElement(Stack, { px: 2, direction: "row", gap: 2, width: "100%", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 2 }, /* @__PURE__ */ React65.createElement(MainTabsGroup, null)), /* @__PURE__ */ React65.createElement(Stack, { direction: "row", spacing: 2, alignItems: "center" }, selectedMainTab === "editor" && /* @__PURE__ */ React65.createElement(UndoRedoButtons, null), /* @__PURE__ */ React65.createElement(ToggleButtonGroup, { value: selectedScreenSize, exclusive: true, size: "small", onChange: handleScreenSizeChange }, /* @__PURE__ */ React65.createElement(ToggleButton, { value: "desktop" }, /* @__PURE__ */ React65.createElement(Tooltip, { title: t("canvas.desktop-view", "Desktop view") }, /* @__PURE__ */ React65.createElement(MonitorOutlined, { fontSize: "small" }))), /* @__PURE__ */ React65.createElement(ToggleButton, { value: "mobile" }, /* @__PURE__ */ React65.createElement(Tooltip, { title: t("canvas.mobile-view", "Mobile view") }, /* @__PURE__ */ React65.createElement(PhoneIphoneOutlined, { fontSize: "small" })))), onTestSend && /* @__PURE__ */ React65.createElement(Tooltip, { title: t("canvas.send-test", "Send test") }, /* @__PURE__ */ React65.createElement(IconButton, { size: "small", onClick: handleTestSend }, /* @__PURE__ */ React65.createElement(SendOutlined, { fontSize: "small" }))))),
|
|
9469
|
+
/* @__PURE__ */ React65.createElement(ToggleInspectorPanelButton, null)
|
|
9470
|
+
), selectedMainTab === "editor" && /* @__PURE__ */ React65.createElement(SubjectInput, null), selectedMainTab === "preview" && /* @__PURE__ */ React65.createElement(SubjectPreview, null), /* @__PURE__ */ React65.createElement(ImageDropPasteHandler, { enabled: selectedMainTab === "editor" }, /* @__PURE__ */ React65.createElement(
|
|
9225
9471
|
Box,
|
|
9226
9472
|
{
|
|
9227
9473
|
sx: {
|
|
@@ -9237,8 +9483,8 @@ function TemplatePanel2({ loadTemplates, saveAs, samplesDrawerEnabled = true })
|
|
|
9237
9483
|
background: selectedMainTab === "editor" ? workspaceBackground === "checkerboard" ? WORKSPACE_CHECKERBOARD : WORKSPACE_SOLID : void 0
|
|
9238
9484
|
}
|
|
9239
9485
|
},
|
|
9240
|
-
/* @__PURE__ */
|
|
9241
|
-
showSaveButtons && selectedMainTab === "editor" && /* @__PURE__ */
|
|
9486
|
+
/* @__PURE__ */ React65.createElement(Box, { sx: { flexGrow: 1 } }, renderMainPanel()),
|
|
9487
|
+
showSaveButtons && selectedMainTab === "editor" && /* @__PURE__ */ React65.createElement(SaveBar, { loadTemplates, saveAs })
|
|
9242
9488
|
)));
|
|
9243
9489
|
}
|
|
9244
9490
|
|
|
@@ -9320,7 +9566,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
|
|
|
9320
9566
|
return getDocument();
|
|
9321
9567
|
}
|
|
9322
9568
|
}));
|
|
9323
|
-
return /* @__PURE__ */
|
|
9569
|
+
return /* @__PURE__ */ React65.createElement(Stack, { position: "relative", id: "drawer-container", sx: { minHeight } }, /* @__PURE__ */ React65.createElement(
|
|
9324
9570
|
InspectorDrawer,
|
|
9325
9571
|
{
|
|
9326
9572
|
enterDuration: drawerEnterDuration,
|
|
@@ -9329,7 +9575,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
|
|
|
9329
9575
|
copyTemplate,
|
|
9330
9576
|
renameTemplate
|
|
9331
9577
|
}
|
|
9332
|
-
), /* @__PURE__ */
|
|
9578
|
+
), /* @__PURE__ */ React65.createElement(
|
|
9333
9579
|
SamplesDrawer,
|
|
9334
9580
|
{
|
|
9335
9581
|
enterDuration: drawerEnterDuration,
|
|
@@ -9345,7 +9591,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
|
|
|
9345
9591
|
setTemplateKind,
|
|
9346
9592
|
saveAs
|
|
9347
9593
|
}
|
|
9348
|
-
), /* @__PURE__ */
|
|
9594
|
+
), /* @__PURE__ */ React65.createElement(
|
|
9349
9595
|
Stack,
|
|
9350
9596
|
{
|
|
9351
9597
|
sx: {
|
|
@@ -9354,7 +9600,7 @@ var EmailEditorInternal = forwardRef((props, ref) => {
|
|
|
9354
9600
|
transition: [marginLeftTransition, marginRightTransition].join(", ")
|
|
9355
9601
|
}
|
|
9356
9602
|
},
|
|
9357
|
-
/* @__PURE__ */
|
|
9603
|
+
/* @__PURE__ */ React65.createElement(TemplatePanel2, { loadTemplates, saveAs, samplesDrawerEnabled })
|
|
9358
9604
|
));
|
|
9359
9605
|
});
|
|
9360
9606
|
var EmailEditor = forwardRef((props, ref) => {
|
|
@@ -9407,7 +9653,7 @@ var EmailEditor = forwardRef((props, ref) => {
|
|
|
9407
9653
|
() => ({ favoriteColors, customBlocks, onTestSend }),
|
|
9408
9654
|
[favoriteColors, customBlocks, onTestSend]
|
|
9409
9655
|
);
|
|
9410
|
-
return /* @__PURE__ */
|
|
9656
|
+
return /* @__PURE__ */ React65.createElement(I18nProvider, { i18n }, /* @__PURE__ */ React65.createElement(ThemeProvider, { theme: theme || theme_default }, /* @__PURE__ */ React65.createElement(CssBaseline, null), /* @__PURE__ */ React65.createElement("div", { style: { height: "100%", overflow: "auto" } }, /* @__PURE__ */ React65.createElement(SnackbarProvider, null, /* @__PURE__ */ React65.createElement(EditorConfigProvider, { config: editorConfig }, /* @__PURE__ */ React65.createElement(ImageCallbacksProvider, { callbacks: imageCallbacks }, /* @__PURE__ */ React65.createElement(
|
|
9411
9657
|
EmailEditorProvider,
|
|
9412
9658
|
{
|
|
9413
9659
|
initialTemplate: resolvedTemplate,
|
|
@@ -9416,7 +9662,7 @@ var EmailEditor = forwardRef((props, ref) => {
|
|
|
9416
9662
|
onSave,
|
|
9417
9663
|
onChange
|
|
9418
9664
|
},
|
|
9419
|
-
/* @__PURE__ */
|
|
9665
|
+
/* @__PURE__ */ React65.createElement(
|
|
9420
9666
|
EmailEditorInternal,
|
|
9421
9667
|
{
|
|
9422
9668
|
ref,
|
|
@@ -9440,6 +9686,6 @@ var EmailEditor = forwardRef((props, ref) => {
|
|
|
9440
9686
|
EmailEditor.displayName = "EmailEditor";
|
|
9441
9687
|
EmailEditorInternal.displayName = "EmailEditorInternal";
|
|
9442
9688
|
|
|
9443
|
-
export { avatar_default as Avatar, AvatarProps, AvatarPropsDefaults, AvatarPropsSchema, BlockConfiguration, button_default as Button, ButtonProps, ButtonPropsDefaults, ButtonPropsSchema, columns_container_default as ColumnsContainer, ColumnsContainerProps, ColumnsContainerPropsSchema, ColumnsContainerReader, container_default as Container, ContainerProps, ContainerPropsSchema, ContainerReader, divider_default as Divider, DividerProps, DividerPropsDefaults, DividerPropsSchema, DocumentBlocksDictionary, EmailEditor, EmailEditorProvider, EmailLayoutPropsSchema, EmailLayoutReader, EmailMarkdown, heading_default as Heading, HeadingProps, HeadingPropsDefaults, HeadingPropsSchema, html_default as Html, HtmlProps, HtmlPropsSchema, image_default as Image, ImageProps, ImagePropsSchema, Reader, ReaderBlock, ReaderBlockSchema, ReaderDocumentSchema, SUPPORTED_LOCALES, signature_default as Signature, SignatureProps, SignaturePropsDefaults, SignaturePropsSchema, spacer_default as Spacer, SpacerProps, SpacerPropsDefaults, SpacerPropsSchema, TemplateVariableSchema, Text, TextProps, TextPropsDefaults, TextPropsSchema, buildBlockComponent, buildBlockConfigurationDictionary, buildBlockConfigurationSchema, editorHandlebars, evaluateHandlebars, htmlToEditorConfig, renderToStaticMarkup, renderToText, theme_default as theme, useEmailEditor };
|
|
9689
|
+
export { avatar_default as Avatar, AvatarProps, AvatarPropsDefaults, AvatarPropsSchema, BlockConfiguration, button_default as Button, ButtonProps, ButtonPropsDefaults, ButtonPropsSchema, columns_container_default as ColumnsContainer, ColumnsContainerProps, ColumnsContainerPropsSchema, ColumnsContainerReader, container_default as Container, ContainerProps, ContainerPropsSchema, ContainerReader, divider_default as Divider, DividerProps, DividerPropsDefaults, DividerPropsSchema, DocumentBlocksDictionary, EmailEditor, EmailEditorProvider, EmailLayoutPropsSchema, EmailLayoutReader, EmailMarkdown, heading_default as Heading, HeadingProps, HeadingPropsDefaults, HeadingPropsSchema, html_default as Html, HtmlProps, HtmlPropsSchema, image_default as Image, ImageProps, ImagePropsSchema, otp_default as Otp, OtpProps, OtpPropsDefaults, OtpPropsSchema, Reader, ReaderBlock, ReaderBlockSchema, ReaderDocumentSchema, SUPPORTED_LOCALES, signature_default as Signature, SignatureProps, SignaturePropsDefaults, SignaturePropsSchema, spacer_default as Spacer, SpacerProps, SpacerPropsDefaults, SpacerPropsSchema, TemplateVariableSchema, Text, TextProps, TextPropsDefaults, TextPropsSchema, buildBlockComponent, buildBlockConfigurationDictionary, buildBlockConfigurationSchema, editorHandlebars, evaluateHandlebars, htmlToEditorConfig, renderToStaticMarkup, renderToText, theme_default as theme, useEmailEditor };
|
|
9444
9690
|
//# sourceMappingURL=index.js.map
|
|
9445
9691
|
//# sourceMappingURL=index.js.map
|