diff --git a/packages/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.tsx b/packages/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.tsx index 03c2034..9293a0e 100644 --- a/packages/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.tsx +++ b/packages/editor-sample/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.tsx @@ -1,12 +1,15 @@ import React, { useState } from 'react'; +import { RoundedCornerOutlined } from '@mui/icons-material'; + import EmailLayoutPropsSchema, { EmailLayoutProps, } from '../../../../documents/blocks/EmailLayout/EmailLayoutPropsSchema'; import BaseSidebarPanel from './helpers/BaseSidebarPanel'; -import ColorInput from './helpers/inputs/ColorInput'; +import ColorInput, { NullableColorInput } from './helpers/inputs/ColorInput'; import { NullableFontFamily } from './helpers/inputs/FontFamily'; +import SliderInput from './helpers/inputs/SliderInput'; type EmailLayoutSidebarFieldsProps = { data: EmailLayoutProps; @@ -37,7 +40,22 @@ export default function EmailLayoutSidebarFields({ data, setData }: EmailLayoutS defaultValue={data.canvasColor ?? '#FFFFFF'} onChange={(canvasColor) => updateData({ ...data, canvasColor })} /> - + updateData({ ...data, borderColor })} + /> + } + units="px" + step={4} + marks + min={0} + max={48} + label="Canvas border radius" + defaultValue={data.borderRadius ?? 0} + onChange={(borderRadius) => updateData({ ...data, borderRadius })} + /> { + const v = props.borderColor; + if (!v) { + return undefined; + } + return `1px solid ${v}`; + })(), }} role="presentation" cellSpacing="0" diff --git a/packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx b/packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx index 5eef514..880f3ae 100644 --- a/packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx +++ b/packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx @@ -23,6 +23,8 @@ const FONT_FAMILY_SCHEMA = z const EmailLayoutPropsSchema = z.object({ backdropColor: COLOR_SCHEMA, + borderColor: COLOR_SCHEMA, + borderRadius: z.number().optional().nullable(), canvasColor: COLOR_SCHEMA, textColor: COLOR_SCHEMA, fontFamily: FONT_FAMILY_SCHEMA, diff --git a/packages/email-builder/src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx b/packages/email-builder/src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx index d06e5da..439b6ba 100644 --- a/packages/email-builder/src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx +++ b/packages/email-builder/src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx @@ -23,6 +23,8 @@ const FONT_FAMILY_SCHEMA = z export const EmailLayoutPropsSchema = z.object({ backdropColor: COLOR_SCHEMA, + borderColor: COLOR_SCHEMA, + borderRadius: z.number().optional().nullable(), canvasColor: COLOR_SCHEMA, textColor: COLOR_SCHEMA, fontFamily: FONT_FAMILY_SCHEMA, diff --git a/packages/email-builder/src/blocks/EmailLayout/EmailLayoutReader.tsx b/packages/email-builder/src/blocks/EmailLayout/EmailLayoutReader.tsx index 98e11be..7bc913b 100644 --- a/packages/email-builder/src/blocks/EmailLayout/EmailLayoutReader.tsx +++ b/packages/email-builder/src/blocks/EmailLayout/EmailLayoutReader.tsx @@ -53,6 +53,14 @@ export default function EmailLayoutReader(props: EmailLayoutProps) { margin: '0 auto', maxWidth: '600px', backgroundColor: props.canvasColor ?? '#FFFFFF', + borderRadius: props.borderRadius ?? undefined, + border: (() => { + const v = props.borderColor; + if (!v) { + return undefined; + } + return `1px solid ${v}`; + })(), }} role="presentation" cellSpacing="0"