@kontakto/email-template-editor 2.10.1 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/blocks/text.tsx","../src/blocks/avatar.tsx","../src/blocks/button.tsx","../src/blocks/columns-container.tsx","../src/blocks/container.tsx","../src/blocks/divider.tsx","../src/blocks/heading.tsx","../src/blocks/html.tsx","../src/blocks/image.tsx","../src/blocks/signature.tsx","../src/blocks/spacer.tsx","../src/core/builders/build-block-component.tsx","../src/core/builders/build-block-configuration-schema.ts","../src/core/builders/build-block-configuration-dictionary.ts","../src/core/utils.ts","../src/email-builder/handlebars.ts","../src/email-builder/blocks/columns-container/columns-container-props-schema.ts","../src/email-builder/blocks/columns-container/columns-container-reader.tsx","../src/email-builder/blocks/container/container-props-schema.ts","../src/email-builder/blocks/container/container-reader.tsx","../src/email-builder/blocks/email-layout/email-layout-props-schema.ts","../src/email-builder/blocks/email-layout/email-layout-reader.tsx","../src/email-builder/reader/core.tsx","../src/email-builder/renderers/render-to-static-markup.tsx","../src/email-builder/renderers/render-to-text.ts","../src/theme.ts","../src/locales/en/messages.ts","../src/locales/fi/messages.ts","../src/locales/sv/messages.ts","../src/i18n/index.ts","../src/editor/editor-context.tsx","../src/app/save-payload.ts","../src/app/context.tsx","../src/app/image-context.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/base-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/radio-group-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/raw/raw-slider-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/slider-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/swatch.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/picker.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/base-color-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/index.tsx","../src/editor/blocks/helpers/font-family.ts","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-family.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-size-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-weight-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/letter-spacing-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/line-height-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/padding-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-align-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/single-style-property-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/multi-style-property-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/avatar-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/button-sidebar-panel.tsx","../src/editor/blocks/columns-container/columns-container-props-schema.ts","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-dimension-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/column-widths-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/columns-container-sidebar-panel.tsx","../src/editor/blocks/container/container-props-schema.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/container-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/divider-sidebar-panel.tsx","../src/editor/blocks/email-layout/email-layout-props-schema.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/boolean-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/email-layout-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/heading-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/html-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/image-library-dialog.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/image-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/signature-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/spacer-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/text-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/index.tsx","../src/app/inspector-drawer/styles-panel.tsx","../src/app/inspector-drawer/template-panel-download-button.tsx","../src/app/inspector-drawer/template-panel.tsx","../src/app/variables/variable-utils.ts","../src/app/inspector-drawer/variables-panel.tsx","../src/app/inspector-drawer/index.tsx","../src/app/email-canvas/snackbar-provider.tsx","../src/app/templates-drawer/template-row.tsx","../src/editor/blocks/helpers/move-block.ts","../src/app/templates-drawer/outline-panel.tsx","../src/app/templates-drawer/new-template-picker-dialog.tsx","../src/app/templates-drawer/rename-dialog.tsx","../src/app/email-canvas/save-template-dialog.tsx","../sample-templates/empty-email-message.ts","../src/app/templates-drawer/index.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/block-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/buttons.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/blocks-menu.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/divider-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/placeholder-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/index.tsx","../src/editor/blocks/helpers/block-parent-context.tsx","../src/editor/blocks/helpers/editor-children-ids/index.tsx","../src/editor/blocks/columns-container/columns-container-editor.tsx","../src/editor/blocks/container/container-editor.tsx","../src/editor/blocks/email-layout/email-layout-editor.tsx","../src/editor/blocks/helpers/block-wrappers/tune-menu.tsx","../src/editor/blocks/helpers/block-wrappers/editor-block-wrapper.tsx","../src/editor/blocks/button/button-editor.tsx","../src/editor/blocks/helpers/use-markdown-toolbar.ts","../src/editor/blocks/text/inline-formatting-toolbar.tsx","../src/editor/blocks/heading/heading-editor.tsx","../src/editor/blocks/html/html-editor.tsx","../src/editor/blocks/signature/signature-editor.tsx","../src/editor/blocks/text/text-editor.tsx","../src/editor/core.tsx","../src/editor/editor-block.tsx","../src/app/inspector-drawer/toggle-inspector-panel-button.tsx","../src/app/templates-drawer/toggle-samples-panel-button.tsx","../src/app/email-canvas/helper/html-formatter.ts","../src/app/email-canvas/helper/highlighters.tsx","../src/app/email-canvas/helper/highlighted-code-panel.tsx","../src/app/email-canvas/html-panel.tsx","../src/app/email-canvas/json-panel.tsx","../src/app/email-canvas/text-panel.tsx","../src/app/email-canvas/main-tabs-group.tsx","../src/app/email-canvas/save-bar.tsx","../src/app/email-canvas/undo-redo-buttons.tsx","../src/app/email-canvas/subject-input.tsx","../src/app/email-canvas/subject-preview.tsx","../src/app/email-canvas/image-drop-paste-handler.tsx","../src/app/email-canvas/index.tsx","../src/app/index.tsx"],"names":["html","React","PADDING_SCHEMA","z","getPadding","FONT_FAMILY_SCHEMA","getFontFamily","COLOR_SCHEMA","useMemo","ColumnsContainerPropsSchema","ContainerPropsSchema","getBorder","document","baseRenderToStaticMarkup","messages","createContext","useContext","useState","Stack","Box","value","Typography","InputLabel","InputProps","useEffect","renderButton","Button","ColorInput","TextField","ToggleButton","size","shape","imageUrl","alt","text","url","buttonStyle","buttonTextColor","buttonBackgroundColor","BasePropsShape","columns_container_props_schema_default","SpaceBarOutlined","lineColor","lineHeight","TemplateVariableSchema","EmailLayoutPropsSchema","backdropDisabled","RoundedCornerOutlined","useRef","_a","_b","_c","_d","_e","_f","_g","_h","_i","CircularProgress","Alert","VerticalAlignTopOutlined","VerticalAlignCenterOutlined","VerticalAlignBottomOutlined","greeting","name","title","company","address","email","phone","website","AspectRatioOutlined","imageSize","imageShape","layout","nameColor","textColor","linkColor","HeightOutlined","data","ToggleButtonGroup","t","InputAdornment","AddOutlined","Tooltip","current","next","IconButton","Chip","ContentCopyOutlined","DeleteOutline","Menu","MenuItem","FileDownloadOutlined","Divider","DeleteOutlined","insertAt","sourceBlock","ROOT_BLOCK_ID","LibraryAddOutlined","Dialog","DialogTitle","DialogContent","ListItemText","DialogActions","Drawer","Tabs","Tab","SearchOutlined","BUTTON_SX","HMobiledataOutlined","NotesOutlined","SmartButtonOutlined","ImageOutlined","AccountCircleOutlined","ContactMailOutlined","BusinessOutlined","HorizontalRuleOutlined","Crop32Outlined","HtmlOutlined","ViewColumnOutlined","ButtonBase","childrenIds","generateId","useCallback","e","collectBlock","getRoundedCorners","getButtonSizePadding","Paper","TextFieldsOutlined","getFontSize","getImageBorderRadius","useLayoutEffect","EditorBlock","DataObjectOutlined","CloudUploadOutlined","TemplatePanel"],"mappings":"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","file":"index.js","sourcesContent":["import DOMPurify from 'dompurify';\nimport { marked, Renderer } from 'marked';\nimport React, { CSSProperties, useMemo } from 'react';\nimport { z } from 'zod';\n\n// EmailMarkdown Component\nconst ALLOWED_TAGS = [\n 'a',\n 'article',\n 'b',\n 'blockquote',\n 'br',\n 'caption',\n 'code',\n 'del',\n 'details',\n 'div',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'ins',\n 'kbd',\n 'li',\n 'main',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'span',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'u',\n 'ul',\n];\nconst ALLOWED_ATTR = [\n 'style',\n 'title',\n 'src',\n 'srcset',\n 'alt',\n 'width',\n 'height',\n 'href',\n 'target',\n 'align',\n 'start',\n];\n\nfunction sanitizer(html: string): string {\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n });\n}\n\nclass CustomRenderer extends Renderer {\n table(header: string, body: string) {\n return `<table width=\"100%\">\n<thead>\n${header}</thead>\n<tbody>\n${body}</tbody>\n</table>`;\n }\n\n link(href: string, title: string | null, text: string) {\n if (!title) {\n return `<a href=\"${href}\" target=\"_blank\">${text}</a>`;\n }\n return `<a href=\"${href}\" title=\"${title}\" target=\"_blank\">${text}</a>`;\n }\n\n // Give paragraphs an explicit bottom margin that matches a blank line in the\n // raw source. Without this, click-to-edit swaps the rendered div (flattened\n // by ambient CSS) for a textarea whose blank lines take a full line-height,\n // causing a visible layout jump.\n paragraph(text: string) {\n return `<p style=\"margin:0 0 1em 0\">${text}</p>`;\n }\n}\n\nexport function renderMarkdownString(str: string): string {\n const html = marked.parse(str, {\n async: false,\n breaks: true,\n gfm: true,\n pedantic: false,\n silent: false,\n renderer: new CustomRenderer(),\n });\n if (typeof html !== 'string') {\n throw new Error('marked.parse did not return a string');\n }\n return sanitizer(html);\n}\n\nexport function renderInlineMarkdownString(str: string): string {\n const html = marked.parseInline(str, {\n async: false,\n breaks: true,\n gfm: true,\n pedantic: false,\n silent: false,\n renderer: new CustomRenderer(),\n });\n if (typeof html !== 'string') {\n throw new Error('marked.parseInline did not return a string');\n }\n return sanitizer(html);\n}\n\ntype EmailMarkdownProps = {\n style: CSSProperties;\n markdown: string;\n};\n\nfunction EmailMarkdown({ markdown, ...props }: EmailMarkdownProps) {\n const data = useMemo(() => renderMarkdownString(markdown), [markdown]);\n return <div {...props} dangerouslySetInnerHTML={{ __html: data }} />;\n}\n\n// Text Component\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const TextPropsSchema = z.object({\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontSize: z.number().gte(0).optional().nullable(),\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n markdown: z.boolean().optional().nullable(),\n text: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type TextProps = z.infer<typeof TextPropsSchema>;\n// Export for runtime usage\nexport const TextProps = TextPropsSchema;\n\nexport const TextPropsDefaults = {\n text: '',\n};\n\nexport function Text({ style, props }: TextProps) {\n const wStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? undefined,\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const text = props?.text ?? TextPropsDefaults.text;\n if (props?.markdown) {\n return <EmailMarkdown style={wStyle} markdown={text} />;\n }\n return <div style={wStyle}>{text}</div>;\n}\n\n// Export the Text component as default\nexport default Text;\n\n// Also export the EmailMarkdown component for direct use if needed\nexport { EmailMarkdown }; ","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const AvatarPropsSchema = z.object({\n style: z\n .object({\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n size: z.number().gt(0).optional().nullable(),\n shape: z.enum(['circle', 'square', 'rounded']).optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type AvatarProps = z.infer<typeof AvatarPropsSchema>;\nexport const AvatarProps = AvatarPropsSchema;\n\nfunction getBorderRadius(shape: 'circle' | 'square' | 'rounded', size: number): number | undefined {\n switch (shape) {\n case 'rounded':\n return size * 0.125;\n case 'circle':\n return size;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport const AvatarPropsDefaults = {\n size: 64,\n imageUrl: '',\n alt: '',\n shape: 'square',\n} as const;\n\nexport function Avatar({ style, props }: AvatarProps) {\n const size = props?.size ?? AvatarPropsDefaults.size;\n const imageUrl = props?.imageUrl ?? AvatarPropsDefaults.imageUrl;\n const alt = props?.alt ?? AvatarPropsDefaults.alt;\n const shape = props?.shape ?? AvatarPropsDefaults.shape;\n\n const sectionStyle: CSSProperties = {\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n return (\n <div style={sectionStyle}>\n <img\n alt={alt}\n src={imageUrl}\n height={size}\n width={size}\n style={{\n outline: 'none',\n border: 'none',\n textDecoration: 'none',\n objectFit: 'cover',\n height: size,\n width: size,\n maxWidth: '100%',\n display: 'inline-block',\n verticalAlign: 'middle',\n textAlign: 'center',\n borderRadius: getBorderRadius(shape, size),\n }}\n />\n </div>\n );\n}\n\n// Export the Avatar component as default\nexport default Avatar;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ButtonPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n fontSize: z.number().min(0).optional().nullable(),\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n buttonBackgroundColor: COLOR_SCHEMA,\n buttonStyle: z.enum(['rectangle', 'pill', 'rounded']).optional().nullable(),\n buttonTextColor: COLOR_SCHEMA,\n fullWidth: z.boolean().optional().nullable(),\n size: z.enum(['x-small', 'small', 'large', 'medium']).optional().nullable(),\n text: z.string().optional().nullable(),\n url: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ButtonProps = z.infer<typeof ButtonPropsSchema>;\n// Export for runtime usage\nexport const ButtonProps = ButtonPropsSchema;\n\nfunction getRoundedCorners(props: ButtonProps['props']) {\n const buttonStyle = props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n\n switch (buttonStyle) {\n case 'rectangle':\n return undefined;\n case 'pill':\n return 64;\n case 'rounded':\n default:\n return 4;\n }\n}\n\nfunction getButtonSizePadding(props: ButtonProps['props']) {\n const size = props?.size ?? ButtonPropsDefaults.size;\n switch (size) {\n case 'x-small':\n return [4, 8] as const;\n case 'small':\n return [8, 12] as const;\n case 'large':\n return [16, 32] as const;\n case 'medium':\n default:\n return [12, 20] as const;\n }\n}\n\nexport const ButtonPropsDefaults = {\n text: '',\n url: '',\n fullWidth: false,\n size: 'medium',\n buttonStyle: 'rounded',\n buttonTextColor: '#FFFFFF',\n buttonBackgroundColor: '#999999',\n} as const;\n\nexport function Button({ style, props }: ButtonProps) {\n const text = props?.text ?? ButtonPropsDefaults.text;\n const url = props?.url ?? ButtonPropsDefaults.url;\n const fullWidth = props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const buttonTextColor = props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n const padding = getButtonSizePadding(props);\n const textRaise = (padding[1] * 2 * 3) / 4;\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n const linkStyle: CSSProperties = {\n color: buttonTextColor,\n fontSize: style?.fontSize ?? 16,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n backgroundColor: buttonBackgroundColor,\n borderRadius: getRoundedCorners(props),\n display: fullWidth ? 'block' : 'inline-block',\n padding: `${padding[0]}px ${padding[1]}px`,\n textDecoration: 'none',\n };\n\n return (\n <div style={wrapperStyle}>\n <a href={url} style={linkStyle} target=\"_blank\">\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"letter-spacing: ${padding[1]}px;mso-font-width:-100%;mso-text-raise:${textRaise}\" hidden>&nbsp;</i><![endif]-->`,\n }}\n />\n <span>{text}</span>\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"letter-spacing: ${padding[1]}px;mso-font-width:-100%\" hidden>&nbsp;</i><![endif]-->`,\n }}\n />\n </a>\n </div>\n );\n}\n\nexport default Button;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst FIXED_WIDTHS_SCHEMA = z\n .tuple([z.number().nullish(), z.number().nullish(), z.number().nullish()])\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ColumnsContainerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n fixedWidths: FIXED_WIDTHS_SCHEMA,\n columnsCount: z\n .union([z.literal(2), z.literal(3)])\n .optional()\n .nullable(),\n columnsGap: z.number().optional().nullable(),\n contentAlignment: z.enum(['top', 'middle', 'bottom']).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\ntype TColumn = JSX.Element | JSX.Element[] | null;\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema> & {\n columns?: TColumn[];\n};\n\n// Export for runtime usage\nexport const ColumnsContainerProps = ColumnsContainerPropsSchema;\n\nconst ColumnsContainerPropsDefaults = {\n columnsCount: 2,\n columnsGap: 0,\n contentAlignment: 'middle',\n} as const;\n\nexport function ColumnsContainer({ style, columns, props }: ColumnsContainerProps) {\n const wStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const blockProps = {\n columnsCount: props?.columnsCount ?? ColumnsContainerPropsDefaults.columnsCount,\n columnsGap: props?.columnsGap ?? ColumnsContainerPropsDefaults.columnsGap,\n contentAlignment: props?.contentAlignment ?? ColumnsContainerPropsDefaults.contentAlignment,\n fixedWidths: props?.fixedWidths,\n };\n\n return (\n <div style={wStyle}>\n <table\n align=\"center\"\n width=\"100%\"\n cellPadding=\"0\"\n border={0}\n style={{ tableLayout: 'fixed', borderCollapse: 'collapse' }}\n >\n <tbody style={{ width: '100%' }}>\n <tr style={{ width: '100%' }}>\n <TableCell index={0} props={blockProps} columns={columns} />\n <TableCell index={1} props={blockProps} columns={columns} />\n <TableCell index={2} props={blockProps} columns={columns} />\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n\ntype Props = {\n props: {\n fixedWidths: z.infer<typeof FIXED_WIDTHS_SCHEMA>;\n columnsCount: 2 | 3;\n columnsGap: number;\n contentAlignment: 'top' | 'middle' | 'bottom';\n };\n index: number;\n columns?: TColumn[];\n};\nfunction TableCell({ index, props, columns }: Props) {\n const contentAlignment = props?.contentAlignment ?? ColumnsContainerPropsDefaults.contentAlignment;\n const columnsCount = props?.columnsCount ?? ColumnsContainerPropsDefaults.columnsCount;\n\n if (columnsCount === 2 && index === 2) {\n return null;\n }\n\n const style: CSSProperties = {\n boxSizing: 'content-box',\n verticalAlign: contentAlignment,\n paddingLeft: getPaddingBefore(index, props),\n paddingRight: getPaddingAfter(index, props),\n width: props.fixedWidths?.[index] ?? undefined,\n };\n const children = (columns && columns[index]) ?? null;\n return <td style={style}>{children}</td>;\n}\n\nfunction getPaddingBefore(index: number, { columnsGap, columnsCount }: Props['props']) {\n if (index === 0) {\n return 0;\n }\n if (columnsCount === 2) {\n return columnsGap / 2;\n }\n if (index === 1) {\n return columnsGap / 3;\n }\n return (2 * columnsGap) / 3;\n}\n\nfunction getPaddingAfter(index: number, { columnsGap, columnsCount }: Props['props']) {\n if (columnsCount === 2) {\n if (index === 0) {\n return columnsGap / 2;\n }\n return 0;\n }\n\n if (index === 0) {\n return (2 * columnsGap) / 3;\n }\n if (index === 1) {\n return columnsGap / 3;\n }\n return 0;\n}\n\nexport default ColumnsContainer;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ContainerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type ContainerProps = {\n style?: z.infer<typeof ContainerPropsSchema>['style'];\n children?: JSX.Element | JSX.Element[] | null;\n};\n\n// Export for runtime usage\nexport const ContainerProps = ContainerPropsSchema;\n\nfunction getBorder(style: ContainerProps['style']) {\n if (!style || !style.borderColor) {\n return undefined;\n }\n return `1px solid ${style.borderColor}`;\n}\n\nexport function Container({ style, children }: ContainerProps) {\n const wStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n border: getBorder(style),\n borderRadius: style?.borderRadius ?? undefined,\n padding: getPadding(style?.padding),\n };\n if (!children) {\n return <div style={wStyle} />;\n }\n return <div style={wStyle}>{children}</div>;\n}\n\nexport default Container;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const DividerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n lineColor: COLOR_SCHEMA,\n lineHeight: z.number().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type DividerProps = z.infer<typeof DividerPropsSchema>;\n\n// Export for runtime usage\nexport const DividerProps = DividerPropsSchema;\n\nexport const DividerPropsDefaults = {\n lineHeight: 1,\n lineColor: '#333333',\n};\n\nexport function Divider({ style, props }: DividerProps) {\n const st: CSSProperties = {\n padding: getPadding(style?.padding),\n backgroundColor: style?.backgroundColor ?? undefined,\n };\n const borderTopWidth = props?.lineHeight ?? DividerPropsDefaults.lineHeight;\n const borderTopColor = props?.lineColor ?? DividerPropsDefaults.lineColor;\n return (\n <div style={st}>\n <hr\n style={{\n width: '100%',\n border: 'none',\n borderTop: `${borderTopWidth}px solid ${borderTopColor}`,\n margin: 0,\n }}\n />\n </div>\n );\n}\n\nexport default Divider;\n","import React, { CSSProperties, useMemo } from 'react';\nimport { z } from 'zod';\n\nimport { renderInlineMarkdownString } from './text';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nexport const HeadingPropsSchema = z.object({\n props: z\n .object({\n text: z.string().optional().nullable(),\n level: z.enum(['h1', 'h2', 'h3']).optional().nullable(),\n markdown: z.boolean().optional().nullable(),\n })\n .optional()\n .nullable(),\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type HeadingProps = z.infer<typeof HeadingPropsSchema>;\n\n// Export for runtime usage\nexport const HeadingProps = HeadingPropsSchema;\n\nexport const HeadingPropsDefaults = {\n level: 'h2',\n text: '',\n} as const;\n\nexport function Heading({ props, style }: HeadingProps) {\n const level = props?.level ?? HeadingPropsDefaults.level;\n const text = props?.text ?? HeadingPropsDefaults.text;\n const isMarkdown = props?.markdown ?? false;\n const hStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n margin: 0,\n fontFamily: getFontFamily(style?.fontFamily),\n fontSize: getFontSize(level),\n padding: getPadding(style?.padding),\n };\n const html = useMemo(() => (isMarkdown ? renderInlineMarkdownString(text) : null), [isMarkdown, text]);\n const renderProps = isMarkdown\n ? { style: hStyle, dangerouslySetInnerHTML: { __html: html ?? '' } }\n : { style: hStyle, children: text };\n switch (level) {\n case 'h1':\n return <h1 {...renderProps} />;\n case 'h2':\n return <h2 {...renderProps} />;\n case 'h3':\n return <h3 {...renderProps} />;\n }\n}\n\nfunction getFontSize(level: 'h1' | 'h2' | 'h3') {\n switch (level) {\n case 'h1':\n return 32;\n case 'h2':\n return 24;\n case 'h3':\n return 20;\n }\n}\n\nexport default Heading;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const HtmlPropsSchema = z.object({\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n fontSize: z.number().min(0).optional().nullable(),\n textAlign: z.enum(['left', 'right', 'center']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n contents: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type HtmlProps = z.infer<typeof HtmlPropsSchema>;\n// Export for runtime usage\nexport const HtmlProps = HtmlPropsSchema;\n\nexport function Html({ style, props }: HtmlProps) {\n const children = props?.contents;\n const cssStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n fontSize: style?.fontSize ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n if (!children) {\n return <div style={cssStyle} />;\n }\n return <div style={cssStyle} dangerouslySetInnerHTML={{ __html: children }} />;\n}\n\nexport default Html;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ImagePropsSchema = z.object({\n style: z\n .object({\n padding: PADDING_SCHEMA,\n backgroundColor: z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .optional()\n .nullable(),\n textAlign: z.enum(['center', 'left', 'right']).optional().nullable(),\n })\n .optional()\n .nullable(),\n props: z\n .object({\n width: z.number().optional().nullable(),\n height: z.number().optional().nullable(),\n url: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n linkHref: z.string().optional().nullable(),\n contentAlignment: z.enum(['top', 'middle', 'bottom']).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ImageProps = z.infer<typeof ImagePropsSchema>;\n// Export for runtime usage\nexport const ImageProps = ImagePropsSchema;\n\nexport function Image({ style, props }: ImageProps) {\n const sectionStyle: CSSProperties = {\n padding: getPadding(style?.padding),\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n };\n\n const linkHref = props?.linkHref ?? null;\n const width = props?.width ?? undefined;\n const height = props?.height ?? undefined;\n\n const imageElement = (\n <img\n alt={props?.alt ?? ''}\n src={props?.url ?? ''}\n width={width}\n height={height}\n style={{\n width,\n height,\n outline: 'none',\n border: 'none',\n textDecoration: 'none',\n verticalAlign: props?.contentAlignment ?? 'middle',\n display: 'inline-block',\n maxWidth: '100%',\n }}\n />\n );\n\n if (!linkHref) {\n return <div style={sectionStyle}>{imageElement}</div>;\n }\n\n return (\n <div style={sectionStyle}>\n <a href={linkHref} style={{ textDecoration: 'none' }} target=\"_blank\">\n {imageElement}\n </a>\n </div>\n );\n}\n\nexport default Image;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const SignaturePropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n greeting: z.string().optional().nullable(),\n name: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n company: z.string().optional().nullable(),\n address: z.string().optional().nullable(),\n email: z.string().optional().nullable(),\n phone: z.string().optional().nullable(),\n website: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n imageSize: z.number().optional().nullable(),\n imageShape: z.enum(['circle', 'square', 'rounded']).optional().nullable(),\n layout: z.enum(['horizontal', 'vertical']).optional().nullable(),\n nameColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n linkColor: COLOR_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type SignatureProps = z.infer<typeof SignaturePropsSchema>;\nexport const SignatureProps = SignaturePropsSchema;\n\nexport const SignaturePropsDefaults = {\n greeting: '',\n name: '',\n title: '',\n company: '',\n address: '',\n email: '',\n phone: '',\n website: '',\n imageUrl: '',\n imageSize: 64,\n imageShape: 'circle',\n layout: 'horizontal',\n nameColor: '#262626',\n textColor: '#666666',\n linkColor: '#0079CC',\n} as const;\n\nfunction getImageBorderRadius(shape: string, size: number): number | undefined {\n switch (shape) {\n case 'circle':\n return size;\n case 'rounded':\n return size * 0.125;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport function Signature({ style, props }: SignatureProps) {\n const greeting = props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = props?.name ?? SignaturePropsDefaults.name;\n const title = props?.title ?? SignaturePropsDefaults.title;\n const company = props?.company ?? SignaturePropsDefaults.company;\n const address = props?.address ?? SignaturePropsDefaults.address;\n const email = props?.email ?? SignaturePropsDefaults.email;\n const phone = props?.phone ?? SignaturePropsDefaults.phone;\n const website = props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n padding: getPadding(style?.padding),\n };\n\n const greetingStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n marginBottom: 8,\n lineHeight: '1.4',\n fontStyle: 'italic',\n };\n\n const nameStyle: CSSProperties = {\n fontSize: 16,\n fontWeight: 'bold',\n color: nameColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const detailStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 14,\n color: linkColor,\n textDecoration: 'none',\n };\n\n const imageElement = imageUrl ? (\n <img\n src={imageUrl}\n alt={name || company}\n width={imageSize}\n height={imageSize}\n style={{\n width: imageSize,\n height: imageSize,\n objectFit: 'cover',\n borderRadius: getImageBorderRadius(imageShape, imageSize),\n display: 'block',\n outline: 'none',\n border: 'none',\n }}\n />\n ) : null;\n\n const contactParts: JSX.Element[] = [];\n if (email) contactParts.push(<a key=\"email\" href={`mailto:${email}`} style={linkStyle}>{email}</a>);\n if (phone) contactParts.push(<a key=\"phone\" href={`tel:${phone}`} style={linkStyle}>{phone}</a>);\n if (website) {\n const href = website.startsWith('http') ? website : `https://${website}`;\n contactParts.push(<a key=\"website\" href={href} style={linkStyle} target=\"_blank\">{website}</a>);\n }\n\n const textContent = (\n <div>\n {name && <p style={nameStyle}>{name}</p>}\n {title && <p style={detailStyle}>{title}</p>}\n {company && <p style={detailStyle}>{company}</p>}\n {address && <p style={detailStyle}>{address}</p>}\n {contactParts.length > 0 && (\n <p style={{ ...detailStyle, marginTop: 4 }}>\n {contactParts.map((part, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span style={detailStyle}> &middot; </span>}\n {part}\n </React.Fragment>\n ))}\n </p>\n )}\n </div>\n );\n\n const greetingElement = greeting ? <p style={greetingStyle}>{greeting}</p> : null;\n\n if (layout === 'vertical') {\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n {imageElement && <div style={{ marginBottom: 12 }}>{imageElement}</div>}\n {textContent}\n </div>\n );\n }\n\n // horizontal layout\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n <table cellPadding=\"0\" cellSpacing=\"0\" border={0} role=\"presentation\">\n <tbody>\n <tr>\n {imageElement && (\n <td style={{ verticalAlign: 'middle', paddingRight: 16 }}>\n {imageElement}\n </td>\n )}\n <td style={{ verticalAlign: 'middle' }}>\n {textContent}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n\nexport default Signature;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nexport const SpacerPropsSchema = z.object({\n props: z\n .object({\n height: z.number().gte(0).optional().nullish(),\n })\n .optional()\n .nullable(),\n});\n\nexport type SpacerProps = z.infer<typeof SpacerPropsSchema>;\n\n// Export for runtime usage\nexport const SpacerProps = SpacerPropsSchema;\n\nexport const SpacerPropsDefaults = {\n height: 16,\n};\n\nexport function Spacer({ props }: SpacerProps) {\n const style: CSSProperties = {\n height: props?.height ?? SpacerPropsDefaults.height,\n };\n return <div style={style} />;\n}\n\nexport default Spacer;\n","import React from 'react';\n\nimport type { BaseZodDictionary, BlockConfiguration, DocumentBlocksDictionary } from '../utils';\n\n/**\n * @param blocks Main DocumentBlocksDictionary\n * @returns React component that can render a BlockConfiguration that is compatible with blocks\n */\nexport default function buildBlockComponent<T extends BaseZodDictionary>(blocks: DocumentBlocksDictionary<T>) {\n return function BlockComponent({ type, data }: BlockConfiguration<T>) {\n const Component = blocks[type].Component;\n return <Component {...data} />;\n };\n}\n","import { z } from 'zod';\n\nimport type { BaseZodDictionary, BlockConfiguration, DocumentBlocksDictionary } from '../utils';\n\n/**\n *\n * @param blocks Main DocumentBlocksDictionary\n * @returns zod schema that can parse arbitary objects into a single BlockConfiguration\n */\nexport default function buildBlockConfigurationSchema<T extends BaseZodDictionary>(\n blocks: DocumentBlocksDictionary<T>\n) {\n const blockObjects = Object.keys(blocks).map((type: keyof T) =>\n z.object({\n type: z.literal(type),\n data: blocks[type].schema,\n })\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return z.discriminatedUnion('type', blockObjects as any).transform((v) => v as BlockConfiguration<T>);\n}\n","import type { BaseZodDictionary, DocumentBlocksDictionary } from '../utils';\n\n/**\n * Identity function to type a DocumentBlocksDictionary\n * @param blocks Main DocumentBlocksDictionary\n * @returns typed DocumentBlocksDictionary\n */\nexport default function buildBlockConfigurationDictionary<T extends BaseZodDictionary>(\n blocks: DocumentBlocksDictionary<T>\n) {\n return blocks;\n} ","import { z } from 'zod';\n\nexport type BaseZodDictionary = { [name: string]: z.AnyZodObject };\nexport type DocumentBlocksDictionary<T extends BaseZodDictionary> = {\n [K in keyof T]: {\n schema: T[K];\n Component: (props: z.infer<T[K]>) => JSX.Element;\n };\n};\n\n// Export as a runtime value\nexport const DocumentBlocksDictionary = 'DocumentBlocksDictionary';\n\nexport type BlockConfiguration<T extends BaseZodDictionary> = {\n [TType in keyof T]: {\n type: TType;\n data: z.infer<T[TType]>;\n };\n}[keyof T];\n\n// Export as a runtime value\nexport const BlockConfiguration = 'BlockConfiguration';\n\n// Export BaseZodDictionary as a runtime value\nexport const BaseZodDictionary = 'BaseZodDictionary';\n\nexport class BlockNotFoundError extends Error {\n blockId: string;\n constructor(blockId: string) {\n super('Could not find a block with the given blockId');\n this.blockId = blockId;\n }\n}\n","import Handlebars from 'handlebars';\n\n/**\n * A fresh Handlebars environment scoped to the editor. Pre-registered with\n * `formatDate` and `formatNumber` helpers. Kept isolated from the global\n * `Handlebars` default instance so registrations here don't leak into the\n * consumer's own environment (and vice versa).\n */\nexport const editorHandlebars = Handlebars.create();\n\neditorHandlebars.registerHelper('formatDate', function (value: unknown, format?: unknown) {\n if (value === null || value === undefined || value === '') return '';\n const date = value instanceof Date ? value : new Date(String(value));\n if (Number.isNaN(date.getTime())) return String(value);\n const spec = typeof format === 'string' ? format : undefined;\n if (!spec || spec === 'iso') return date.toISOString();\n if (spec === 'date') return date.toLocaleDateString();\n if (spec === 'time') return date.toLocaleTimeString();\n if (spec === 'datetime') return date.toLocaleString();\n return date.toLocaleDateString(undefined, { dateStyle: spec as any });\n});\n\neditorHandlebars.registerHelper('formatNumber', function (value: unknown, options?: unknown) {\n if (value === null || value === undefined || value === '') return '';\n const num = typeof value === 'number' ? value : Number(value);\n if (Number.isNaN(num)) return String(value);\n const hashOpts = (options && typeof options === 'object' && 'hash' in (options as any)\n ? (options as any).hash\n : {}) as {\n currency?: string;\n style?: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n };\n try {\n return new Intl.NumberFormat(undefined, {\n style: hashOpts.style as any,\n currency: hashOpts.currency,\n minimumFractionDigits: hashOpts.minimumFractionDigits,\n maximumFractionDigits: hashOpts.maximumFractionDigits,\n }).format(num);\n } catch {\n return String(num);\n }\n});\n\nexport type HandlebarsContext = Record<string, unknown>;\n\n/**\n * Compile `source` as a Handlebars template and render it with `context`.\n * Uses the scoped {@link editorHandlebars} instance.\n */\nexport function evaluateHandlebars(source: string, context: HandlebarsContext): string {\n const template = editorHandlebars.compile(source, { strict: false, noEscape: false });\n return template(context);\n}\n","import { z } from 'zod';\n\n// Import from our local blocks\nimport { ColumnsContainerPropsSchema as BaseColumnsContainerPropsSchema } from '@blocks';\n\n/**\n * Schema for ColumnsContainer props in the email editor\n * \n * Extends the base ColumnsContainer schema to add support for \n * childrenIds references that allow adding other blocks into columns\n */\nconst BasePropsShape = BaseColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;\n\nconst ColumnsContainerPropsSchema = z.object({\n style: BaseColumnsContainerPropsSchema.shape.style,\n props: z\n .object({\n ...BasePropsShape,\n columns: z.tuple([\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n ]),\n })\n .optional()\n .nullable(),\n});\n\nexport default ColumnsContainerPropsSchema;\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema>; ","import React from 'react';\n\n// Import from our local blocks\nimport { ColumnsContainer as BaseColumnsContainer } from '@blocks';\n\nimport { ReaderBlock } from '../../reader/core';\n\nimport { ColumnsContainerProps } from './columns-container-props-schema';\n\n/**\n * ColumnsContainer Reader component for email templates\n * \n * This component extends the base ColumnsContainer to support\n * referencing child blocks by ID rather than direct embedding,\n * allowing for a more flexible document structure.\n */\nexport default function ColumnsContainerReader({ style, props }: ColumnsContainerProps) {\n const { columns, ...restProps } = props ?? {};\n let cols = undefined;\n if (columns) {\n cols = columns.map((col) => col.childrenIds.map((childId) => <ReaderBlock key={childId} id={childId} />));\n }\n\n return <BaseColumnsContainer props={restProps} columns={cols} style={style} />;\n} ","import { z } from 'zod';\n\n// Import from our local blocks\nimport { ContainerPropsSchema as BaseContainerPropsSchema } from '@blocks';\n\n/**\n * Schema for Container props in the email editor\n * \n * Extends the base Container schema to add support for\n * childrenIds references that allow adding other blocks inside\n */\nexport const ContainerPropsSchema = z.object({\n style: BaseContainerPropsSchema.shape.style,\n props: z\n .object({\n childrenIds: z.array(z.string()).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ContainerProps = z.infer<typeof ContainerPropsSchema>; ","import React from 'react';\n\n// Import from our local blocks\nimport { Container as BaseContainer } from '@blocks';\n\nimport { ReaderBlock } from '@email-builder/reader/core';\n\nimport { ContainerProps } from './container-props-schema';\n\n/**\n * Container Reader component for email templates\n * \n * This component extends the base Container to support\n * referencing child blocks by ID rather than direct embedding,\n * allowing for a more flexible document structure.\n */\nexport default function ContainerReader({ style, props }: ContainerProps) {\n const childrenIds = props?.childrenIds ?? [];\n return (\n <BaseContainer style={style}>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </BaseContainer>\n );\n} ","import { z } from 'zod';\n\n/**\n * EmailLayout schema\n * \n * The EmailLayout is the top-level container for email templates.\n * It provides styling options for the entire email and contains\n * all other blocks.\n */\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nexport const TemplateVariableSchema = z.object({\n name: z.string(),\n description: z.string().optional().nullable(),\n sampleValue: z.string().optional().nullable(),\n});\n\nexport const EmailLayoutPropsSchema = z.object({\n backdropColor: COLOR_SCHEMA,\n backdropDisabled: z.boolean().optional().nullable(),\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n canvasColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n childrenIds: z.array(z.string()).optional().nullable(),\n subject: z.string().optional().nullable(),\n variables: z.array(TemplateVariableSchema).optional().nullable(),\n});\n\nexport type EmailLayoutProps = z.infer<typeof EmailLayoutPropsSchema>; ","import React from 'react';\n\nimport { ReaderBlock } from '@email-builder/reader/core';\n\nimport { EmailLayoutProps } from './email-layout-props-schema';\n\n/**\n * EmailLayout Reader component\n * \n * This is the top-level component for email templates.\n * It provides the overall structure and styling for emails,\n * including responsiveness and proper email client support.\n */\n\nfunction getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) {\n const f = fontFamily ?? 'MODERN_SANS';\n switch (f) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n}\n\nfunction getBorder({ borderColor }: EmailLayoutProps) {\n if (!borderColor) {\n return undefined;\n }\n return `1px solid ${borderColor}`;\n}\n\nexport default function EmailLayoutReader(props: EmailLayoutProps) {\n const childrenIds = props.childrenIds ?? [];\n const baseStyle = {\n color: props.textColor ?? '#262626',\n fontFamily: getFontFamily(props.fontFamily),\n fontSize: '16px',\n fontWeight: '400',\n letterSpacing: '0.15008px',\n lineHeight: '1.5',\n margin: '0',\n };\n\n if (props.backdropDisabled) {\n return (\n <div style={baseStyle}>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </div>\n );\n }\n\n return (\n <div\n style={{\n ...baseStyle,\n backgroundColor: props.backdropColor ?? '#F5F5F5',\n padding: '32px 0',\n minHeight: '100%',\n width: '100%',\n }}\n >\n <table\n align=\"center\"\n width=\"100%\"\n style={{\n margin: '0 auto',\n maxWidth: '600px',\n backgroundColor: props.canvasColor ?? '#FFFFFF',\n borderRadius: props.borderRadius ?? undefined,\n overflow: props.borderRadius ? 'hidden' : undefined,\n border: getBorder(props),\n }}\n role=\"presentation\"\n cellSpacing=\"0\"\n cellPadding=\"0\"\n border={0}\n >\n <tbody>\n <tr style={{ width: '100%' }}>\n <td>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n} ","import React, { createContext, useContext } from 'react';\nimport { z } from 'zod';\n\n// Import directly from our local blocks\nimport { \n Avatar, AvatarPropsSchema,\n Button, ButtonPropsSchema,\n Divider, DividerPropsSchema,\n Heading, HeadingPropsSchema,\n Html, HtmlPropsSchema,\n Image, ImagePropsSchema,\n Signature, SignaturePropsSchema,\n Spacer, SpacerPropsSchema,\n Text, TextPropsSchema\n} from '../../blocks';\n\n// Import from our local core\nimport {\n buildBlockComponent,\n buildBlockConfigurationDictionary,\n buildBlockConfigurationSchema,\n} from '../../core';\n\n// Import the local block components using the new index files\nimport {\n ColumnsContainerPropsSchema,\n ColumnsContainerReader,\n ContainerPropsSchema,\n ContainerReader,\n EmailLayoutPropsSchema,\n EmailLayoutReader\n} from '../blocks';\n\n/**\n * Reader component - responsible for rendering an email document\n * \n * This component provides a context for rendering a document composed of various blocks.\n * It uses a dictionary of block components and their schemas to validate and render\n * the document structure.\n */\n\n// Define the context and reader document type first to avoid circular references\nexport type TReaderDocument = Record<string, any>;\nconst ReaderContext = createContext<TReaderDocument>({});\n\nfunction useReaderDocument() {\n return useContext(ReaderContext);\n}\n\n// Create a temporary ReaderBlock component to define in the dictionary\nexport type TReaderBlockProps = { id: string };\nexport function ReaderBlock({ id }: TReaderBlockProps) {\n const document = useReaderDocument();\n return document[id] ? <BaseReaderBlock {...document[id]} /> : null;\n}\n\n// Now define the dictionary with all block components\nconst READER_DICTIONARY = buildBlockConfigurationDictionary({\n ColumnsContainer: {\n schema: ColumnsContainerPropsSchema,\n Component: ColumnsContainerReader,\n },\n Container: {\n schema: ContainerPropsSchema,\n Component: ContainerReader,\n },\n EmailLayout: {\n schema: EmailLayoutPropsSchema,\n Component: EmailLayoutReader,\n },\n //\n Avatar: {\n schema: AvatarPropsSchema,\n Component: Avatar,\n },\n Button: {\n schema: ButtonPropsSchema,\n Component: Button,\n },\n Divider: {\n schema: DividerPropsSchema,\n Component: Divider,\n },\n Heading: {\n schema: HeadingPropsSchema,\n Component: Heading,\n },\n Html: {\n schema: HtmlPropsSchema,\n Component: Html,\n },\n Image: {\n schema: ImagePropsSchema,\n Component: Image,\n },\n Spacer: {\n schema: SpacerPropsSchema,\n Component: Spacer,\n },\n Text: {\n schema: TextPropsSchema,\n Component: Text,\n },\n Signature: {\n schema: SignaturePropsSchema,\n Component: Signature,\n },\n});\n\nexport const ReaderBlockSchema = buildBlockConfigurationSchema(READER_DICTIONARY);\nexport type TReaderBlock = z.infer<typeof ReaderBlockSchema>;\n\nexport const ReaderDocumentSchema = z.record(z.string(), ReaderBlockSchema);\n\n// Now define the BaseReaderBlock using the dictionary\nconst BaseReaderBlock = buildBlockComponent(READER_DICTIONARY);\n\nexport type TReaderProps = {\n document: Record<string, z.infer<typeof ReaderBlockSchema>>;\n rootBlockId: string;\n};\nexport default function Reader({ document, rootBlockId }: TReaderProps) {\n return (\n <ReaderContext.Provider value={document}>\n <ReaderBlock id={rootBlockId} />\n </ReaderContext.Provider>\n );\n} ","import React from 'react';\nimport { renderToStaticMarkup as baseRenderToStaticMarkup } from 'react-dom/server';\n\nimport { evaluateHandlebars, type HandlebarsContext } from '../handlebars';\nimport { Reader, type TReaderDocument } from '../reader';\n\n/**\n * Renders an email document to static HTML markup\n *\n * This function takes a document structure and renders it to static HTML\n * suitable for sending as an email. It adds the DOCTYPE and wraps everything\n * in basic HTML/body tags.\n *\n * When `variables` is provided, the rendered HTML is evaluated as a\n * Handlebars template — conditionals, loops, subpath access, and the\n * built-in `formatDate` / `formatNumber` helpers all resolve against the\n * given context. Without `variables`, the output keeps raw `{{name}}`\n * placeholders in place (the save-time, send-later shape).\n *\n * @param document The email document structure to render\n * @param options Options including the rootBlockId to start rendering from, and optional Handlebars context\n * @returns A complete HTML string representation of the email\n */\ntype TOptions = {\n rootBlockId: string;\n variables?: HandlebarsContext;\n};\n\nexport default function renderToStaticMarkup(document: TReaderDocument, { rootBlockId, variables }: TOptions) {\n const html =\n '<!DOCTYPE html>' +\n baseRenderToStaticMarkup(\n <html>\n <body>\n <Reader document={document} rootBlockId={rootBlockId} />\n </body>\n </html>\n );\n if (!variables) return html;\n return evaluateHandlebars(html, variables);\n}\n","import { evaluateHandlebars, type HandlebarsContext } from '../handlebars';\nimport { type TReaderDocument } from '../reader';\n\ntype TOptions = {\n rootBlockId: string;\n variables?: HandlebarsContext;\n};\n\nexport default function renderToText(document: TReaderDocument, { rootBlockId, variables }: TOptions): string {\n const lines: string[] = [];\n renderBlock(document, rootBlockId, lines);\n // Collapse 3+ consecutive blank lines into 2, then trim\n const text = lines.join('\\n').replace(/\\n{3,}/g, '\\n\\n').trim() + '\\n';\n if (!variables) return text;\n return evaluateHandlebars(text, variables);\n}\n\nfunction renderBlock(document: TReaderDocument, blockId: string, lines: string[]): void {\n const block = document[blockId];\n if (!block) return;\n\n const { type, data } = block;\n\n switch (type) {\n case 'EmailLayout':\n renderChildren(document, data?.childrenIds, lines);\n break;\n\n case 'Container':\n renderChildren(document, data?.props?.childrenIds, lines);\n break;\n\n case 'ColumnsContainer':\n renderColumnsContainer(document, data, lines);\n break;\n\n case 'Text':\n renderText(data, lines);\n break;\n\n case 'Heading':\n renderHeading(data, lines);\n break;\n\n case 'Button':\n renderButton(data, lines);\n break;\n\n case 'Image':\n renderImage(data, lines);\n break;\n\n case 'Avatar':\n renderAvatar(data, lines);\n break;\n\n case 'Html':\n renderHtml(data, lines);\n break;\n\n case 'Divider':\n lines.push('');\n lines.push('---');\n lines.push('');\n break;\n\n case 'Spacer':\n lines.push('');\n break;\n }\n}\n\nfunction renderChildren(document: TReaderDocument, childrenIds: string[] | null | undefined, lines: string[]): void {\n if (!childrenIds) return;\n for (const childId of childrenIds) {\n renderBlock(document, childId, lines);\n }\n}\n\nfunction renderColumnsContainer(document: TReaderDocument, data: any, lines: string[]): void {\n const columns = data?.props?.columns;\n if (!columns) return;\n for (const col of columns) {\n if (col?.childrenIds?.length) {\n renderChildren(document, col.childrenIds, lines);\n }\n }\n}\n\nfunction renderText(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n if (!text) return;\n\n if (data?.props?.markdown) {\n // Strip HTML tags from rendered markdown - the source is markdown so just use it directly\n lines.push(text);\n } else {\n lines.push(text);\n }\n lines.push('');\n}\n\nfunction renderHeading(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n if (!text) return;\n\n const level = data?.props?.level ?? 'h2';\n const prefix = level === 'h1' ? '# ' : level === 'h2' ? '## ' : '### ';\n lines.push(prefix + text);\n lines.push('');\n}\n\nfunction renderButton(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n const url = data?.props?.url ?? '';\n\n if (text && url) {\n lines.push(`${text}: ${url}`);\n } else if (text) {\n lines.push(text);\n } else if (url) {\n lines.push(url);\n }\n lines.push('');\n}\n\nfunction renderImage(data: any, lines: string[]): void {\n const alt = data?.props?.alt ?? '';\n const url = data?.props?.url ?? '';\n const linkHref = data?.props?.linkHref ?? '';\n\n if (alt && linkHref) {\n lines.push(`[${alt}] ${linkHref}`);\n } else if (alt) {\n lines.push(`[${alt}]`);\n } else if (url) {\n lines.push(`[Image: ${url}]`);\n }\n lines.push('');\n}\n\nfunction renderAvatar(data: any, lines: string[]): void {\n const alt = data?.props?.alt ?? '';\n if (alt) {\n lines.push(`[${alt}]`);\n lines.push('');\n }\n}\n\nfunction renderHtml(data: any, lines: string[]): void {\n const contents = data?.props?.contents ?? '';\n if (!contents) return;\n\n // Strip HTML tags to get plain text\n const text = stripHtml(contents);\n if (text) {\n lines.push(text);\n lines.push('');\n }\n}\n\nfunction stripHtml(html: string): string {\n return html\n // Replace <br> and <br/> with newlines\n .replace(/<br\\s*\\/?>/gi, '\\n')\n // Replace block-level closing tags with newlines\n .replace(/<\\/(p|div|h[1-6]|li|tr|blockquote)>/gi, '\\n')\n // Replace <hr> with divider\n .replace(/<hr\\s*\\/?>/gi, '\\n---\\n')\n // Strip remaining tags\n .replace(/<[^>]+>/g, '')\n // Decode common HTML entities\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&nbsp;/g, ' ')\n // Clean up whitespace per line\n .split('\\n')\n .map(line => line.trim())\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n","import { alpha, createTheme, darken, lighten } from '@mui/material/styles';\n\nconst BRAND_NAVY = '#212443';\nconst BRAND_BLUE = '#0079CC';\nconst BRAND_GREEN = '#1F8466';\nconst BRAND_RED = '#E81212';\nconst BRAND_YELLOW = '#F6DC9F';\nconst BRAND_PURPLE = '#6C0E7C';\nconst BRAND_BROWN = '#CC996C';\nconst STANDARD_FONT_FAMILY =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\nconst MONOSPACE_FONT_FAMILY =\n 'ui-monospace, Menlo, Monaco, \"Cascadia Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Oxygen Mono\", \"Ubuntu Monospace\", \"Source Code Pro\", \"Fira Mono\", \"Droid Sans Mono\", \"Courier New\", monospace';\n\nconst BASE_THEME = createTheme({\n palette: {\n background: {\n default: '#f2f5f7',\n },\n text: {\n primary: '#1F1F21',\n secondary: '#4F4F4F',\n },\n },\n typography: {\n fontFamily: STANDARD_FONT_FAMILY,\n },\n});\n\nconst THEME = createTheme(BASE_THEME, {\n palette: {\n brand: {\n navy: BRAND_NAVY,\n blue: BRAND_BLUE,\n red: BRAND_RED,\n green: BRAND_GREEN,\n yellow: BRAND_YELLOW,\n purple: BRAND_PURPLE,\n brown: BRAND_BROWN,\n },\n success: {\n main: BRAND_GREEN,\n light: lighten(BRAND_GREEN, 0.15),\n dark: darken(BRAND_GREEN, 0.15),\n },\n error: {\n main: BRAND_RED,\n light: lighten(BRAND_RED, 0.15),\n dark: darken(BRAND_RED, 0.15),\n },\n cadet: {\n 100: '#F9FAFB',\n 200: '#F2F5F7',\n 300: '#DCE4EA',\n 400: '#A8BBCA',\n 500: '#6A8BA4',\n },\n highlight: {\n 100: lighten(BRAND_YELLOW, 0.8),\n 200: lighten(BRAND_YELLOW, 0.6),\n 300: lighten(BRAND_YELLOW, 0.4),\n 400: lighten(BRAND_YELLOW, 0.2),\n 500: BRAND_YELLOW,\n },\n info: {\n main: BRAND_BLUE,\n },\n primary: {\n main: BRAND_BLUE,\n },\n },\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n address {\n font-style: normal;\n }\n fieldset {\n border: none;\n padding: 0;\n }\n pre {\n font-family: ${MONOSPACE_FONT_FAMILY}\n white-space: pre-wrap;\n font-size: 12px;\n }\n `,\n },\n MuiAlert: {\n styleOverrides: {\n root: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n action: {\n paddingTop: 0,\n marginRight: 0,\n },\n filledSuccess: {\n backgroundColor: BRAND_GREEN,\n },\n },\n },\n MuiStepLabel: {\n styleOverrides: {\n label: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n MuiDialog: {\n defaultProps: {\n fullWidth: true,\n },\n },\n MuiDialogContent: {\n styleOverrides: {\n root: {\n paddingTop: BASE_THEME.spacing(1),\n paddingBottom: BASE_THEME.spacing(2),\n },\n },\n },\n MuiDialogTitle: {\n defaultProps: {\n variant: 'h4',\n },\n styleOverrides: {\n root: {\n paddingTop: BASE_THEME.spacing(3),\n paddingBottom: BASE_THEME.spacing(1),\n },\n },\n },\n MuiDialogActions: {\n styleOverrides: {\n root: {\n borderTop: '1px solid',\n borderTopColor: BASE_THEME.palette.divider,\n marginTop: BASE_THEME.spacing(2.5),\n padding: `${BASE_THEME.spacing(1.5)} ${BASE_THEME.spacing(3)}`,\n },\n },\n },\n MuiTableCell: {\n styleOverrides: {\n root: {\n ...BASE_THEME.typography.body2,\n borderColor: BASE_THEME.palette.grey[200],\n },\n head: {\n ...BASE_THEME.typography.overline,\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n letterSpacing: '0.075em',\n color: BASE_THEME.palette.text.secondary,\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&:last-child td': {\n borderBottom: 0,\n },\n },\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n textTransform: 'uppercase',\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n '&.MuiChip-filledError, &.MuiChip-filledSuccess': {\n fill: BASE_THEME.palette.primary.contrastText,\n },\n },\n sizeSmall: {\n borderRadius: BASE_THEME.spacing(0.5),\n fontSize: 12,\n },\n iconSmall: {\n fontSize: 14,\n marginLeft: BASE_THEME.spacing(1),\n },\n colorSecondary: {\n borderColor: BASE_THEME.palette.grey[400],\n color: BASE_THEME.palette.text.secondary,\n },\n label: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n MuiDrawer: {\n defaultProps: {\n PaperProps: {\n elevation: 2,\n },\n },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n fontSize: BASE_THEME.typography.pxToRem(12),\n backgroundColor: alpha(BASE_THEME.palette.text.primary, 0.9),\n },\n },\n },\n MuiSlider: {\n styleOverrides: {\n root: {\n height: 1,\n },\n track: {\n height: 1,\n border: 'none',\n },\n rail: {\n height: 1,\n backgroundColor: BASE_THEME.palette.grey[500],\n },\n mark: {\n backgroundColor: BASE_THEME.palette.grey[500],\n },\n markActive: {\n height: 0,\n },\n thumb: {\n height: 16,\n width: 16,\n cursor: 'col-resize',\n '&:hover, &.Mui-active, &.Mui-focusVisible': {\n boxShadow: `0 0 0 4px ${alpha(BRAND_BLUE, 0.2)}`,\n },\n '&:before': {\n display: 'none',\n },\n },\n },\n },\n MuiPaper: {\n defaultProps: {\n elevation: 2,\n square: true,\n },\n },\n MuiButtonBase: {\n defaultProps: {\n disableTouchRipple: true,\n focusRipple: true,\n },\n styleOverrides: {\n root: {\n '&.MuiButton-containedSecondary.Mui-disabled': {\n backgroundColor: BASE_THEME.palette.grey[100],\n },\n },\n },\n },\n MuiButtonGroup: {\n defaultProps: {\n disableElevation: true,\n },\n },\n MuiIconButton: {\n styleOverrides: {\n edgeStart: {\n marginLeft: BASE_THEME.spacing(-1),\n },\n colorSecondary: {\n color: BASE_THEME.palette.grey[500],\n },\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n },\n styleOverrides: {\n textPrimary: {\n color: BASE_THEME.palette.text.primary,\n },\n textSecondary: {\n color: BASE_THEME.palette.text.secondary,\n },\n outlinedPrimary: {\n borderColor: BASE_THEME.palette.grey[300],\n color: BASE_THEME.palette.text.primary,\n '&:hover, &:active, &:focus': {\n borderColor: BASE_THEME.palette.grey[500],\n color: BASE_THEME.palette.text.primary,\n },\n },\n containedSecondary: {\n backgroundColor: BASE_THEME.palette.common.white,\n border: `1px solid ${BASE_THEME.palette.grey[300]}`,\n color: BASE_THEME.palette.text.primary,\n '&:hover, &:active, &:focus': {\n backgroundColor: BASE_THEME.palette.common.white,\n borderColor: BASE_THEME.palette.grey[500],\n color: BASE_THEME.palette.text.primary,\n },\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n paddingLeft: BASE_THEME.spacing(1.5),\n paddingRight: BASE_THEME.spacing(1.5),\n },\n },\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n '&:not(.Mui-disabled, .Mui-error):before': {\n borderBottom: `1px solid ${BASE_THEME.palette.grey[400]}`,\n },\n '&:hover:not(.Mui-disabled, .Mui-error):before': {\n borderBottom: `1px solid ${BASE_THEME.palette.grey[500]} !important`,\n },\n '&:after': {\n borderBottom: `1px solid ${BASE_THEME.palette.text.primary} !important`,\n },\n '&.MuiOutlinedInput-root:not(.Mui-error)': {\n '& fieldset': {\n borderColor: BASE_THEME.palette.grey[300],\n transition: 'border-color 0.2s',\n },\n },\n '&.MuiOutlinedInput-root:not(.Mui-disabled, .Mui-error)': {\n '&:hover fieldset': {\n borderColor: BASE_THEME.palette.grey[400],\n },\n '&.Mui-focused fieldset': {\n borderColor: BASE_THEME.palette.text.secondary,\n borderWidth: 1,\n },\n },\n },\n input: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n '&.Mui-disabled': {\n WebkitTextFillColor: 'inherit',\n color: BASE_THEME.palette.text.secondary,\n },\n },\n inputSizeSmall: {},\n },\n },\n MuiOutlinedInput: {\n styleOverrides: {\n notchedOutline: {\n '& legend': {\n fontSize: '0.85em',\n maxWidth: '100%',\n },\n },\n },\n },\n MuiInputAdornment: {\n styleOverrides: {\n root: {\n '& .MuiTypography-root': {\n fontSize: BASE_THEME.typography.pxToRem(14),\n color: BASE_THEME.palette.text.secondary,\n },\n },\n },\n },\n MuiInputLabel: {\n defaultProps: {\n shrink: true,\n },\n styleOverrides: {\n shrink: {\n transform: 'scale(0.85)',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n '&.Mui-focused': {\n color: BASE_THEME.palette.text.primary,\n },\n '&.MuiInputLabel-standard': {\n transform: 'translate(0, -4px) scale(0.85)',\n color: '#4F4F4F',\n },\n '&.MuiInputLabel-outlined': {\n transform: 'translate(15px, -8px) scale(0.85)',\n },\n },\n },\n },\n MuiTabs: {\n defaultProps: {\n variant: 'scrollable',\n },\n styleOverrides: {\n indicator: {\n height: 1,\n backgroundColor: BASE_THEME.palette.text.primary,\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n minWidth: BASE_THEME.spacing(2),\n paddingLeft: BASE_THEME.spacing(1.5),\n paddingRight: BASE_THEME.spacing(1.5),\n fontSize: BASE_THEME.typography.pxToRem(14),\n fontFamily: BASE_THEME.typography.fontFamily,\n lineHeight: 1.5,\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n transition: 'color 0.2s',\n '&.Mui-selected': {\n color: BASE_THEME.palette.text.primary,\n },\n '&:hover': {\n color: BASE_THEME.palette.text.primary,\n },\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: 0,\n },\n },\n },\n MuiCardHeader: {\n styleOverrides: {\n title: {\n fontSize: BASE_THEME.typography.pxToRem(18),\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n },\n typography: {\n fontFamily: BASE_THEME.typography.fontFamily,\n h1: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(40),\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h2: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(32),\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h3: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(24),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h4: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(20),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h5: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(18),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h6: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(16),\n lineHeight: 1.5,\n letterSpacing: '-0.005em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n body1: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n body2: {\n fontSize: BASE_THEME.typography.pxToRem(12),\n },\n overline: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n letterSpacing: '0.05em',\n },\n button: {\n textTransform: 'none',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n lineHeight: 1.5,\n },\n caption: {\n letterSpacing: 0,\n lineHeight: 1.5,\n },\n },\n shadows: [\n 'none',\n '0px 4px 15px rgba(33, 36, 67, 0.04), 0px 0px 2px rgba(33, 36, 67, 0.04), 0px 0px 1px rgba(33, 36, 67, 0.04)',\n '0px 10px 20px rgba(33, 36, 67, 0.04), 0px 2px 6px rgba(33, 36, 67, 0.04), 0px 0px 1px rgba(33, 36, 67, 0.04)',\n '0px 16px 24px rgba(33, 36, 67, 0.05), 0px 2px 6px rgba(33, 36, 67, 0.05), 0px 0px 1px rgba(33, 36, 67, 0.05)',\n '0px 24px 32px rgba(33, 36, 67, 0.06), 0px 16px 24px rgba(33, 36, 67, 0.06), 0px 4px 8px rgba(33, 36, 67, 0.06)',\n ...Array(20).fill('none'),\n ],\n});\n\nexport default THEME;\n","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Shape\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Button\\\"],\\\"block-add.columns\\\":[\\\"Columns\\\"],\\\"block-add.company-signature\\\":[\\\"Company Signature\\\"],\\\"block-add.container\\\":[\\\"Container\\\"],\\\"block-add.divider\\\":[\\\"Divider\\\"],\\\"block-add.heading\\\":[\\\"Heading\\\"],\\\"block-add.html\\\":[\\\"Html\\\"],\\\"block-add.image\\\":[\\\"Image\\\"],\\\"block-add.personal-signature\\\":[\\\"Personal Signature\\\"],\\\"block-add.spacer\\\":[\\\"Spacer\\\"],\\\"block-add.text\\\":[\\\"Text\\\"],\\\"button.color\\\":[\\\"Button color\\\"],\\\"button.style.pill\\\":[\\\"Pill\\\"],\\\"button.style.rectangle\\\":[\\\"Rectangle\\\"],\\\"button.style.rounded\\\":[\\\"Rounded\\\"],\\\"button.width.auto\\\":[\\\"Auto\\\"],\\\"button.width.full\\\":[\\\"Full\\\"],\\\"canvas.desktop-view\\\":[\\\"Desktop view\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobile view\\\"],\\\"columns.count\\\":[\\\"Number of columns\\\"],\\\"columns.gap\\\":[\\\"Columns gap\\\"],\\\"common.add\\\":[\\\"Add\\\"],\\\"common.cancel\\\":[\\\"Cancel\\\"],\\\"common.save\\\":[\\\"Save\\\"],\\\"common.saving\\\":[\\\"Saving…\\\"],\\\"divider.color\\\":[\\\"Color\\\"],\\\"drawer.library\\\":[\\\"Library\\\"],\\\"drawer.new-sample\\\":[\\\"New sample\\\"],\\\"drawer.new-template\\\":[\\\"New template\\\"],\\\"drawer.no-samples\\\":[\\\"No samples available\\\"],\\\"drawer.no-samples-match\\\":[\\\"No samples match your filters\\\"],\\\"drawer.no-templates\\\":[\\\"No saved templates yet\\\"],\\\"drawer.no-templates-match\\\":[\\\"No templates match your filters\\\"],\\\"drawer.search-samples\\\":[\\\"Search samples\\\"],\\\"drawer.search-templates\\\":[\\\"Search templates\\\"],\\\"drawer.sort-by\\\":[\\\"Sort by\\\"],\\\"drawer.tab.outline\\\":[\\\"Outline\\\"],\\\"drawer.tab.samples\\\":[\\\"Samples\\\"],\\\"drawer.tab.templates\\\":[\\\"Templates\\\"],\\\"drawer.tag.all\\\":[\\\"All\\\"],\\\"empty.description\\\":[\\\"A blank email template to start from scratch\\\"],\\\"empty.slug\\\":[\\\"Empty email\\\"],\\\"field.content\\\":[\\\"Content\\\"],\\\"field.height\\\":[\\\"Height\\\"],\\\"field.level\\\":[\\\"Level\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Size\\\"],\\\"field.style\\\":[\\\"Style\\\"],\\\"field.text\\\":[\\\"Text\\\"],\\\"field.url\\\":[\\\"Url\\\"],\\\"field.width\\\":[\\\"Width\\\"],\\\"font-family.inherit\\\":[\\\"Match email settings\\\"],\\\"font-weight.bold\\\":[\\\"Bold\\\"],\\\"font-weight.regular\\\":[\\\"Regular\\\"],\\\"global.backdrop-color\\\":[\\\"Backdrop color\\\"],\\\"global.canvas-border-color\\\":[\\\"Canvas border color\\\"],\\\"global.canvas-border-radius\\\":[\\\"Canvas border radius\\\"],\\\"global.canvas-color\\\":[\\\"Canvas color\\\"],\\\"global.disable-backdrop\\\":[\\\"Disable backdrop\\\"],\\\"image.alt-text\\\":[\\\"Alt text\\\"],\\\"image.http-warning\\\":[\\\"Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery.\\\"],\\\"image.library\\\":[\\\"Library\\\"],\\\"image.link-href\\\":[\\\"Click through URL\\\"],\\\"image.source-url\\\":[\\\"Source URL\\\"],\\\"image.upload\\\":[\\\"Upload\\\"],\\\"image.uploading\\\":[\\\"Uploading…\\\"],\\\"inspect.hint\\\":[\\\"Click on a block to inspect.\\\"],\\\"inspect.not-found\\\":[\\\"Block not found. Click on a block to reset.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Inspect\\\"],\\\"inspector.tab.settings\\\":[\\\"Settings\\\"],\\\"inspector.tab.styles\\\":[\\\"Styles\\\"],\\\"inspector.tab.variables\\\":[\\\"Variables\\\"],\\\"outline.canvas\\\":[\\\"Canvas\\\"],\\\"outline.hint\\\":[\\\"Click a row to select. Drag a row to reorder or move it into a container.\\\"],\\\"outline.title\\\":[\\\"Outline\\\"],\\\"panel.avatar-block\\\":[\\\"Avatar block\\\"],\\\"panel.button-block\\\":[\\\"Button block\\\"],\\\"panel.columns-block\\\":[\\\"Columns block\\\"],\\\"panel.container-block\\\":[\\\"Container block\\\"],\\\"panel.details\\\":[\\\"Details\\\"],\\\"panel.divider-block\\\":[\\\"Divider block\\\"],\\\"panel.editor-appearance\\\":[\\\"Editor appearance\\\"],\\\"panel.export\\\":[\\\"Export\\\"],\\\"panel.global\\\":[\\\"Global\\\"],\\\"panel.heading-block\\\":[\\\"Heading block\\\"],\\\"panel.html-block\\\":[\\\"HTML block\\\"],\\\"panel.image-block\\\":[\\\"Image block\\\"],\\\"panel.signature-block\\\":[\\\"Signature block\\\"],\\\"panel.spacer-block\\\":[\\\"Spacer block\\\"],\\\"panel.template\\\":[\\\"Template\\\"],\\\"panel.text-block\\\":[\\\"Text block\\\"],\\\"picker.blank-desc\\\":[\\\"Start from an empty email\\\"],\\\"picker.blank-title\\\":[\\\"Blank\\\"],\\\"picker.create-sample\\\":[\\\"Create sample\\\"],\\\"picker.create-template\\\":[\\\"Create template\\\"],\\\"picker.creating\\\":[\\\"Creating…\\\"],\\\"picker.error-name-required\\\":[\\\"Name is required\\\"],\\\"picker.error-sample-taken\\\":[\\\"A sample with this name already exists\\\"],\\\"picker.error-template-taken\\\":[\\\"A template with this name already exists\\\"],\\\"picker.start-from\\\":[\\\"Start from\\\"],\\\"picker.title-sample\\\":[\\\"New sample\\\"],\\\"picker.title-template\\\":[\\\"New template\\\"],\\\"redo.label\\\":[\\\"Redo\\\"],\\\"redo.tooltip\\\":[\\\"Redo\\\"],\\\"rename.add-tag\\\":[\\\"Add a tag\\\"],\\\"rename.error-empty\\\":[\\\"Please enter a name\\\"],\\\"rename.error-generic\\\":[\\\"Failed to update template details\\\"],\\\"rename.error-taken\\\":[\\\"A template with this name already exists\\\"],\\\"rename.name-label\\\":[\\\"Name\\\"],\\\"rename.no-tags\\\":[\\\"No tags yet.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Add a tag and press Enter\\\"],\\\"rename.tags\\\":[\\\"Tags\\\"],\\\"rename.title\\\":[\\\"Edit details\\\"],\\\"row.actions\\\":[\\\"Row actions\\\"],\\\"row.demote\\\":[\\\"Demote to template\\\"],\\\"row.duplicate\\\":[\\\"Duplicate\\\"],\\\"row.duplicate-as-template\\\":[\\\"Duplicate as template\\\"],\\\"row.edit-details\\\":[\\\"Edit name & tags…\\\"],\\\"row.more\\\":[\\\"More\\\"],\\\"row.promote\\\":[\\\"Promote to sample\\\"],\\\"save-dialog.create\\\":[\\\"Create\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Please enter a template name\\\"],\\\"save-dialog.name-label\\\":[\\\"Template Name\\\"],\\\"save-dialog.save\\\":[\\\"Save\\\"],\\\"save-dialog.saving\\\":[\\\"Saving...\\\"],\\\"save-dialog.title\\\":[\\\"Save as a new template\\\"],\\\"save-dialog.title-new\\\":[\\\"Create a new template\\\"],\\\"savebar.error-saving\\\":[\\\"Error saving\\\"],\\\"savebar.new\\\":[\\\"New\\\"],\\\"savebar.new-template-created\\\":[\\\"New template created\\\"],\\\"savebar.sample-prefix\\\":[\\\"Sample\\\"],\\\"savebar.sample-saved\\\":[\\\"Sample saved\\\"],\\\"savebar.save\\\":[\\\"Save\\\"],\\\"savebar.save-as\\\":[\\\"Save as…\\\"],\\\"savebar.save-as-new\\\":[\\\"Save as new…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Save as a new template\\\"],\\\"savebar.save-changes\\\":[\\\"Save changes\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Save changes to this sample\\\"],\\\"savebar.start-fresh\\\":[\\\"Start a fresh template\\\"],\\\"savebar.template-saved\\\":[\\\"Template saved\\\"],\\\"settings.checkerboard\\\":[\\\"Checkerboard\\\"],\\\"settings.copied\\\":[\\\"Template copied successfully!\\\"],\\\"settings.delete\\\":[\\\"Delete Template\\\"],\\\"settings.delete-confirm\\\":[\\\"Are you sure you want to delete this template?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Editor-only — never reaches the rendered email.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Wire a renameTemplate callback to enable editing from here\\\"],\\\"settings.no-template\\\":[\\\"No template selected\\\"],\\\"settings.save-as-sample\\\":[\\\"Save as Sample Template\\\"],\\\"settings.save-details\\\":[\\\"Save details\\\"],\\\"settings.save-disabled\\\":[\\\"Save functionality is disabled. To enable saving, provide the necessary callback functions.\\\"],\\\"settings.saved\\\":[\\\"Saved\\\"],\\\"settings.solid\\\":[\\\"Solid\\\"],\\\"settings.workspace-background\\\":[\\\"Workspace background\\\"],\\\"signature.address\\\":[\\\"Address\\\"],\\\"signature.company\\\":[\\\"Company\\\"],\\\"signature.email\\\":[\\\"Email\\\"],\\\"signature.greeting\\\":[\\\"Greeting\\\"],\\\"signature.image-shape\\\":[\\\"Image shape\\\"],\\\"signature.image-size\\\":[\\\"Image size\\\"],\\\"signature.image-url\\\":[\\\"Image URL\\\"],\\\"signature.layout\\\":[\\\"Layout\\\"],\\\"signature.layout.horizontal\\\":[\\\"Horizontal\\\"],\\\"signature.layout.vertical\\\":[\\\"Vertical\\\"],\\\"signature.link-color\\\":[\\\"Link color\\\"],\\\"signature.name\\\":[\\\"Name\\\"],\\\"signature.name-color\\\":[\\\"Name color\\\"],\\\"signature.phone\\\":[\\\"Phone\\\"],\\\"signature.shape.circle\\\":[\\\"Circle\\\"],\\\"signature.shape.rounded\\\":[\\\"Rounded\\\"],\\\"signature.shape.square\\\":[\\\"Square\\\"],\\\"signature.title\\\":[\\\"Title\\\"],\\\"signature.website\\\":[\\\"Website\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Last updated\\\"],\\\"sort.name\\\":[\\\"Name (A–Z)\\\"],\\\"sort.recently-created\\\":[\\\"Recently created\\\"],\\\"style.alignment\\\":[\\\"Alignment\\\"],\\\"style.background-color\\\":[\\\"Background color\\\"],\\\"style.border-color\\\":[\\\"Border color\\\"],\\\"style.border-radius\\\":[\\\"Border radius\\\"],\\\"style.font-family\\\":[\\\"Font family\\\"],\\\"style.font-size\\\":[\\\"Font size\\\"],\\\"style.font-weight\\\":[\\\"Font weight\\\"],\\\"style.letter-spacing\\\":[\\\"Letter spacing\\\"],\\\"style.line-height\\\":[\\\"Line height\\\"],\\\"style.padding\\\":[\\\"Padding\\\"],\\\"style.text-color\\\":[\\\"Text color\\\"],\\\"tab.edit\\\":[\\\"Edit\\\"],\\\"tab.html-output\\\":[\\\"HTML output\\\"],\\\"tab.json-output\\\":[\\\"JSON output\\\"],\\\"tab.preview\\\":[\\\"Preview\\\"],\\\"tab.text-output\\\":[\\\"Plain text output\\\"],\\\"tag.marketing\\\":[\\\"marketing\\\"],\\\"tag.transactional\\\":[\\\"transactional\\\"],\\\"time.days-short\\\":[\\\"d ago\\\"],\\\"time.hours-short\\\":[\\\"h ago\\\"],\\\"time.just-now\\\":[\\\"just now\\\"],\\\"time.minutes-short\\\":[\\\"m ago\\\"],\\\"time.months-short\\\":[\\\"mo ago\\\"],\\\"time.years-short\\\":[\\\"y ago\\\"],\\\"toolbar.apply\\\":[\\\"Apply\\\"],\\\"toolbar.bold\\\":[\\\"Bold\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Bold (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Font family\\\"],\\\"toolbar.italic\\\":[\\\"Italic\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Italic (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Link\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Link (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Overline\\\"],\\\"toolbar.text-color\\\":[\\\"Text color\\\"],\\\"toolbar.underline\\\":[\\\"Underline\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Underline (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Copy block\\\"],\\\"tune.delete\\\":[\\\"Delete\\\"],\\\"tune.move-down\\\":[\\\"Move down\\\"],\\\"tune.move-up\\\":[\\\"Move up\\\"],\\\"undo.label\\\":[\\\"Undo\\\"],\\\"undo.tooltip\\\":[\\\"Undo\\\"],\\\"variables.add\\\":[\\\"Add variable\\\"],\\\"variables.click-to-declare\\\":[\\\"Click a token to declare it.\\\"],\\\"variables.confirm-delete\\\":[\\\"Variable is still referenced in the body. Delete anyway?\\\"],\\\"variables.copy-token\\\":[\\\"Copy {\\\",[\\\"name\\\"],\\\"} token\\\"],\\\"variables.description\\\":[\\\"Description\\\"],\\\"variables.focus-first\\\":[\\\"Focus a text field first\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Insert at cursor\\\"],\\\"variables.intro\\\":[\\\"Declared variables travel with the template. Reference them in subject and body as {\\\",[\\\"name\\\"],\\\"}. In Preview mode, tokens render with the sample values below.\\\"],\\\"variables.none\\\":[\\\"No variables declared. Click + to add one.\\\"],\\\"variables.open-template\\\":[\\\"Open a template to manage variables.\\\"],\\\"variables.optional\\\":[\\\"Optional\\\"],\\\"variables.ref-many\\\":[\\\"refs\\\"],\\\"variables.ref-one\\\":[\\\"ref\\\"],\\\"variables.remove\\\":[\\\"Remove\\\"],\\\"variables.sample-hint\\\":[\\\"Shown in Preview mode\\\"],\\\"variables.sample-value\\\":[\\\"Sample value\\\"],\\\"variables.title\\\":[\\\"Variables\\\"],\\\"variables.undeclared\\\":[\\\"Undeclared in body\\\"],\\\"variables.unused\\\":[\\\"Unused in body\\\"]}\")as Messages;","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Muoto\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Painike\\\"],\\\"block-add.columns\\\":[\\\"Sarakkeet\\\"],\\\"block-add.company-signature\\\":[\\\"Yritysallekirjoitus\\\"],\\\"block-add.container\\\":[\\\"Säiliö\\\"],\\\"block-add.divider\\\":[\\\"Erotin\\\"],\\\"block-add.heading\\\":[\\\"Otsikko\\\"],\\\"block-add.html\\\":[\\\"HTML\\\"],\\\"block-add.image\\\":[\\\"Kuva\\\"],\\\"block-add.personal-signature\\\":[\\\"Henkilökohtainen allekirjoitus\\\"],\\\"block-add.spacer\\\":[\\\"Väli\\\"],\\\"block-add.text\\\":[\\\"Teksti\\\"],\\\"button.color\\\":[\\\"Painikkeen väri\\\"],\\\"button.style.pill\\\":[\\\"Pilleri\\\"],\\\"button.style.rectangle\\\":[\\\"Suorakaide\\\"],\\\"button.style.rounded\\\":[\\\"Pyöristetty\\\"],\\\"button.width.auto\\\":[\\\"Automaattinen\\\"],\\\"button.width.full\\\":[\\\"Täysi\\\"],\\\"canvas.desktop-view\\\":[\\\"Työpöytänäkymä\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobiilinäkymä\\\"],\\\"columns.count\\\":[\\\"Sarakkeiden määrä\\\"],\\\"columns.gap\\\":[\\\"Sarakeväli\\\"],\\\"common.add\\\":[\\\"Lisää\\\"],\\\"common.cancel\\\":[\\\"Peruuta\\\"],\\\"common.save\\\":[\\\"Tallenna\\\"],\\\"common.saving\\\":[\\\"Tallennetaan…\\\"],\\\"divider.color\\\":[\\\"Väri\\\"],\\\"drawer.library\\\":[\\\"Kirjasto\\\"],\\\"drawer.new-sample\\\":[\\\"Uusi malli\\\"],\\\"drawer.new-template\\\":[\\\"Uusi pohja\\\"],\\\"drawer.no-samples\\\":[\\\"Ei malleja saatavilla\\\"],\\\"drawer.no-samples-match\\\":[\\\"Mikään malli ei vastaa hakua\\\"],\\\"drawer.no-templates\\\":[\\\"Ei tallennettuja pohjia\\\"],\\\"drawer.no-templates-match\\\":[\\\"Mikään pohja ei vastaa hakua\\\"],\\\"drawer.search-samples\\\":[\\\"Etsi malleja\\\"],\\\"drawer.search-templates\\\":[\\\"Etsi pohjia\\\"],\\\"drawer.sort-by\\\":[\\\"Järjestys\\\"],\\\"drawer.tab.outline\\\":[\\\"Rakenne\\\"],\\\"drawer.tab.samples\\\":[\\\"Mallit\\\"],\\\"drawer.tab.templates\\\":[\\\"Pohjat\\\"],\\\"drawer.tag.all\\\":[\\\"Kaikki\\\"],\\\"empty.description\\\":[\\\"Tyhjä sähköpostipohja, aloita tyhjältä pöydältä\\\"],\\\"empty.slug\\\":[\\\"Tyhjä sähköposti\\\"],\\\"field.content\\\":[\\\"Sisältö\\\"],\\\"field.height\\\":[\\\"Korkeus\\\"],\\\"field.level\\\":[\\\"Taso\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Koko\\\"],\\\"field.style\\\":[\\\"Tyyli\\\"],\\\"field.text\\\":[\\\"Teksti\\\"],\\\"field.url\\\":[\\\"Osoite\\\"],\\\"field.width\\\":[\\\"Leveys\\\"],\\\"font-family.inherit\\\":[\\\"Käytä viestin asetuksia\\\"],\\\"font-weight.bold\\\":[\\\"Lihavoitu\\\"],\\\"font-weight.regular\\\":[\\\"Normaali\\\"],\\\"global.backdrop-color\\\":[\\\"Taustaväri\\\"],\\\"global.canvas-border-color\\\":[\\\"Kankaan reunan väri\\\"],\\\"global.canvas-border-radius\\\":[\\\"Kankaan reunan pyöristys\\\"],\\\"global.canvas-color\\\":[\\\"Kankaan väri\\\"],\\\"global.disable-backdrop\\\":[\\\"Piilota taustaväri\\\"],\\\"image.alt-text\\\":[\\\"Vaihtoehtoinen teksti\\\"],\\\"image.http-warning\\\":[\\\"Ei-HTTPS-osoite: Gmail ja muut asiakasohjelmat poistavat sekoitetun sisällön. Käytä https:// varmaa toimitusta varten.\\\"],\\\"image.library\\\":[\\\"Kirjasto\\\"],\\\"image.link-href\\\":[\\\"Linkin osoite\\\"],\\\"image.source-url\\\":[\\\"Lähdeosoite\\\"],\\\"image.upload\\\":[\\\"Lataa\\\"],\\\"image.uploading\\\":[\\\"Ladataan…\\\"],\\\"inspect.hint\\\":[\\\"Valitse lohko napsauttamalla.\\\"],\\\"inspect.not-found\\\":[\\\"Lohkoa ei löytynyt. Palaa napsauttamalla toista lohkoa.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Tarkastele\\\"],\\\"inspector.tab.settings\\\":[\\\"Asetukset\\\"],\\\"inspector.tab.styles\\\":[\\\"Tyylit\\\"],\\\"inspector.tab.variables\\\":[\\\"Muuttujat\\\"],\\\"outline.canvas\\\":[\\\"Kangas\\\"],\\\"outline.hint\\\":[\\\"Valitse rivi napsauttamalla. Raahaa riviä järjestyksen muuttamiseksi tai siirrä se säiliöön.\\\"],\\\"outline.title\\\":[\\\"Rakenne\\\"],\\\"panel.avatar-block\\\":[\\\"Avatarlohko\\\"],\\\"panel.button-block\\\":[\\\"Painikelohko\\\"],\\\"panel.columns-block\\\":[\\\"Sarakkeet\\\"],\\\"panel.container-block\\\":[\\\"Säiliölohko\\\"],\\\"panel.details\\\":[\\\"Tiedot\\\"],\\\"panel.divider-block\\\":[\\\"Erotin\\\"],\\\"panel.editor-appearance\\\":[\\\"Editorin ulkoasu\\\"],\\\"panel.export\\\":[\\\"Vienti\\\"],\\\"panel.global\\\":[\\\"Yleiset\\\"],\\\"panel.heading-block\\\":[\\\"Otsikkolohko\\\"],\\\"panel.html-block\\\":[\\\"HTML-lohko\\\"],\\\"panel.image-block\\\":[\\\"Kuvalohko\\\"],\\\"panel.signature-block\\\":[\\\"Allekirjoituslohko\\\"],\\\"panel.spacer-block\\\":[\\\"Välilohko\\\"],\\\"panel.template\\\":[\\\"Pohja\\\"],\\\"panel.text-block\\\":[\\\"Tekstilohko\\\"],\\\"picker.blank-desc\\\":[\\\"Aloita tyhjästä sähköpostista\\\"],\\\"picker.blank-title\\\":[\\\"Tyhjä\\\"],\\\"picker.create-sample\\\":[\\\"Luo malli\\\"],\\\"picker.create-template\\\":[\\\"Luo pohja\\\"],\\\"picker.creating\\\":[\\\"Luodaan…\\\"],\\\"picker.error-name-required\\\":[\\\"Nimi vaaditaan\\\"],\\\"picker.error-sample-taken\\\":[\\\"Samanniminen malli on jo olemassa\\\"],\\\"picker.error-template-taken\\\":[\\\"Samanniminen pohja on jo olemassa\\\"],\\\"picker.start-from\\\":[\\\"Aloitetaan pohjasta\\\"],\\\"picker.title-sample\\\":[\\\"Uusi malli\\\"],\\\"picker.title-template\\\":[\\\"Uusi pohja\\\"],\\\"redo.label\\\":[\\\"Tee uudelleen\\\"],\\\"redo.tooltip\\\":[\\\"Tee uudelleen\\\"],\\\"rename.add-tag\\\":[\\\"Lisää tunniste\\\"],\\\"rename.error-empty\\\":[\\\"Anna nimi\\\"],\\\"rename.error-generic\\\":[\\\"Tietojen päivitys epäonnistui\\\"],\\\"rename.error-taken\\\":[\\\"Samanniminen pohja on jo olemassa\\\"],\\\"rename.name-label\\\":[\\\"Nimi\\\"],\\\"rename.no-tags\\\":[\\\"Ei tunnisteita.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Lisää tunniste ja paina Enter\\\"],\\\"rename.tags\\\":[\\\"Tunnisteet\\\"],\\\"rename.title\\\":[\\\"Muokkaa tietoja\\\"],\\\"row.actions\\\":[\\\"Rivin toiminnot\\\"],\\\"row.demote\\\":[\\\"Alenna pohjaksi\\\"],\\\"row.duplicate\\\":[\\\"Monista\\\"],\\\"row.duplicate-as-template\\\":[\\\"Monista pohjaksi\\\"],\\\"row.edit-details\\\":[\\\"Muokkaa nimeä ja tunnisteita…\\\"],\\\"row.more\\\":[\\\"Lisää\\\"],\\\"row.promote\\\":[\\\"Ylennä malliksi\\\"],\\\"save-dialog.create\\\":[\\\"Luo\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Anna pohjalle nimi\\\"],\\\"save-dialog.name-label\\\":[\\\"Pohjan nimi\\\"],\\\"save-dialog.save\\\":[\\\"Tallenna\\\"],\\\"save-dialog.saving\\\":[\\\"Tallennetaan...\\\"],\\\"save-dialog.title\\\":[\\\"Tallenna uutena pohjana\\\"],\\\"save-dialog.title-new\\\":[\\\"Luo uusi pohja\\\"],\\\"savebar.error-saving\\\":[\\\"Tallennus epäonnistui\\\"],\\\"savebar.new\\\":[\\\"Uusi\\\"],\\\"savebar.new-template-created\\\":[\\\"Uusi pohja luotu\\\"],\\\"savebar.sample-prefix\\\":[\\\"Malli\\\"],\\\"savebar.sample-saved\\\":[\\\"Malli tallennettu\\\"],\\\"savebar.save\\\":[\\\"Tallenna\\\"],\\\"savebar.save-as\\\":[\\\"Tallenna nimellä…\\\"],\\\"savebar.save-as-new\\\":[\\\"Tallenna uutena…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Tallenna uutena pohjana\\\"],\\\"savebar.save-changes\\\":[\\\"Tallenna muutokset\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Tallenna muutokset tähän malliin\\\"],\\\"savebar.start-fresh\\\":[\\\"Aloita tyhjästä pohjasta\\\"],\\\"savebar.template-saved\\\":[\\\"Pohja tallennettu\\\"],\\\"settings.checkerboard\\\":[\\\"Shakkikuvio\\\"],\\\"settings.copied\\\":[\\\"Pohja kopioitu!\\\"],\\\"settings.delete\\\":[\\\"Poista pohja\\\"],\\\"settings.delete-confirm\\\":[\\\"Haluatko varmasti poistaa tämän pohjan?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Näkyy vain editorissa — ei päädy lähetettävään viestiin.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Anna renameTemplate-callback käyttöön, niin voit muokata tästä\\\"],\\\"settings.no-template\\\":[\\\"Pohjaa ei ole valittu\\\"],\\\"settings.save-as-sample\\\":[\\\"Tallenna mallipohjaksi\\\"],\\\"settings.save-details\\\":[\\\"Tallenna tiedot\\\"],\\\"settings.save-disabled\\\":[\\\"Tallennus on poistettu käytöstä. Ota käyttöön antamalla tarvittavat callback-funktiot.\\\"],\\\"settings.saved\\\":[\\\"Tallennettu\\\"],\\\"settings.solid\\\":[\\\"Yksivärinen\\\"],\\\"settings.workspace-background\\\":[\\\"Työtilan tausta\\\"],\\\"signature.address\\\":[\\\"Osoite\\\"],\\\"signature.company\\\":[\\\"Yritys\\\"],\\\"signature.email\\\":[\\\"Sähköposti\\\"],\\\"signature.greeting\\\":[\\\"Tervehdys\\\"],\\\"signature.image-shape\\\":[\\\"Kuvan muoto\\\"],\\\"signature.image-size\\\":[\\\"Kuvan koko\\\"],\\\"signature.image-url\\\":[\\\"Kuvan osoite\\\"],\\\"signature.layout\\\":[\\\"Asettelu\\\"],\\\"signature.layout.horizontal\\\":[\\\"Vaakasuora\\\"],\\\"signature.layout.vertical\\\":[\\\"Pystysuora\\\"],\\\"signature.link-color\\\":[\\\"Linkin väri\\\"],\\\"signature.name\\\":[\\\"Nimi\\\"],\\\"signature.name-color\\\":[\\\"Nimen väri\\\"],\\\"signature.phone\\\":[\\\"Puhelin\\\"],\\\"signature.shape.circle\\\":[\\\"Ympyrä\\\"],\\\"signature.shape.rounded\\\":[\\\"Pyöristetty\\\"],\\\"signature.shape.square\\\":[\\\"Neliö\\\"],\\\"signature.title\\\":[\\\"Titteli\\\"],\\\"signature.website\\\":[\\\"Verkkosivusto\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Viimeksi päivitetty\\\"],\\\"sort.name\\\":[\\\"Nimi (A–Ö)\\\"],\\\"sort.recently-created\\\":[\\\"Äskettäin luotu\\\"],\\\"style.alignment\\\":[\\\"Tasaus\\\"],\\\"style.background-color\\\":[\\\"Taustaväri\\\"],\\\"style.border-color\\\":[\\\"Reunan väri\\\"],\\\"style.border-radius\\\":[\\\"Reunan pyöristys\\\"],\\\"style.font-family\\\":[\\\"Fontti\\\"],\\\"style.font-size\\\":[\\\"Fonttikoko\\\"],\\\"style.font-weight\\\":[\\\"Fontin paksuus\\\"],\\\"style.letter-spacing\\\":[\\\"Kirjainväli\\\"],\\\"style.line-height\\\":[\\\"Rivikorkeus\\\"],\\\"style.padding\\\":[\\\"Täyte\\\"],\\\"style.text-color\\\":[\\\"Tekstin väri\\\"],\\\"tab.edit\\\":[\\\"Muokkaa\\\"],\\\"tab.html-output\\\":[\\\"HTML-tuloste\\\"],\\\"tab.json-output\\\":[\\\"JSON-tuloste\\\"],\\\"tab.preview\\\":[\\\"Esikatselu\\\"],\\\"tab.text-output\\\":[\\\"Tekstituloste\\\"],\\\"tag.marketing\\\":[\\\"markkinointi\\\"],\\\"tag.transactional\\\":[\\\"tapahtumaviestit\\\"],\\\"time.days-short\\\":[\\\" pv sitten\\\"],\\\"time.hours-short\\\":[\\\" h sitten\\\"],\\\"time.just-now\\\":[\\\"juuri nyt\\\"],\\\"time.minutes-short\\\":[\\\" min sitten\\\"],\\\"time.months-short\\\":[\\\" kk sitten\\\"],\\\"time.years-short\\\":[\\\" v sitten\\\"],\\\"toolbar.apply\\\":[\\\"Käytä\\\"],\\\"toolbar.bold\\\":[\\\"Lihavointi\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Lihavointi (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Fontti\\\"],\\\"toolbar.italic\\\":[\\\"Kursivointi\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Kursivointi (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Linkki\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Linkki (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Yliviivaus\\\"],\\\"toolbar.text-color\\\":[\\\"Tekstin väri\\\"],\\\"toolbar.underline\\\":[\\\"Alleviivaus\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Alleviivaus (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Kopioi lohko\\\"],\\\"tune.delete\\\":[\\\"Poista\\\"],\\\"tune.move-down\\\":[\\\"Siirrä alas\\\"],\\\"tune.move-up\\\":[\\\"Siirrä ylös\\\"],\\\"undo.label\\\":[\\\"Kumoa\\\"],\\\"undo.tooltip\\\":[\\\"Kumoa\\\"],\\\"variables.add\\\":[\\\"Lisää muuttuja\\\"],\\\"variables.click-to-declare\\\":[\\\"Määrittele muuttuja napsauttamalla tunnistetta.\\\"],\\\"variables.confirm-delete\\\":[\\\"Muuttujaan viitataan edelleen viestissä. Poistetaanko silti?\\\"],\\\"variables.copy-token\\\":[\\\"Kopioi {\\\",[\\\"nimi\\\"],\\\"}-tunniste\\\"],\\\"variables.description\\\":[\\\"Kuvaus\\\"],\\\"variables.focus-first\\\":[\\\"Kohdista ensin tekstikenttään\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Lisää kohdistimeen\\\"],\\\"variables.intro\\\":[\\\"Määritellyt muuttujat kulkevat pohjan mukana. Viittaa niihin aiherivillä ja viestissä muodossa {\\\",[\\\"nimi\\\"],\\\"}. Esikatselussa merkit korvautuvat alla olevilla esimerkkiarvoilla.\\\"],\\\"variables.none\\\":[\\\"Ei määriteltyjä muuttujia. Lisää napsauttamalla +.\\\"],\\\"variables.open-template\\\":[\\\"Avaa pohja hallitaksesi muuttujia.\\\"],\\\"variables.optional\\\":[\\\"Valinnainen\\\"],\\\"variables.ref-many\\\":[\\\"viittausta\\\"],\\\"variables.ref-one\\\":[\\\"viittaus\\\"],\\\"variables.remove\\\":[\\\"Poista\\\"],\\\"variables.sample-hint\\\":[\\\"Näytetään esikatselussa\\\"],\\\"variables.sample-value\\\":[\\\"Esimerkkiarvo\\\"],\\\"variables.title\\\":[\\\"Muuttujat\\\"],\\\"variables.undeclared\\\":[\\\"Määrittelemätön viestissä\\\"],\\\"variables.unused\\\":[\\\"Ei käytössä viestissä\\\"]}\")as Messages;","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Form\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Knapp\\\"],\\\"block-add.columns\\\":[\\\"Kolumner\\\"],\\\"block-add.company-signature\\\":[\\\"Företagssignatur\\\"],\\\"block-add.container\\\":[\\\"Behållare\\\"],\\\"block-add.divider\\\":[\\\"Avgränsare\\\"],\\\"block-add.heading\\\":[\\\"Rubrik\\\"],\\\"block-add.html\\\":[\\\"HTML\\\"],\\\"block-add.image\\\":[\\\"Bild\\\"],\\\"block-add.personal-signature\\\":[\\\"Personlig signatur\\\"],\\\"block-add.spacer\\\":[\\\"Mellanrum\\\"],\\\"block-add.text\\\":[\\\"Text\\\"],\\\"button.color\\\":[\\\"Knappfärg\\\"],\\\"button.style.pill\\\":[\\\"Piller\\\"],\\\"button.style.rectangle\\\":[\\\"Rektangel\\\"],\\\"button.style.rounded\\\":[\\\"Rundad\\\"],\\\"button.width.auto\\\":[\\\"Auto\\\"],\\\"button.width.full\\\":[\\\"Full\\\"],\\\"canvas.desktop-view\\\":[\\\"Skrivbordsvy\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobilvy\\\"],\\\"columns.count\\\":[\\\"Antal kolumner\\\"],\\\"columns.gap\\\":[\\\"Kolumnmellanrum\\\"],\\\"common.add\\\":[\\\"Lägg till\\\"],\\\"common.cancel\\\":[\\\"Avbryt\\\"],\\\"common.save\\\":[\\\"Spara\\\"],\\\"common.saving\\\":[\\\"Sparar…\\\"],\\\"divider.color\\\":[\\\"Färg\\\"],\\\"drawer.library\\\":[\\\"Bibliotek\\\"],\\\"drawer.new-sample\\\":[\\\"Ny mall\\\"],\\\"drawer.new-template\\\":[\\\"Ny e-postmall\\\"],\\\"drawer.no-samples\\\":[\\\"Inga exempel tillgängliga\\\"],\\\"drawer.no-samples-match\\\":[\\\"Inga exempel matchar dina filter\\\"],\\\"drawer.no-templates\\\":[\\\"Inga sparade mallar ännu\\\"],\\\"drawer.no-templates-match\\\":[\\\"Inga mallar matchar dina filter\\\"],\\\"drawer.search-samples\\\":[\\\"Sök exempel\\\"],\\\"drawer.search-templates\\\":[\\\"Sök mallar\\\"],\\\"drawer.sort-by\\\":[\\\"Sortera efter\\\"],\\\"drawer.tab.outline\\\":[\\\"Struktur\\\"],\\\"drawer.tab.samples\\\":[\\\"Exempel\\\"],\\\"drawer.tab.templates\\\":[\\\"Mallar\\\"],\\\"drawer.tag.all\\\":[\\\"Alla\\\"],\\\"empty.description\\\":[\\\"En tom e-postmall att utgå från\\\"],\\\"empty.slug\\\":[\\\"Tomt e-postmeddelande\\\"],\\\"field.content\\\":[\\\"Innehåll\\\"],\\\"field.height\\\":[\\\"Höjd\\\"],\\\"field.level\\\":[\\\"Nivå\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Storlek\\\"],\\\"field.style\\\":[\\\"Stil\\\"],\\\"field.text\\\":[\\\"Text\\\"],\\\"field.url\\\":[\\\"Adress\\\"],\\\"field.width\\\":[\\\"Bredd\\\"],\\\"font-family.inherit\\\":[\\\"Följ mejlets inställningar\\\"],\\\"font-weight.bold\\\":[\\\"Fet\\\"],\\\"font-weight.regular\\\":[\\\"Normal\\\"],\\\"global.backdrop-color\\\":[\\\"Bakgrundsfärg\\\"],\\\"global.canvas-border-color\\\":[\\\"Canvaskantfärg\\\"],\\\"global.canvas-border-radius\\\":[\\\"Canvaskantradie\\\"],\\\"global.canvas-color\\\":[\\\"Canvasfärg\\\"],\\\"global.disable-backdrop\\\":[\\\"Dölj bakgrund\\\"],\\\"image.alt-text\\\":[\\\"Alternativ text\\\"],\\\"image.http-warning\\\":[\\\"Icke-HTTPS-URL: Gmail och andra klienter tar bort blandat innehåll. Använd https:// för pålitlig leverans.\\\"],\\\"image.library\\\":[\\\"Bibliotek\\\"],\\\"image.link-href\\\":[\\\"Klicklänk\\\"],\\\"image.source-url\\\":[\\\"Källadress\\\"],\\\"image.upload\\\":[\\\"Ladda upp\\\"],\\\"image.uploading\\\":[\\\"Laddar upp…\\\"],\\\"inspect.hint\\\":[\\\"Klicka på ett block för att inspektera.\\\"],\\\"inspect.not-found\\\":[\\\"Blocket hittades inte. Klicka på ett block för att återställa.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Inspektera\\\"],\\\"inspector.tab.settings\\\":[\\\"Inställningar\\\"],\\\"inspector.tab.styles\\\":[\\\"Stilar\\\"],\\\"inspector.tab.variables\\\":[\\\"Variabler\\\"],\\\"outline.canvas\\\":[\\\"Canvas\\\"],\\\"outline.hint\\\":[\\\"Klicka på en rad för att välja. Dra en rad för att ändra ordning eller flytta till en behållare.\\\"],\\\"outline.title\\\":[\\\"Struktur\\\"],\\\"panel.avatar-block\\\":[\\\"Avatarblock\\\"],\\\"panel.button-block\\\":[\\\"Knappblock\\\"],\\\"panel.columns-block\\\":[\\\"Kolumner\\\"],\\\"panel.container-block\\\":[\\\"Behållarblock\\\"],\\\"panel.details\\\":[\\\"Detaljer\\\"],\\\"panel.divider-block\\\":[\\\"Avgränsare\\\"],\\\"panel.editor-appearance\\\":[\\\"Editorns utseende\\\"],\\\"panel.export\\\":[\\\"Exportera\\\"],\\\"panel.global\\\":[\\\"Allmänt\\\"],\\\"panel.heading-block\\\":[\\\"Rubrikblock\\\"],\\\"panel.html-block\\\":[\\\"HTML-block\\\"],\\\"panel.image-block\\\":[\\\"Bildblock\\\"],\\\"panel.signature-block\\\":[\\\"Signaturblock\\\"],\\\"panel.spacer-block\\\":[\\\"Mellanrumsblock\\\"],\\\"panel.template\\\":[\\\"Mall\\\"],\\\"panel.text-block\\\":[\\\"Textblock\\\"],\\\"picker.blank-desc\\\":[\\\"Starta från ett tomt e-postmeddelande\\\"],\\\"picker.blank-title\\\":[\\\"Tomt\\\"],\\\"picker.create-sample\\\":[\\\"Skapa exempel\\\"],\\\"picker.create-template\\\":[\\\"Skapa mall\\\"],\\\"picker.creating\\\":[\\\"Skapar…\\\"],\\\"picker.error-name-required\\\":[\\\"Namn krävs\\\"],\\\"picker.error-sample-taken\\\":[\\\"Ett exempel med detta namn finns redan\\\"],\\\"picker.error-template-taken\\\":[\\\"En mall med detta namn finns redan\\\"],\\\"picker.start-from\\\":[\\\"Utgå från\\\"],\\\"picker.title-sample\\\":[\\\"Nytt exempel\\\"],\\\"picker.title-template\\\":[\\\"Ny mall\\\"],\\\"redo.label\\\":[\\\"Gör om\\\"],\\\"redo.tooltip\\\":[\\\"Gör om\\\"],\\\"rename.add-tag\\\":[\\\"Lägg till en etikett\\\"],\\\"rename.error-empty\\\":[\\\"Ange ett namn\\\"],\\\"rename.error-generic\\\":[\\\"Kunde inte uppdatera malldetaljer\\\"],\\\"rename.error-taken\\\":[\\\"En mall med detta namn finns redan\\\"],\\\"rename.name-label\\\":[\\\"Namn\\\"],\\\"rename.no-tags\\\":[\\\"Inga etiketter ännu.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Lägg till en etikett och tryck Enter\\\"],\\\"rename.tags\\\":[\\\"Etiketter\\\"],\\\"rename.title\\\":[\\\"Redigera detaljer\\\"],\\\"row.actions\\\":[\\\"Radåtgärder\\\"],\\\"row.demote\\\":[\\\"Degradera till mall\\\"],\\\"row.duplicate\\\":[\\\"Duplicera\\\"],\\\"row.duplicate-as-template\\\":[\\\"Duplicera som mall\\\"],\\\"row.edit-details\\\":[\\\"Redigera namn och etiketter…\\\"],\\\"row.more\\\":[\\\"Mer\\\"],\\\"row.promote\\\":[\\\"Befordra till exempel\\\"],\\\"save-dialog.create\\\":[\\\"Skapa\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Ange ett mallnamn\\\"],\\\"save-dialog.name-label\\\":[\\\"Mallnamn\\\"],\\\"save-dialog.save\\\":[\\\"Spara\\\"],\\\"save-dialog.saving\\\":[\\\"Sparar...\\\"],\\\"save-dialog.title\\\":[\\\"Spara som en ny mall\\\"],\\\"save-dialog.title-new\\\":[\\\"Skapa en ny mall\\\"],\\\"savebar.error-saving\\\":[\\\"Fel vid sparande\\\"],\\\"savebar.new\\\":[\\\"Ny\\\"],\\\"savebar.new-template-created\\\":[\\\"Ny mall skapad\\\"],\\\"savebar.sample-prefix\\\":[\\\"Exempel\\\"],\\\"savebar.sample-saved\\\":[\\\"Exempel sparat\\\"],\\\"savebar.save\\\":[\\\"Spara\\\"],\\\"savebar.save-as\\\":[\\\"Spara som…\\\"],\\\"savebar.save-as-new\\\":[\\\"Spara som ny…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Spara som en ny mall\\\"],\\\"savebar.save-changes\\\":[\\\"Spara ändringar\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Spara ändringar till detta exempel\\\"],\\\"savebar.start-fresh\\\":[\\\"Starta en ny mall\\\"],\\\"savebar.template-saved\\\":[\\\"Mall sparad\\\"],\\\"settings.checkerboard\\\":[\\\"Rutmönster\\\"],\\\"settings.copied\\\":[\\\"Mall kopierad!\\\"],\\\"settings.delete\\\":[\\\"Ta bort mall\\\"],\\\"settings.delete-confirm\\\":[\\\"Är du säker på att du vill ta bort denna mall?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Syns bara i editorn — når aldrig det renderade mejlet.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Koppla renameTemplate-callback för att kunna redigera härifrån\\\"],\\\"settings.no-template\\\":[\\\"Ingen mall vald\\\"],\\\"settings.save-as-sample\\\":[\\\"Spara som exempelmall\\\"],\\\"settings.save-details\\\":[\\\"Spara detaljer\\\"],\\\"settings.save-disabled\\\":[\\\"Sparfunktionen är inaktiverad. Aktivera genom att ange nödvändiga callback-funktioner.\\\"],\\\"settings.saved\\\":[\\\"Sparad\\\"],\\\"settings.solid\\\":[\\\"Enfärgad\\\"],\\\"settings.workspace-background\\\":[\\\"Arbetsytans bakgrund\\\"],\\\"signature.address\\\":[\\\"Adress\\\"],\\\"signature.company\\\":[\\\"Företag\\\"],\\\"signature.email\\\":[\\\"E-post\\\"],\\\"signature.greeting\\\":[\\\"Hälsning\\\"],\\\"signature.image-shape\\\":[\\\"Bildform\\\"],\\\"signature.image-size\\\":[\\\"Bildstorlek\\\"],\\\"signature.image-url\\\":[\\\"Bildadress\\\"],\\\"signature.layout\\\":[\\\"Layout\\\"],\\\"signature.layout.horizontal\\\":[\\\"Horisontell\\\"],\\\"signature.layout.vertical\\\":[\\\"Vertikal\\\"],\\\"signature.link-color\\\":[\\\"Länkfärg\\\"],\\\"signature.name\\\":[\\\"Namn\\\"],\\\"signature.name-color\\\":[\\\"Namnfärg\\\"],\\\"signature.phone\\\":[\\\"Telefon\\\"],\\\"signature.shape.circle\\\":[\\\"Cirkel\\\"],\\\"signature.shape.rounded\\\":[\\\"Rundad\\\"],\\\"signature.shape.square\\\":[\\\"Kvadrat\\\"],\\\"signature.title\\\":[\\\"Titel\\\"],\\\"signature.website\\\":[\\\"Webbplats\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Senast uppdaterad\\\"],\\\"sort.name\\\":[\\\"Namn (A–Ö)\\\"],\\\"sort.recently-created\\\":[\\\"Nyligen skapad\\\"],\\\"style.alignment\\\":[\\\"Justering\\\"],\\\"style.background-color\\\":[\\\"Bakgrundsfärg\\\"],\\\"style.border-color\\\":[\\\"Kantfärg\\\"],\\\"style.border-radius\\\":[\\\"Kantradie\\\"],\\\"style.font-family\\\":[\\\"Typsnitt\\\"],\\\"style.font-size\\\":[\\\"Typsnittsstorlek\\\"],\\\"style.font-weight\\\":[\\\"Typsnittsvikt\\\"],\\\"style.letter-spacing\\\":[\\\"Teckenavstånd\\\"],\\\"style.line-height\\\":[\\\"Radhöjd\\\"],\\\"style.padding\\\":[\\\"Utrymme\\\"],\\\"style.text-color\\\":[\\\"Textfärg\\\"],\\\"tab.edit\\\":[\\\"Redigera\\\"],\\\"tab.html-output\\\":[\\\"HTML-utdata\\\"],\\\"tab.json-output\\\":[\\\"JSON-utdata\\\"],\\\"tab.preview\\\":[\\\"Förhandsgranska\\\"],\\\"tab.text-output\\\":[\\\"Textutdata\\\"],\\\"tag.marketing\\\":[\\\"marknadsföring\\\"],\\\"tag.transactional\\\":[\\\"transaktionella\\\"],\\\"time.days-short\\\":[\\\" d sedan\\\"],\\\"time.hours-short\\\":[\\\" tim sedan\\\"],\\\"time.just-now\\\":[\\\"just nu\\\"],\\\"time.minutes-short\\\":[\\\" min sedan\\\"],\\\"time.months-short\\\":[\\\" mån sedan\\\"],\\\"time.years-short\\\":[\\\" år sedan\\\"],\\\"toolbar.apply\\\":[\\\"Använd\\\"],\\\"toolbar.bold\\\":[\\\"Fet\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Fet (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Typsnitt\\\"],\\\"toolbar.italic\\\":[\\\"Kursiv\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Kursiv (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Länk\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Länk (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Överstruken\\\"],\\\"toolbar.text-color\\\":[\\\"Textfärg\\\"],\\\"toolbar.underline\\\":[\\\"Understruken\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Understruken (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Kopiera block\\\"],\\\"tune.delete\\\":[\\\"Ta bort\\\"],\\\"tune.move-down\\\":[\\\"Flytta ner\\\"],\\\"tune.move-up\\\":[\\\"Flytta upp\\\"],\\\"undo.label\\\":[\\\"Ångra\\\"],\\\"undo.tooltip\\\":[\\\"Ångra\\\"],\\\"variables.add\\\":[\\\"Lägg till variabel\\\"],\\\"variables.click-to-declare\\\":[\\\"Klicka på en token för att deklarera den.\\\"],\\\"variables.confirm-delete\\\":[\\\"Variabeln refereras fortfarande i brödtexten. Ta bort ändå?\\\"],\\\"variables.copy-token\\\":[\\\"Kopiera {\\\",[\\\"namn\\\"],\\\"}-token\\\"],\\\"variables.description\\\":[\\\"Beskrivning\\\"],\\\"variables.focus-first\\\":[\\\"Fokusera ett textfält först\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Infoga vid markören\\\"],\\\"variables.intro\\\":[\\\"Deklarerade variabler följer med mallen. Hänvisa till dem i ämnesrad och brödtext som {\\\",[\\\"namn\\\"],\\\"}. I förhandsgranskningen renderas tokens med exempelvärdena nedan.\\\"],\\\"variables.none\\\":[\\\"Inga variabler deklarerade. Klicka på + för att lägga till en.\\\"],\\\"variables.open-template\\\":[\\\"Öppna en mall för att hantera variabler.\\\"],\\\"variables.optional\\\":[\\\"Valfritt\\\"],\\\"variables.ref-many\\\":[\\\"referenser\\\"],\\\"variables.ref-one\\\":[\\\"referens\\\"],\\\"variables.remove\\\":[\\\"Ta bort\\\"],\\\"variables.sample-hint\\\":[\\\"Visas i förhandsgranskning\\\"],\\\"variables.sample-value\\\":[\\\"Exempelvärde\\\"],\\\"variables.title\\\":[\\\"Variabler\\\"],\\\"variables.undeclared\\\":[\\\"Odeklarerad i brödtexten\\\"],\\\"variables.unused\\\":[\\\"Oanvänd i brödtexten\\\"]}\")as Messages;","import { i18n, type Messages } from '@lingui/core';\n\nimport { messages as en } from '../locales/en/messages';\nimport { messages as fi } from '../locales/fi/messages';\nimport { messages as sv } from '../locales/sv/messages';\n\nexport const SUPPORTED_LOCALES = ['en', 'sv', 'fi'] as const;\nexport type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];\n\nconst CATALOGS: Record<SupportedLocale, Messages> = {\n en,\n sv,\n fi,\n};\n\nlet loaded = false;\n\nexport function activateLocale(locale: string | undefined): SupportedLocale {\n const resolved: SupportedLocale = (SUPPORTED_LOCALES as readonly string[]).includes(locale ?? '')\n ? (locale as SupportedLocale)\n : 'en';\n if (locale && resolved !== locale) {\n // eslint-disable-next-line no-console\n console.warn(`[email-template-editor] Unsupported locale \"${locale}\", falling back to \"en\".`);\n }\n if (!loaded) {\n i18n.load({ en: CATALOGS.en, sv: CATALOGS.sv, fi: CATALOGS.fi });\n loaded = true;\n }\n i18n.activate(resolved);\n return resolved;\n}\n\n// Imperative translation helper — looks up `id` in the active catalog and\n// falls back to `fallback` (or `id` itself) when the message is missing.\nexport function t(id: string, fallback?: string): string {\n return i18n._(id, {}, { message: fallback ?? id });\n}\n\nexport { i18n };\nexport { Trans } from '@lingui/react';\n","import { create, useStore } from 'zustand';\nimport { temporal } from 'zundo';\n\nimport { TEditorConfiguration } from './core';\nimport type { ParentRef } from './blocks/helpers/move-block';\n\nexport type TFocusedEditable = {\n blockId: string; // 'subject' for the EmailLayout subject input\n field: 'text' | 'contents' | 'subject';\n selectionStart: number;\n selectionEnd: number;\n};\n\nexport type TDraggingBlock = {\n sourceId: string;\n sourceParent: ParentRef;\n};\n\ntype TValue = {\n document: TEditorConfiguration;\n selectedBlockId: string | null;\n selectedSidebarTab: 'block-configuration' | 'styles' | 'template-settings' | 'variables';\n selectedMainTab: 'editor' | 'preview' | 'json' | 'html' | 'text';\n selectedScreenSize: 'desktop' | 'mobile';\n inspectorDrawerOpen: boolean;\n samplesDrawerOpen: boolean;\n persistenceEnabled: boolean;\n lastFocusedEditable: TFocusedEditable | null;\n hoveredBlockId: string | null;\n draggingBlock: TDraggingBlock | null;\n workspaceBackground: 'checkerboard' | 'solid';\n};\n\n// Initialize with an empty document\nconst EMPTY_DOCUMENT: TEditorConfiguration = {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: [],\n },\n },\n};\n\n// Leading-edge throttle so rapid consecutive document mutations (dragging a\n// slider, typing) collapse into a single history entry: only the pre-burst\n// state is pushed, subsequent changes inside the window are dropped from the\n// undo stack (they remain in the document, just not as separate entries).\nconst COALESCE_MS = 300;\nfunction leadingThrottle<Args extends unknown[]>(\n fn: (...args: Args) => void,\n wait: number,\n): (...args: Args) => void {\n let last = Number.NEGATIVE_INFINITY;\n return (...args: Args) => {\n const now = Date.now();\n if (now - last >= wait) {\n last = now;\n fn(...args);\n }\n };\n}\n\nconst editorStateStore = create<TValue>()(\n temporal(\n () => ({\n document: EMPTY_DOCUMENT,\n selectedBlockId: null,\n selectedSidebarTab: 'styles',\n selectedMainTab: 'editor',\n selectedScreenSize: 'desktop',\n inspectorDrawerOpen: true,\n samplesDrawerOpen: true,\n persistenceEnabled: false,\n lastFocusedEditable: null,\n hoveredBlockId: null,\n draggingBlock: null,\n workspaceBackground: 'checkerboard',\n }),\n {\n limit: 100,\n // Only the document participates in history — selection, drawers, tabs\n // and other UI state are intentionally excluded.\n partialize: (state) => ({ document: state.document }),\n // Skip UI-only state changes: if the document reference is unchanged,\n // no history entry is recorded.\n equality: (a, b) => a.document === b.document,\n handleSet: (handleSet) =>\n leadingThrottle<Parameters<typeof handleSet>>(\n (pastState, replace, currentState) => handleSet(pastState, replace, currentState),\n COALESCE_MS,\n ),\n },\n ),\n);\n\nexport function useDocument() {\n return editorStateStore((s) => s.document);\n}\n\nexport function useSelectedBlockId() {\n return editorStateStore((s) => s.selectedBlockId);\n}\n\nexport function useSelectedScreenSize() {\n return editorStateStore((s) => s.selectedScreenSize);\n}\n\nexport function useSelectedMainTab() {\n return editorStateStore((s) => s.selectedMainTab);\n}\n\nexport function setSelectedMainTab(selectedMainTab: TValue['selectedMainTab']) {\n return editorStateStore.setState({ selectedMainTab });\n}\n\nexport function useSelectedSidebarTab() {\n return editorStateStore((s) => s.selectedSidebarTab);\n}\n\nexport function useInspectorDrawerOpen() {\n return editorStateStore((s) => s.inspectorDrawerOpen);\n}\n\nexport function useSamplesDrawerOpen() {\n return editorStateStore((s) => s.samplesDrawerOpen);\n}\n\nexport function usePersistenceEnabled() {\n return editorStateStore((s) => s.persistenceEnabled);\n}\n\nexport function setSelectedBlockId(selectedBlockId: TValue['selectedBlockId']) {\n const selectedSidebarTab = selectedBlockId === null ? 'styles' : 'block-configuration';\n const options: Partial<TValue> = {};\n if (selectedBlockId !== null) {\n options.inspectorDrawerOpen = true;\n }\n return editorStateStore.setState({\n selectedBlockId,\n selectedSidebarTab,\n ...options,\n });\n}\n\nexport function setSidebarTab(selectedSidebarTab: TValue['selectedSidebarTab']) {\n return editorStateStore.setState({ selectedSidebarTab });\n}\n\nexport function resetDocument(document: TValue['document']) {\n // Loading a fresh template should not itself appear as an undoable step,\n // and any prior history no longer applies to the new document.\n const temporalApi = editorStateStore.temporal.getState();\n temporalApi.pause();\n editorStateStore.setState({\n document,\n selectedSidebarTab: 'styles',\n selectedBlockId: null,\n });\n temporalApi.clear();\n temporalApi.resume();\n}\n\nexport function getDocument() {\n return editorStateStore.getState().document;\n}\n\nexport function setDocument(document: TValue['document']) {\n const originalDocument = editorStateStore.getState().document;\n\n editorStateStore.setState({\n document: {\n ...originalDocument,\n ...document,\n },\n });\n}\n\n// Replace the full document (unlike setDocument, does not merge with the\n// current one). Preserves undo history — use this for document-wide edits\n// such as block deletions that need to drop keys from the map. Distinct from\n// resetDocument, which clears history because it implies a fresh template.\nexport function replaceDocument(document: TValue['document']) {\n editorStateStore.setState({ document });\n}\n\nexport function toggleInspectorDrawerOpen() {\n const inspectorDrawerOpen = !editorStateStore.getState().inspectorDrawerOpen;\n return editorStateStore.setState({ inspectorDrawerOpen });\n}\n\nexport function toggleSamplesDrawerOpen() {\n const samplesDrawerOpen = !editorStateStore.getState().samplesDrawerOpen;\n return editorStateStore.setState({ samplesDrawerOpen });\n}\n\nexport function setSelectedScreenSize(selectedScreenSize: TValue['selectedScreenSize']) {\n return editorStateStore.setState({ selectedScreenSize });\n}\n\nexport function setPersistenceEnabled(persistenceEnabled: boolean) {\n return editorStateStore.setState({ persistenceEnabled });\n}\n\nexport function useLastFocusedEditable() {\n return editorStateStore((s) => s.lastFocusedEditable);\n}\n\nexport function getLastFocusedEditable() {\n return editorStateStore.getState().lastFocusedEditable;\n}\n\nexport function useHoveredBlockId() {\n return editorStateStore((s) => s.hoveredBlockId);\n}\n\nexport function setHoveredBlockId(hoveredBlockId: TValue['hoveredBlockId']) {\n return editorStateStore.setState({ hoveredBlockId });\n}\n\nexport function useDraggingBlock() {\n return editorStateStore((s) => s.draggingBlock);\n}\n\nexport function getDraggingBlock() {\n return editorStateStore.getState().draggingBlock;\n}\n\nexport function setDraggingBlock(draggingBlock: TValue['draggingBlock']) {\n return editorStateStore.setState({ draggingBlock });\n}\n\nexport function useWorkspaceBackground() {\n return editorStateStore((s) => s.workspaceBackground);\n}\n\nexport function setWorkspaceBackground(workspaceBackground: TValue['workspaceBackground']) {\n return editorStateStore.setState({ workspaceBackground });\n}\n\nexport function setLastFocusedEditable(lastFocusedEditable: TFocusedEditable | null) {\n return editorStateStore.setState({ lastFocusedEditable });\n}\n\n// ---------------------------------------------------------------------------\n// Undo / redo\n// ---------------------------------------------------------------------------\n\nexport function undo() {\n editorStateStore.temporal.getState().undo();\n}\n\nexport function redo() {\n editorStateStore.temporal.getState().redo();\n}\n\nexport function clearHistory() {\n editorStateStore.temporal.getState().clear();\n}\n\nexport function useCanUndo() {\n return useStore(editorStateStore.temporal, (s) => s.pastStates.length > 0);\n}\n\nexport function useCanRedo() {\n return useStore(editorStateStore.temporal, (s) => s.futureStates.length > 0);\n}\n","import { TEditorConfiguration } from '@editor/core';\nimport { renderToStaticMarkup, renderToText } from '@email-builder';\n\nexport type TemplateVariable = {\n name: string;\n description?: string;\n /** Optional sample value used by the editor's Preview mode to substitute `{{name}}` tokens. */\n sampleValue?: string;\n};\n\n/**\n * Payload passed to `onSave` / `saveAs`. The editor renders body HTML and\n * plain text on every save so consumers don't have to call the renderers\n * themselves — keeps the consumer's bundle decoupled from a specific\n * renderer version.\n */\nexport type SavePayload = {\n editorConfig: TEditorConfiguration;\n subject?: string;\n variables?: TemplateVariable[];\n bodyHtml: string;\n bodyText: string;\n};\n\nconst ROOT_BLOCK_ID = 'root';\n\nexport function buildSavePayload(doc: TEditorConfiguration): SavePayload {\n const root = doc.root;\n const layoutData = (root && root.type === 'EmailLayout' ? root.data : undefined) as\n | { subject?: string | null; variables?: TemplateVariable[] | null }\n | undefined;\n\n return {\n editorConfig: doc,\n subject: layoutData?.subject ?? undefined,\n variables: layoutData?.variables ?? undefined,\n bodyHtml: renderToStaticMarkup(doc, { rootBlockId: ROOT_BLOCK_ID }),\n bodyText: renderToText(doc, { rootBlockId: ROOT_BLOCK_ID }),\n };\n}\n","import React, { createContext, useContext, useState, useCallback, useMemo, useRef } from 'react';\nimport { TEditorConfiguration } from '@editor/core';\nimport { getDocument } from '@editor/editor-context';\nimport { buildSavePayload, type SavePayload } from './save-payload';\n\nexport type TemplateKind = 'template' | 'sample';\n\n// Type for stored template\nexport interface StoredTemplate {\n id: string;\n name: string;\n content: TEditorConfiguration;\n createdAt: string;\n updatedAt: string;\n description?: string;\n subject?: string;\n tags?: string[];\n kind?: TemplateKind;\n}\n\nexport interface EmailEditorContextType {\n currentTemplateId: string | null;\n currentTemplateName: string | null;\n currentTemplateKind: TemplateKind | null;\n currentTemplateTags: string[];\n saveTemplate: () => TEditorConfiguration;\n loadTemplate: (\n template: TEditorConfiguration,\n templateId?: string,\n templateName?: string,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => void;\n registerSaveListener: (callback: (template: TEditorConfiguration) => void) => () => void;\n setCurrentTemplate: (\n templateId: string | null,\n templateName: string | null,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => void;\n setCurrentTemplateTags: (tags: string[]) => void;\n}\n\nconst EmailEditorContext = createContext<EmailEditorContextType | null>(null);\n\nexport interface EmailEditorProviderProps {\n children: React.ReactNode;\n initialTemplate?: TEditorConfiguration;\n initialTemplateId?: string;\n initialTemplateName?: string;\n onSave?: (payload: SavePayload) => void | Promise<void>;\n onChange?: (template: TEditorConfiguration) => void;\n}\n\nexport const EmailEditorProvider: React.FC<EmailEditorProviderProps> = ({\n children,\n initialTemplateId = null,\n initialTemplateName = null,\n onSave,\n}) => {\n const [currentTemplateId, setCurrentTemplateId] = useState<string | null>(initialTemplateId);\n const [currentTemplateName, setCurrentTemplateName] = useState<string | null>(initialTemplateName);\n const [currentTemplateKind, setCurrentTemplateKind] = useState<TemplateKind | null>(null);\n const [currentTemplateTags, setCurrentTemplateTagsState] = useState<string[]>([]);\n const saveListenersRef = useRef<((template: TEditorConfiguration) => void)[]>([]);\n\n // Use ref for onSave callback to keep context value stable\n const onSaveRef = useRef(onSave);\n onSaveRef.current = onSave;\n\n const saveTemplate = useCallback(() => {\n const currentDoc = getDocument();\n saveListenersRef.current.forEach(listener => listener(currentDoc));\n if (onSaveRef.current) {\n onSaveRef.current(buildSavePayload(currentDoc));\n }\n return currentDoc;\n }, []);\n\n const loadTemplate = useCallback(\n (\n _newTemplate: TEditorConfiguration,\n templateId?: string,\n templateName?: string,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => {\n if (templateId !== undefined) setCurrentTemplateId(templateId);\n if (templateName !== undefined) setCurrentTemplateName(templateName);\n if (kind !== undefined) setCurrentTemplateKind(kind);\n if (tags !== undefined) setCurrentTemplateTagsState(tags ?? []);\n },\n []\n );\n\n const setCurrentTemplate = useCallback(\n (\n templateId: string | null,\n templateName: string | null,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => {\n setCurrentTemplateId(templateId);\n setCurrentTemplateName(templateName);\n if (kind !== undefined) setCurrentTemplateKind(kind);\n if (tags !== undefined) setCurrentTemplateTagsState(tags ?? []);\n },\n []\n );\n\n const setCurrentTemplateTags = useCallback((tags: string[]) => {\n setCurrentTemplateTagsState(tags);\n }, []);\n\n const registerSaveListener = useCallback((callback: (template: TEditorConfiguration) => void) => {\n saveListenersRef.current = [...saveListenersRef.current, callback];\n return () => {\n saveListenersRef.current = saveListenersRef.current.filter(listener => listener !== callback);\n };\n }, []);\n\n const value = useMemo(\n () => ({\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n currentTemplateTags,\n saveTemplate,\n loadTemplate,\n registerSaveListener,\n setCurrentTemplate,\n setCurrentTemplateTags,\n }),\n [\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n currentTemplateTags,\n saveTemplate,\n loadTemplate,\n registerSaveListener,\n setCurrentTemplate,\n setCurrentTemplateTags,\n ]\n );\n\n return (\n <EmailEditorContext.Provider value={value}>\n {children}\n </EmailEditorContext.Provider>\n );\n};\n\nexport const useEmailEditor = () => {\n const context = useContext(EmailEditorContext);\n if (!context) {\n throw new Error('useEmailEditor must be used within an EmailEditorProvider');\n }\n return context;\n};\n","import React, { createContext, useContext } from 'react';\n\nexport type UploadedImage = {\n url: string;\n width?: number;\n height?: number;\n alt?: string;\n};\n\nexport type LibraryImage = {\n url: string;\n thumbnailUrl?: string;\n width?: number;\n height?: number;\n alt?: string;\n uploadedAt?: string;\n};\n\nexport type ImageCallbacks = {\n uploadImage?: (file: File) => Promise<UploadedImage>;\n loadImages?: () => Promise<LibraryImage[]>;\n deleteImage?: (url: string) => Promise<void>;\n};\n\nconst ImageCallbacksContext = createContext<ImageCallbacks>({});\n\nexport function ImageCallbacksProvider({\n callbacks,\n children,\n}: {\n callbacks: ImageCallbacks;\n children: React.ReactNode;\n}) {\n return <ImageCallbacksContext.Provider value={callbacks}>{children}</ImageCallbacksContext.Provider>;\n}\n\nexport function useImageCallbacks(): ImageCallbacks {\n return useContext(ImageCallbacksContext);\n}\n","import React from 'react';\n\nimport { Box, Stack, Typography } from '@mui/material';\n\nimport { t } from '@i18n';\n\n// Known panel titles — translated by looking up a derived i18n key so each\n// panel file doesn't have to import the i18n helper itself.\nconst TITLE_KEYS: Record<string, string> = {\n 'Editor appearance': 'panel.editor-appearance',\n Template: 'panel.template',\n Export: 'panel.export',\n Global: 'panel.global',\n 'Text block': 'panel.text-block',\n 'Heading block': 'panel.heading-block',\n 'Button block': 'panel.button-block',\n 'Image block': 'panel.image-block',\n 'Avatar block': 'panel.avatar-block',\n 'Signature block': 'panel.signature-block',\n 'Spacer block': 'panel.spacer-block',\n 'Divider block': 'panel.divider-block',\n 'Columns block': 'panel.columns-block',\n 'Container block': 'panel.container-block',\n 'Html block': 'panel.html-block',\n Details: 'panel.details',\n};\n\ntype SidebarPanelProps = {\n title: string;\n children: React.ReactNode;\n};\nexport default function BaseSidebarPanel({ title, children }: SidebarPanelProps) {\n const key = TITLE_KEYS[title];\n const displayTitle = key ? t(key, title) : title;\n return (\n <Box p={2}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ display: 'block', mb: 2 }}>\n {displayTitle}\n </Typography>\n <Stack spacing={5} mb={3}>\n {children}\n </Stack>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { InputLabel, Stack, ToggleButtonGroup } from '@mui/material';\n\ntype Props = {\n label: string | JSX.Element;\n children: JSX.Element | JSX.Element[];\n defaultValue: string;\n onChange: (v: string) => void;\n};\nexport default function RadioGroupInput({ label, children, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <Stack alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <ToggleButtonGroup\n exclusive\n fullWidth\n value={value}\n size=\"small\"\n onChange={(_, v: unknown) => {\n if (typeof v !== 'string') {\n throw new Error('RadioGroupInput can only receive string values');\n }\n setValue(v);\n onChange(v);\n }}\n >\n {children}\n </ToggleButtonGroup>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport { Box, Slider, Stack, Typography } from '@mui/material';\n\ntype SliderInputProps = {\n iconLabel: JSX.Element;\n\n step?: number;\n marks?: boolean;\n units: string;\n min?: number;\n max?: number;\n\n value: number;\n setValue: (v: number) => void;\n};\n\nexport default function RawSliderInput({ iconLabel, value, setValue, units, ...props }: SliderInputProps) {\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} justifyContent=\"space-between\" width=\"100%\">\n <Box sx={{ minWidth: 24, lineHeight: 1, flexShrink: 0 }}>{iconLabel}</Box>\n <Slider\n {...props}\n value={value}\n onChange={(_, value: unknown) => {\n if (typeof value !== 'number') {\n throw new Error('RawSliderInput values can only receive numeric values');\n }\n setValue(value);\n }}\n />\n <Box sx={{ minWidth: 32, textAlign: 'right', flexShrink: 0 }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ lineHeight: 1 }}>\n {value}\n {units}\n </Typography>\n </Box>\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype SliderInputProps = {\n label: string;\n iconLabel: JSX.Element;\n\n step?: number;\n marks?: boolean;\n units: string;\n min?: number;\n max?: number;\n\n defaultValue: number;\n onChange: (v: number) => void;\n};\n\nexport default function SliderInput({ label, defaultValue, onChange, ...props }: SliderInputProps) {\n const [value, setValue] = useState(defaultValue);\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n value={value}\n setValue={(value: number) => {\n setValue(value);\n onChange(value);\n }}\n {...props}\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { InputProps, TextField } from '@mui/material';\n\ntype Props = {\n label: string;\n rows?: number;\n placeholder?: string;\n helperText?: string | JSX.Element;\n InputProps?: InputProps;\n defaultValue: string;\n onChange: (v: string) => void;\n};\nexport default function TextInput({ helperText, label, placeholder, rows, InputProps, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n const isMultiline = typeof rows === 'number' && rows > 1;\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <TextField\n fullWidth\n multiline={isMultiline}\n minRows={rows}\n variant={isMultiline ? 'outlined' : 'standard'}\n label={label}\n placeholder={placeholder}\n helperText={helperText}\n InputProps={InputProps}\n value={value}\n onChange={(ev) => {\n const v = ev.target.value;\n setValue(v);\n onChange(v);\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Box, Button, SxProps } from '@mui/material';\n\ntype Props = {\n paletteColors: string[];\n value: string;\n onChange: (value: string) => void;\n};\n\nconst TILE_BUTTON: SxProps = {\n width: 24,\n height: 24,\n};\nexport default function Swatch({ paletteColors, value, onChange }: Props) {\n const renderButton = (colorValue: string) => {\n return (\n <Button\n key={colorValue}\n onClick={() => onChange(colorValue)}\n sx={{\n ...TILE_BUTTON,\n backgroundColor: colorValue,\n border: '1px solid',\n borderColor: value === colorValue ? 'black' : 'grey.200',\n minWidth: 24,\n display: 'inline-flex',\n '&:hover': {\n backgroundColor: colorValue,\n borderColor: 'grey.500',\n },\n }}\n />\n );\n };\n return (\n <Box width=\"100%\" sx={{ display: 'grid', gap: 1, gridTemplateColumns: '1fr 1fr 1fr 1fr 1fr 1fr' }}>\n {paletteColors.map((c) => renderButton(c))}\n </Box>\n );\n}\n","import React from 'react';\nimport { HexColorInput, HexColorPicker } from 'react-colorful';\n\nimport { Box, Stack, SxProps } from '@mui/material';\n\nimport Swatch from './swatch';\n\nconst DEFAULT_PRESET_COLORS = [\n '#E11D48',\n '#DB2777',\n '#C026D3',\n '#9333EA',\n '#7C3AED',\n '#4F46E5',\n '#2563EB',\n '#0284C7',\n '#0891B2',\n '#0D9488',\n '#059669',\n '#16A34A',\n '#65A30D',\n '#CA8A04',\n '#D97706',\n '#EA580C',\n '#DC2626',\n '#FFFFFF',\n '#FAFAFA',\n '#F5F5F5',\n '#E5E5E5',\n '#D4D4D4',\n '#A3A3A3',\n '#737373',\n '#525252',\n '#404040',\n '#262626',\n '#171717',\n '#0A0A0A',\n '#000000',\n];\n\nconst SX: SxProps = {\n p: 1,\n '.react-colorful__pointer ': {\n width: 16,\n height: 16,\n },\n '.react-colorful__saturation': {\n mb: 1,\n borderRadius: '4px',\n },\n '.react-colorful__last-control': {\n borderRadius: '4px',\n },\n '.react-colorful__hue-pointer': {\n width: '4px',\n borderRadius: '4px',\n height: 24,\n cursor: 'col-resize',\n },\n '.react-colorful__saturation-pointer': {\n cursor: 'all-scroll',\n },\n input: {\n padding: 1,\n border: '1px solid',\n borderColor: 'grey.300',\n borderRadius: '4px',\n width: '100%',\n },\n};\n\ntype Props = {\n value: string;\n onChange: (v: string) => void;\n};\nexport default function Picker({ value, onChange }: Props) {\n return (\n <Stack spacing={1} sx={SX}>\n <HexColorPicker color={value} onChange={onChange} />\n <Swatch paletteColors={DEFAULT_PRESET_COLORS} value={value} onChange={onChange} />\n <Box pt={1}>\n <HexColorInput prefixed color={value} onChange={onChange} />\n </Box>\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AddOutlined, CloseOutlined } from '@mui/icons-material';\nimport { ButtonBase, InputLabel, Menu, Stack } from '@mui/material';\n\nimport Picker from './picker';\n\nconst BUTTON_SX = {\n border: '1px solid',\n borderColor: 'cadet.400',\n width: 32,\n height: 32,\n borderRadius: '4px',\n bgcolor: '#FFFFFF',\n};\n\ntype Props =\n | {\n nullable: true;\n label: string;\n onChange: (value: string | null) => void;\n defaultValue: string | null;\n }\n | {\n nullable: false;\n label: string;\n onChange: (value: string) => void;\n defaultValue: string;\n };\nexport default function ColorInput({ label, defaultValue, onChange, nullable }: Props) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const [value, setValue] = useState(defaultValue);\n const handleClickOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const renderResetButton = () => {\n if (!nullable) {\n return null;\n }\n if (typeof value !== 'string' || value.trim().length === 0) {\n return null;\n }\n return (\n <ButtonBase\n onClick={() => {\n setValue(null);\n onChange(null);\n }}\n >\n <CloseOutlined fontSize=\"small\" sx={{ color: 'grey.600' }} />\n </ButtonBase>\n );\n };\n\n const renderOpenButton = () => {\n if (value) {\n return <ButtonBase onClick={handleClickOpen} sx={{ ...BUTTON_SX, bgcolor: value }} />;\n }\n return (\n <ButtonBase onClick={handleClickOpen} sx={{ ...BUTTON_SX }}>\n <AddOutlined fontSize=\"small\" />\n </ButtonBase>\n );\n };\n\n return (\n <Stack alignItems=\"flex-start\">\n <InputLabel sx={{ mb: 0.5 }}>{label}</InputLabel>\n <Stack direction=\"row\" spacing={1}>\n {renderOpenButton()}\n {renderResetButton()}\n </Stack>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: { height: 'auto', padding: 0 },\n }}\n >\n <Picker\n value={value || ''}\n onChange={(v) => {\n setValue(v);\n onChange(v);\n }}\n />\n </Menu>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport BaseColorInput from './base-color-input';\n\ntype Props = {\n label: string;\n onChange: (value: string) => void;\n defaultValue: string;\n};\nexport default function ColorInput(props: Props) {\n return <BaseColorInput {...props} nullable={false} />;\n}\n\ntype NullableProps = {\n label: string;\n onChange: (value: null | string) => void;\n defaultValue: null | string;\n};\nexport function NullableColorInput(props: NullableProps) {\n return <BaseColorInput {...props} nullable />;\n}\n","export const FONT_FAMILIES = [\n {\n key: 'MODERN_SANS',\n label: 'Modern sans',\n value: '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif',\n },\n {\n key: 'BOOK_SANS',\n label: 'Book sans',\n value: 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif',\n },\n {\n key: 'ORGANIC_SANS',\n label: 'Organic sans',\n value: 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif',\n },\n {\n key: 'GEOMETRIC_SANS',\n label: 'Geometric sans',\n value: 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif',\n },\n {\n key: 'HEAVY_SANS',\n label: 'Heavy sans',\n value:\n 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif',\n },\n {\n key: 'ROUNDED_SANS',\n label: 'Rounded sans',\n value:\n 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif',\n },\n {\n key: 'MODERN_SERIF',\n label: 'Modern serif',\n value: 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif',\n },\n {\n key: 'BOOK_SERIF',\n label: 'Book serif',\n value: '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif',\n },\n {\n key: 'MONOSPACE',\n label: 'Monospace',\n value: '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace',\n },\n];\n\nexport const FONT_FAMILY_NAMES = [\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n] as const;\n","import React, { useState, useEffect } from 'react';\n\nimport { MenuItem, TextField } from '@mui/material';\n\nimport { FONT_FAMILIES } from '@editor/blocks/helpers/font-family';\nimport { t } from '@i18n';\n\nconst OPTIONS = FONT_FAMILIES.map((option) => (\n <MenuItem key={option.key} value={option.key} sx={{ fontFamily: option.value }}>\n {option.label}\n </MenuItem>\n));\n\ntype NullableProps = {\n label: string;\n onChange: (value: null | string) => void;\n defaultValue: null | string;\n};\nexport function NullableFontFamily({ label, onChange, defaultValue }: NullableProps) {\n const [value, setValue] = useState(defaultValue ?? 'inherit');\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue ?? 'inherit');\n }, [defaultValue]);\n \n return (\n <TextField\n select\n variant=\"standard\"\n label={label}\n value={value}\n onChange={(ev) => {\n const v = ev.target.value;\n setValue(v);\n onChange(v === null ? null : v);\n }}\n >\n <MenuItem value=\"inherit\">{t('font-family.inherit', 'Match email settings')}</MenuItem>\n {OPTIONS}\n </TextField>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { TextFieldsOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number;\n onChange: (v: number) => void;\n};\nexport default function FontSizeInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n const handleChange = (value: number) => {\n setValue(value);\n onChange(value);\n };\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<TextFieldsOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"px\"\n step={1}\n min={10}\n max={48}\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { ToggleButton } from '@mui/material';\n\nimport { t } from '@i18n';\n\nimport RadioGroupInput from './radio-group-input';\n\ntype Props = {\n label: string;\n defaultValue: string;\n onChange: (value: string) => void;\n};\nexport default function FontWeightInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <RadioGroupInput\n label={label}\n defaultValue={value}\n onChange={(fontWeight) => {\n setValue(fontWeight);\n onChange(fontWeight);\n }}\n >\n <ToggleButton value=\"normal\">{t('font-weight.regular', 'Regular')}</ToggleButton>\n <ToggleButton value=\"bold\">{t('font-weight.bold', 'Bold')}</ToggleButton>\n </RadioGroupInput>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { SpaceBarOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function LetterSpacingInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState<number>(defaultValue ?? 0);\n\n useEffect(() => {\n setValue(defaultValue ?? 0);\n }, [defaultValue]);\n\n const handleChange = (v: number) => {\n setValue(v);\n onChange(v === 0 ? null : v);\n };\n\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<SpaceBarOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"px\"\n step={0.1}\n min={0}\n max={2}\n />\n </Stack>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { FormatLineSpacingOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function LineHeightInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState<number>(defaultValue ?? 0);\n\n useEffect(() => {\n setValue(defaultValue ?? 0);\n }, [defaultValue]);\n\n const handleChange = (v: number) => {\n setValue(v);\n onChange(v === 0 ? null : v);\n };\n\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<FormatLineSpacingOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"\"\n step={0.1}\n min={0}\n max={2}\n />\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport {\n AlignHorizontalLeftOutlined,\n AlignHorizontalRightOutlined,\n AlignVerticalBottomOutlined,\n AlignVerticalTopOutlined,\n} from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype TPaddingValue = {\n top: number;\n bottom: number;\n right: number;\n left: number;\n};\ntype Props = {\n label: string;\n defaultValue: TPaddingValue | null;\n onChange: (value: TPaddingValue) => void;\n};\nexport default function PaddingInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(() => {\n if (defaultValue) {\n return defaultValue;\n }\n return {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n });\n\n function handleChange(internalName: keyof TPaddingValue, nValue: number) {\n const v = {\n ...value,\n [internalName]: nValue,\n };\n setValue(v);\n onChange(v);\n }\n\n return (\n <Stack spacing={2} alignItems=\"flex-start\" pb={1}>\n <InputLabel shrink>{label}</InputLabel>\n\n <RawSliderInput\n iconLabel={<AlignVerticalTopOutlined sx={{ fontSize: 16 }} />}\n value={value.top}\n setValue={(num) => handleChange('top', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignVerticalBottomOutlined sx={{ fontSize: 16 }} />}\n value={value.bottom}\n setValue={(num) => handleChange('bottom', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignHorizontalLeftOutlined sx={{ fontSize: 16 }} />}\n value={value.left}\n setValue={(num) => handleChange('left', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignHorizontalRightOutlined sx={{ fontSize: 16 }} />}\n value={value.right}\n setValue={(num) => handleChange('right', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { FormatAlignCenterOutlined, FormatAlignLeftOutlined, FormatAlignRightOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\n\nimport RadioGroupInput from './radio-group-input';\n\ntype Props = {\n label: string;\n defaultValue: string | null;\n onChange: (value: string | null) => void;\n};\nexport default function TextAlignInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue ?? 'left');\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue ?? 'left');\n }, [defaultValue]);\n\n return (\n <RadioGroupInput\n label={label}\n defaultValue={value}\n onChange={(value) => {\n setValue(value);\n onChange(value);\n }}\n >\n <ToggleButton value=\"left\">\n <FormatAlignLeftOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"center\">\n <FormatAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <FormatAlignRightOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n );\n}\n","import React from 'react';\n\nimport { RoundedCornerOutlined } from '@mui/icons-material';\n\nimport { TStyle } from '@editor/blocks/helpers/tstyle';\nimport { t } from '@i18n';\nimport { NullableColorInput } from '../inputs/color-input/index';\nimport { NullableFontFamily } from '../inputs/font-family';\nimport FontSizeInput from '../inputs/font-size-input';\nimport FontWeightInput from '../inputs/font-weight-input';\nimport LetterSpacingInput from '../inputs/letter-spacing-input';\nimport LineHeightInput from '../inputs/line-height-input';\nimport PaddingInput from '../inputs/padding-input';\nimport SliderInput from '../inputs/slider-input';\nimport TextAlignInput from '../inputs/text-align-input';\n\ntype StylePropertyPanelProps = {\n name: keyof TStyle;\n value: TStyle;\n onChange: (style: TStyle) => void;\n};\nexport default function SingleStylePropertyPanel({ name, value, onChange }: StylePropertyPanelProps) {\n const defaultValue = value[name] ?? null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = (v: any) => {\n onChange({ ...value, [name]: v });\n };\n\n switch (name) {\n case 'backgroundColor':\n return <NullableColorInput label={t('style.background-color', 'Background color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'borderColor':\n return <NullableColorInput label={t('style.border-color', 'Border color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'borderRadius':\n return (\n <SliderInput\n iconLabel={<RoundedCornerOutlined />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={48}\n label={t('style.border-radius', 'Border radius')}\n defaultValue={defaultValue}\n onChange={handleChange}\n />\n );\n case 'color':\n return <NullableColorInput label={t('style.text-color', 'Text color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontFamily':\n return <NullableFontFamily label={t('style.font-family', 'Font family')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontSize':\n return <FontSizeInput label={t('style.font-size', 'Font size')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontWeight':\n return <FontWeightInput label={t('style.font-weight', 'Font weight')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'lineHeight':\n return <LineHeightInput label={t('style.line-height', 'Line height')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'letterSpacing':\n return <LetterSpacingInput label={t('style.letter-spacing', 'Letter spacing')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'textAlign':\n return <TextAlignInput label={t('style.alignment', 'Alignment')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'padding':\n return <PaddingInput label={t('style.padding', 'Padding')} defaultValue={defaultValue} onChange={handleChange} />;\n }\n}\n","import React from 'react';\n\nimport { TStyle } from '@editor/blocks/helpers/tstyle';\n\nimport SingleStylePropertyPanel from './single-style-property-panel';\n\ntype MultiStylePropertyPanelProps = {\n names: (keyof TStyle)[];\n value: TStyle | undefined | null;\n onChange: (style: TStyle) => void;\n};\nexport default function MultiStylePropertyPanel({ names, value, onChange }: MultiStylePropertyPanelProps) {\n return (\n <>\n {names.map((name) => (\n <SingleStylePropertyPanel key={name} name={name} value={value || {}} onChange={onChange} />\n ))}\n </>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AspectRatioOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\nimport { AvatarPropsDefaults, AvatarPropsSchema } from '@blocks';\nimport type { AvatarProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype AvatarSidebarPanelProps = {\n data: AvatarProps;\n setData: (v: AvatarProps) => void;\n};\nexport default function AvatarSidebarPanel({ data, setData }: AvatarSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = AvatarPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const size = data.props?.size ?? AvatarPropsDefaults.size;\n const imageUrl = data.props?.imageUrl ?? AvatarPropsDefaults.imageUrl;\n const alt = data.props?.alt ?? AvatarPropsDefaults.alt;\n const shape = data.props?.shape ?? AvatarPropsDefaults.shape;\n\n return (\n <BaseSidebarPanel title=\"Avatar block\">\n <SliderInput\n label={t('field.size', 'Size')}\n iconLabel={<AspectRatioOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={3}\n min={32}\n max={256}\n defaultValue={size}\n onChange={(size) => {\n updateData({ ...data, props: { ...data.props, size } });\n }}\n />\n <RadioGroupInput\n label={t('avatar.shape', 'Shape')}\n defaultValue={shape}\n onChange={(shape) => {\n updateData({ ...data, props: { ...data.props, shape } });\n }}\n >\n <ToggleButton value=\"circle\">{t('signature.shape.circle', 'Circle')}</ToggleButton>\n <ToggleButton value=\"square\">{t('signature.shape.square', 'Square')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('signature.shape.rounded', 'Rounded')}</ToggleButton>\n </RadioGroupInput>\n <TextInput\n label={t('signature.image-url', 'Image URL')}\n defaultValue={imageUrl}\n onChange={(imageUrl) => {\n updateData({ ...data, props: { ...data.props, imageUrl } });\n }}\n />\n <TextInput\n label={t('image.alt-text', 'Alt text')}\n defaultValue={alt}\n onChange={(alt) => {\n updateData({ ...data, props: { ...data.props, alt } });\n }}\n />\n\n <MultiStylePropertyPanel\n names={['textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { ToggleButton } from '@mui/material';\nimport { ButtonPropsDefaults, ButtonPropsSchema } from '@blocks';\nimport type { ButtonProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ButtonSidebarPanelProps = {\n data: ButtonProps;\n setData: (v: ButtonProps) => void;\n};\nexport default function ButtonSidebarPanel({ data, setData }: ButtonSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = ButtonPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const text = data.props?.text ?? ButtonPropsDefaults.text;\n const url = data.props?.url ?? ButtonPropsDefaults.url;\n const fullWidth = data.props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const size = data.props?.size ?? ButtonPropsDefaults.size;\n const buttonStyle = data.props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n const buttonTextColor = data.props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = data.props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n return (\n <BaseSidebarPanel title=\"Button block\">\n <TextInput\n label={t('field.text', 'Text')}\n defaultValue={text}\n onChange={(text) => updateData({ ...data, props: { ...data.props, text } })}\n />\n <TextInput\n label={t('field.url', 'Url')}\n defaultValue={url}\n onChange={(url) => updateData({ ...data, props: { ...data.props, url } })}\n />\n <RadioGroupInput\n label={t('field.width', 'Width')}\n defaultValue={fullWidth ? 'FULL_WIDTH' : 'AUTO'}\n onChange={(v) => updateData({ ...data, props: { ...data.props, fullWidth: v === 'FULL_WIDTH' } })}\n >\n <ToggleButton value=\"FULL_WIDTH\">{t('button.width.full', 'Full')}</ToggleButton>\n <ToggleButton value=\"AUTO\">{t('button.width.auto', 'Auto')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('field.size', 'Size')}\n defaultValue={size}\n onChange={(size) => updateData({ ...data, props: { ...data.props, size } })}\n >\n <ToggleButton value=\"x-small\">{t('size.xs', 'Xs')}</ToggleButton>\n <ToggleButton value=\"small\">{t('size.sm', 'Sm')}</ToggleButton>\n <ToggleButton value=\"medium\">{t('size.md', 'Md')}</ToggleButton>\n <ToggleButton value=\"large\">{t('size.lg', 'Lg')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('field.style', 'Style')}\n defaultValue={buttonStyle}\n onChange={(buttonStyle) => updateData({ ...data, props: { ...data.props, buttonStyle } })}\n >\n <ToggleButton value=\"rectangle\">{t('button.style.rectangle', 'Rectangle')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('button.style.rounded', 'Rounded')}</ToggleButton>\n <ToggleButton value=\"pill\">{t('button.style.pill', 'Pill')}</ToggleButton>\n </RadioGroupInput>\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={buttonTextColor}\n onChange={(buttonTextColor) => updateData({ ...data, props: { ...data.props, buttonTextColor } })}\n />\n <ColorInput\n label={t('button.color', 'Button color')}\n defaultValue={buttonBackgroundColor}\n onChange={(buttonBackgroundColor) => updateData({ ...data, props: { ...data.props, buttonBackgroundColor } })}\n />\n <MultiStylePropertyPanel\n names={[\n 'backgroundColor',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nimport { ColumnsContainerPropsSchema as BaseColumnsContainerPropsSchema } from '@blocks';\n\nconst BasePropsShape = BaseColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;\n\nconst ColumnsContainerPropsSchema = z.object({\n style: BaseColumnsContainerPropsSchema.shape.style,\n props: z\n .object({\n ...BasePropsShape,\n columns: z.tuple([\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n ]),\n })\n .optional()\n .nullable(),\n});\n\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema>;\nexport default ColumnsContainerPropsSchema;\n","import React from 'react';\n\nimport { TextField, Typography } from '@mui/material';\n\ntype TextDimensionInputProps = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function TextDimensionInput({ label, defaultValue, onChange }: TextDimensionInputProps) {\n const handleChange: React.ChangeEventHandler<HTMLInputElement> = (ev) => {\n const value = parseInt(ev.target.value);\n onChange(isNaN(value) ? null : value);\n };\n return (\n <TextField\n fullWidth\n onChange={handleChange}\n defaultValue={defaultValue}\n label={label}\n variant=\"standard\"\n placeholder=\"auto\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <Typography variant=\"body2\" color=\"text.secondary\">\n px\n </Typography>\n ),\n }}\n />\n );\n}\n","import React, { useState } from 'react';\n\nimport { Stack } from '@mui/material';\n\nimport TextDimensionInput from './text-dimension-input';\n\nexport const DEFAULT_2_COLUMNS = [6] as [number];\nexport const DEFAULT_3_COLUMNS = [4, 8] as [number, number];\n\ntype TWidthValue = number | null | undefined;\ntype FixedWidths = [\n //\n number | null | undefined,\n number | null | undefined,\n number | null | undefined,\n];\ntype ColumnsLayoutInputProps = {\n defaultValue: FixedWidths | null | undefined;\n onChange: (v: FixedWidths | null | undefined) => void;\n};\nexport default function ColumnWidthsInput({ defaultValue, onChange }: ColumnsLayoutInputProps) {\n const [currentValue, setCurrentValue] = useState<[TWidthValue, TWidthValue, TWidthValue]>(() => {\n if (defaultValue) {\n return defaultValue;\n }\n return [null, null, null];\n });\n\n const setIndexValue = (index: 0 | 1 | 2, value: number | null | undefined) => {\n const nValue: FixedWidths = [...currentValue];\n nValue[index] = value;\n setCurrentValue(nValue);\n onChange(nValue);\n };\n\n const columnsCountValue = 3;\n let column3 = null;\n if (columnsCountValue === 3) {\n column3 = (\n <TextDimensionInput\n label=\"Column 3\"\n defaultValue={currentValue?.[2]}\n onChange={(v) => {\n setIndexValue(2, v);\n }}\n />\n );\n }\n return (\n <Stack direction=\"row\" spacing={1}>\n <TextDimensionInput\n label=\"Column 1\"\n defaultValue={currentValue?.[0]}\n onChange={(v) => {\n setIndexValue(0, v);\n }}\n />\n <TextDimensionInput\n label=\"Column 2\"\n defaultValue={currentValue?.[1]}\n onChange={(v) => {\n setIndexValue(1, v);\n }}\n />\n {column3}\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport {\n SpaceBarOutlined,\n VerticalAlignBottomOutlined,\n VerticalAlignCenterOutlined,\n VerticalAlignTopOutlined,\n} from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\n\nimport ColumnsContainerPropsSchema, {\n ColumnsContainerProps,\n} from '@editor/blocks/columns-container/columns-container-props-schema';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColumnWidthsInput from './helpers/inputs/column-widths-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ColumnsContainerPanelProps = {\n data: ColumnsContainerProps;\n setData: (v: ColumnsContainerProps) => void;\n};\nexport default function ColumnsContainerPanel({ data, setData }: ColumnsContainerPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = ColumnsContainerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Columns block\">\n <RadioGroupInput\n label={t('columns.count', 'Number of columns')}\n defaultValue={data.props?.columnsCount === 2 ? '2' : '3'}\n onChange={(v) => {\n updateData({ ...data, props: { ...data.props, columnsCount: v === '2' ? 2 : 3 } });\n }}\n >\n <ToggleButton value=\"2\">2</ToggleButton>\n <ToggleButton value=\"3\">3</ToggleButton>\n </RadioGroupInput>\n <ColumnWidthsInput\n defaultValue={data.props?.fixedWidths}\n onChange={(fixedWidths) => {\n updateData({ ...data, props: { ...data.props, fixedWidths } });\n }}\n />\n <SliderInput\n label={t('columns.gap', 'Columns gap')}\n iconLabel={<SpaceBarOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={80}\n defaultValue={data.props?.columnsGap ?? 0}\n onChange={(columnsGap) => updateData({ ...data, props: { ...data.props, columnsGap } })}\n />\n <RadioGroupInput\n label={t('style.alignment', 'Alignment')}\n defaultValue={data.props?.contentAlignment ?? 'middle'}\n onChange={(contentAlignment) => {\n updateData({ ...data, props: { ...data.props, contentAlignment } });\n }}\n >\n <ToggleButton value=\"top\">\n <VerticalAlignTopOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"middle\">\n <VerticalAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"bottom\">\n <VerticalAlignBottomOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n\n <MultiStylePropertyPanel\n names={['backgroundColor', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nimport { ContainerPropsSchema as BaseContainerPropsSchema } from '@blocks';\n\nconst ContainerPropsSchema = z.object({\n style: BaseContainerPropsSchema.shape.style,\n props: z\n .object({\n childrenIds: z.array(z.string()).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport default ContainerPropsSchema;\n\nexport type ContainerProps = z.infer<typeof ContainerPropsSchema>;\n","import React, { useState } from 'react';\n\nimport ContainerPropsSchema, { ContainerProps } from '@editor/blocks/container/container-props-schema';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ContainerSidebarPanelProps = {\n data: ContainerProps;\n setData: (v: ContainerProps) => void;\n};\n\nexport default function ContainerSidebarPanel({ data, setData }: ContainerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = ContainerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n return (\n <BaseSidebarPanel title=\"Container block\">\n <MultiStylePropertyPanel\n names={['backgroundColor', 'borderColor', 'borderRadius', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { HeightOutlined } from '@mui/icons-material';\nimport { DividerPropsDefaults, DividerPropsSchema } from '@blocks/divider';\nimport type { DividerProps } from '@blocks/divider';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype DividerSidebarPanelProps = {\n data: DividerProps;\n setData: (v: DividerProps) => void;\n};\nexport default function DividerSidebarPanel({ data, setData }: DividerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = DividerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const lineColor = data.props?.lineColor ?? DividerPropsDefaults.lineColor;\n const lineHeight = data.props?.lineHeight ?? DividerPropsDefaults.lineHeight;\n\n return (\n <BaseSidebarPanel title=\"Divider block\">\n <ColorInput\n label={t('divider.color', 'Color')}\n defaultValue={lineColor}\n onChange={(lineColor) => updateData({ ...data, props: { ...data.props, lineColor } })}\n />\n <SliderInput\n label={t('field.height', 'Height')}\n iconLabel={<HeightOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={1}\n min={1}\n max={24}\n defaultValue={lineHeight}\n onChange={(lineHeight) => updateData({ ...data, props: { ...data.props, lineHeight } })}\n />\n <MultiStylePropertyPanel\n names={['backgroundColor', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nexport const TemplateVariableSchema = z.object({\n name: z.string(),\n description: z.string().optional().nullable(),\n sampleValue: z.string().optional().nullable(),\n});\n\nconst EmailLayoutPropsSchema = z.object({\n backdropColor: COLOR_SCHEMA,\n backdropDisabled: z.boolean().optional().nullable(),\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n canvasColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n childrenIds: z.array(z.string()).optional().nullable(),\n subject: z.string().optional().nullable(),\n variables: z.array(TemplateVariableSchema).optional().nullable(),\n});\n\nexport default EmailLayoutPropsSchema;\n\nexport type EmailLayoutProps = z.infer<typeof EmailLayoutPropsSchema>;\n","import React, { useState, useEffect } from 'react';\n\nimport { FormControlLabel, Switch } from '@mui/material';\n\ntype Props = {\n label: string;\n defaultValue: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport default function BooleanInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <FormControlLabel\n label={label}\n control={\n <Switch\n checked={value}\n onChange={(_, checked: boolean) => {\n setValue(checked);\n onChange(checked);\n }}\n />\n }\n />\n );\n}\n","import React, { useState } from 'react';\n\nimport { RoundedCornerOutlined } from '@mui/icons-material';\n\nimport EmailLayoutPropsSchema, {\n EmailLayoutProps,\n} from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport BooleanInput from './helpers/inputs/boolean-input';\nimport ColorInput, { NullableColorInput } from './helpers/inputs/color-input';\nimport { NullableFontFamily } from './helpers/inputs/font-family';\nimport SliderInput from './helpers/inputs/slider-input';\n\ntype EmailLayoutSidebarFieldsProps = {\n data: EmailLayoutProps;\n setData: (v: EmailLayoutProps) => void;\n};\nexport default function EmailLayoutSidebarFields({ data, setData }: EmailLayoutSidebarFieldsProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = EmailLayoutPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const backdropDisabled = data.backdropDisabled ?? false;\n\n return (\n <BaseSidebarPanel title=\"Global\">\n <BooleanInput\n label={t('global.disable-backdrop', 'Disable backdrop')}\n defaultValue={backdropDisabled}\n onChange={(backdropDisabled) => updateData({ ...data, backdropDisabled })}\n />\n {!backdropDisabled && (\n <>\n <ColorInput\n label={t('global.backdrop-color', 'Backdrop color')}\n defaultValue={data.backdropColor ?? '#F5F5F5'}\n onChange={(backdropColor) => updateData({ ...data, backdropColor })}\n />\n <ColorInput\n label={t('global.canvas-color', 'Canvas color')}\n defaultValue={data.canvasColor ?? '#FFFFFF'}\n onChange={(canvasColor) => updateData({ ...data, canvasColor })}\n />\n <NullableColorInput\n label={t('global.canvas-border-color', 'Canvas border color')}\n defaultValue={data.borderColor ?? null}\n onChange={(borderColor) => updateData({ ...data, borderColor })}\n />\n <SliderInput\n iconLabel={<RoundedCornerOutlined />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={48}\n label={t('global.canvas-border-radius', 'Canvas border radius')}\n defaultValue={data.borderRadius ?? 0}\n onChange={(borderRadius) => updateData({ ...data, borderRadius })}\n />\n </>\n )}\n <NullableFontFamily\n label={t('style.font-family', 'Font family')}\n defaultValue=\"MODERN_SANS\"\n onChange={(fontFamily) => updateData({ ...data, fontFamily })}\n />\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={data.textColor ?? '#262626'}\n onChange={(textColor) => updateData({ ...data, textColor })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { ToggleButton } from '@mui/material';\nimport { HeadingProps, HeadingPropsDefaults, HeadingPropsSchema } from '@blocks/heading';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype HeadingSidebarPanelProps = {\n data: HeadingProps;\n setData: (v: HeadingProps) => void;\n};\nexport default function HeadingSidebarPanel({ data, setData }: HeadingSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = HeadingPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Heading block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={3}\n defaultValue={data.props?.text ?? HeadingPropsDefaults.text}\n onChange={(text) => {\n updateData({ ...data, props: { ...data.props, text } });\n }}\n />\n <RadioGroupInput\n label={t('field.level', 'Level')}\n defaultValue={data.props?.level ?? HeadingPropsDefaults.level}\n onChange={(level) => {\n updateData({ ...data, props: { ...data.props, level } });\n }}\n >\n <ToggleButton value=\"h1\">H1</ToggleButton>\n <ToggleButton value=\"h2\">H2</ToggleButton>\n <ToggleButton value=\"h3\">H3</ToggleButton>\n </RadioGroupInput>\n <MultiStylePropertyPanel\n names={[\n 'color',\n 'backgroundColor',\n 'fontFamily',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\nimport { HtmlPropsSchema } from '@blocks';\nimport type { HtmlProps } from '@blocks';\n\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype HtmlSidebarPanelProps = {\n data: HtmlProps;\n setData: (v: HtmlProps) => void;\n};\nexport default function HtmlSidebarPanel({ data, setData }: HtmlSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = HtmlPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Html block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={5}\n defaultValue={data.props?.contents ?? ''}\n onChange={(contents) => updateData({ ...data, props: { ...data.props, contents } })}\n />\n <MultiStylePropertyPanel\n names={['color', 'backgroundColor', 'fontFamily', 'fontSize', 'textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n InputAdornment,\n Stack,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport { DeleteOutline, SearchOutlined } from '@mui/icons-material';\nimport { useImageCallbacks, type LibraryImage } from '../../../image-context';\n\ntype ImageLibraryDialogProps = {\n open: boolean;\n onClose: () => void;\n onPick: (image: LibraryImage) => void;\n};\n\nexport default function ImageLibraryDialog({ open, onClose, onPick }: ImageLibraryDialogProps) {\n const { loadImages, deleteImage } = useImageCallbacks();\n const [images, setImages] = useState<LibraryImage[] | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n\n const refresh = async () => {\n if (!loadImages) return;\n setBusy(true);\n setError(null);\n try {\n const list = await loadImages();\n setImages(list);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load images');\n } finally {\n setBusy(false);\n }\n };\n\n useEffect(() => {\n if (open) {\n setQuery('');\n void refresh();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const filtered = useMemo(() => {\n if (!images) return null;\n const q = query.trim().toLowerCase();\n if (!q) return images;\n return images.filter((img) => {\n const haystack = `${img.alt ?? ''} ${img.url}`.toLowerCase();\n return haystack.includes(q);\n });\n }, [images, query]);\n\n const handleDelete = async (url: string) => {\n if (!deleteImage) return;\n const ok = window.confirm('Delete this image from the library?');\n if (!ok) return;\n setBusy(true);\n try {\n await deleteImage(url);\n await refresh();\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to delete image');\n setBusy(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Image library</DialogTitle>\n <DialogContent dividers>\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search by alt text or URL\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n autoFocus\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchOutlined fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n sx={{ mb: 2 }}\n />\n\n {error && (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {busy && !images && (\n <Stack alignItems=\"center\" sx={{ py: 4 }}>\n <CircularProgress size={28} />\n </Stack>\n )}\n\n {filtered && filtered.length === 0 && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', textAlign: 'center', py: 4 }}>\n {query ? 'No images match your search.' : 'No images in the library yet.'}\n </Typography>\n )}\n\n {filtered && filtered.length > 0 && (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n gap: 1.5,\n }}\n >\n {filtered.map((img) => (\n <ImageTile\n key={img.url}\n image={img}\n onPick={() => onPick(img)}\n onDelete={deleteImage ? () => handleDelete(img.url) : undefined}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Close</Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nfunction ImageTile({\n image,\n onPick,\n onDelete,\n}: {\n image: LibraryImage;\n onPick: () => void;\n onDelete?: () => void;\n}) {\n const src = image.thumbnailUrl ?? image.url;\n const label = image.alt || image.url.split('/').pop() || 'image';\n return (\n <Box\n sx={{\n position: 'relative',\n borderRadius: 1,\n border: 1,\n borderColor: 'divider',\n overflow: 'hidden',\n cursor: 'pointer',\n transition: 'border-color 120ms',\n '&:hover': { borderColor: 'primary.main' },\n '&:hover .delete-btn': { opacity: 1 },\n }}\n onClick={onPick}\n >\n <Box\n component=\"img\"\n src={src}\n alt={image.alt ?? ''}\n sx={{ display: 'block', width: '100%', aspectRatio: '1 / 1', objectFit: 'cover', backgroundColor: '#f5f5f5' }}\n />\n <Box sx={{ p: 0.75, fontSize: 11, color: 'text.secondary', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n </Box>\n {onDelete && (\n <Tooltip title=\"Delete from library\">\n <IconButton\n size=\"small\"\n className=\"delete-btn\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n opacity: 0,\n backgroundColor: 'rgba(255,255,255,0.85)',\n transition: 'opacity 120ms',\n '&:hover': { backgroundColor: 'rgba(255,255,255,0.95)' },\n }}\n aria-label=\"Delete image\"\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n );\n}\n","import React, { useRef, useState } from 'react';\n\nimport {\n CloudUploadOutlined,\n CollectionsOutlined,\n ErrorOutlineOutlined,\n VerticalAlignBottomOutlined,\n VerticalAlignCenterOutlined,\n VerticalAlignTopOutlined,\n} from '@mui/icons-material';\nimport { Alert, Box, Button, CircularProgress, Stack, ToggleButton, Tooltip } from '@mui/material';\nimport { ImageProps, ImagePropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextDimensionInput from './helpers/inputs/text-dimension-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\nimport ImageLibraryDialog from './image-library-dialog';\nimport { useImageCallbacks, type LibraryImage, type UploadedImage } from '../../../image-context';\n\ntype ImageSidebarPanelProps = {\n data: ImageProps;\n setData: (v: ImageProps) => void;\n};\n\nfunction isHttpUrl(value: string | null | undefined): boolean {\n if (!value) return false;\n return /^http:\\/\\//i.test(value.trim());\n}\n\nexport default function ImageSidebarPanel({ data, setData }: ImageSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const { uploadImage, loadImages } = useImageCallbacks();\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [libraryOpen, setLibraryOpen] = useState(false);\n\n const updateData = (d: unknown) => {\n const res = ImagePropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const applyUploadedImage = (uploaded: UploadedImage | LibraryImage) => {\n updateData({\n ...data,\n props: {\n ...data.props,\n url: uploaded.url,\n width: uploaded.width ?? data.props?.width ?? null,\n height: uploaded.height ?? data.props?.height ?? null,\n alt: uploaded.alt ?? data.props?.alt ?? '',\n },\n });\n };\n\n const handleFile = async (file: File) => {\n if (!uploadImage) return;\n setUploading(true);\n setUploadError(null);\n try {\n const uploaded = await uploadImage(file);\n applyUploadedImage(uploaded);\n } catch (e) {\n setUploadError(e instanceof Error ? e.message : 'Upload failed');\n } finally {\n setUploading(false);\n }\n };\n\n const url = data.props?.url ?? '';\n const showHttpWarning = isHttpUrl(url);\n\n return (\n <BaseSidebarPanel title=\"Image block\">\n {(uploadImage || loadImages) && (\n <Stack direction=\"row\" spacing={1}>\n {uploadImage && (\n <>\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n startIcon={uploading ? <CircularProgress size={14} /> : <CloudUploadOutlined fontSize=\"small\" />}\n disabled={uploading}\n onClick={() => fileInputRef.current?.click()}\n >\n {uploading ? t('image.uploading', 'Uploading…') : t('image.upload', 'Upload')}\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n hidden\n onChange={async (e) => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (file) await handleFile(file);\n }}\n />\n </>\n )}\n {loadImages && (\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n startIcon={<CollectionsOutlined fontSize=\"small\" />}\n onClick={() => setLibraryOpen(true)}\n >\n {t('image.library', 'Library')}\n </Button>\n )}\n </Stack>\n )}\n\n {uploadError && (\n <Alert severity=\"error\" onClose={() => setUploadError(null)} sx={{ mt: 1 }}>\n {uploadError}\n </Alert>\n )}\n\n <TextInput\n label={t('image.source-url', 'Source URL')}\n defaultValue={url}\n onChange={(v) => {\n const next = v.trim().length === 0 ? null : v.trim();\n updateData({ ...data, props: { ...data.props, url: next } });\n }}\n />\n {showHttpWarning && (\n <Box sx={{ mt: -1, mb: 1, display: 'flex', alignItems: 'flex-start', gap: 0.75 }}>\n <ErrorOutlineOutlined fontSize=\"small\" sx={{ color: 'warning.main', mt: '2px' }} />\n <Box sx={{ fontSize: 12, color: 'warning.dark' }}>\n {t('image.http-warning', 'Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery.')}\n </Box>\n </Box>\n )}\n\n <TextInput\n label={t('image.alt-text', 'Alt text')}\n defaultValue={data.props?.alt ?? ''}\n onChange={(alt) => updateData({ ...data, props: { ...data.props, alt } })}\n />\n <TextInput\n label={t('image.link-href', 'Click through URL')}\n defaultValue={data.props?.linkHref ?? ''}\n onChange={(v) => {\n const linkHref = v.trim().length === 0 ? null : v.trim();\n updateData({ ...data, props: { ...data.props, linkHref } });\n }}\n />\n <Stack direction=\"row\" spacing={2}>\n <TextDimensionInput\n label={t('field.width', 'Width')}\n defaultValue={data.props?.width}\n onChange={(width) => updateData({ ...data, props: { ...data.props, width } })}\n />\n <TextDimensionInput\n label={t('field.height', 'Height')}\n defaultValue={data.props?.height}\n onChange={(height) => updateData({ ...data, props: { ...data.props, height } })}\n />\n </Stack>\n\n <RadioGroupInput\n label={t('style.alignment', 'Alignment')}\n defaultValue={data.props?.contentAlignment ?? 'middle'}\n onChange={(contentAlignment) => updateData({ ...data, props: { ...data.props, contentAlignment } })}\n >\n <ToggleButton value=\"top\">\n <VerticalAlignTopOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"middle\">\n <VerticalAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"bottom\">\n <VerticalAlignBottomOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n\n <MultiStylePropertyPanel\n names={['backgroundColor', 'textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n\n {loadImages && (\n <ImageLibraryDialog\n open={libraryOpen}\n onClose={() => setLibraryOpen(false)}\n onPick={(image) => {\n applyUploadedImage(image);\n setLibraryOpen(false);\n }}\n />\n )}\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AspectRatioOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\nimport { SignaturePropsDefaults, SignaturePropsSchema } from '@blocks';\nimport type { SignatureProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype SignatureSidebarPanelProps = {\n data: SignatureProps;\n setData: (v: SignatureProps) => void;\n};\nexport default function SignatureSidebarPanel({ data, setData }: SignatureSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = SignaturePropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const greeting = data.props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = data.props?.name ?? SignaturePropsDefaults.name;\n const title = data.props?.title ?? SignaturePropsDefaults.title;\n const company = data.props?.company ?? SignaturePropsDefaults.company;\n const address = data.props?.address ?? SignaturePropsDefaults.address;\n const email = data.props?.email ?? SignaturePropsDefaults.email;\n const phone = data.props?.phone ?? SignaturePropsDefaults.phone;\n const website = data.props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = data.props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = data.props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = data.props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = data.props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = data.props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = data.props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = data.props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n return (\n <BaseSidebarPanel title=\"Signature block\">\n <TextInput\n label={t('signature.greeting', 'Greeting')}\n defaultValue={greeting}\n onChange={(greeting) => updateData({ ...data, props: { ...data.props, greeting } })}\n />\n <TextInput\n label={t('signature.name', 'Name')}\n defaultValue={name}\n onChange={(name) => updateData({ ...data, props: { ...data.props, name } })}\n />\n <TextInput\n label={t('signature.title', 'Title')}\n defaultValue={title}\n onChange={(title) => updateData({ ...data, props: { ...data.props, title } })}\n />\n <TextInput\n label={t('signature.company', 'Company')}\n defaultValue={company}\n onChange={(company) => updateData({ ...data, props: { ...data.props, company } })}\n />\n <TextInput\n label={t('signature.address', 'Address')}\n defaultValue={address}\n onChange={(address) => updateData({ ...data, props: { ...data.props, address } })}\n />\n <TextInput\n label={t('signature.email', 'Email')}\n defaultValue={email}\n onChange={(email) => updateData({ ...data, props: { ...data.props, email } })}\n />\n <TextInput\n label={t('signature.phone', 'Phone')}\n defaultValue={phone}\n onChange={(phone) => updateData({ ...data, props: { ...data.props, phone } })}\n />\n <TextInput\n label={t('signature.website', 'Website')}\n defaultValue={website}\n onChange={(website) => updateData({ ...data, props: { ...data.props, website } })}\n />\n <TextInput\n label={t('signature.image-url', 'Image URL')}\n defaultValue={imageUrl}\n onChange={(imageUrl) => updateData({ ...data, props: { ...data.props, imageUrl } })}\n />\n <SliderInput\n label={t('signature.image-size', 'Image size')}\n iconLabel={<AspectRatioOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n min={32}\n max={128}\n defaultValue={imageSize}\n onChange={(imageSize) => updateData({ ...data, props: { ...data.props, imageSize } })}\n />\n <RadioGroupInput\n label={t('signature.image-shape', 'Image shape')}\n defaultValue={imageShape}\n onChange={(imageShape) => updateData({ ...data, props: { ...data.props, imageShape } })}\n >\n <ToggleButton value=\"circle\">{t('signature.shape.circle', 'Circle')}</ToggleButton>\n <ToggleButton value=\"square\">{t('signature.shape.square', 'Square')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('signature.shape.rounded', 'Rounded')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('signature.layout', 'Layout')}\n defaultValue={layout}\n onChange={(layout) => updateData({ ...data, props: { ...data.props, layout } })}\n >\n <ToggleButton value=\"horizontal\">{t('signature.layout.horizontal', 'Horizontal')}</ToggleButton>\n <ToggleButton value=\"vertical\">{t('signature.layout.vertical', 'Vertical')}</ToggleButton>\n </RadioGroupInput>\n <ColorInput\n label={t('signature.name-color', 'Name color')}\n defaultValue={nameColor}\n onChange={(nameColor) => updateData({ ...data, props: { ...data.props, nameColor } })}\n />\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={textColor}\n onChange={(textColor) => updateData({ ...data, props: { ...data.props, textColor } })}\n />\n <ColorInput\n label={t('signature.link-color', 'Link color')}\n defaultValue={linkColor}\n onChange={(linkColor) => updateData({ ...data, props: { ...data.props, linkColor } })}\n />\n <MultiStylePropertyPanel\n names={['backgroundColor', 'fontFamily', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { HeightOutlined } from '@mui/icons-material';\nimport { SpacerProps, SpacerPropsDefaults, SpacerPropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport SliderInput from './helpers/inputs/slider-input';\n\ntype SpacerSidebarPanelProps = {\n data: SpacerProps;\n setData: (v: SpacerProps) => void;\n};\nexport default function SpacerSidebarPanel({ data, setData }: SpacerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = SpacerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Spacer block\">\n <SliderInput\n label={t('field.height', 'Height')}\n iconLabel={<HeightOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n min={4}\n max={128}\n defaultValue={data.props?.height ?? SpacerPropsDefaults.height}\n onChange={(height) => updateData({ ...data, props: { ...data.props, height } })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { TextProps, TextPropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport BooleanInput from './helpers/inputs/boolean-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype TextSidebarPanelProps = {\n data: TextProps;\n setData: (v: TextProps) => void;\n};\nexport default function TextSidebarPanel({ data, setData }: TextSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = TextPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Text block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={5}\n defaultValue={data.props?.text ?? ''}\n onChange={(text) => updateData({ ...data, props: { ...data.props, text } })}\n />\n <BooleanInput\n label={t('field.markdown', 'Markdown')}\n defaultValue={data.props?.markdown ?? false}\n onChange={(markdown) => updateData({ ...data, props: { ...data.props, markdown } })}\n />\n\n <MultiStylePropertyPanel\n names={[\n 'color',\n 'backgroundColor',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React from 'react';\n\nimport { Box, Typography } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { setDocument, useDocument, useSelectedBlockId } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nimport AvatarSidebarPanel from './input-panels/avatar-sidebar-panel';\nimport ButtonSidebarPanel from './input-panels/button-sidebar-panel';\nimport ColumnsContainerSidebarPanel from './input-panels/columns-container-sidebar-panel';\nimport ContainerSidebarPanel from './input-panels/container-sidebar-panel';\nimport DividerSidebarPanel from './input-panels/divider-sidebar-panel';\nimport EmailLayoutSidebarPanel from './input-panels/email-layout-sidebar-panel';\nimport HeadingSidebarPanel from './input-panels/heading-sidebar-panel';\nimport HtmlSidebarPanel from './input-panels/html-sidebar-panel';\nimport ImageSidebarPanel from './input-panels/image-sidebar-panel';\nimport SignatureSidebarPanel from './input-panels/signature-sidebar-panel';\nimport SpacerSidebarPanel from './input-panels/spacer-sidebar-panel';\nimport TextSidebarPanel from './input-panels/text-sidebar-panel';\n\nfunction renderMessage(val: string) {\n return (\n <Box sx={{ m: 3, p: 1, border: '1px dashed', borderColor: 'divider' }}>\n <Typography color=\"text.secondary\">{val}</Typography>\n </Box>\n );\n}\n\nexport default function ConfigurationPanel() {\n const document = useDocument();\n const selectedBlockId = useSelectedBlockId();\n\n if (!selectedBlockId) {\n return renderMessage(t('inspect.hint', 'Click on a block to inspect.'));\n }\n const block = document[selectedBlockId];\n if (!block) {\n return renderMessage(t('inspect.not-found', 'Block not found. Click on a block to reset.'));\n }\n\n const setBlock = (conf: TEditorBlock) => setDocument({ [selectedBlockId]: conf });\n const { data, type } = block;\n switch (type) {\n case 'Avatar':\n return <AvatarSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Button':\n return <ButtonSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'ColumnsContainer':\n return (\n <ColumnsContainerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />\n );\n case 'Container':\n return <ContainerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Divider':\n return <DividerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Heading':\n return <HeadingSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Html':\n return <HtmlSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Image':\n return <ImageSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'EmailLayout':\n return <EmailLayoutSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Spacer':\n return <SpacerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Signature':\n return <SignatureSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Text':\n return <TextSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n default:\n return <pre>{JSON.stringify(block, null, ' ')}</pre>;\n }\n}\n","import React from 'react';\n\nimport { setDocument, useDocument } from '@editor/editor-context';\n\nimport EmailLayoutSidebarPanel from './configuration-panel/input-panels/email-layout-sidebar-panel';\n\nexport default function StylesPanel() {\n const block = useDocument().root;\n if (!block) {\n return <p>Block not found</p>;\n }\n\n const { data, type } = block;\n if (type !== 'EmailLayout') {\n throw new Error('Expected \"root\" element to be of type EmailLayout');\n }\n\n return <EmailLayoutSidebarPanel key=\"root\" data={data} setData={(data) => setDocument({ root: { type, data } })} />;\n}\n","import React, { useMemo } from 'react';\nimport { FileDownloadOutlined } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { useDocument } from '@editor/editor-context';\n\nexport default function TemplateDownloadButton() {\n const doc = useDocument();\n const href = useMemo(() => {\n return `data:text/plain,${encodeURIComponent(JSON.stringify(doc, null, ' '))}`;\n }, [doc]);\n\n return (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n startIcon={<FileDownloadOutlined />}\n href={href}\n download=\"emailTemplate.json\"\n fullWidth\n >\n Download JSON\n </Button>\n );\n} ","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Chip,\n InputAdornment,\n Stack,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n CheckOutlined,\n ContentCopyOutlined,\n DeleteOutlined,\n GridOnOutlined,\n SquareOutlined,\n} from '@mui/icons-material';\n\nimport { useEmailEditor } from '../context';\nimport {\n setWorkspaceBackground,\n useDocument,\n usePersistenceEnabled,\n useWorkspaceBackground,\n} from '@editor/editor-context';\nimport { t } from '@i18n';\nimport BaseSidebarPanel from './configuration-panel/input-panels/helpers/base-sidebar-panel';\nimport TemplateDownloadButton from './template-panel-download-button';\n\nexport interface TemplatePanelProps {\n loadTemplates?: () => Promise<any[]>;\n deleteTemplate?: (templateId: string) => void;\n copyTemplate?: (templateName: string, content: any) => void;\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n}\n\nexport default function TemplatePanel({\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n}: TemplatePanelProps) {\n const {\n currentTemplateId,\n currentTemplateName,\n currentTemplateTags,\n setCurrentTemplate,\n setCurrentTemplateTags,\n } = useEmailEditor();\n const document = useDocument();\n const persistenceEnabled = usePersistenceEnabled();\n const workspaceBackground = useWorkspaceBackground();\n\n const handleDelete = () => {\n if (!currentTemplateId || !window.confirm(t('settings.delete-confirm', 'Are you sure you want to delete this template?'))) {\n return;\n }\n\n if (deleteTemplate) {\n // Use the provided deleteTemplate function\n deleteTemplate(currentTemplateId);\n\n // Refresh the page to load a new template\n window.location.hash = '';\n window.location.reload();\n }\n };\n\n const handleCopyToSamples = () => {\n if (!currentTemplateName || !document) return;\n\n if (copyTemplate) {\n // Use the provided copyTemplate function\n copyTemplate(`${currentTemplateName} (Copy)`, document);\n\n // Show confirmation\n window.alert(t('settings.copied', 'Template copied successfully!'));\n }\n };\n\n const workspaceToggle = (\n <BaseSidebarPanel title=\"Editor appearance\">\n <Stack spacing={1}>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary' }}>\n {t('settings.workspace-background', 'Workspace background')}\n </Typography>\n <ToggleButtonGroup\n value={workspaceBackground}\n exclusive\n size=\"small\"\n onChange={(_, v) => v && setWorkspaceBackground(v)}\n >\n <ToggleButton value=\"checkerboard\" sx={{ textTransform: 'none', gap: 0.75 }}>\n <GridOnOutlined fontSize=\"small\" />\n {t('settings.checkerboard', 'Checkerboard')}\n </ToggleButton>\n <ToggleButton value=\"solid\" sx={{ textTransform: 'none', gap: 0.75 }}>\n <SquareOutlined fontSize=\"small\" />\n {t('settings.solid', 'Solid')}\n </ToggleButton>\n </ToggleButtonGroup>\n <Typography variant=\"caption\" sx={{ color: 'text.disabled' }}>\n {t('settings.editor-only-hint', 'Editor-only — never reaches the rendered email.')}\n </Typography>\n </Stack>\n </BaseSidebarPanel>\n );\n\n if (!currentTemplateId) {\n return (\n <>\n <BaseSidebarPanel title=\"Template\">{t('settings.no-template', 'No template selected')}</BaseSidebarPanel>\n {workspaceToggle}\n </>\n );\n }\n\n return (\n <>\n <BaseSidebarPanel title=\"Details\">\n <DetailsEditor\n templateId={currentTemplateId}\n currentName={currentTemplateName ?? ''}\n currentTags={currentTemplateTags}\n canEdit={Boolean(renameTemplate)}\n onSave={async (name, tags) => {\n if (!renameTemplate) return;\n await renameTemplate(currentTemplateId, name, { tags });\n setCurrentTemplate(currentTemplateId, name);\n setCurrentTemplateTags(tags);\n }}\n />\n </BaseSidebarPanel>\n\n <BaseSidebarPanel title=\"Template\">\n <Stack spacing={2}>\n {!persistenceEnabled && (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n padding: 1,\n bgcolor: 'rgba(0,0,0,0.04)',\n borderRadius: 1,\n fontSize: '0.8rem',\n }}\n >\n {t('settings.save-disabled', 'Save functionality is disabled. To enable saving, provide the necessary callback functions.')}\n </Typography>\n )}\n {persistenceEnabled && (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n startIcon={<ContentCopyOutlined />}\n onClick={handleCopyToSamples}\n fullWidth\n disabled={!copyTemplate}\n >\n {t('settings.save-as-sample', 'Save as Sample Template')}\n </Button>\n <Button\n variant=\"outlined\"\n color=\"error\"\n startIcon={<DeleteOutlined />}\n onClick={handleDelete}\n fullWidth\n disabled={!deleteTemplate}\n >\n {t('settings.delete', 'Delete Template')}\n </Button>\n </>\n )}\n </Stack>\n </BaseSidebarPanel>\n\n {persistenceEnabled && (\n <BaseSidebarPanel title=\"Export\">\n <Stack spacing={2}>\n <TemplateDownloadButton />\n </Stack>\n </BaseSidebarPanel>\n )}\n {workspaceToggle}\n </>\n );\n}\n\ntype DetailsEditorProps = {\n templateId: string;\n currentName: string;\n currentTags: string[];\n canEdit: boolean;\n onSave: (name: string, tags: string[]) => Promise<void> | void;\n};\n\nfunction DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }: DetailsEditorProps) {\n const [name, setName] = useState(currentName);\n const [tags, setTags] = useState<string[]>(currentTags);\n const [tagInput, setTagInput] = useState('');\n const [saving, setSaving] = useState(false);\n const [justSaved, setJustSaved] = useState(false);\n\n // Re-sync when the loaded template changes.\n useEffect(() => {\n setName(currentName);\n }, [templateId, currentName]);\n useEffect(() => {\n setTags(currentTags);\n }, [templateId, currentTags.join('\u0001')]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const addTag = () => {\n const trimmed = tagInput.trim();\n if (!trimmed) return;\n if (tags.some((t) => t.toLowerCase() === trimmed.toLowerCase())) {\n setTagInput('');\n return;\n }\n setTags([...tags, trimmed]);\n setTagInput('');\n };\n\n const removeTag = (tag: string) => setTags(tags.filter((t) => t !== tag));\n\n const dirty =\n name !== currentName ||\n tags.length !== currentTags.length ||\n tags.some((t, i) => t !== currentTags[i]);\n\n const handleSave = async () => {\n if (!canEdit || !dirty || !name.trim()) return;\n setSaving(true);\n try {\n await onSave(name.trim(), tags);\n setJustSaved(true);\n window.setTimeout(() => setJustSaved(false), 1600);\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <Stack spacing={1.5}>\n <TextField\n size=\"small\"\n label={t('rename.name-label', 'Name')}\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={!canEdit || saving}\n fullWidth\n />\n <Box>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mb: 0.5 }}>\n {t('rename.tags', 'Tags')}\n </Typography>\n {tags.length > 0 ? (\n <Stack direction=\"row\" spacing={0.5} sx={{ flexWrap: 'wrap', gap: 0.5, mb: 1 }}>\n {tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n onDelete={canEdit && !saving ? () => removeTag(tag) : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"caption\" sx={{ color: 'text.disabled', display: 'block', mb: 1 }}>\n {t('rename.no-tags', 'No tags yet.')}\n </Typography>\n )}\n <TextField\n size=\"small\"\n fullWidth\n placeholder={t('rename.add-tag', 'Add a tag')}\n value={tagInput}\n onChange={(e) => setTagInput(e.target.value)}\n disabled={!canEdit || saving}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag();\n } else if (e.key === 'Backspace' && !tagInput && tags.length > 0) {\n e.preventDefault();\n removeTag(tags[tags.length - 1]);\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <Button\n size=\"small\"\n onClick={addTag}\n disabled={!canEdit || saving || !tagInput.trim()}\n startIcon={<AddOutlined fontSize=\"small\" />}\n sx={{ textTransform: 'none' }}\n >\n {t('common.add', 'Add')}\n </Button>\n </InputAdornment>\n ),\n }}\n />\n </Box>\n <Tooltip title={canEdit ? '' : t('settings.no-rename-cb', 'Wire a renameTemplate callback to enable editing from here')} placement=\"top\">\n <span>\n <Button\n variant=\"contained\"\n size=\"small\"\n fullWidth\n onClick={handleSave}\n disabled={!canEdit || saving || !dirty || !name.trim()}\n startIcon={justSaved ? <CheckOutlined fontSize=\"small\" /> : null}\n >\n {saving ? t('common.saving', 'Saving…') : justSaved ? t('settings.saved', 'Saved') : t('settings.save-details', 'Save details')}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n );\n}\n","import { TEditorConfiguration } from '@editor/core';\n\nexport const VARIABLE_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\nexport const MAX_VARIABLE_NAME_LENGTH = 64;\nexport const RESERVED_VARIABLE_NAMES = new Set(['this', 'true', 'false', 'null', 'undefined']);\nconst HANDLEBARS_KEYWORDS = new Set(['if', 'each', 'unless', 'else', 'with']);\n\nexport type TemplateVariable = {\n name: string;\n description?: string | null;\n sampleValue?: string | null;\n};\n\nexport function validateVariableName(\n name: string,\n siblings: TemplateVariable[],\n indexBeingEdited?: number\n): string | null {\n const trimmed = name.trim();\n if (!trimmed) return 'Name is required';\n if (trimmed.length > MAX_VARIABLE_NAME_LENGTH) return `Max ${MAX_VARIABLE_NAME_LENGTH} characters`;\n if (!VARIABLE_NAME_RE.test(trimmed)) return 'Use letters, digits, underscore; start with a letter or underscore';\n if (RESERVED_VARIABLE_NAMES.has(trimmed)) return 'Reserved word; pick another name';\n const duplicate = siblings.some((v, i) => i !== indexBeingEdited && v.name === trimmed);\n if (duplicate) return 'Already declared';\n return null;\n}\n\n// Matches Handlebars expressions: simple `{{foo}}`, subpath `{{foo.bar}}`, and\n// block helpers `{{#if foo}}`/`{{#each foo}}`/`{{#unless foo}}` (and their\n// subpaths). Captures the root identifier in group 1.\nconst TOKEN_ROOT_RE = /\\{\\{\\s*(?:#(?:if|each|unless|with)\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.[\\w.]+)?\\s*\\}\\}/g;\n\nexport function extractTokenRoots(text: string | null | undefined): string[] {\n if (!text) return [];\n const roots = new Set<string>();\n for (const m of text.matchAll(TOKEN_ROOT_RE)) {\n const name = m[1];\n if (RESERVED_VARIABLE_NAMES.has(name) || HANDLEBARS_KEYWORDS.has(name)) continue;\n roots.add(name);\n }\n return [...roots];\n}\n\nfunction forEachTextFieldInDocument(\n doc: TEditorConfiguration,\n visit: (value: string) => void\n) {\n const root = doc.root;\n if (root && root.type === 'EmailLayout' && typeof (root.data as any)?.subject === 'string') {\n visit((root.data as any).subject);\n }\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const props = (block as any).data?.props;\n if (!props) continue;\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n visit(props.text);\n } else if (type === 'Html' && typeof props.contents === 'string') {\n visit(props.contents);\n }\n }\n}\n\nexport function collectTokenUsage(doc: TEditorConfiguration): Map<string, number> {\n const usage = new Map<string, number>();\n forEachTextFieldInDocument(doc, (value) => {\n for (const root of extractTokenRoots(value)) {\n usage.set(root, (usage.get(root) ?? 0) + 1);\n }\n });\n return usage;\n}\n\nfunction escapeRegex(name: string) {\n return name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction buildRenameReplacers(oldName: string, newName: string) {\n const esc = escapeRegex(oldName);\n const simple = new RegExp(`\\\\{\\\\{\\\\s*${esc}(\\\\.[\\\\w.]+)?\\\\s*\\\\}\\\\}`, 'g');\n const helper = new RegExp(`(\\\\{\\\\{\\\\s*#(?:if|each|unless|with)\\\\s+)${esc}(\\\\.[\\\\w.]+)?(\\\\s*\\\\}\\\\})`, 'g');\n return (text: string) => text.replace(helper, `$1${newName}$2$3`).replace(simple, `{{${newName}$1}}`);\n}\n\n/**\n * Returns a partial-document patch (object suitable for `setDocument`) that\n * rewrites `{{oldName}}` and `{{oldName.*}}` to `{{newName}}`/`{{newName.*}}`\n * across text/heading/button/html blocks and the EmailLayout subject. Blocks\n * with no change are not included in the patch.\n */\nexport function buildRenamePatch(\n doc: TEditorConfiguration,\n oldName: string,\n newName: string\n): Partial<TEditorConfiguration> {\n if (oldName === newName) return {};\n const rewrite = buildRenameReplacers(oldName, newName);\n const patch: Partial<TEditorConfiguration> = {};\n\n const root = doc.root;\n if (root && root.type === 'EmailLayout') {\n const layoutData = root.data as any;\n const oldSubject: string = layoutData.subject ?? '';\n const newSubject = rewrite(oldSubject);\n if (newSubject !== oldSubject) {\n patch.root = { ...root, data: { ...layoutData, subject: newSubject } } as any;\n }\n }\n\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const data = (block as any).data;\n const props = data?.props;\n if (!props) continue;\n\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n const nextText = rewrite(props.text);\n if (nextText !== props.text) {\n (patch as any)[id] = { ...block, data: { ...data, props: { ...props, text: nextText } } };\n }\n } else if (type === 'Html' && typeof props.contents === 'string') {\n const nextContents = rewrite(props.contents);\n if (nextContents !== props.contents) {\n (patch as any)[id] = { ...block, data: { ...data, props: { ...props, contents: nextContents } } };\n }\n }\n }\n\n return patch;\n}\n\n/**\n * Substitutes declared variables' sample values into a text string. Subpath\n * access (e.g. `{{user.name}}`) resolves to the root's sample value — matches\n * the top-level declaration model. Block helpers (`{{#if}}`, `{{#each}}`,\n * `{{#unless}}`, `{{#with}}`) and their closers are stripped so their content\n * renders inline; the block body is not interpreted.\n */\nexport function substituteSampleValues(text: string, samples: Map<string, string>): string {\n if (!text) return text;\n let out = text;\n out = out.replace(\n /\\{\\{\\s*#(?:if|each|unless|with)\\s+[^}]*\\}\\}/g,\n ''\n );\n out = out.replace(/\\{\\{\\s*\\/(?:if|each|unless|with)\\s*\\}\\}/g, '');\n out = out.replace(/\\{\\{\\s*else\\s*\\}\\}/g, '');\n out = out.replace(TOKEN_ROOT_RE, (match, root: string) => {\n if (!samples.has(root)) return match;\n return samples.get(root) ?? '';\n });\n return out;\n}\n\nexport function buildSampleValueMap(variables: TemplateVariable[] | null | undefined): Map<string, string> {\n const m = new Map<string, string>();\n if (!variables) return m;\n for (const v of variables) {\n if (v.name && typeof v.sampleValue === 'string' && v.sampleValue.length > 0) {\n m.set(v.name, v.sampleValue);\n }\n }\n return m;\n}\n\n/**\n * Returns a shallow-cloned document with sample values substituted into\n * text/heading/button/html blocks and the EmailLayout subject. Used as a\n * preview transform — does not mutate the source document.\n */\nexport function applySampleValuesToDocument(\n doc: TEditorConfiguration,\n samples: Map<string, string>\n): TEditorConfiguration {\n if (samples.size === 0) return doc;\n const next: TEditorConfiguration = { ...doc };\n\n const root = doc.root;\n if (root && root.type === 'EmailLayout') {\n const layoutData = root.data as any;\n if (typeof layoutData.subject === 'string') {\n const newSubject = substituteSampleValues(layoutData.subject, samples);\n if (newSubject !== layoutData.subject) {\n next.root = { ...root, data: { ...layoutData, subject: newSubject } } as any;\n }\n }\n }\n\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const data = (block as any).data;\n const props = data?.props;\n if (!props) continue;\n\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n const newText = substituteSampleValues(props.text, samples);\n if (newText !== props.text) {\n (next as any)[id] = { ...block, data: { ...data, props: { ...props, text: newText } } };\n }\n } else if (type === 'Html' && typeof props.contents === 'string') {\n const newContents = substituteSampleValues(props.contents, samples);\n if (newContents !== props.contents) {\n (next as any)[id] = { ...block, data: { ...data, props: { ...props, contents: newContents } } };\n }\n }\n }\n\n return next;\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n AlertTitle,\n Box,\n Chip,\n IconButton,\n Stack,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n ContentCopyOutlined,\n DataObjectOutlined,\n DeleteOutline,\n InputOutlined,\n} from '@mui/icons-material';\nimport {\n getLastFocusedEditable,\n setDocument,\n useDocument,\n useLastFocusedEditable,\n} from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\nimport {\n buildRenamePatch,\n collectTokenUsage,\n TemplateVariable,\n validateVariableName,\n} from '../variables/variable-utils';\n\ntype DocVariable = {\n name: string;\n description?: string | null;\n sampleValue?: string | null;\n};\n\nfunction toPersistShape(v: TemplateVariable): DocVariable {\n return {\n name: v.name,\n description: v.description ? v.description : undefined,\n sampleValue: v.sampleValue ? v.sampleValue : undefined,\n };\n}\n\nexport default function VariablesPanel() {\n const document = useDocument();\n const lastFocused = useLastFocusedEditable();\n const root = document.root;\n\n if (!root || root.type !== 'EmailLayout') {\n return (\n <Box p={2}>\n <Alert severity=\"info\">{t('variables.open-template', 'Open a template to manage variables.')}</Alert>\n </Box>\n );\n }\n\n const data = root.data as EmailLayoutProps;\n const variables: TemplateVariable[] = (data.variables ?? []).map((v) => ({\n name: v.name,\n description: v.description ?? '',\n sampleValue: (v as DocVariable).sampleValue ?? '',\n }));\n\n const usage = useMemo(() => collectTokenUsage(document), [document]);\n const declaredNames = useMemo(() => new Set(variables.map((v) => v.name)), [variables]);\n const undeclared = useMemo(\n () => [...usage.keys()].filter((n) => n && !declaredNames.has(n)),\n [usage, declaredNames]\n );\n\n const writeVariables = (next: TemplateVariable[], extraPatch: Partial<TEditorConfiguration> = {}) => {\n const baseRoot: any = (extraPatch as any).root ?? root;\n const newRoot = {\n ...baseRoot,\n data: {\n ...baseRoot.data,\n variables: next.map(toPersistShape),\n },\n };\n setDocument({ ...(extraPatch as any), root: newRoot } as any);\n };\n\n const updateAt = (index: number, patch: Partial<TemplateVariable>) => {\n const next = variables.map((v, i) => (i === index ? { ...v, ...patch } : v));\n writeVariables(next);\n };\n\n const add = () => {\n writeVariables([...variables, { name: '', description: '', sampleValue: '' }]);\n };\n\n const addFromToken = (name: string) => {\n writeVariables([...variables, { name, description: '', sampleValue: '' }]);\n };\n\n const removeAt = (index: number) => {\n const v = variables[index];\n const usageCount = v.name ? usage.get(v.name) ?? 0 : 0;\n if (usageCount > 0) {\n const ok = window.confirm(\n t('variables.confirm-delete', 'Variable is still referenced in the body. Delete anyway?') +\n ` (${v.name}, ${usageCount})`\n );\n if (!ok) return;\n }\n writeVariables(variables.filter((_, i) => i !== index));\n };\n\n const commitRename = (index: number, newName: string) => {\n const oldName = variables[index].name;\n const trimmed = newName.trim();\n if (trimmed === oldName) return;\n const error = validateVariableName(trimmed, variables, index);\n if (error) return;\n const patch = oldName ? buildRenamePatch(document, oldName, trimmed) : {};\n const next = variables.map((v, i) => (i === index ? { ...v, name: trimmed } : v));\n writeVariables(next, patch);\n };\n\n const canInsert = Boolean(\n lastFocused &&\n (lastFocused.field === 'subject' ||\n (lastFocused.blockId && document[lastFocused.blockId]))\n );\n\n const insertIntoFocused = (name: string) => {\n const focused = getLastFocusedEditable();\n if (!focused) return;\n const token = `{{${name}}}`;\n\n if (focused.field === 'subject') {\n const layoutData = root.data as any;\n const current: string = layoutData.subject ?? '';\n const next =\n current.slice(0, focused.selectionStart) + token + current.slice(focused.selectionEnd);\n setDocument({\n root: { ...root, data: { ...layoutData, subject: next } },\n });\n return;\n }\n\n const block: any = document[focused.blockId];\n if (!block) return;\n const blockData = block.data;\n const props = blockData?.props ?? {};\n const field = focused.field; // 'text' | 'contents'\n const current: string = props[field] ?? '';\n const next =\n current.slice(0, focused.selectionStart) + token + current.slice(focused.selectionEnd);\n setDocument({\n [focused.blockId]: {\n ...block,\n data: { ...blockData, props: { ...props, [field]: next } },\n },\n } as any);\n };\n\n const copy = async (name: string) => {\n try {\n await navigator.clipboard.writeText(`{{${name}}}`);\n } catch {\n // Clipboard may be blocked (e.g., insecure context); silently ignore.\n }\n };\n\n return (\n <Box p={2}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" sx={{ mb: 1 }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600 }}>\n {t('variables.title', 'Variables')}\n </Typography>\n <Tooltip title={t('variables.add', 'Add variable')}>\n <IconButton size=\"small\" onClick={add} aria-label={t('variables.add', 'Add variable')}>\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mb: 2 }}>\n {t(\n 'variables.intro',\n 'Declared variables travel with the template. Reference them in subject and body as {{name}}. In Preview mode, tokens render with the sample values below.'\n )}\n </Typography>\n\n {undeclared.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <AlertTitle sx={{ fontSize: 13 }}>{t('variables.undeclared', 'Undeclared in body')}</AlertTitle>\n <Stack direction=\"row\" spacing={0.5} useFlexGap flexWrap=\"wrap\">\n {undeclared.map((name) => (\n <Chip\n key={name}\n size=\"small\"\n label={name}\n onClick={() => addFromToken(name)}\n onDelete={() => addFromToken(name)}\n deleteIcon={<AddOutlined />}\n sx={{ fontFamily: 'monospace' }}\n />\n ))}\n </Stack>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mt: 0.5 }}>\n {t('variables.click-to-declare', 'Click a token to declare it.')}\n </Typography>\n </Alert>\n )}\n\n {variables.length === 0 ? (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {t('variables.none', 'No variables declared. Click + to add one.')}\n </Typography>\n ) : (\n <Stack spacing={2}>\n {variables.map((v, i) => (\n <VariableRow\n key={i}\n index={i}\n variable={v}\n siblings={variables}\n usageCount={v.name ? usage.get(v.name) ?? 0 : 0}\n canInsert={canInsert}\n onCommitRename={(name) => commitRename(i, name)}\n onChangeDescription={(description) => updateAt(i, { description })}\n onChangeSampleValue={(sampleValue) => updateAt(i, { sampleValue })}\n onRemove={() => removeAt(i)}\n onInsert={() => v.name && insertIntoFocused(v.name)}\n onCopy={() => v.name && copy(v.name)}\n />\n ))}\n </Stack>\n )}\n </Box>\n );\n}\n\ntype VariableRowProps = {\n index: number;\n variable: TemplateVariable;\n siblings: TemplateVariable[];\n usageCount: number;\n canInsert: boolean;\n onCommitRename: (name: string) => void;\n onChangeDescription: (value: string) => void;\n onChangeSampleValue: (value: string) => void;\n onRemove: () => void;\n onInsert: () => void;\n onCopy: () => void;\n};\n\nfunction VariableRow({\n index,\n variable,\n siblings,\n usageCount,\n canInsert,\n onCommitRename,\n onChangeDescription,\n onChangeSampleValue,\n onRemove,\n onInsert,\n onCopy,\n}: VariableRowProps) {\n const [draftName, setDraftName] = useState(variable.name);\n const [isEditing, setIsEditing] = useState(false);\n\n // Re-sync from props when the stored name changes from the outside (e.g., an\n // undeclared-token add, or a sibling edit causing re-render). Avoid\n // overwriting an in-progress edit.\n useEffect(() => {\n if (!isEditing) setDraftName(variable.name);\n }, [variable.name, isEditing]);\n\n const nameError = validateVariableName(draftName, siblings, index);\n const unused = Boolean(variable.name) && usageCount === 0;\n const hasName = Boolean(variable.name);\n\n const commit = () => {\n setIsEditing(false);\n if (nameError) {\n setDraftName(variable.name);\n return;\n }\n if (draftName.trim() !== variable.name) {\n onCommitRename(draftName.trim());\n }\n };\n\n return (\n <Stack spacing={0.75} sx={{ pb: 1, borderBottom: 1, borderColor: 'divider' }}>\n <Stack direction=\"row\" spacing={1} alignItems=\"flex-start\">\n <TextField\n label={t('rename.name-label', 'Name')}\n size=\"small\"\n fullWidth\n value={draftName}\n onChange={(e) => {\n setDraftName(e.target.value);\n setIsEditing(true);\n }}\n onFocus={() => setIsEditing(true)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n setDraftName(variable.name);\n setIsEditing(false);\n (e.target as HTMLInputElement).blur();\n }\n }}\n error={Boolean(nameError)}\n helperText={nameError ?? ' '}\n />\n <Stack direction=\"row\" spacing={0.25} sx={{ mt: 0.5 }}>\n <Tooltip title={t('variables.copy-token', 'Copy {{name}} token')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={onCopy}\n disabled={!hasName}\n aria-label={t('variables.copy-token', 'Copy {{name}} token')}\n >\n <ContentCopyOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={canInsert ? t('variables.insert-at-cursor', 'Insert at cursor') : t('variables.focus-first', 'Focus a text field first')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={onInsert}\n disabled={!hasName || !canInsert}\n aria-label={t('variables.insert-at-cursor', 'Insert at cursor')}\n >\n <InputOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={t('variables.remove', 'Remove')}>\n <IconButton\n size=\"small\"\n onClick={onRemove}\n aria-label={t('variables.remove', 'Remove')}\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n </Stack>\n <TextField\n label={t('variables.description', 'Description')}\n size=\"small\"\n fullWidth\n value={variable.description ?? ''}\n onChange={(e) => onChangeDescription(e.target.value)}\n placeholder={t('variables.optional', 'Optional')}\n />\n <TextField\n label={t('variables.sample-value', 'Sample value')}\n size=\"small\"\n fullWidth\n value={variable.sampleValue ?? ''}\n onChange={(e) => onChangeSampleValue(e.target.value)}\n placeholder={t('variables.sample-hint', 'Shown in Preview mode')}\n InputProps={{\n startAdornment: (\n <DataObjectOutlined\n fontSize=\"small\"\n sx={{ color: 'text.secondary', mr: 0.75 }}\n />\n ),\n }}\n />\n <Stack direction=\"row\" spacing={0.5} sx={{ pt: 0.25 }}>\n {hasName &&\n (unused ? (\n <Chip size=\"small\" color=\"warning\" variant=\"outlined\" label={t('variables.unused', 'Unused in body')} />\n ) : (\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${usageCount} ${usageCount === 1 ? t('variables.ref-one', 'ref') : t('variables.ref-many', 'refs')}`}\n />\n ))}\n </Stack>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport { Box, Drawer, Tab, Tabs } from '@mui/material';\n\nimport {\n setSidebarTab,\n useInspectorDrawerOpen,\n useSelectedSidebarTab\n} from '@editor/editor-context';\nimport { t } from '@i18n';\n\nimport ConfigurationPanel from './configuration-panel';\nimport StylesPanel from './styles-panel';\nimport TemplatePanel from './template-panel';\nimport VariablesPanel from './variables-panel';\n\nexport const INSPECTOR_DRAWER_WIDTH = 320;\n\nexport interface InspectorDrawerProps {\n /**\n * Duration for enter transition in milliseconds.\n * @default 225\n */\n enterDuration?: number;\n \n /**\n * Duration for exit transition in milliseconds.\n * @default 225\n */\n exitDuration?: number;\n\n /**\n * Callback to delete a template by ID\n */\n deleteTemplate?: (templateId: string) => void;\n \n /**\n * Callback to copy a template with a new name\n */\n copyTemplate?: (templateName: string, content: any) => void;\n\n /**\n * Callback to update a template's details (name + tags). Threaded through\n * to the Settings tab so editors can rename / retag without opening the\n * row menu.\n */\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n\n /**\n * Indicates whether the template is saving enabled\n */\n savingEnabled?: boolean;\n}\n\nexport default function InspectorDrawer({\n enterDuration = 225,\n exitDuration = 225,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n savingEnabled = true\n}: InspectorDrawerProps = {}) {\n const selectedSidebarTab = useSelectedSidebarTab();\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n\n const renderCurrentSidebarPanel = () => {\n switch (selectedSidebarTab) {\n case 'block-configuration':\n return <ConfigurationPanel />;\n case 'styles':\n return <StylesPanel />;\n case 'variables':\n return <VariablesPanel />;\n case 'template-settings':\n return <TemplatePanel\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n />;\n }\n };\n\n return (\n <Drawer\n variant=\"persistent\"\n anchor=\"right\"\n open={inspectorDrawerOpen}\n PaperProps={{\n style: { position: 'absolute' }\n }}\n ModalProps={{\n container: document.getElementById('drawer-container'),\n style: { position: 'absolute' },\n keepMounted: true\n }}\n transitionDuration={{\n enter: enterDuration,\n exit: exitDuration\n }}\n sx={{\n width: inspectorDrawerOpen ? INSPECTOR_DRAWER_WIDTH : 0,\n }}\n >\n <Box sx={{ width: INSPECTOR_DRAWER_WIDTH, height: 49, borderBottom: 1, borderColor: 'divider' }}>\n <Box px={1}>\n <Tabs\n value={selectedSidebarTab}\n onChange={(_, v) => setSidebarTab(v)}\n variant=\"fullWidth\"\n sx={{ '& .MuiTab-root': { minWidth: 0, px: 1, fontSize: 13 } }}\n >\n <Tab value=\"styles\" label={t('inspector.tab.styles', 'Styles')} />\n <Tab value=\"block-configuration\" label={t('inspector.tab.inspect', 'Inspect')} />\n <Tab value=\"variables\" label={t('inspector.tab.variables', 'Variables')} />\n <Tab value=\"template-settings\" label={t('inspector.tab.settings', 'Settings')} />\n </Tabs>\n </Box>\n </Box>\n <Box sx={{ width: INSPECTOR_DRAWER_WIDTH, height: 'calc(100% - 49px)', overflow: 'auto' }}>\n {renderCurrentSidebarPanel()}\n </Box>\n </Drawer>\n );\n}\n","import React, { createContext, useContext, useState } from 'react';\nimport { Snackbar } from '@mui/material';\n\n// Define the context\ninterface SnackbarContextType {\n showMessage: (message: string, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextType | null>(null);\n\n// Custom hook to use the snackbar\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error('useSnackbar must be used within a SnackbarProvider');\n }\n return context;\n}\n\n// Snackbar Provider component\nexport function SnackbarProvider({ children }: { children: React.ReactNode }) {\n const [message, setMessage] = useState<string | null>(null);\n const [duration, setDuration] = useState(3000);\n\n const showMessage = (text: string, customDuration = 3000) => {\n setMessage(text);\n setDuration(customDuration);\n };\n\n const handleClose = () => {\n setMessage(null);\n };\n\n return (\n <SnackbarContext.Provider value={{ showMessage }}>\n {children}\n <Snackbar\n anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n open={message !== null}\n onClose={handleClose}\n message={message}\n autoHideDuration={duration}\n sx={{\n zIndex: 10000, // Very high z-index\n position: 'fixed', // Make sure it's fixed positioned\n }}\n />\n </SnackbarContext.Provider>\n );\n} ","import React, { useState } from 'react';\nimport {\n Box,\n Chip,\n Divider,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n ContentCopyOutlined,\n DeleteOutlined,\n DriveFileRenameOutlineOutlined,\n FileDownloadOutlined,\n FileUploadOutlined,\n LibraryAddOutlined,\n MoreVertOutlined,\n} from '@mui/icons-material';\nimport { resetDocument } from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport { t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { TemplateListItem } from '../index';\n\nexport interface TemplateRowProps {\n template: TemplateListItem;\n isCurrent: boolean;\n templateLoader: () => Promise<TEditorConfiguration | null>;\n onDuplicate?: () => void;\n onRename?: () => void;\n onDelete?: () => void;\n onPromote?: () => void;\n onDemote?: () => void;\n onDuplicateAsTemplate?: () => void;\n}\n\nfunction relativeTime(iso?: string): string | null {\n if (!iso) return null;\n const date = new Date(iso).getTime();\n if (Number.isNaN(date)) return null;\n const diffMs = Date.now() - date;\n const diffSec = Math.round(diffMs / 1000);\n if (diffSec < 60) return t('time.just-now', 'just now');\n const diffMin = Math.round(diffSec / 60);\n if (diffMin < 60) return `${diffMin}${t('time.minutes-short', 'm ago')}`;\n const diffHr = Math.round(diffMin / 60);\n if (diffHr < 24) return `${diffHr}${t('time.hours-short', 'h ago')}`;\n const diffDay = Math.round(diffHr / 24);\n if (diffDay < 30) return `${diffDay}${t('time.days-short', 'd ago')}`;\n const diffMo = Math.round(diffDay / 30);\n if (diffMo < 12) return `${diffMo}${t('time.months-short', 'mo ago')}`;\n const diffYr = Math.round(diffMo / 12);\n return `${diffYr}${t('time.years-short', 'y ago')}`;\n}\n\nexport default function TemplateRow({\n template,\n isCurrent,\n templateLoader,\n onDuplicate,\n onRename,\n onDelete,\n onPromote,\n onDemote,\n onDuplicateAsTemplate,\n}: TemplateRowProps) {\n const { setCurrentTemplate } = useEmailEditor();\n const [hover, setHover] = useState(false);\n const [menuAnchor, setMenuAnchor] = useState<HTMLElement | null>(null);\n const closeMenu = () => setMenuAnchor(null);\n const openMenu = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n setMenuAnchor(e.currentTarget);\n };\n const runAction = (fn?: () => void) => () => {\n closeMenu();\n fn?.();\n };\n\n const handleClick = async () => {\n try {\n const content = await templateLoader();\n if (content) {\n resetDocument(content);\n setCurrentTemplate(template.id, template.slug, template.kind, template.tags ?? []);\n }\n } catch (error) {\n console.error('Error loading template:', error);\n }\n };\n\n const stop = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n const updated = relativeTime(template.updatedAt);\n const hasActions = Boolean(\n onDuplicate || onRename || onDelete || onPromote || onDemote || onDuplicateAsTemplate,\n );\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n sx={{\n position: 'relative',\n width: '100%',\n px: 1.5,\n py: 1,\n borderRadius: 1,\n cursor: 'pointer',\n bgcolor: isCurrent ? 'rgba(0, 0, 0, 0.08)' : 'transparent',\n '&:hover': { bgcolor: 'rgba(0, 0, 0, 0.04)' },\n '&:focus-visible': { outline: '2px solid', outlineColor: 'primary.main' },\n }}\n >\n <Stack direction=\"row\" alignItems=\"flex-start\" spacing={1}>\n <Box sx={{ flexGrow: 1, minWidth: 0, pr: hasActions ? 3 : 0 }}>\n <Stack direction=\"row\" alignItems=\"baseline\" spacing={1} sx={{ minWidth: 0 }}>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 600,\n flexGrow: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={template.slug}\n >\n {template.slug}\n </Typography>\n {updated && !hasActions && (\n <Typography\n variant=\"caption\"\n sx={{ color: 'text.secondary', flexShrink: 0, fontSize: '0.7rem' }}\n >\n {updated}\n </Typography>\n )}\n </Stack>\n {template.description && (\n <Typography\n variant=\"caption\"\n sx={{\n color: 'text.secondary',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n lineHeight: 1.3,\n }}\n >\n {template.description}\n </Typography>\n )}\n {template.tags && template.tags.length > 0 && (\n <Stack direction=\"row\" spacing={0.5} sx={{ mt: 0.5, flexWrap: 'wrap', gap: 0.5 }}>\n {template.tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n sx={{ height: 18, fontSize: '0.65rem', '& .MuiChip-label': { px: 0.75 } }}\n />\n ))}\n </Stack>\n )}\n </Box>\n </Stack>\n\n {hasActions && (\n <>\n <Tooltip title={t('row.more', 'More')}>\n <IconButton\n size=\"small\"\n onClick={openMenu}\n aria-label={t('row.actions', 'Row actions')}\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(menuAnchor) || undefined}\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n opacity: hover || isCurrent || Boolean(menuAnchor) ? 1 : 0.45,\n transition: 'opacity 120ms',\n }}\n >\n <MoreVertOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={menuAnchor}\n open={Boolean(menuAnchor)}\n onClose={closeMenu}\n onClick={stop}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 200 } } }}\n >\n {onRename && (\n <MenuItem onClick={runAction(onRename)}>\n <ListItemIcon>\n <DriveFileRenameOutlineOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.edit-details', 'Edit name & tags…')}</ListItemText>\n </MenuItem>\n )}\n {onDuplicate && (\n <MenuItem onClick={runAction(onDuplicate)}>\n <ListItemIcon>\n <ContentCopyOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.duplicate', 'Duplicate')}</ListItemText>\n </MenuItem>\n )}\n {onDuplicateAsTemplate && (\n <MenuItem onClick={runAction(onDuplicateAsTemplate)}>\n <ListItemIcon>\n <LibraryAddOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.duplicate-as-template', 'Duplicate as template')}</ListItemText>\n </MenuItem>\n )}\n {onPromote && (\n <MenuItem onClick={runAction(onPromote)}>\n <ListItemIcon>\n <FileUploadOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.promote', 'Promote to sample')}</ListItemText>\n </MenuItem>\n )}\n {onDemote && (\n <MenuItem onClick={runAction(onDemote)}>\n <ListItemIcon>\n <FileDownloadOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.demote', 'Demote to template')}</ListItemText>\n </MenuItem>\n )}\n {onDelete && [\n <Divider key=\"divider\" />,\n <MenuItem key=\"delete\" onClick={runAction(onDelete)} sx={{ color: 'error.main' }}>\n <ListItemIcon sx={{ color: 'error.main' }}>\n <DeleteOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('tune.delete', 'Delete')}</ListItemText>\n </MenuItem>,\n ]}\n </Menu>\n </>\n )}\n </Box>\n );\n}\n","import { TEditorConfiguration } from '@editor/core';\n\n/**\n * A block's position in the document tree is described by a pointer to its\n * parent plus, when the parent is a `ColumnsContainer`, which column it lives\n * in. `EmailLayout` / `Container` children are a single flat array; columns\n * split it per index.\n */\nexport type ParentRef =\n | { kind: 'EmailLayout'; parentId: 'root' }\n | { kind: 'Container'; parentId: string }\n | { kind: 'ColumnsContainer'; parentId: string; columnIndex: number };\n\nexport function sameParent(a: ParentRef, b: ParentRef): boolean {\n if (a.kind !== b.kind || a.parentId !== b.parentId) return false;\n if (a.kind === 'ColumnsContainer' && b.kind === 'ColumnsContainer') {\n return a.columnIndex === b.columnIndex;\n }\n return true;\n}\n\nfunction getChildrenIds(doc: TEditorConfiguration, ref: ParentRef): string[] {\n const block: any = doc[ref.parentId];\n if (!block) return [];\n if (ref.kind === 'EmailLayout') return (block.data?.childrenIds ?? []) as string[];\n if (ref.kind === 'Container') return (block.data?.props?.childrenIds ?? []) as string[];\n const col = block.data?.props?.columns?.[ref.columnIndex];\n return (col?.childrenIds ?? []) as string[];\n}\n\nfunction patchChildrenIds(block: any, ref: ParentRef, newIds: string[]): any {\n if (ref.kind === 'EmailLayout') {\n return { ...block, data: { ...block.data, childrenIds: newIds } };\n }\n if (ref.kind === 'Container') {\n return {\n ...block,\n data: { ...block.data, props: { ...block.data.props, childrenIds: newIds } },\n };\n }\n const columns = (block.data?.props?.columns ?? []).map((c: any, i: number) =>\n i === ref.columnIndex ? { ...c, childrenIds: newIds } : c\n );\n return { ...block, data: { ...block.data, props: { ...block.data.props, columns } } };\n}\n\n/**\n * True if `candidateId` lives anywhere inside the subtree rooted at\n * `ancestorId` (including `ancestorId` itself). Used to reject drops that\n * would move a container into one of its own descendants.\n */\nexport function isDescendant(\n doc: TEditorConfiguration,\n ancestorId: string,\n candidateId: string\n): boolean {\n if (ancestorId === candidateId) return true;\n const block: any = doc[ancestorId];\n if (!block) return false;\n const direct: string[] = [];\n if (block.type === 'EmailLayout') direct.push(...(block.data?.childrenIds ?? []));\n if (block.type === 'Container') direct.push(...(block.data?.props?.childrenIds ?? []));\n if (block.type === 'ColumnsContainer') {\n for (const col of block.data?.props?.columns ?? []) {\n direct.push(...(col.childrenIds ?? []));\n }\n }\n for (const childId of direct) {\n if (isDescendant(doc, childId, candidateId)) return true;\n }\n return false;\n}\n\n/**\n * Compute the partial-document patch that moves `sourceId` from\n * `sourceParent` to `targetParent` at `targetIndex`. Returns `null` when the\n * move is a no-op (same position) or disallowed (dropping into self / own\n * descendant). Caller feeds the patch to `setDocument`.\n */\nexport function buildMovePatch(\n doc: TEditorConfiguration,\n sourceId: string,\n sourceParent: ParentRef,\n targetParent: ParentRef,\n targetIndex: number\n): Partial<TEditorConfiguration> | null {\n // Can't drop a block into its own subtree.\n if (isDescendant(doc, sourceId, targetParent.parentId)) return null;\n\n const srcIds = getChildrenIds(doc, sourceParent);\n const sourceIndex = srcIds.indexOf(sourceId);\n if (sourceIndex < 0) return null;\n\n if (sameParent(sourceParent, targetParent)) {\n // Single-array reorder — adjust targetIndex for the removal when the\n // insertion point is after the source.\n const arr = [...srcIds];\n arr.splice(sourceIndex, 1);\n let insertAt = targetIndex;\n if (insertAt > sourceIndex) insertAt -= 1;\n if (insertAt < 0) insertAt = 0;\n if (insertAt > arr.length) insertAt = arr.length;\n arr.splice(insertAt, 0, sourceId);\n if (arr.every((id, i) => id === srcIds[i])) return null;\n const sourceBlock: any = doc[sourceParent.parentId];\n return {\n [sourceParent.parentId]: patchChildrenIds(sourceBlock, sourceParent, arr),\n } as any;\n }\n\n // Cross-parent move: remove from source, insert into target.\n const newSrcIds = [...srcIds];\n newSrcIds.splice(sourceIndex, 1);\n const tgtIds = getChildrenIds(doc, targetParent);\n const newTgtIds = [...tgtIds];\n let insertAt = targetIndex;\n if (insertAt < 0) insertAt = 0;\n if (insertAt > newTgtIds.length) insertAt = newTgtIds.length;\n newTgtIds.splice(insertAt, 0, sourceId);\n\n // Same parent block, different columns (both refs are ColumnsContainer on\n // the same id). Collapse both column edits into one block patch.\n if (sourceParent.parentId === targetParent.parentId) {\n const block: any = doc[sourceParent.parentId];\n const columns = (block.data?.props?.columns ?? []).map((c: any, i: number) => {\n if (sourceParent.kind === 'ColumnsContainer' && i === sourceParent.columnIndex) {\n return { ...c, childrenIds: newSrcIds };\n }\n if (targetParent.kind === 'ColumnsContainer' && i === targetParent.columnIndex) {\n return { ...c, childrenIds: newTgtIds };\n }\n return c;\n });\n return {\n [sourceParent.parentId]: {\n ...block,\n data: { ...block.data, props: { ...block.data.props, columns } },\n },\n } as any;\n }\n\n const sourceBlock: any = doc[sourceParent.parentId];\n const targetBlock: any = doc[targetParent.parentId];\n return {\n [sourceParent.parentId]: patchChildrenIds(sourceBlock, sourceParent, newSrcIds),\n [targetParent.parentId]: patchChildrenIds(targetBlock, targetParent, newTgtIds),\n } as any;\n}\n","import React, { useState } from 'react';\nimport { Box, IconButton, Stack, Tooltip, Typography } from '@mui/material';\nimport {\n AccountCircleOutlined,\n BusinessOutlined,\n ChevronRight,\n ContactMailOutlined,\n Crop32Outlined,\n DashboardOutlined,\n ExpandMore,\n HMobiledataOutlined,\n HorizontalRuleOutlined,\n HtmlOutlined,\n ImageOutlined,\n KeyboardArrowDown,\n KeyboardArrowUp,\n LibraryAddOutlined,\n NotesOutlined,\n SmartButtonOutlined,\n ViewColumnOutlined,\n ViewColumnSharp,\n} from '@mui/icons-material';\nimport {\n setDocument,\n setHoveredBlockId,\n setSelectedBlockId,\n useDocument,\n useSelectedBlockId,\n} from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport { t } from '@i18n';\nimport {\n buildMovePatch,\n isDescendant,\n type ParentRef,\n} from '@editor/blocks/helpers/move-block';\n\nconst ROOT_BLOCK_ID = 'root';\nconst PREVIEW_MAX = 36;\n\ntype OutlineNode = {\n id: string;\n label: string;\n preview?: string;\n icon: React.ReactNode;\n children?: OutlineNode[];\n // Populated for real blocks; omitted for synthetic rows (Canvas, Column i).\n parent?: ParentRef;\n indexInParent?: number;\n siblingsCount?: number;\n // Parent ref whose childrenIds this node addresses when it's itself a\n // container (EmailLayout / Container / ColumnsContainer column). Used as\n // the target when a block is dropped onto this row.\n containerChildrenRef?: ParentRef;\n};\n\nfunction iconForType(type: string): React.ReactNode {\n switch (type) {\n case 'EmailLayout':\n return <DashboardOutlined fontSize=\"small\" />;\n case 'Heading':\n return <HMobiledataOutlined fontSize=\"small\" />;\n case 'Text':\n return <NotesOutlined fontSize=\"small\" />;\n case 'Button':\n return <SmartButtonOutlined fontSize=\"small\" />;\n case 'Image':\n return <ImageOutlined fontSize=\"small\" />;\n case 'Avatar':\n return <AccountCircleOutlined fontSize=\"small\" />;\n case 'Signature':\n return <ContactMailOutlined fontSize=\"small\" />;\n case 'Divider':\n return <HorizontalRuleOutlined fontSize=\"small\" />;\n case 'Spacer':\n return <Crop32Outlined fontSize=\"small\" />;\n case 'Html':\n return <HtmlOutlined fontSize=\"small\" />;\n case 'Container':\n return <LibraryAddOutlined fontSize=\"small\" />;\n case 'ColumnsContainer':\n return <ViewColumnOutlined fontSize=\"small\" />;\n default:\n return <BusinessOutlined fontSize=\"small\" />;\n }\n}\n\nfunction previewText(text: string | null | undefined): string | undefined {\n if (!text) return undefined;\n const trimmed = text.trim().replace(/\\s+/g, ' ');\n if (!trimmed) return undefined;\n return trimmed.length > PREVIEW_MAX ? trimmed.slice(0, PREVIEW_MAX - 1) + '…' : trimmed;\n}\n\ntype BuildCtx = {\n parent: ParentRef;\n indexInParent: number;\n siblingsCount: number;\n};\n\nfunction buildNode(id: string, doc: TEditorConfiguration, ctx?: BuildCtx): OutlineNode | null {\n const block: any = doc[id];\n if (!block) return null;\n const type: string = block.type;\n const data = block.data ?? {};\n const props = data.props ?? {};\n const baseMeta: Partial<OutlineNode> = ctx\n ? { parent: ctx.parent, indexInParent: ctx.indexInParent, siblingsCount: ctx.siblingsCount }\n : {};\n\n switch (type) {\n case 'EmailLayout': {\n const ids = (data.childrenIds as string[] | null) ?? [];\n const parentForChildren: ParentRef = { kind: 'EmailLayout', parentId: 'root' };\n const children = ids\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForChildren,\n indexInParent: i,\n siblingsCount: ids.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n return {\n id,\n label: t('outline.canvas', 'Canvas'),\n icon: iconForType('EmailLayout'),\n children,\n containerChildrenRef: parentForChildren,\n };\n }\n case 'Container': {\n const ids = (props.childrenIds as string[] | null) ?? [];\n const parentForChildren: ParentRef = { kind: 'Container', parentId: id };\n const children = ids\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForChildren,\n indexInParent: i,\n siblingsCount: ids.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n const count = children.length;\n return {\n id,\n label: 'Container',\n preview: count === 1 ? '1 child' : `${count} children`,\n icon: iconForType('Container'),\n children,\n containerChildrenRef: parentForChildren,\n ...baseMeta,\n };\n }\n case 'ColumnsContainer': {\n const columns: Array<{ childrenIds?: string[] }> = props.columns ?? [];\n const children: OutlineNode[] = [];\n columns.forEach((col, colIdx) => {\n const colIds = col.childrenIds ?? [];\n const parentForCol: ParentRef = {\n kind: 'ColumnsContainer',\n parentId: id,\n columnIndex: colIdx,\n };\n const colChildren = colIds\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForCol,\n indexInParent: i,\n siblingsCount: colIds.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n children.push({\n id: `${id}::col${colIdx}`,\n label: `Column ${colIdx + 1}`,\n preview: colChildren.length === 1 ? '1 child' : `${colChildren.length} children`,\n icon: <ViewColumnSharp fontSize=\"small\" sx={{ opacity: 0.6 }} />,\n children: colChildren,\n containerChildrenRef: parentForCol,\n });\n });\n return {\n id,\n label: 'Columns',\n preview: `${columns.length} columns`,\n icon: iconForType('ColumnsContainer'),\n children,\n ...baseMeta,\n };\n }\n case 'Text':\n case 'Heading':\n case 'Button':\n return { id, label: type, preview: previewText(props.text), icon: iconForType(type), ...baseMeta };\n case 'Html':\n return { id, label: 'Html', preview: previewText(props.contents), icon: iconForType('Html'), ...baseMeta };\n case 'Image':\n return {\n id,\n label: 'Image',\n preview: previewText(props.alt) ?? previewText(props.url),\n icon: iconForType('Image'),\n ...baseMeta,\n };\n case 'Avatar':\n return { id, label: 'Avatar', preview: previewText(props.imageUrl), icon: iconForType('Avatar'), ...baseMeta };\n case 'Divider':\n return { id, label: 'Divider', icon: iconForType('Divider'), ...baseMeta };\n case 'Spacer':\n return {\n id,\n label: 'Spacer',\n preview: props.height ? `${props.height}px` : undefined,\n icon: iconForType('Spacer'),\n ...baseMeta,\n };\n case 'Signature':\n return { id, label: 'Signature', preview: previewText(props.name), icon: iconForType('Signature'), ...baseMeta };\n default:\n return { id, label: type, icon: iconForType(type), ...baseMeta };\n }\n}\n\n// Drag payload: a JSON string stashed on the DataTransfer so we can tell\n// an in-editor block drag from arbitrary external drops.\nconst DRAG_MIME = 'application/x-email-editor-block';\n\ntype DragPayload = {\n sourceId: string;\n sourceParent: ParentRef;\n};\n\ntype DropPos = 'before' | 'after' | 'inside' | null;\n\nexport default function OutlinePanel() {\n const document = useDocument();\n const selectedBlockId = useSelectedBlockId();\n const [dragging, setDragging] = useState<DragPayload | null>(null);\n const tree = buildNode(ROOT_BLOCK_ID, document);\n\n const performMove = (\n payload: DragPayload,\n targetParent: ParentRef,\n targetIndex: number\n ) => {\n const patch = buildMovePatch(\n document,\n payload.sourceId,\n payload.sourceParent,\n targetParent,\n targetIndex\n );\n if (patch) {\n setDocument(patch as any);\n setSelectedBlockId(payload.sourceId);\n }\n };\n\n return (\n <Box>\n <Typography variant=\"subtitle2\" component=\"h2\" sx={{ fontWeight: 'bold', mb: 0.5, px: 0.5 }}>\n {t('outline.title', 'Outline')}\n </Typography>\n <Typography variant=\"caption\" sx={{ display: 'block', color: 'text.secondary', px: 0.5, mb: 1 }}>\n {t('outline.hint', 'Click a row to select. Drag a row to reorder or move it into a container.')}\n </Typography>\n {tree ? (\n <OutlineRow\n node={tree}\n depth={0}\n selectedBlockId={selectedBlockId}\n document={document}\n dragging={dragging}\n setDragging={setDragging}\n performMove={performMove}\n />\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', px: 0.5 }}>\n Nothing to outline.\n </Typography>\n )}\n </Box>\n );\n}\n\ntype OutlineRowProps = {\n node: OutlineNode;\n depth: number;\n selectedBlockId: string | null;\n document: TEditorConfiguration;\n dragging: DragPayload | null;\n setDragging: (p: DragPayload | null) => void;\n performMove: (payload: DragPayload, targetParent: ParentRef, targetIndex: number) => void;\n};\n\nfunction OutlineRow({\n node,\n depth,\n selectedBlockId,\n document,\n dragging,\n setDragging,\n performMove,\n}: OutlineRowProps) {\n const [expanded, setExpanded] = useState(true);\n const [dropPos, setDropPos] = useState<DropPos>(null);\n const hasChildren = Boolean(node.children && node.children.length > 0);\n const isSelectable = !node.id.includes('::');\n const isSelected = isSelectable && selectedBlockId === node.id;\n\n const canMove =\n isSelectable &&\n node.parent !== undefined &&\n node.indexInParent !== undefined &&\n node.siblingsCount !== undefined;\n const canMoveUp = canMove && (node.indexInParent as number) > 0;\n const canMoveDown = canMove && (node.indexInParent as number) < (node.siblingsCount as number) - 1;\n\n const isDragSource = dragging?.sourceId === node.id;\n\n // Block is draggable if it has a parent (so is a real block, not Canvas).\n const draggable = canMove;\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {\n if (!draggable || !node.parent) return;\n const payload: DragPayload = { sourceId: node.id, sourceParent: node.parent };\n e.dataTransfer.setData(DRAG_MIME, JSON.stringify(payload));\n e.dataTransfer.setData('text/plain', node.label);\n e.dataTransfer.effectAllowed = 'move';\n setDragging(payload);\n };\n\n const handleDragEnd = () => setDragging(null);\n\n // Compute which region of the row the cursor is in: top band, bottom band,\n // or center (valid drop-inside when this row is itself a container).\n const computeDropPos = (e: React.DragEvent<HTMLDivElement>): DropPos => {\n if (!dragging) return null;\n const rect = e.currentTarget.getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height || 28;\n const canDropInside = Boolean(node.containerChildrenRef);\n // Top 25% → before, bottom 25% → after, middle → inside (if container).\n if (canDropInside && y > h * 0.25 && y < h * 0.75) return 'inside';\n if (y < h * 0.5) return 'before';\n return 'after';\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n if (!dragging) return;\n // Skip if dropping onto self or into own descendant.\n if (dragging.sourceId === node.id) {\n setDropPos(null);\n return;\n }\n if (node.containerChildrenRef && isDescendant(document, dragging.sourceId, node.id)) {\n setDropPos(null);\n return;\n }\n const pos = computeDropPos(e);\n if (!pos) {\n setDropPos(null);\n return;\n }\n // Reorder requires the target row to have a parent (not the synthetic Canvas root).\n if ((pos === 'before' || pos === 'after') && !node.parent) {\n setDropPos(null);\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setDropPos(pos);\n };\n\n const handleDragLeave = () => setDropPos(null);\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n if (!dragging || !dropPos) return;\n e.preventDefault();\n let targetParent: ParentRef | undefined;\n let targetIndex = 0;\n if (dropPos === 'inside' && node.containerChildrenRef) {\n targetParent = node.containerChildrenRef;\n // Append to the end of the container's children. Using Infinity lets\n // buildMovePatch clamp to length regardless of current child count.\n targetIndex = Number.MAX_SAFE_INTEGER;\n } else if ((dropPos === 'before' || dropPos === 'after') && node.parent) {\n targetParent = node.parent;\n targetIndex = (node.indexInParent as number) + (dropPos === 'after' ? 1 : 0);\n }\n if (targetParent) performMove(dragging, targetParent, targetIndex);\n setDropPos(null);\n setDragging(null);\n };\n\n const handleMove = (delta: -1 | 1) => {\n if (!canMove || !node.parent) return;\n const nextIndex = (node.indexInParent as number) + delta;\n const patch = buildMovePatch(document, node.id, node.parent, node.parent, nextIndex + (delta > 0 ? 1 : 0));\n if (patch) setDocument(patch as any);\n };\n\n return (\n <>\n <Box sx={{ position: 'relative' }}>\n {dropPos === 'before' && <DropLine depth={depth} />}\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={0.5}\n draggable={draggable}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => isSelectable && setSelectedBlockId(node.id)}\n onMouseEnter={() => isSelectable && !dragging && setHoveredBlockId(node.id)}\n onMouseLeave={() => isSelectable && setHoveredBlockId(null)}\n sx={{\n pl: `${depth * 12 + 4}px`,\n pr: 0.5,\n py: 0.25,\n minHeight: 28,\n borderRadius: 0.75,\n cursor: isSelectable ? (draggable ? 'grab' : 'pointer') : 'default',\n backgroundColor: isSelected\n ? 'action.selected'\n : dropPos === 'inside'\n ? 'rgba(25, 118, 210, 0.12)'\n : 'transparent',\n opacity: isDragSource ? 0.5 : 1,\n outline:\n dropPos === 'inside'\n ? '1.5px solid rgba(25, 118, 210, 0.7)'\n : undefined,\n transition: 'background-color 80ms, outline-color 80ms',\n '&:hover': {\n backgroundColor: isSelected ? 'action.selected' : 'action.hover',\n },\n '&:hover .outline-move-btns': { opacity: 1 },\n userSelect: 'none',\n }}\n >\n {hasChildren ? (\n <Box\n role=\"button\"\n aria-label={expanded ? 'Collapse' : 'Expand'}\n onClick={(e) => {\n e.stopPropagation();\n setExpanded((v) => !v);\n }}\n sx={{ display: 'flex', alignItems: 'center', cursor: 'pointer' }}\n >\n {expanded ? <ExpandMore fontSize=\"small\" /> : <ChevronRight fontSize=\"small\" />}\n </Box>\n ) : (\n <Box sx={{ width: 20 }} />\n )}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n color: isSelected ? 'primary.main' : 'text.secondary',\n flexShrink: 0,\n }}\n >\n {node.icon}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 600,\n color: isSelected ? 'primary.main' : 'text.primary',\n flexShrink: 0,\n }}\n >\n {node.label}\n </Typography>\n {node.preview && (\n <Typography\n variant=\"body2\"\n sx={{\n color: 'text.secondary',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n }}\n >\n — {node.preview}\n </Typography>\n )}\n {canMove && (\n <Box\n className=\"outline-move-btns\"\n sx={{\n display: 'flex',\n ml: 'auto',\n opacity: isSelected ? 1 : 0,\n transition: 'opacity 120ms',\n }}\n >\n <Tooltip title=\"Move up\">\n <span>\n <IconButton\n size=\"small\"\n disabled={!canMoveUp}\n onClick={(e) => {\n e.stopPropagation();\n handleMove(-1);\n }}\n aria-label={`Move ${node.label} up`}\n sx={{ p: 0.25 }}\n >\n <KeyboardArrowUp fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"Move down\">\n <span>\n <IconButton\n size=\"small\"\n disabled={!canMoveDown}\n onClick={(e) => {\n e.stopPropagation();\n handleMove(1);\n }}\n aria-label={`Move ${node.label} down`}\n sx={{ p: 0.25 }}\n >\n <KeyboardArrowDown fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </Stack>\n {dropPos === 'after' && <DropLine depth={depth} />}\n </Box>\n {hasChildren && expanded && (\n <Box>\n {node.children!.map((child) => (\n <OutlineRow\n key={child.id}\n node={child}\n depth={depth + 1}\n selectedBlockId={selectedBlockId}\n document={document}\n dragging={dragging}\n setDragging={setDragging}\n performMove={performMove}\n />\n ))}\n </Box>\n )}\n </>\n );\n}\n\nfunction DropLine({ depth }: { depth: number }) {\n return (\n <Box\n sx={{\n position: 'relative',\n height: 0,\n }}\n >\n <Box\n sx={{\n position: 'absolute',\n left: `${depth * 12 + 24}px`,\n right: 4,\n top: -1,\n height: 2,\n backgroundColor: 'primary.main',\n borderRadius: 1,\n pointerEvents: 'none',\n }}\n />\n </Box>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n List,\n ListItemButton,\n ListItemText,\n TextField,\n Typography,\n} from '@mui/material';\nimport { DescriptionOutlined, InsertDriveFileOutlined } from '@mui/icons-material';\nimport { t } from '@i18n';\nimport { TemplateListItem } from '../index';\n\ntype NewTemplatePickerDialogProps = {\n open: boolean;\n kind: 'template' | 'sample';\n samples: TemplateListItem[];\n existingSlugs: string[];\n defaultName?: string;\n onClose: () => void;\n /** Returns `true` on success so the dialog closes, `false` to keep it open (e.g. for server-side validation errors). */\n onCreate: (name: string, starterId: string | null) => Promise<boolean>;\n};\n\nexport default function NewTemplatePickerDialog({\n open,\n kind,\n samples,\n existingSlugs,\n defaultName,\n onClose,\n onCreate,\n}: NewTemplatePickerDialogProps) {\n const [name, setName] = useState('');\n const [selectedStarter, setSelectedStarter] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (open) {\n setName(defaultName ?? t(kind === 'sample' ? 'drawer.new-sample' : 'drawer.new-template', kind === 'sample' ? 'New sample' : 'New template'));\n setSelectedStarter(null);\n setError(null);\n setBusy(false);\n }\n }, [open, defaultName, kind]);\n\n const validate = (): string | null => {\n const trimmed = name.trim();\n if (!trimmed) return t('picker.error-name-required', 'Name is required');\n if (existingSlugs.some((s) => s.toLowerCase() === trimmed.toLowerCase())) {\n return kind === 'sample'\n ? t('picker.error-sample-taken', 'A sample with this name already exists')\n : t('picker.error-template-taken', 'A template with this name already exists');\n }\n return null;\n };\n\n const handleCreate = async () => {\n const err = validate();\n if (err) {\n setError(err);\n return;\n }\n setBusy(true);\n try {\n const ok = await onCreate(name.trim(), selectedStarter);\n if (ok) onClose();\n } finally {\n setBusy(false);\n }\n };\n\n const pickable = samples.filter((s) => s.id !== 'empty-email');\n\n return (\n <Dialog open={open} onClose={busy ? undefined : onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>\n {kind === 'sample'\n ? t('picker.title-sample', 'New sample')\n : t('picker.title-template', 'New template')}\n </DialogTitle>\n <DialogContent dividers>\n <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\n {t('picker.start-from', 'Start from')}\n </Typography>\n <List\n dense\n sx={{\n mb: 2,\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n py: 0,\n maxHeight: 260,\n overflowY: 'auto',\n }}\n >\n <ListItemButton\n selected={selectedStarter === null}\n onClick={() => setSelectedStarter(null)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5, flex: 1 }}>\n <InsertDriveFileOutlined fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <ListItemText primary={t('picker.blank-title', 'Blank')} secondary={t('picker.blank-desc', 'Start from an empty email')} />\n </Box>\n </ListItemButton>\n {pickable.map((s) => (\n <ListItemButton\n key={s.id}\n selected={selectedStarter === s.id}\n onClick={() => setSelectedStarter(s.id)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5, flex: 1 }}>\n <DescriptionOutlined fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <ListItemText primary={s.slug} secondary={s.description} />\n </Box>\n </ListItemButton>\n ))}\n </List>\n <TextField\n autoFocus\n fullWidth\n size=\"small\"\n label={t('rename.name-label', 'Name')}\n value={name}\n onFocus={(e) => e.currentTarget.select()}\n onChange={(e) => {\n setName(e.target.value);\n if (error) setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !busy) void handleCreate();\n }}\n error={Boolean(error)}\n helperText={error ?? ' '}\n disabled={busy}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={busy}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleCreate} disabled={busy}>\n {busy\n ? t('picker.creating', 'Creating…')\n : kind === 'sample'\n ? t('picker.create-sample', 'Create sample')\n : t('picker.create-template', 'Create template')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n InputAdornment,\n Stack,\n TextField,\n Typography,\n} from '@mui/material';\nimport { AddOutlined } from '@mui/icons-material';\n\nimport { t } from '@i18n';\n\nexport interface RenameDialogProps {\n open: boolean;\n currentSlug: string;\n currentTags?: string[];\n existingSlugs: string[];\n onClose: () => void;\n onSubmit: (newSlug: string, opts?: { tags?: string[] }) => void | Promise<void>;\n}\n\nexport default function RenameDialog({\n open,\n currentSlug,\n currentTags = [],\n existingSlugs,\n onClose,\n onSubmit,\n}: RenameDialogProps) {\n const [slug, setSlug] = useState(currentSlug);\n const [tags, setTags] = useState<string[]>(currentTags);\n const [tagInput, setTagInput] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n if (open) {\n setSlug(currentSlug);\n setTags(currentTags);\n setTagInput('');\n setError(null);\n setSubmitting(false);\n }\n }, [open, currentSlug, currentTags]);\n\n const addTag = () => {\n const trimmed = tagInput.trim();\n if (!trimmed) return;\n if (tags.some((t) => t.toLowerCase() === trimmed.toLowerCase())) {\n setTagInput('');\n return;\n }\n setTags([...tags, trimmed]);\n setTagInput('');\n };\n\n const removeTag = (tag: string) => setTags(tags.filter((t) => t !== tag));\n\n const tagsUnchanged =\n tags.length === currentTags.length &&\n tags.every((t, i) => t === currentTags[i]);\n\n const handleSubmit = async () => {\n const trimmedSlug = slug.trim();\n if (!trimmedSlug) {\n setError(t('rename.error-empty', 'Please enter a name'));\n return;\n }\n const slugChanged = trimmedSlug !== currentSlug;\n if (slugChanged && existingSlugs.some((s) => s.toLowerCase() === trimmedSlug.toLowerCase())) {\n setError(t('rename.error-taken', 'A template with this name already exists'));\n return;\n }\n if (!slugChanged && tagsUnchanged) {\n onClose();\n return;\n }\n setSubmitting(true);\n try {\n await onSubmit(trimmedSlug, { tags });\n onClose();\n } catch (e) {\n console.error('Error updating template details:', e);\n setError(t('rename.error-generic', 'Failed to update template details'));\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={submitting ? undefined : onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{t('rename.title', 'Edit details')}</DialogTitle>\n <DialogContent>\n <TextField\n autoFocus\n margin=\"dense\"\n label={t('rename.name-label', 'Name')}\n fullWidth\n variant=\"outlined\"\n value={slug}\n onChange={(e) => {\n setSlug(e.target.value);\n setError(null);\n }}\n error={!!error}\n helperText={error ?? ' '}\n disabled={submitting}\n onKeyPress={(e) => {\n if (e.key === 'Enter' && !submitting) handleSubmit();\n }}\n />\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mt: 1, mb: 0.5 }}>\n {t('rename.tags', 'Tags')}\n </Typography>\n {tags.length > 0 ? (\n <Stack direction=\"row\" spacing={0.5} sx={{ flexWrap: 'wrap', gap: 0.5, mb: 1 }}>\n {tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n onDelete={submitting ? undefined : () => removeTag(tag)}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"caption\" sx={{ color: 'text.disabled', display: 'block', mb: 1 }}>\n {t('rename.no-tags', 'No tags yet.')}\n </Typography>\n )}\n <TextField\n size=\"small\"\n fullWidth\n placeholder={t('rename.tag-placeholder', 'Add a tag and press Enter')}\n value={tagInput}\n onChange={(e) => setTagInput(e.target.value)}\n disabled={submitting}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag();\n } else if (e.key === 'Backspace' && !tagInput && tags.length > 0) {\n e.preventDefault();\n removeTag(tags[tags.length - 1]);\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <Button\n size=\"small\"\n onClick={addTag}\n disabled={!tagInput.trim() || submitting}\n startIcon={<AddOutlined fontSize=\"small\" />}\n sx={{ textTransform: 'none' }}\n >\n {t('common.add', 'Add')}\n </Button>\n </InputAdornment>\n ),\n }}\n />\n <Box sx={{ minHeight: 8 }} />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={submitting}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={handleSubmit}\n variant=\"contained\"\n disabled={!slug.trim() || submitting}\n >\n {submitting ? t('common.saving', 'Saving…') : t('common.save', 'Save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box\n} from '@mui/material';\nimport { t } from '@i18n';\n\ninterface SaveTemplateDialogProps {\n open: boolean;\n onClose: () => void;\n onSave: (templateName: string) => Promise<boolean> | boolean | void;\n onNameChange?: () => void;\n defaultName?: string;\n error?: string | null;\n /**\n * Dialog flavour — controls the title + submit label. \"save-as\" (default)\n * shows \"Save as a new template\"; \"new\" shows \"Create a new template\".\n */\n mode?: 'save-as' | 'new';\n}\n\nexport default function SaveTemplateDialog({\n open,\n onClose,\n onSave,\n onNameChange,\n defaultName = '',\n error: externalError = null,\n mode = 'save-as',\n}: SaveTemplateDialogProps) {\n const [templateName, setTemplateName] = useState(defaultName);\n const [internalError, setInternalError] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n \n // Reset name when dialog opens with the default name\n useEffect(() => {\n if (open) {\n setTemplateName(defaultName);\n setInternalError('');\n setIsSubmitting(false);\n }\n }, [open, defaultName]);\n\n // Determine which error to display - external has priority\n const displayError = externalError || internalError;\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setTemplateName(e.target.value);\n \n if (e.target.value.trim()) {\n setInternalError('');\n }\n \n // Notify parent component that name has changed\n if (onNameChange) {\n onNameChange();\n }\n };\n\n const handleSave = async () => {\n if (!templateName.trim()) {\n setInternalError(t('save-dialog.error-empty-name', 'Please enter a template name'));\n return;\n }\n \n setIsSubmitting(true);\n \n try {\n // Call onSave and wait for result if it's a Promise\n const result = onSave(templateName);\n \n // Handle promise or boolean result\n if (result instanceof Promise) {\n const success = await result;\n if (success) {\n setTemplateName('');\n setInternalError('');\n onClose();\n }\n } else if (result !== false) {\n // If not explicitly false, assume success\n setTemplateName('');\n setInternalError('');\n onClose();\n }\n } catch (error) {\n console.error('Error saving template:', error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n setTemplateName('');\n setInternalError('');\n onClose();\n };\n\n return (\n <Dialog \n open={open} \n onClose={handleCancel}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {mode === 'new'\n ? t('save-dialog.title-new', 'Create a new template')\n : t('save-dialog.title', 'Save as a new template')}\n </DialogTitle>\n <DialogContent>\n <Box sx={{ pt: 1 }}>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"template-name\"\n label={t('save-dialog.name-label', 'Template Name')}\n type=\"text\"\n fullWidth\n variant=\"outlined\"\n value={templateName}\n onChange={handleNameChange}\n onFocus={(e) => e.currentTarget.select()}\n error={!!displayError}\n helperText={displayError}\n onKeyPress={(e) => {\n if (e.key === 'Enter' && templateName.trim() && !displayError && !isSubmitting) {\n handleSave();\n }\n }}\n disabled={isSubmitting}\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} disabled={isSubmitting}>{t('common.cancel', 'Cancel')}</Button>\n <Button\n onClick={handleSave}\n variant=\"contained\"\n color=\"primary\"\n disabled={!templateName.trim() || !!displayError || isSubmitting}\n >\n {isSubmitting\n ? t('save-dialog.saving', 'Saving...')\n : mode === 'new'\n ? t('save-dialog.create', 'Create')\n : t('save-dialog.save', 'Save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n} ","import { TEditorConfiguration } from '@editor/core';\n\nconst EMPTY_EMAIL_MESSAGE: TEditorConfiguration = {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: [],\n },\n },\n};\n\nexport default EMPTY_EMAIL_MESSAGE;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n Box,\n Chip,\n CircularProgress,\n Drawer,\n IconButton,\n InputAdornment,\n MenuItem,\n Stack,\n Tab,\n Tabs,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n SearchOutlined,\n} from '@mui/icons-material';\nimport { useSamplesDrawerOpen, resetDocument } from '@editor/editor-context';\nimport { TemplateKind, TemplateListItem } from '../index';\nimport { TEditorConfiguration } from '@editor/core';\nimport { Trans, t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { useSnackbar } from '../email-canvas/snackbar-provider';\nimport { buildSavePayload, SavePayload } from '../save-payload';\nimport TemplateRow from './template-row';\nimport OutlinePanel from './outline-panel';\nimport NewTemplatePickerDialog from './new-template-picker-dialog';\nimport RenameDialog from './rename-dialog';\nimport SaveTemplateDialog from '../email-canvas/save-template-dialog';\nimport EMPTY_EMAIL_MESSAGE from '@sample/empty-email-message';\n\nexport const SAMPLES_DRAWER_WIDTH = 320;\n\n// Empty template definition that will always be available. The visible slug\n// and description come from the catalog (see `empty.*` keys) so the drawer\n// shows localized copy.\nconst buildEmptyTemplate = (): TemplateListItem => ({\n id: 'empty-email',\n slug: t('empty.slug', 'Empty email'),\n kind: 'sample',\n description: t('empty.description', 'A blank email template to start from scratch'),\n});\n\ntype SortKey = 'updatedAt' | 'createdAt' | 'slug';\n\nconst SORT_OPTIONS: Array<{ value: SortKey; labelKey: string; fallback: string }> = [\n { value: 'updatedAt', labelKey: 'sort.last-updated', fallback: 'Last updated' },\n { value: 'createdAt', labelKey: 'sort.recently-created', fallback: 'Recently created' },\n { value: 'slug', labelKey: 'sort.name', fallback: 'Name (A–Z)' },\n];\n\nfunction compareTemplates(a: TemplateListItem, b: TemplateListItem, key: SortKey): number {\n if (key === 'slug') {\n return a.slug.localeCompare(b.slug);\n }\n const av = a[key];\n const bv = b[key];\n if (!av && !bv) return 0;\n if (!av) return 1;\n if (!bv) return -1;\n return new Date(bv).getTime() - new Date(av).getTime();\n}\n\nexport interface SamplesDrawerProps {\n enterDuration?: number;\n exitDuration?: number;\n enabled?: boolean;\n loadSamples?: () => Promise<TemplateListItem[]>;\n loadTemplates?: () => Promise<TemplateListItem[]>;\n loadTemplate?: (templateId: string) => Promise<TEditorConfiguration | null>;\n currentTemplateId?: string | null;\n deleteTemplate?: (templateId: string) => void;\n copyTemplate?: (templateName: string, content: any) => void;\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n setTemplateKind?: (templateId: string, kind: TemplateKind) => void | Promise<void>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n}\n\nexport default function SamplesDrawer({\n enterDuration = 225,\n exitDuration = 225,\n enabled = true,\n loadSamples,\n loadTemplates,\n loadTemplate,\n currentTemplateId,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n}: SamplesDrawerProps) {\n const samplesDrawerOpen = useSamplesDrawerOpen();\n const { setCurrentTemplate, loadTemplate: ctxLoadTemplate } = useEmailEditor();\n const { showMessage } = useSnackbar();\n\n const [samples, setSamples] = useState<TemplateListItem[]>([buildEmptyTemplate()]);\n const [templates, setTemplates] = useState<TemplateListItem[]>([]);\n const [loadingSamples, setLoadingSamples] = useState(false);\n const [loadingTemplates, setLoadingTemplates] = useState(false);\n const [templatesError, setTemplatesError] = useState<string | null>(null);\n\n const [activeLeftTab, setActiveLeftTab] = useState<'templates' | 'samples' | 'outline'>('templates');\n const [search, setSearch] = useState('');\n const [sortKey, setSortKey] = useState<SortKey>('updatedAt');\n const [activeTags, setActiveTags] = useState<string[]>([]);\n\n const [renameTarget, setRenameTarget] = useState<TemplateListItem | null>(null);\n const [pendingSaveAs, setPendingSaveAs] = useState<{ content: TEditorConfiguration; defaultName: string } | null>(null);\n const [newError, setNewError] = useState<string | null>(null);\n const [pickerKind, setPickerKind] = useState<'template' | 'sample' | null>(null);\n\n // Handler for the empty template + delegation\n const handleLoadTemplate = async (templateId: string) => {\n if (templateId === 'empty-email') {\n return EMPTY_EMAIL_MESSAGE;\n }\n if (loadTemplate) {\n return loadTemplate(templateId);\n }\n return null;\n };\n\n // Defensive kind coercion so older consumers that don't send `kind` still partition correctly.\n const withKind = (items: TemplateListItem[], fallback: TemplateKind): TemplateListItem[] =>\n items.map((item) => (item.kind ? item : { ...item, kind: fallback }));\n\n // Load samples\n useEffect(() => {\n if (!enabled || !samplesDrawerOpen || !loadSamples) return;\n setLoadingSamples(true);\n loadSamples()\n .then((results) => {\n const normalized = withKind(results, 'sample');\n const existingEmpty = normalized.find((s) => s.id === 'empty-email');\n setSamples(existingEmpty ? normalized : [buildEmptyTemplate(), ...normalized]);\n })\n .catch((error) => {\n console.error('Failed to load samples:', error);\n setSamples([buildEmptyTemplate()]);\n })\n .finally(() => setLoadingSamples(false));\n }, [enabled, samplesDrawerOpen, loadSamples]);\n\n // Load existing templates\n const refreshTemplates = async () => {\n if (!loadTemplates) return;\n setLoadingTemplates(true);\n setTemplatesError(null);\n try {\n const results = await loadTemplates();\n setTemplates(withKind(results, 'template'));\n } catch (error) {\n console.error('Failed to load templates:', error);\n setTemplatesError('Could not load templates');\n } finally {\n setLoadingTemplates(false);\n }\n };\n\n // Optimistic insert: if the host's loadTemplates hasn't yet reflected a\n // just-saved row (common with cached SWR/React-Query or read-replica lag),\n // patch it into local state so the user sees it immediately.\n const ensureRowPresent = (id: string, slug: string, kind: TemplateKind, tags?: string[]) => {\n const now = new Date().toISOString();\n const row: TemplateListItem = { id, slug, kind, tags, createdAt: now, updatedAt: now };\n if (kind === 'sample') {\n setSamples((prev) => (prev.some((t) => t.id === id) ? prev : [...prev, row]));\n } else {\n setTemplates((prev) => (prev.some((t) => t.id === id) ? prev : [...prev, row]));\n }\n };\n\n useEffect(() => {\n if (!enabled || !loadTemplates) return;\n refreshTemplates();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, loadTemplates]);\n\n // Listen for template list updates (fallback path for hosts that dispatch the event)\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent<TemplateListItem[]>).detail;\n if (Array.isArray(detail)) setTemplates(withKind(detail, 'template'));\n };\n window.addEventListener('templateListUpdated', handler);\n return () => window.removeEventListener('templateListUpdated', handler);\n }, []);\n\n // Partition by kind — an item's section is determined by `kind`, not by which callback returned it.\n // If an id appears in both lists, the most recent state wins (templates list wins ties).\n const { templateRows, sampleRows } = useMemo(() => {\n const byId = new Map<string, TemplateListItem>();\n for (const s of samples) byId.set(s.id, s);\n for (const t of templates) byId.set(t.id, t);\n const all = Array.from(byId.values());\n return {\n templateRows: all.filter((t) => t.kind === 'template'),\n sampleRows: all.filter((t) => t.kind === 'sample'),\n };\n }, [samples, templates]);\n\n const allTags = useMemo(() => {\n const set = new Set<string>();\n for (const t of templateRows) t.tags?.forEach((tag) => set.add(tag));\n for (const s of sampleRows) s.tags?.forEach((tag) => set.add(tag));\n return Array.from(set).sort();\n }, [templateRows, sampleRows]);\n\n const matchesSearchAndTags = useMemo(() => {\n const term = search.trim().toLowerCase();\n return (t: TemplateListItem) => {\n if (term) {\n const haystack = [t.slug, t.description, t.subject]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n if (!haystack.includes(term)) return false;\n }\n if (activeTags.length > 0) {\n if (!t.tags || t.tags.length === 0) return false;\n if (!activeTags.every((tag) => t.tags!.includes(tag))) return false;\n }\n return true;\n };\n }, [search, activeTags]);\n\n const filteredTemplates = useMemo(\n () => templateRows.filter(matchesSearchAndTags).slice().sort((a, b) => compareTemplates(a, b, sortKey)),\n [templateRows, matchesSearchAndTags, sortKey]\n );\n\n const filteredSamples = useMemo(\n () => sampleRows.filter(matchesSearchAndTags).slice().sort((a, b) => compareTemplates(a, b, sortKey)),\n [sampleRows, matchesSearchAndTags, sortKey]\n );\n\n const toggleTag = (tag: string) => {\n setActiveTags((prev) => (prev.includes(tag) ? prev.filter((t) => t !== tag) : [...prev, tag]));\n };\n\n const handleDuplicate = (template: TemplateListItem) => {\n if (!copyTemplate) return;\n const content = null; // must fetch full content before duplicating\n (async () => {\n try {\n const full = await handleLoadTemplate(template.id);\n if (!full) {\n showMessage('Could not load template to duplicate');\n return;\n }\n copyTemplate(`${template.slug} (Copy)`, full);\n showMessage('Template duplicated');\n } catch (e) {\n console.error('Error duplicating template:', e);\n showMessage('Error duplicating template');\n }\n })();\n void content;\n };\n\n const handleDelete = (template: TemplateListItem) => {\n if (!deleteTemplate) return;\n if (!window.confirm(`Delete \"${template.slug}\"? This cannot be undone.`)) return;\n deleteTemplate(template.id);\n showMessage('Template deleted');\n };\n\n const handleRenameSubmit = async (newSlug: string, opts?: { tags?: string[] }) => {\n if (!renameTarget || !renameTemplate) return;\n await renameTemplate(renameTarget.id, newSlug, opts);\n const newTags = opts?.tags ?? renameTarget.tags ?? [];\n // Optimistic: update local lists (both templates + samples) so the UI\n // reflects the edit without waiting on the host's event.\n const patch = (t: TemplateListItem) =>\n t.id === renameTarget.id ? { ...t, slug: newSlug, tags: newTags } : t;\n setTemplates((prev) => prev.map(patch));\n setSamples((prev) => prev.map(patch));\n if (currentTemplateId === renameTarget.id) {\n setCurrentTemplate(renameTarget.id, newSlug, undefined, newTags);\n }\n showMessage('Details saved');\n };\n\n const flipKindLocally = (id: string, kind: TemplateKind) => {\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, kind } : t)));\n setSamples((prev) => prev.map((t) => (t.id === id ? { ...t, kind } : t)));\n };\n\n const handleSetKind = (template: TemplateListItem, kind: TemplateKind) => {\n if (!setTemplateKind) return;\n (async () => {\n try {\n await setTemplateKind(template.id, kind);\n flipKindLocally(template.id, kind);\n if (currentTemplateId === template.id) {\n setCurrentTemplate(template.id, template.slug, kind);\n }\n showMessage(kind === 'sample' ? 'Promoted to sample' : 'Demoted to template');\n } catch (e) {\n console.error('Error updating template kind:', e);\n showMessage('Error updating template kind');\n }\n })();\n };\n\n const handleDuplicateAsTemplate = (sample: TemplateListItem) => {\n if (!saveAs) return;\n (async () => {\n try {\n const content = await handleLoadTemplate(sample.id);\n if (!content) {\n showMessage('Could not load sample');\n return;\n }\n resetDocument(content);\n setPendingSaveAs({ content, defaultName: `${sample.slug} (Copy)` });\n } catch (e) {\n console.error('Error duplicating sample:', e);\n showMessage('Error duplicating sample');\n }\n })();\n };\n\n const handleSaveAsSubmit = async (templateName: string): Promise<boolean> => {\n if (!saveAs || !pendingSaveAs) return false;\n const taken = templateRows.some((t) => t.slug.toLowerCase() === templateName.toLowerCase());\n if (taken) {\n setNewError('A template with this name already exists');\n return false;\n }\n try {\n const content = pendingSaveAs.content;\n const { id, slug } = await saveAs(templateName, buildSavePayload(content));\n resetDocument(content);\n setCurrentTemplate(id, slug, 'template');\n ctxLoadTemplate(content, id, slug, 'template');\n showMessage('New template created!');\n window.location.hash = `#template/${id}`;\n await refreshTemplates();\n ensureRowPresent(id, slug, 'template');\n return true;\n } catch (e) {\n console.error('Error creating template:', e);\n showMessage('Error creating template');\n return false;\n }\n };\n\n const openNewPicker = (kind: 'template' | 'sample') => {\n setPickerKind(kind);\n };\n\n const handleCreateFromPicker = async (\n name: string,\n starterId: string | null\n ): Promise<boolean> => {\n if (!saveAs) return false;\n const kind = pickerKind ?? 'template';\n try {\n let content: TEditorConfiguration | null = EMPTY_EMAIL_MESSAGE;\n if (starterId !== null) {\n content = await handleLoadTemplate(starterId);\n if (!content) {\n showMessage('Could not load the selected sample');\n return false;\n }\n }\n const { id, slug } = await saveAs(name, buildSavePayload(content));\n if (kind === 'sample' && setTemplateKind) {\n try {\n await setTemplateKind(id, 'sample');\n flipKindLocally(id, 'sample');\n } catch (e) {\n console.error('Failed to mark new row as sample:', e);\n }\n }\n resetDocument(content);\n setCurrentTemplate(id, slug, kind);\n ctxLoadTemplate(content, id, slug, kind);\n showMessage(kind === 'sample' ? 'New sample created' : 'New template created');\n window.location.hash = `#template/${id}`;\n await refreshTemplates();\n ensureRowPresent(id, slug, kind);\n return true;\n } catch (e) {\n console.error('Error creating:', e);\n showMessage('Error creating');\n return false;\n }\n };\n\n if (!enabled) {\n return null;\n }\n\n const existingSlugs = templates.map((t) => t.slug);\n\n return (\n <>\n <Drawer\n variant=\"persistent\"\n anchor=\"left\"\n open={samplesDrawerOpen}\n PaperProps={{ style: { position: 'absolute' } }}\n ModalProps={{\n container: document.getElementById('drawer-container'),\n style: { position: 'absolute' },\n keepMounted: true,\n }}\n transitionDuration={{ enter: enterDuration, exit: exitDuration }}\n sx={{ width: samplesDrawerOpen ? SAMPLES_DRAWER_WIDTH : 0 }}\n >\n <Stack\n py={1}\n px={2}\n width={SAMPLES_DRAWER_WIDTH}\n height=\"100%\"\n spacing={1.5}\n sx={{ overflowY: 'auto' }}\n >\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" sx={{ pt: 1 }}>\n <Typography variant=\"h6\" component=\"h1\">\n <Trans id=\"drawer.library\">Library</Trans>\n </Typography>\n {saveAs && (activeLeftTab === 'templates' || activeLeftTab === 'samples') && (\n <Tooltip title={activeLeftTab === 'samples' ? t('drawer.new-sample', 'New sample') : t('drawer.new-template', 'New template')}>\n <IconButton\n size=\"small\"\n onClick={() => openNewPicker(activeLeftTab === 'samples' ? 'sample' : 'template')}\n aria-label={activeLeftTab === 'samples' ? t('drawer.new-sample', 'New sample') : t('drawer.new-template', 'New template')}\n >\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </Stack>\n\n <Tabs\n value={activeLeftTab}\n onChange={(_, v) => setActiveLeftTab(v)}\n variant=\"fullWidth\"\n sx={{ minHeight: 36, '& .MuiTab-root': { minHeight: 36, minWidth: 0, px: 1, fontSize: 13 } }}\n >\n <Tab value=\"templates\" label={t('drawer.tab.templates', 'Templates')} disabled={!loadTemplates} />\n <Tab value=\"samples\" label={t('drawer.tab.samples', 'Samples')} />\n <Tab value=\"outline\" label={t('drawer.tab.outline', 'Outline')} />\n </Tabs>\n\n {activeLeftTab === 'outline' ? (\n <OutlinePanel />\n ) : (\n <>\n <TextField\n size=\"small\"\n placeholder={activeLeftTab === 'templates' ? t('drawer.search-templates', 'Search templates') : t('drawer.search-samples', 'Search samples')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchOutlined fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n\n <TextField\n select\n size=\"small\"\n label={t('drawer.sort-by', 'Sort by')}\n value={sortKey}\n onChange={(e) => setSortKey(e.target.value as SortKey)}\n >\n {SORT_OPTIONS.map((opt) => (\n <MenuItem key={opt.value} value={opt.value}>\n {t(opt.labelKey, opt.fallback)}\n </MenuItem>\n ))}\n </TextField>\n\n {allTags.length > 0 && (\n <Stack direction=\"row\" sx={{ flexWrap: 'wrap', gap: 0.5 }}>\n <Chip\n label={t('drawer.tag.all', 'All')}\n size=\"small\"\n clickable\n color={activeTags.length === 0 ? 'primary' : 'default'}\n variant={activeTags.length === 0 ? 'filled' : 'outlined'}\n onClick={() => setActiveTags([])}\n />\n {allTags.map((tag) => (\n <Chip\n key={tag}\n label={t(`tag.${tag}`, tag)}\n size=\"small\"\n clickable\n color={activeTags.includes(tag) ? 'primary' : 'default'}\n variant={activeTags.includes(tag) ? 'filled' : 'outlined'}\n onClick={() => toggleTag(tag)}\n />\n ))}\n </Stack>\n )}\n\n {activeLeftTab === 'templates' ? (\n <Box>\n {loadingTemplates ? (\n <Stack alignItems=\"center\" width=\"100%\" py={2}>\n <CircularProgress size={24} />\n </Stack>\n ) : templatesError ? (\n <Alert severity=\"error\" sx={{ my: 1 }}>\n {templatesError}\n </Alert>\n ) : filteredTemplates.length > 0 ? (\n <Stack spacing={0.25} sx={{ width: '100%' }}>\n {filteredTemplates.map((template) => (\n <TemplateRow\n key={template.id}\n template={template}\n isCurrent={currentTemplateId === template.id}\n templateLoader={() => handleLoadTemplate(template.id)}\n onDuplicate={copyTemplate ? () => handleDuplicate(template) : undefined}\n onRename={renameTemplate ? () => setRenameTarget(template) : undefined}\n onDelete={deleteTemplate ? () => handleDelete(template) : undefined}\n onPromote={setTemplateKind ? () => handleSetKind(template, 'sample') : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', py: 1 }}>\n {templateRows.length === 0\n ? t('drawer.no-templates', 'No saved templates yet')\n : t('drawer.no-templates-match', 'No templates match your filters')}\n </Typography>\n )}\n </Box>\n ) : (\n <Box>\n {loadingSamples ? (\n <Stack alignItems=\"center\" width=\"100%\" py={2}>\n <CircularProgress size={24} />\n </Stack>\n ) : filteredSamples.length > 0 ? (\n <Stack spacing={0.25} sx={{ width: '100%' }}>\n {filteredSamples.map((sample) => (\n <TemplateRow\n key={sample.id}\n template={sample}\n isCurrent={currentTemplateId === sample.id}\n templateLoader={() => handleLoadTemplate(sample.id)}\n onDuplicateAsTemplate={saveAs ? () => handleDuplicateAsTemplate(sample) : undefined}\n onRename={renameTemplate ? () => setRenameTarget(sample) : undefined}\n onDelete={deleteTemplate ? () => handleDelete(sample) : undefined}\n onDemote={setTemplateKind ? () => handleSetKind(sample, 'template') : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', py: 1 }}>\n {sampleRows.length === 0 ? t('drawer.no-samples', 'No samples available') : t('drawer.no-samples-match', 'No samples match your filters')}\n </Typography>\n )}\n </Box>\n )}\n </>\n )}\n </Stack>\n </Drawer>\n\n {renameTarget && (\n <RenameDialog\n open={!!renameTarget}\n currentSlug={renameTarget.slug}\n currentTags={renameTarget.tags ?? []}\n existingSlugs={existingSlugs.filter((s) => s !== renameTarget.slug)}\n onClose={() => setRenameTarget(null)}\n onSubmit={handleRenameSubmit}\n />\n )}\n\n <SaveTemplateDialog\n open={!!pendingSaveAs}\n onClose={() => {\n setPendingSaveAs(null);\n setNewError(null);\n }}\n onSave={handleSaveAsSubmit}\n onNameChange={() => setNewError(null)}\n defaultName={pendingSaveAs?.defaultName ?? 'New Template'}\n error={newError}\n />\n\n <NewTemplatePickerDialog\n open={pickerKind !== null}\n kind={pickerKind ?? 'template'}\n samples={sampleRows}\n existingSlugs={\n pickerKind === 'sample'\n ? sampleRows.map((s) => s.slug)\n : templateRows.map((t) => t.slug)\n }\n onClose={() => setPickerKind(null)}\n onCreate={handleCreateFromPicker}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Box, Button, SxProps, Typography } from '@mui/material';\n\ntype BlockMenuButtonProps = {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n};\n\nconst BUTTON_SX: SxProps = { p: 1.5, display: 'flex', flexDirection: 'column' };\nconst ICON_SX: SxProps = {\n mb: 0.75,\n width: '100%',\n bgcolor: 'cadet.200',\n display: 'flex',\n justifyContent: 'center',\n p: 1,\n border: '1px solid',\n borderColor: 'cadet.300',\n};\n\nexport default function BlockTypeButton({ label, icon, onClick }: BlockMenuButtonProps) {\n return (\n <Button\n sx={BUTTON_SX}\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n >\n <Box sx={ICON_SX}>{icon}</Box>\n <Typography variant=\"body2\">{label}</Typography>\n </Button>\n );\n}\n","import React from 'react';\n\nimport {\n AccountCircleOutlined,\n BusinessOutlined,\n ContactMailOutlined,\n Crop32Outlined,\n HMobiledataOutlined,\n HorizontalRuleOutlined,\n HtmlOutlined,\n ImageOutlined,\n LibraryAddOutlined,\n NotesOutlined,\n SmartButtonOutlined,\n ViewColumnOutlined,\n} from '@mui/icons-material';\n\nimport { TEditorBlock } from '@editor/core';\n\ntype TButtonProps = {\n label: string;\n icon: JSX.Element;\n block: () => TEditorBlock;\n};\nexport const BUTTONS: TButtonProps[] = [\n {\n label: 'Heading',\n icon: <HMobiledataOutlined />,\n block: () => ({\n type: 'Heading',\n data: {\n props: { text: 'Hello friend' },\n style: {\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n },\n },\n }),\n },\n {\n label: 'Text',\n icon: <NotesOutlined />,\n block: () => ({\n type: 'Text',\n data: {\n props: { text: 'My new text block', markdown: true },\n style: {\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n fontWeight: 'normal',\n },\n },\n }),\n },\n\n {\n label: 'Button',\n icon: <SmartButtonOutlined />,\n block: () => ({\n type: 'Button',\n data: {\n props: {\n text: 'Button',\n url: 'https://example.com',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Image',\n icon: <ImageOutlined />,\n block: () => ({\n type: 'Image',\n data: {\n props: {\n url: 'https://placehold.co/600x400/EEE/999?text=Sample+Image',\n alt: 'Sample product',\n contentAlignment: 'middle',\n linkHref: null,\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Avatar',\n icon: <AccountCircleOutlined />,\n block: () => ({\n type: 'Avatar',\n data: {\n props: {\n imageUrl: 'https://ui-avatars.com/api/?size=128',\n shape: 'circle',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Personal Signature',\n icon: <ContactMailOutlined />,\n block: () => ({\n type: 'Signature',\n data: {\n props: {\n greeting: 'Best regards,',\n name: 'John Doe',\n title: 'Software Engineer',\n company: 'Acme Inc.',\n email: 'john@example.com',\n phone: '+1 234 567 890',\n imageUrl: 'https://ui-avatars.com/api/?name=John+Doe&size=128',\n imageSize: 64,\n imageShape: 'circle',\n layout: 'horizontal',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Company Signature',\n icon: <BusinessOutlined />,\n block: () => ({\n type: 'Signature',\n data: {\n props: {\n company: 'Acme Inc.',\n address: '123 Main Street, City, Country',\n email: 'support@example.com',\n website: 'www.example.com',\n imageUrl: 'https://placehold.co/128x128/EEE/999?text=Logo',\n imageSize: 48,\n imageShape: 'rounded',\n layout: 'horizontal',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Divider',\n icon: <HorizontalRuleOutlined />,\n block: () => ({\n type: 'Divider',\n data: {\n style: { padding: { top: 16, right: 0, bottom: 16, left: 0 } },\n props: {\n lineColor: '#CCCCCC',\n },\n },\n }),\n },\n {\n label: 'Spacer',\n icon: <Crop32Outlined />,\n block: () => ({\n type: 'Spacer',\n data: {},\n }),\n },\n {\n label: 'Html',\n icon: <HtmlOutlined />,\n block: () => ({\n type: 'Html',\n data: {\n props: { contents: '<strong>Hello world</strong>' },\n style: {\n fontSize: 16,\n textAlign: null,\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n },\n },\n }),\n },\n {\n label: 'Columns',\n icon: <ViewColumnOutlined />,\n block: () => ({\n type: 'ColumnsContainer',\n data: {\n props: {\n columnsGap: 16,\n columnsCount: 3,\n columns: [{ childrenIds: [] }, { childrenIds: [] }, { childrenIds: [] }],\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Container',\n icon: <LibraryAddOutlined />,\n block: () => ({\n type: 'Container',\n data: {\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n\n // { label: 'ProgressBar', icon: <ProgressBarOutlined />, block: () => ({}) },\n // { label: 'LoopContainer', icon: <ViewListOutlined />, block: () => ({}) },\n];\n","import React from 'react';\n\nimport { Box, Menu } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { t } from '@i18n';\n\nimport BlockButton from './block-button';\nimport { BUTTONS } from './buttons';\n\nconst LABEL_KEYS: Record<string, string> = {\n Heading: 'block-add.heading',\n Text: 'block-add.text',\n Button: 'block-add.button',\n Image: 'block-add.image',\n Avatar: 'block-add.avatar',\n 'Personal Signature': 'block-add.personal-signature',\n 'Company Signature': 'block-add.company-signature',\n Divider: 'block-add.divider',\n Spacer: 'block-add.spacer',\n Html: 'block-add.html',\n Columns: 'block-add.columns',\n Container: 'block-add.container',\n};\n\ntype BlocksMenuProps = {\n anchorEl: HTMLElement | null;\n setAnchorEl: (v: HTMLElement | null) => void;\n onSelect: (block: TEditorBlock) => void;\n};\nexport default function BlocksMenu({ anchorEl, setAnchorEl, onSelect }: BlocksMenuProps) {\n const onClose = () => {\n setAnchorEl(null);\n };\n\n const onClick = (block: TEditorBlock) => {\n onSelect(block);\n setAnchorEl(null);\n };\n\n if (anchorEl === null) {\n return null;\n }\n\n return (\n <Menu\n open\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n >\n <Box sx={{ p: 1, display: 'grid', gridTemplateColumns: '1fr 1fr 1fr 1fr' }}>\n {BUTTONS.map((k, i) => (\n <BlockButton\n key={i}\n label={LABEL_KEYS[k.label] ? t(LABEL_KEYS[k.label], k.label) : k.label}\n icon={k.icon}\n onClick={() => onClick(k.block())}\n />\n ))}\n </Box>\n </Menu>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { AddOutlined } from '@mui/icons-material';\nimport { Fade, IconButton } from '@mui/material';\n\ntype Props = {\n buttonElement: HTMLElement | null;\n onClick: () => void;\n};\nexport default function DividerButton({ buttonElement, onClick }: Props) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n function listener({ clientX, clientY }: MouseEvent) {\n if (!buttonElement) {\n return;\n }\n const rect = buttonElement.getBoundingClientRect();\n const rectY = rect.y;\n const bottomX = rect.x;\n const topX = bottomX + rect.width;\n\n if (Math.abs(clientY - rectY) < 20) {\n if (bottomX < clientX && clientX < topX) {\n setVisible(true);\n return;\n }\n }\n setVisible(false);\n }\n window.addEventListener('mousemove', listener);\n return () => {\n window.removeEventListener('mousemove', listener);\n };\n }, [buttonElement, setVisible]);\n\n return (\n <Fade in={visible}>\n <IconButton\n size=\"small\"\n sx={{\n p: 0.12,\n position: 'absolute',\n top: '-12px',\n left: '50%',\n transform: 'translateX(-10px)',\n bgcolor: 'brand.blue',\n color: 'primary.contrastText',\n zIndex: 'fab',\n '&:hover, &:active, &:focus': {\n bgcolor: 'brand.blue',\n color: 'primary.contrastText',\n },\n }}\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n >\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Fade>\n );\n}\n","import React from 'react';\n\nimport { AddOutlined } from '@mui/icons-material';\nimport { ButtonBase } from '@mui/material';\n\ntype Props = {\n onClick: () => void;\n};\nexport default function PlaceholderButton({ onClick }: Props) {\n return (\n <ButtonBase\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n sx={{\n display: 'flex',\n alignContent: 'center',\n justifyContent: 'center',\n height: 48,\n width: '100%',\n bgcolor: 'rgba(0,0,0, 0.05)',\n }}\n >\n <AddOutlined\n sx={{\n p: 0.12,\n bgcolor: 'brand.blue',\n borderRadius: 24,\n color: 'primary.contrastText',\n }}\n fontSize=\"small\"\n />\n </ButtonBase>\n );\n}\n","import React, { useState } from 'react';\n\nimport { TEditorBlock } from '@editor/core';\n\nimport BlocksMenu from './blocks-menu';\nimport DividerButton from './divider-button';\nimport PlaceholderButton from './placeholder-button';\n\ntype Props = {\n placeholder?: boolean;\n onSelect: (block: TEditorBlock) => void;\n};\nexport default function AddBlockButton({ onSelect, placeholder }: Props) {\n const [menuAnchorEl, setMenuAnchorEl] = useState<HTMLElement | null>(null);\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null);\n\n const handleButtonClick = () => {\n setMenuAnchorEl(buttonElement);\n };\n\n const renderButton = () => {\n if (placeholder) {\n return <PlaceholderButton onClick={handleButtonClick} />;\n } else {\n return <DividerButton buttonElement={buttonElement} onClick={handleButtonClick} />;\n }\n };\n\n return (\n <>\n <div ref={setButtonElement} style={{ position: 'relative' }}>\n {renderButton()}\n </div>\n <BlocksMenu anchorEl={menuAnchorEl} setAnchorEl={setMenuAnchorEl} onSelect={onSelect} />\n </>\n );\n}\n","import React, { createContext, useContext } from 'react';\nimport type { ParentRef } from './move-block';\n\nexport type BlockParentInfo = {\n parent: ParentRef;\n indexInParent: number;\n};\n\nconst BlockParentContext = createContext<BlockParentInfo | null>(null);\n\n/**\n * Tells the subtree (an `EditorBlock` and its wrapper) which parent\n * container + slot it's rendered under. Used by the block wrapper to\n * construct the drag-source payload for canvas drag-and-drop.\n */\nexport function BlockParentProvider({\n info,\n children,\n}: {\n info: BlockParentInfo;\n children: React.ReactNode;\n}) {\n return <BlockParentContext.Provider value={info}>{children}</BlockParentContext.Provider>;\n}\n\nexport function useBlockParent(): BlockParentInfo | null {\n return useContext(BlockParentContext);\n}\n","import React, { Fragment, useState } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport EditorBlock from '@editor/editor-block';\nimport {\n getDraggingBlock,\n setDraggingBlock,\n setDocument,\n setSelectedBlockId,\n useDocument,\n useDraggingBlock,\n} from '@editor/editor-context';\n\nimport AddBlockButton from './add-block-menu';\nimport { BlockParentProvider } from '../block-parent-context';\nimport { buildMovePatch, isDescendant, type ParentRef } from '../move-block';\n\nexport type EditorChildrenChange = {\n blockId: string;\n block: TEditorBlock;\n childrenIds: string[];\n};\n\nfunction generateId() {\n return `block-${Date.now()}`;\n}\n\nexport type EditorChildrenIdsProps = {\n childrenIds: string[] | null | undefined;\n onChange: (val: EditorChildrenChange) => void;\n /** Parent context for DnD — see BlockParentContext. Required for drag/drop to work in this container. */\n parentRef?: ParentRef;\n};\n\nexport default function EditorChildrenIds({ childrenIds, onChange, parentRef }: EditorChildrenIdsProps) {\n const appendBlock = (block: TEditorBlock) => {\n const blockId = generateId();\n return onChange({\n blockId,\n block,\n childrenIds: [...(childrenIds || []), blockId],\n });\n };\n\n const insertBlock = (block: TEditorBlock, index: number) => {\n const blockId = generateId();\n const newChildrenIds = [...(childrenIds || [])];\n newChildrenIds.splice(index, 0, blockId);\n return onChange({\n blockId,\n block,\n childrenIds: newChildrenIds,\n });\n };\n\n if (!childrenIds || childrenIds.length === 0) {\n return (\n <>\n <AddBlockButton placeholder onSelect={appendBlock} />\n {parentRef && (\n <CanvasDropZone parentRef={parentRef} targetIndex={0} placeholder />\n )}\n </>\n );\n }\n\n return (\n <>\n {childrenIds.map((childId, i) => (\n <Fragment key={childId}>\n <AddBlockButton onSelect={(block) => insertBlock(block, i)} />\n {parentRef && <CanvasDropZone parentRef={parentRef} targetIndex={i} />}\n {parentRef ? (\n <BlockParentProvider info={{ parent: parentRef, indexInParent: i }}>\n <EditorBlock id={childId} />\n </BlockParentProvider>\n ) : (\n <EditorBlock id={childId} />\n )}\n </Fragment>\n ))}\n <AddBlockButton onSelect={appendBlock} />\n {parentRef && <CanvasDropZone parentRef={parentRef} targetIndex={childrenIds.length} />}\n </>\n );\n}\n\nfunction CanvasDropZone({\n parentRef,\n targetIndex,\n placeholder = false,\n}: {\n parentRef: ParentRef;\n targetIndex: number;\n placeholder?: boolean;\n}) {\n const document = useDocument();\n const dragging = useDraggingBlock();\n const [over, setOver] = useState(false);\n\n if (!dragging) return null;\n\n // Skip this drop zone if it would move the block into its own subtree, or if\n // it's the trivial \"drop on own position\" no-op.\n if (isDescendant(document, dragging.sourceId, parentRef.parentId)) return null;\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setOver(true);\n };\n const handleDragLeave = () => setOver(false);\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setOver(false);\n const payload = getDraggingBlock();\n if (!payload) return;\n const patch = buildMovePatch(\n document,\n payload.sourceId,\n payload.sourceParent,\n parentRef,\n targetIndex,\n );\n if (patch) {\n setDocument(patch as any);\n setSelectedBlockId(payload.sourceId);\n }\n setDraggingBlock(null);\n };\n\n return (\n <Box\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n sx={{\n height: placeholder ? 64 : over ? 16 : 8,\n mx: placeholder ? 2 : 3,\n my: placeholder ? 0 : over ? 0.5 : 0,\n borderRadius: 1,\n backgroundColor: over ? 'rgba(25, 118, 210, 0.16)' : 'transparent',\n outline: over ? '1.5px dashed rgba(25, 118, 210, 0.8)' : undefined,\n transition: 'height 80ms, background-color 80ms, outline-color 80ms',\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { ColumnsContainer as BaseColumnsContainer } from '@blocks';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setSelectedBlockId } from '@editor/editor-context';\nimport EditorChildrenIds, { EditorChildrenChange } from '@editor/blocks/helpers/editor-children-ids';\n\nimport ColumnsContainerPropsSchema, { ColumnsContainerProps } from './columns-container-props-schema';\n\nconst EMPTY_COLUMNS = [{ childrenIds: [] }, { childrenIds: [] }, { childrenIds: [] }];\n\nexport default function ColumnsContainerEditor({ style, props }: ColumnsContainerProps) {\n const currentBlockId = useCurrentBlockId();\n\n const { columns, ...restProps } = props ?? {};\n const columnsValue = columns ?? EMPTY_COLUMNS;\n\n const updateColumn = (columnIndex: 0 | 1 | 2, { block, blockId, childrenIds }: EditorChildrenChange) => {\n const nColumns = [...columnsValue];\n nColumns[columnIndex] = { childrenIds };\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'ColumnsContainer',\n data: ColumnsContainerPropsSchema.parse({\n style,\n props: {\n ...restProps,\n columns: nColumns,\n },\n }),\n },\n });\n setSelectedBlockId(blockId);\n };\n\n return (\n <BaseColumnsContainer\n props={restProps}\n style={style}\n columns={[\n <EditorChildrenIds\n childrenIds={columns?.[0]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 0 }}\n onChange={(change) => updateColumn(0, change)}\n />,\n <EditorChildrenIds\n childrenIds={columns?.[1]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 1 }}\n onChange={(change) => updateColumn(1, change)}\n />,\n <EditorChildrenIds\n childrenIds={columns?.[2]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 2 }}\n onChange={(change) => updateColumn(2, change)}\n />,\n ]}\n />\n );\n}\n","import React from 'react';\n\nimport { Container as BaseContainer } from '@blocks';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setSelectedBlockId, useDocument } from '@editor/editor-context';\nimport EditorChildrenIds from '@editor/blocks/helpers/editor-children-ids';\n\nimport { ContainerProps } from './container-props-schema';\n\nexport default function ContainerEditor({ style, props }: ContainerProps) {\n const childrenIds = props?.childrenIds ?? [];\n\n const document = useDocument();\n const currentBlockId = useCurrentBlockId();\n\n return (\n <BaseContainer style={style}>\n <EditorChildrenIds\n childrenIds={childrenIds}\n parentRef={{ kind: 'Container', parentId: currentBlockId }}\n onChange={({ block, blockId, childrenIds }) => {\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'Container',\n data: {\n ...document[currentBlockId].data,\n props: { childrenIds: childrenIds },\n },\n },\n });\n setSelectedBlockId(blockId);\n }}\n />\n </BaseContainer>\n );\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { replaceDocument, setDocument, setSelectedBlockId, useDocument, useSelectedBlockId } from '@editor/editor-context';\nimport { TEditorBlock } from '@editor/core';\nimport EditorChildrenIds from '@editor/blocks/helpers/editor-children-ids';\n\nimport { EmailLayoutProps } from './email-layout-props-schema';\n\nfunction generateId() {\n return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction rekeyBlocks(blocks: Record<string, any>, rootBlockId: string): { blocks: Record<string, any>; newRootId: string } {\n const idMap: Record<string, string> = {};\n for (const oldId of Object.keys(blocks)) {\n idMap[oldId] = generateId();\n }\n\n const remapIds = (ids: string[] | null | undefined) =>\n ids?.map((id) => idMap[id] ?? id);\n\n const newBlocks: Record<string, any> = {};\n for (const [oldId, block] of Object.entries(blocks)) {\n const b = block as TEditorBlock;\n const newId = idMap[oldId];\n if (b.type === 'Container') {\n newBlocks[newId] = {\n ...b,\n data: {\n ...b.data,\n props: { ...b.data.props, childrenIds: remapIds(b.data.props?.childrenIds) },\n },\n };\n } else if (b.type === 'ColumnsContainer') {\n newBlocks[newId] = {\n ...b,\n data: {\n ...b.data,\n props: {\n ...b.data.props,\n columns: b.data.props?.columns?.map((c: any) => ({\n ...c,\n childrenIds: remapIds(c.childrenIds),\n })),\n },\n },\n };\n } else {\n newBlocks[newId] = b;\n }\n }\n return { blocks: newBlocks, newRootId: idMap[rootBlockId] };\n}\n\nfunction collectBlock(blockId: string, document: Record<string, any>): Record<string, any> {\n const block = document[blockId] as TEditorBlock;\n if (!block) return {};\n const result: Record<string, any> = { [blockId]: block };\n if (block.type === 'Container') {\n for (const childId of block.data.props?.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n if (block.type === 'ColumnsContainer') {\n for (const col of block.data.props?.columns ?? []) {\n for (const childId of col.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n }\n return result;\n}\n\nfunction getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) {\n const f = fontFamily ?? 'MODERN_SANS';\n switch (f) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n}\n\nexport default function EmailLayoutEditor(props: EmailLayoutProps) {\n const childrenIds = props.childrenIds ?? [];\n const document = useDocument();\n const currentBlockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n\n const handleDelete = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Delete' && e.key !== 'Backspace') return;\n if (!selectedBlockId) return;\n\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n e.preventDefault();\n\n const filterChildrenIds = (ids: string[] | null | undefined) =>\n ids?.filter((id) => id !== selectedBlockId);\n\n const nDocument: Record<string, any> = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === selectedBlockId) continue;\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = { ...block, data: { ...block.data, childrenIds: filterChildrenIds(block.data.childrenIds) } };\n break;\n case 'Container':\n nDocument[id] = { ...block, data: { ...block.data, props: { ...block.data.props, childrenIds: filterChildrenIds(block.data.props?.childrenIds) } } };\n break;\n case 'ColumnsContainer':\n nDocument[id] = { ...block, data: { ...block.data, props: { ...block.data.props, columns: block.data.props?.columns?.map((c: any) => ({ ...c, childrenIds: filterChildrenIds(c.childrenIds) })) } } };\n break;\n default:\n nDocument[id] = block;\n }\n }\n delete nDocument[selectedBlockId];\n replaceDocument(nDocument as any);\n }, [selectedBlockId, document]);\n\n const handleCopy = useCallback((e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key !== 'c') return;\n if (!selectedBlockId) return;\n\n // Don't intercept when typing in an input/textarea\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n const blocks = collectBlock(selectedBlockId, document);\n if (Object.keys(blocks).length === 0) return;\n\n e.preventDefault();\n const payload = JSON.stringify({ __emailEditorBlocks: true, rootBlockId: selectedBlockId, blocks });\n navigator.clipboard.writeText(payload);\n }, [selectedBlockId, document]);\n\n const handlePaste = useCallback(async (e: ClipboardEvent) => {\n // Don't intercept paste when typing in an input/textarea\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n const text = e.clipboardData?.getData('text/plain');\n if (!text) return;\n\n let parsed: any;\n try {\n parsed = JSON.parse(text);\n } catch {\n return;\n }\n\n if (!parsed?.__emailEditorBlocks || !parsed.rootBlockId || !parsed.blocks) return;\n\n e.preventDefault();\n\n const { blocks: newBlocks, newRootId } = rekeyBlocks(parsed.blocks, parsed.rootBlockId);\n const doc = { ...document };\n\n // Add all new blocks to the document\n Object.assign(doc, newBlocks);\n\n // Insert after selected block, or append to end\n const currentChildrenIds = [...(childrenIds || [])];\n const insertIndex = selectedBlockId ? currentChildrenIds.indexOf(selectedBlockId) + 1 : currentChildrenIds.length;\n currentChildrenIds.splice(insertIndex, 0, newRootId);\n\n doc[currentBlockId] = {\n type: 'EmailLayout',\n data: {\n ...document[currentBlockId].data,\n childrenIds: currentChildrenIds,\n },\n };\n\n replaceDocument(doc);\n setSelectedBlockId(newRootId);\n }, [document, childrenIds, selectedBlockId, currentBlockId]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleDelete);\n window.addEventListener('keydown', handleCopy);\n window.addEventListener('paste', handlePaste);\n return () => {\n window.removeEventListener('keydown', handleDelete);\n window.removeEventListener('keydown', handleCopy);\n window.removeEventListener('paste', handlePaste);\n };\n }, [handleDelete, handleCopy, handlePaste]);\n\n const baseStyle: React.CSSProperties = {\n color: props.textColor ?? '#262626',\n fontFamily: getFontFamily(props.fontFamily),\n fontSize: '16px',\n fontWeight: '400',\n letterSpacing: '0.15008px',\n lineHeight: '1.5',\n margin: '0',\n };\n\n const editorChildren = (\n <EditorChildrenIds\n childrenIds={childrenIds}\n parentRef={{ kind: 'EmailLayout', parentId: 'root' }}\n onChange={({ block, blockId, childrenIds }) => {\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'EmailLayout',\n data: {\n ...document[currentBlockId].data,\n childrenIds: childrenIds,\n },\n },\n });\n setSelectedBlockId(blockId);\n }}\n />\n );\n\n // Editor-only chrome: framing around the 600-px canvas on wide screens.\n // The workspace background (solid or checkerboard) is painted by the parent\n // TemplatePanel so it fills the entire out-of-canvas area; this wrapper\n // stays transparent to let it show through. None of this ships with the\n // rendered email — EmailLayoutReader is unchanged.\n const CARD_MAX_WIDTH = 664; // 600 canvas + 32px horizontal padding\n // Note: no `overflow: hidden` on the card — the per-block TuneMenu renders\n // icon controls that sit slightly outside the block's rectangle, and clipping\n // them here would hide the move-up/down/copy/delete affordances.\n const cardStyle: React.CSSProperties = {\n maxWidth: CARD_MAX_WIDTH,\n margin: '0 auto',\n borderRadius: 12,\n boxShadow: '0 1px 2px rgba(33, 36, 67, 0.05), 0 8px 24px rgba(33, 36, 67, 0.08)',\n };\n\n if (props.backdropDisabled) {\n return (\n <div\n onClick={() => {\n setSelectedBlockId(null);\n }}\n style={{\n ...baseStyle,\n padding: '32px',\n width: '100%',\n minHeight: '100%',\n }}\n >\n <div\n style={{\n ...cardStyle,\n backgroundColor: '#F5F5F5',\n padding: '32px',\n }}\n >\n <div style={{ maxWidth: '600px', margin: '0 auto' }}>{editorChildren}</div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n onClick={() => {\n setSelectedBlockId(null);\n }}\n style={{\n ...baseStyle,\n padding: '32px 16px',\n width: '100%',\n minHeight: '100%',\n }}\n >\n <div\n style={{\n ...cardStyle,\n backgroundColor: props.backdropColor ?? '#F5F5F5',\n padding: '32px 0',\n }}\n >\n <table\n align=\"center\"\n width=\"100%\"\n style={{\n margin: '0 auto',\n maxWidth: '600px',\n backgroundColor: props.canvasColor ?? '#FFFFFF',\n borderRadius: props.borderRadius ?? undefined,\n overflow: props.borderRadius ? 'hidden' : undefined,\n border: (() => {\n const v = props.borderColor;\n if (!v) {\n return undefined;\n }\n return `1px solid ${v}`;\n })(),\n }}\n role=\"presentation\"\n cellSpacing=\"0\"\n cellPadding=\"0\"\n border={0}\n >\n <tbody>\n <tr style={{ width: '100%' }}>\n <td>{editorChildren}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { ArrowDownwardOutlined, ArrowUpwardOutlined, ContentCopyOutlined, DeleteOutlined } from '@mui/icons-material';\nimport { IconButton, Paper, Stack, SxProps, Tooltip } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { resetDocument, setSelectedBlockId, useDocument } from '@editor/editor-context';\nimport { ColumnsContainerProps } from '@editor/blocks/columns-container/columns-container-props-schema';\nimport { t } from '@i18n';\n\nconst sx: SxProps = {\n position: 'absolute',\n top: 0,\n left: -56,\n borderRadius: 64,\n paddingX: 0.5,\n paddingY: 1,\n zIndex: 'fab',\n};\n\nfunction collectBlock(blockId: string, document: Record<string, any>): Record<string, any> {\n const block = document[blockId] as TEditorBlock;\n if (!block) return {};\n const result: Record<string, any> = { [blockId]: block };\n\n // Collect children from Container\n if (block.type === 'Container') {\n const childrenIds = block.data.props?.childrenIds ?? [];\n for (const childId of childrenIds) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n // Collect children from ColumnsContainer\n if (block.type === 'ColumnsContainer') {\n const columns = block.data.props?.columns ?? [];\n for (const col of columns) {\n for (const childId of col.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n }\n // Collect children from EmailLayout\n if (block.type === 'EmailLayout') {\n const childrenIds = block.data.childrenIds ?? [];\n for (const childId of childrenIds) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n return result;\n}\n\ntype Props = {\n blockId: string;\n};\nexport default function TuneMenu({ blockId }: Props) {\n const document = useDocument();\n\n const handleDeleteClick = () => {\n const filterChildrenIds = (childrenIds: string[] | null | undefined) => {\n if (!childrenIds) {\n return childrenIds;\n }\n return childrenIds.filter((f) => f !== blockId);\n };\n const nDocument: typeof document = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === blockId) {\n continue;\n }\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n childrenIds: filterChildrenIds(block.data.childrenIds),\n },\n };\n break;\n case 'Container':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n props: {\n ...block.data.props,\n childrenIds: filterChildrenIds(block.data.props?.childrenIds),\n },\n },\n };\n break;\n case 'ColumnsContainer':\n nDocument[id] = {\n type: 'ColumnsContainer',\n data: {\n style: block.data.style,\n props: {\n ...block.data.props,\n columns: block.data.props?.columns?.map((c) => ({\n childrenIds: filterChildrenIds(c.childrenIds),\n })),\n },\n } as ColumnsContainerProps,\n };\n break;\n default:\n nDocument[id] = block;\n }\n }\n delete nDocument[blockId];\n resetDocument(nDocument);\n };\n\n const handleCopyClick = () => {\n const blocks = collectBlock(blockId, document);\n const payload = JSON.stringify({ __emailEditorBlocks: true, rootBlockId: blockId, blocks });\n navigator.clipboard.writeText(payload);\n };\n\n const handleMoveClick = (direction: 'up' | 'down') => {\n const moveChildrenIds = (ids: string[] | null | undefined) => {\n if (!ids) {\n return ids;\n }\n const index = ids.indexOf(blockId);\n if (index < 0) {\n return ids;\n }\n const childrenIds = [...ids];\n if (direction === 'up' && index > 0) {\n [childrenIds[index], childrenIds[index - 1]] = [childrenIds[index - 1], childrenIds[index]];\n } else if (direction === 'down' && index < childrenIds.length - 1) {\n [childrenIds[index], childrenIds[index + 1]] = [childrenIds[index + 1], childrenIds[index]];\n }\n return childrenIds;\n };\n const nDocument: typeof document = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === blockId) {\n continue;\n }\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n childrenIds: moveChildrenIds(block.data.childrenIds),\n },\n };\n break;\n case 'Container':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n props: {\n ...block.data.props,\n childrenIds: moveChildrenIds(block.data.props?.childrenIds),\n },\n },\n };\n break;\n case 'ColumnsContainer':\n nDocument[id] = {\n type: 'ColumnsContainer',\n data: {\n style: block.data.style,\n props: {\n ...block.data.props,\n columns: block.data.props?.columns?.map((c) => ({\n childrenIds: moveChildrenIds(c.childrenIds),\n })),\n },\n } as ColumnsContainerProps,\n };\n break;\n default:\n nDocument[id] = block;\n }\n }\n\n resetDocument(nDocument);\n setSelectedBlockId(blockId);\n };\n\n return (\n <Paper sx={sx} onClick={(ev) => ev.stopPropagation()}>\n <Stack>\n <Tooltip title={t('tune.move-up', 'Move up')} placement=\"left-start\">\n <IconButton aria-label={t('tune.move-up', 'Move up')} onClick={() => handleMoveClick('up')} sx={{ color: 'text.primary' }}>\n <ArrowUpwardOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.move-down', 'Move down')} placement=\"left-start\">\n <IconButton aria-label={t('tune.move-down', 'Move down')} onClick={() => handleMoveClick('down')} sx={{ color: 'text.primary' }}>\n <ArrowDownwardOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.copy', 'Copy block')} placement=\"left-start\">\n <IconButton aria-label={t('tune.copy', 'Copy block')} onClick={handleCopyClick} sx={{ color: 'text.primary' }}>\n <ContentCopyOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.delete', 'Delete')} placement=\"left-start\">\n <IconButton aria-label={t('tune.delete', 'Delete')} onClick={handleDeleteClick} sx={{ color: 'text.primary' }}>\n <DeleteOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n </Paper>\n );\n}\n","import React, { CSSProperties, useState } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport {\n setDraggingBlock,\n setSelectedBlockId,\n useDraggingBlock,\n useHoveredBlockId,\n useSelectedBlockId,\n} from '@editor/editor-context';\n\nimport { useBlockParent } from '../block-parent-context';\n\nimport TuneMenu from './tune-menu';\n\ntype TEditorBlockWrapperProps = {\n children: JSX.Element;\n};\n\nexport default function EditorBlockWrapper({ children }: TEditorBlockWrapperProps) {\n const selectedBlockId = useSelectedBlockId();\n const hoveredBlockId = useHoveredBlockId();\n const draggingBlock = useDraggingBlock();\n const blockParent = useBlockParent();\n const [mouseInside, setMouseInside] = useState(false);\n const blockId = useCurrentBlockId();\n\n const isBeingDragged = draggingBlock?.sourceId === blockId;\n\n let outline: CSSProperties['outline'];\n if (selectedBlockId === blockId) {\n outline = '2px solid rgba(0,121,204, 1)';\n } else if ((mouseInside && !draggingBlock) || hoveredBlockId === blockId) {\n outline = '2px solid rgba(0,121,204, 0.3)';\n }\n\n const renderMenu = () => {\n if (selectedBlockId !== blockId) {\n return null;\n }\n return <TuneMenu blockId={blockId} />;\n };\n\n // Drag support: only enable when the wrapper has a parent context — the\n // root EmailLayout (which owns its own drag-free surface) has no parent.\n // Also disable while the block is selected so click-drag and Shift+Arrow\n // work for text selection inside the textarea.\n const draggable = Boolean(blockParent) && selectedBlockId !== blockId;\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {\n if (!blockParent) return;\n e.stopPropagation();\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', blockId);\n setDraggingBlock({ sourceId: blockId, sourceParent: blockParent.parent });\n };\n\n const handleDragEnd = () => {\n setDraggingBlock(null);\n };\n\n return (\n <Box\n draggable={draggable}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n sx={{\n position: 'relative',\n maxWidth: '100%',\n outlineOffset: '-1px',\n outline,\n opacity: isBeingDragged ? 0.4 : 1,\n cursor: draggable ? (draggingBlock ? 'grabbing' : 'default') : 'default',\n }}\n onMouseEnter={(ev) => {\n setMouseInside(true);\n ev.stopPropagation();\n }}\n onMouseLeave={() => {\n setMouseInside(false);\n }}\n onClick={(ev) => {\n setSelectedBlockId(blockId);\n ev.stopPropagation();\n }}\n >\n {renderMenu()}\n {children}\n </Box>\n );\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { ButtonProps, ButtonPropsDefaults } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useSelectedBlockId } from '@editor/editor-context';\n\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst getPadding = (padding: { top: number; right: number; bottom: number; left: number } | null | undefined) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nfunction getRoundedCorners(props: ButtonProps['props']) {\n const buttonStyle = props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n switch (buttonStyle) {\n case 'rectangle':\n return undefined;\n case 'pill':\n return 64;\n case 'rounded':\n default:\n return 4;\n }\n}\n\nfunction getButtonSizePadding(props: ButtonProps['props']) {\n const size = props?.size ?? ButtonPropsDefaults.size;\n switch (size) {\n case 'x-small':\n return [4, 8] as const;\n case 'small':\n return [8, 12] as const;\n case 'large':\n return [16, 32] as const;\n case 'medium':\n default:\n return [12, 20] as const;\n }\n}\n\nexport default function ButtonEditor({ style, props }: ButtonProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const text = props?.text ?? ButtonPropsDefaults.text;\n const fullWidth = props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const buttonTextColor = props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n const [localText, setLocalText] = useState(text);\n\n useEffect(() => {\n setLocalText(text);\n }, [text]);\n\n const padding = getButtonSizePadding(props);\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const linkStyle: CSSProperties = {\n color: buttonTextColor,\n fontSize: style?.fontSize ?? 16,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? 'bold',\n backgroundColor: buttonBackgroundColor,\n borderRadius: getRoundedCorners(props),\n display: fullWidth ? 'block' : 'inline-block',\n padding: `${padding[0]}px ${padding[1]}px`,\n textDecoration: 'none',\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newText = e.target.value;\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Button',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n },\n },\n },\n });\n };\n\n if (isSelected) {\n const inputStyle: CSSProperties = {\n ...linkStyle,\n border: 'none',\n outline: 'none',\n cursor: 'text',\n width: fullWidth ? '100%' : undefined,\n textAlign: 'center',\n };\n\n const trackFocus = (e: React.SyntheticEvent<HTMLInputElement>) => {\n const el = e.currentTarget;\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: el.selectionStart ?? el.value.length,\n selectionEnd: el.selectionEnd ?? el.value.length,\n });\n };\n\n return (\n <div style={wrapperStyle}>\n <input\n type=\"text\"\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={inputStyle}\n />\n </div>\n );\n }\n\n return (\n <div style={wrapperStyle}>\n <span style={linkStyle}>\n <span>{text}</span>\n </span>\n </div>\n );\n}\n","import { RefObject, useCallback, useEffect, useRef, useState } from 'react';\n\nexport type MarkdownToolbarSelection = { start: number; end: number };\nexport type MarkdownToolbarPrompt = 'none' | 'link' | 'color' | 'font';\n\ntype Options = {\n text: string;\n isSelected: boolean;\n commitText: (newText: string) => void;\n trackSelection?: (selection: MarkdownToolbarSelection) => void;\n};\n\nexport function useMarkdownToolbar({ text, isSelected, commitText, trackSelection }: Options) {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [selection, setSelection] = useState<MarkdownToolbarSelection>({ start: 0, end: 0 });\n const [activePrompt, setActivePrompt] = useState<MarkdownToolbarPrompt>('none');\n const pendingSelectionRef = useRef<MarkdownToolbarSelection | null>(null);\n\n const textRef = useRef(text);\n useEffect(() => {\n textRef.current = text;\n }, [text]);\n\n const syncSelection = useCallback(\n (start: number, end: number) => {\n const next = { start, end };\n setSelection(next);\n trackSelection?.(next);\n },\n [trackSelection]\n );\n\n const trackFocus = useCallback(\n (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const el = e.currentTarget;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? el.value.length;\n syncSelection(start, end);\n },\n [syncSelection]\n );\n\n useEffect(() => {\n const target = pendingSelectionRef.current;\n if (!target) return;\n const ta = textareaRef.current;\n if (!ta) return;\n ta.focus();\n ta.setSelectionRange(target.start, target.end);\n syncSelection(target.start, target.end);\n pendingSelectionRef.current = null;\n }, [text, syncSelection]);\n\n useEffect(() => {\n if (!isSelected || selection.start === selection.end) {\n setActivePrompt('none');\n }\n }, [isSelected, selection.start, selection.end]);\n\n const wrapSelection = (prefix: string, suffix: string) => {\n const ta = textareaRef.current;\n if (!ta) return;\n // Prefer the textarea's live selection when it's non-empty. If the\n // textarea's DOM selection has collapsed (e.g. because a native color\n // picker briefly stole focus), fall back to the last tracked React-state\n // selection so async popover flows still find the right range.\n let start = ta.selectionStart ?? selection.start;\n let end = ta.selectionEnd ?? selection.end;\n if (start === end) {\n start = selection.start;\n end = selection.end;\n }\n if (start === end) return;\n const current = textRef.current;\n const selected = current.slice(start, end);\n const before = current.slice(0, start);\n const after = current.slice(end);\n const wrapped = `${prefix}${selected}${suffix}`;\n const newText = `${before}${wrapped}${after}`;\n const newStart = start + prefix.length;\n const newEnd = newStart + selected.length;\n pendingSelectionRef.current = { start: newStart, end: newEnd };\n commitText(newText);\n };\n\n const handleBold = () => wrapSelection('**', '**');\n const handleItalic = () => wrapSelection('*', '*');\n const handleUnderline = () => wrapSelection('<u>', '</u>');\n const handleOverline = () =>\n wrapSelection('<span style=\"text-decoration:overline\">', '</span>');\n\n const openPrompt = (kind: Exclude<MarkdownToolbarPrompt, 'none'>) => {\n if (selection.start === selection.end) return;\n setActivePrompt(kind);\n };\n const cancelPrompt = () => {\n setActivePrompt('none');\n textareaRef.current?.focus();\n };\n\n const handleLinkRequest = () => openPrompt('link');\n const handleColorRequest = () => openPrompt('color');\n const handleFontRequest = () => openPrompt('font');\n\n const handleLinkSubmit = (url: string) => {\n const start = selection.start;\n const end = selection.end;\n if (start === end) {\n setActivePrompt('none');\n return;\n }\n const current = textRef.current;\n const selected = current.slice(start, end);\n const before = current.slice(0, start);\n const after = current.slice(end);\n const wrapped = `[${selected}](${url})`;\n const newText = `${before}${wrapped}${after}`;\n const newStart = start + wrapped.length;\n pendingSelectionRef.current = { start: newStart, end: newStart };\n commitText(newText);\n setActivePrompt('none');\n };\n\n const handleColorSubmit = (color: string) => {\n wrapSelection(`<span style=\"color: ${color}\">`, '</span>');\n setActivePrompt('none');\n };\n\n const handleFontSubmit = (fontFamily: string) => {\n wrapSelection(`<span style=\"font-family: ${fontFamily}\">`, '</span>');\n setActivePrompt('none');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!(e.metaKey || e.ctrlKey)) return;\n const key = e.key.toLowerCase();\n if (key === 'b') {\n e.preventDefault();\n handleBold();\n } else if (key === 'i') {\n e.preventDefault();\n handleItalic();\n } else if (key === 'u') {\n e.preventDefault();\n handleUnderline();\n } else if (key === 'k') {\n e.preventDefault();\n handleLinkRequest();\n }\n };\n\n const toolbarVisible = isSelected && (selection.start !== selection.end || activePrompt !== 'none');\n\n return {\n textareaRef: textareaRef as RefObject<HTMLTextAreaElement>,\n selection,\n trackFocus,\n handleKeyDown,\n toolbarProps: {\n visible: toolbarVisible,\n activePrompt,\n onBold: handleBold,\n onItalic: handleItalic,\n onUnderline: handleUnderline,\n onOverline: handleOverline,\n onLinkRequest: handleLinkRequest,\n onLinkSubmit: handleLinkSubmit,\n onColorRequest: handleColorRequest,\n onColorSubmit: handleColorSubmit,\n onFontRequest: handleFontRequest,\n onFontSubmit: handleFontSubmit,\n onPromptCancel: cancelPrompt,\n },\n };\n}\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport {\n FormatBoldOutlined,\n FormatColorTextOutlined,\n FormatItalicOutlined,\n FormatOverlineOutlined,\n FormatUnderlinedOutlined,\n LinkOutlined,\n TextFieldsOutlined,\n} from '@mui/icons-material';\nimport { IconButton, MenuItem, Paper, Popper, Select, Stack, TextField } from '@mui/material';\n\nimport { t } from '@i18n';\n\nimport type { MarkdownToolbarPrompt } from '../helpers/use-markdown-toolbar';\n\ntype Props = {\n anchorEl: HTMLElement | null;\n visible: boolean;\n activePrompt: MarkdownToolbarPrompt;\n onBold: () => void;\n onItalic: () => void;\n onUnderline: () => void;\n onOverline: () => void;\n onLinkRequest: () => void;\n onLinkSubmit: (url: string) => void;\n onColorRequest: () => void;\n onColorSubmit: (color: string) => void;\n onFontRequest: () => void;\n onFontSubmit: (fontFamily: string) => void;\n onPromptCancel: () => void;\n};\n\n// Stack aligned with the sidebar font-family options. Values are the CSS\n// font-family strings emitted for each choice; labels are shown to the user.\nconst FONT_OPTIONS: Array<{ label: string; value: string }> = [\n {\n label: 'Modern sans',\n value: '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif',\n },\n {\n label: 'Book sans',\n value: 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif',\n },\n {\n label: 'Organic sans',\n value: 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif',\n },\n {\n label: 'Geometric sans',\n value: 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif',\n },\n {\n label: 'Modern serif',\n value: 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif',\n },\n {\n label: 'Book serif',\n value: '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif',\n },\n {\n label: 'Monospace',\n value: '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace',\n },\n];\n\nexport default function InlineFormattingToolbar({\n anchorEl,\n visible,\n activePrompt,\n onBold,\n onItalic,\n onUnderline,\n onOverline,\n onLinkRequest,\n onLinkSubmit,\n onColorRequest,\n onColorSubmit,\n onFontRequest,\n onFontSubmit,\n onPromptCancel,\n}: Props) {\n const [url, setUrl] = useState('');\n const [color, setColor] = useState('#000000');\n const [font, setFont] = useState(FONT_OPTIONS[0].value);\n const urlRef = useRef<HTMLInputElement>(null);\n const colorRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (activePrompt === 'link') {\n setUrl('');\n setTimeout(() => urlRef.current?.focus(), 0);\n } else if (activePrompt === 'color') {\n setColor('#000000');\n // Auto-open the native color picker so the user doesn't have to click\n // the tiny swatch to find it. Small delay lets the popper mount first.\n setTimeout(() => colorRef.current?.click(), 0);\n } else if (activePrompt === 'font') {\n setFont(FONT_OPTIONS[0].value);\n }\n }, [activePrompt]);\n\n const preventBlur = (e: React.MouseEvent) => e.preventDefault();\n\n return (\n <Popper open={visible} anchorEl={anchorEl} placement=\"top-start\" style={{ zIndex: 1300 }}>\n <Paper elevation={4} sx={{ px: 0.5, py: 0.25, mb: 0.5 }} onMouseDown={preventBlur}>\n {activePrompt === 'link' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5 }}>\n <TextField\n inputRef={urlRef}\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://example.com\"\n variant=\"standard\"\n size=\"small\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = url.trim();\n if (trimmed) onLinkSubmit(trimmed);\n else onPromptCancel();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onPromptCancel();\n }\n }}\n sx={{ width: 220 }}\n />\n </Stack>\n ) : activePrompt === 'color' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5, py: 0.25 }}>\n <input\n ref={colorRef}\n type=\"color\"\n value={color}\n onChange={(e) => {\n const v = e.target.value;\n setColor(v);\n // Native color pickers fire `change` once the user confirms a\n // color; apply immediately so there's no separate Apply step.\n onColorSubmit(v);\n }}\n style={{ width: 40, height: 28, border: 'none', padding: 0, background: 'transparent', cursor: 'pointer' }}\n />\n <IconButton size=\"small\" onClick={onPromptCancel} title={t('common.cancel', 'Cancel')}>\n <FormatColorTextOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n ) : activePrompt === 'font' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5, py: 0.25 }}>\n <Select\n value={font}\n onChange={(e) => {\n const v = e.target.value as string;\n setFont(v);\n // Apply the font as soon as the user picks one.\n onFontSubmit(v);\n }}\n size=\"small\"\n variant=\"standard\"\n sx={{ minWidth: 180, fontSize: 13 }}\n >\n {FONT_OPTIONS.map((opt) => (\n <MenuItem key={opt.value} value={opt.value} sx={{ fontFamily: opt.value }}>\n {opt.label}\n </MenuItem>\n ))}\n </Select>\n <IconButton size=\"small\" onClick={onPromptCancel} title={t('common.cancel', 'Cancel')}>\n <TextFieldsOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n ) : (\n <Stack direction=\"row\" spacing={0.25}>\n <IconButton size=\"small\" onClick={onBold} title={t('toolbar.bold-shortcut', 'Bold (Cmd+B)')} aria-label={t('toolbar.bold', 'Bold')}>\n <FormatBoldOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onItalic} title={t('toolbar.italic-shortcut', 'Italic (Cmd+I)')} aria-label={t('toolbar.italic', 'Italic')}>\n <FormatItalicOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onUnderline} title={t('toolbar.underline-shortcut', 'Underline (Cmd+U)')} aria-label={t('toolbar.underline', 'Underline')}>\n <FormatUnderlinedOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onOverline} title={t('toolbar.overline', 'Overline')} aria-label={t('toolbar.overline', 'Overline')}>\n <FormatOverlineOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onColorRequest} title={t('toolbar.text-color', 'Text color')} aria-label={t('toolbar.text-color', 'Text color')}>\n <FormatColorTextOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onFontRequest} title={t('toolbar.font-family', 'Font family')} aria-label={t('toolbar.font-family', 'Font family')}>\n <TextFieldsOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onLinkRequest} title={t('toolbar.link-shortcut', 'Link (Cmd+K)')} aria-label={t('toolbar.link', 'Link')}>\n <LinkOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n )}\n </Paper>\n </Popper>\n );\n}\n","import React, { useState, useEffect, useLayoutEffect, useRef, CSSProperties } from 'react';\nimport { HeadingProps, HeadingPropsDefaults, renderInlineMarkdownString } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useDocument, useSelectedBlockId } from '@editor/editor-context';\n\nimport { useMarkdownToolbar } from '../helpers/use-markdown-toolbar';\nimport InlineFormattingToolbar from '../text/inline-formatting-toolbar';\n\n// Helper function to get font family from existing Heading component\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n case 'inherit':\n case null:\n case undefined:\n return undefined;\n }\n return undefined;\n}\n\n// Helper function to get padding from existing utils\nfunction getPadding(padding: any) {\n if (!padding) return undefined;\n\n // Object format from the schema (matching the original blocks)\n if (typeof padding === 'object' && !Array.isArray(padding) &&\n 'top' in padding && 'right' in padding && 'bottom' in padding && 'left' in padding) {\n return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n }\n\n // For backward compatibility with the array format\n if (Array.isArray(padding)) {\n if (padding.length === 1) {\n return `${padding[0]}px`;\n }\n if (padding.length === 2) {\n return `${padding[0]}px ${padding[1]}px`;\n }\n if (padding.length === 3) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px`;\n }\n if (padding.length === 4) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px ${padding[3]}px`;\n }\n }\n\n // For single number\n if (typeof padding === 'number') {\n return `${padding}px`;\n }\n\n return undefined;\n}\n\n// Helper function to get font size based on heading level\nfunction getFontSize(level: 'h1' | 'h2' | 'h3') {\n switch (level) {\n case 'h1':\n return 32;\n case 'h2':\n return 24;\n case 'h3':\n return 20;\n }\n}\n\nexport default function HeadingEditor({ style, props }: HeadingProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const document = useDocument();\n const isSelected = selectedBlockId === blockId;\n\n const level = props?.level ?? HeadingPropsDefaults.level;\n const textContent = props?.text ?? HeadingPropsDefaults.text;\n const [localText, setLocalText] = useState(textContent);\n const isMarkdown = props?.markdown ?? false;\n\n const rootBlock = document.root;\n const rootFontFamily = rootBlock && rootBlock.type === 'EmailLayout'\n ? getFontFamily(rootBlock.data.fontFamily)\n : '\"Helvetica Neue\", Arial, sans-serif';\n\n useEffect(() => {\n setLocalText(textContent);\n }, [textContent]);\n\n const fontFamily = getFontFamily(style?.fontFamily) || rootFontFamily;\n\n const hStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n margin: 0,\n fontFamily,\n fontSize: getFontSize(level),\n padding: getPadding(style?.padding),\n width: '100%',\n minHeight: '1em',\n };\n\n const textareaStyle: CSSProperties = {\n ...hStyle,\n border: 'none',\n outline: 'none',\n resize: 'none',\n backgroundColor: 'transparent',\n overflow: 'hidden',\n lineHeight: hStyle.lineHeight ?? 'inherit',\n margin: 0,\n display: 'block',\n width: '100%'\n };\n\n const commitText = (newText: string, opts?: { enableMarkdown?: boolean }) => {\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Heading',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n ...(opts?.enableMarkdown ? { markdown: true } : {}),\n },\n },\n },\n });\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n commitText(e.target.value);\n };\n\n // See text-editor.tsx: seed the textarea with at least the rendered heading's\n // height so the click-to-edit transition doesn't shrink.\n const displayRef = useRef<HTMLHeadingElement | null>(null);\n const lastDisplayHeightRef = useRef<number>(0);\n\n useLayoutEffect(() => {\n if (!isSelected && displayRef.current) {\n const h = displayRef.current.offsetHeight;\n if (h > 0) lastDisplayHeightRef.current = h;\n }\n }, [isSelected, textContent, isMarkdown, level]);\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (!element) return;\n element.style.height = 'auto';\n const scrollH = element.scrollHeight;\n const floor = lastDisplayHeightRef.current;\n element.style.height = `${Math.max(scrollH, floor)}px`;\n };\n\n const { textareaRef, trackFocus, handleKeyDown, toolbarProps } = useMarkdownToolbar({\n text: localText,\n isSelected,\n commitText: (newText) => commitText(newText, { enableMarkdown: true }),\n trackSelection: (sel) => {\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: sel.start,\n selectionEnd: sel.end,\n });\n },\n });\n\n useLayoutEffect(() => {\n if (textareaRef.current) adjustTextareaHeight(textareaRef.current);\n }, [localText, isSelected]);\n\n if (isSelected) {\n return (\n <>\n <textarea\n ref={textareaRef}\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={1}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n />\n <InlineFormattingToolbar anchorEl={textareaRef.current} {...toolbarProps} />\n </>\n );\n }\n\n const headingProps: React.HTMLAttributes<HTMLHeadingElement> & {\n ref: React.RefObject<HTMLHeadingElement>;\n } = isMarkdown\n ? {\n ref: displayRef,\n style: hStyle,\n dangerouslySetInnerHTML: { __html: renderInlineMarkdownString(textContent) },\n }\n : { ref: displayRef, style: hStyle, children: textContent };\n\n switch (level) {\n case 'h1':\n return <h1 {...headingProps} />;\n case 'h2':\n return <h2 {...headingProps} />;\n case 'h3':\n return <h3 {...headingProps} />;\n }\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { HtmlProps } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useSelectedBlockId } from '@editor/editor-context';\n\nexport default function HtmlEditor({ style, props }: HtmlProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const contents = props?.contents ?? '';\n const [localContents, setLocalContents] = useState(contents);\n\n useEffect(() => {\n setLocalContents(contents);\n }, [contents]);\n\n const cssStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: style?.padding\n ? `${style.padding.top}px ${style.padding.right}px ${style.padding.bottom}px ${style.padding.left}px`\n : undefined,\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newContents = e.target.value;\n setLocalContents(newContents);\n setDocument({\n [blockId]: {\n type: 'Html',\n data: {\n style,\n props: {\n ...props,\n contents: newContents,\n },\n },\n },\n });\n };\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (element) {\n element.style.height = 'auto';\n element.style.height = `${element.scrollHeight}px`;\n }\n };\n\n if (isSelected) {\n const textareaStyle: CSSProperties = {\n ...cssStyle,\n fontFamily: '\"Nimbus Mono PS\", \"Courier New\", monospace',\n fontSize: 13,\n color: cssStyle.color ?? '#333',\n border: 'none',\n outline: 'none',\n resize: 'none',\n overflow: 'hidden',\n width: '100%',\n display: 'block',\n margin: 0,\n backgroundColor: 'transparent',\n };\n\n const trackFocus = (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const el = e.currentTarget;\n setLastFocusedEditable({\n blockId,\n field: 'contents',\n selectionStart: el.selectionStart ?? el.value.length,\n selectionEnd: el.selectionEnd ?? el.value.length,\n });\n };\n\n return (\n <div style={cssStyle}>\n <textarea\n value={localContents}\n onChange={handleChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={3}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n ref={(el) => el && adjustTextareaHeight(el)}\n />\n </div>\n );\n }\n\n if (!contents) {\n return <div style={cssStyle} />;\n }\n return <div style={cssStyle} dangerouslySetInnerHTML={{ __html: contents }} />;\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { SignatureProps, SignaturePropsDefaults } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, useSelectedBlockId } from '@editor/editor-context';\n\nfunction getImageBorderRadius(shape: string, size: number): number | undefined {\n switch (shape) {\n case 'circle':\n return size;\n case 'rounded':\n return size * 0.125;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport default function SignatureEditor({ style, props }: SignatureProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const greeting = props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = props?.name ?? SignaturePropsDefaults.name;\n const title = props?.title ?? SignaturePropsDefaults.title;\n const company = props?.company ?? SignaturePropsDefaults.company;\n const address = props?.address ?? SignaturePropsDefaults.address;\n const email = props?.email ?? SignaturePropsDefaults.email;\n const phone = props?.phone ?? SignaturePropsDefaults.phone;\n const website = props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n const [localGreeting, setLocalGreeting] = useState(greeting);\n const [localName, setLocalName] = useState(name);\n const [localTitle, setLocalTitle] = useState(title);\n const [localCompany, setLocalCompany] = useState(company);\n const [localAddress, setLocalAddress] = useState(address);\n const [localEmail, setLocalEmail] = useState(email);\n const [localPhone, setLocalPhone] = useState(phone);\n const [localWebsite, setLocalWebsite] = useState(website);\n\n useEffect(() => { setLocalGreeting(greeting); }, [greeting]);\n useEffect(() => { setLocalName(name); }, [name]);\n useEffect(() => { setLocalTitle(title); }, [title]);\n useEffect(() => { setLocalCompany(company); }, [company]);\n useEffect(() => { setLocalAddress(address); }, [address]);\n useEffect(() => { setLocalEmail(email); }, [email]);\n useEffect(() => { setLocalPhone(phone); }, [phone]);\n useEffect(() => { setLocalWebsite(website); }, [website]);\n\n const updateProps = (updates: Partial<typeof props>) => {\n setDocument({\n [blockId]: {\n type: 'Signature',\n data: {\n style,\n props: { ...props, ...updates },\n },\n },\n });\n };\n\n const greetingStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n marginBottom: 8,\n lineHeight: '1.4',\n fontStyle: 'italic',\n };\n\n const nameStyle: CSSProperties = {\n fontSize: 16,\n fontWeight: 'bold',\n color: nameColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const detailStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 14,\n color: linkColor,\n textDecoration: 'none',\n };\n\n const inputBase: CSSProperties = {\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n width: '100%',\n padding: 0,\n margin: 0,\n fontFamily: 'inherit',\n };\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n padding: style?.padding\n ? `${style.padding.top}px ${style.padding.right}px ${style.padding.bottom}px ${style.padding.left}px`\n : undefined,\n };\n\n const imageElement = imageUrl ? (\n <img\n src={imageUrl}\n alt={name || company}\n width={imageSize}\n height={imageSize}\n style={{\n width: imageSize,\n height: imageSize,\n objectFit: 'cover',\n borderRadius: getImageBorderRadius(imageShape, imageSize),\n display: 'block',\n outline: 'none',\n border: 'none',\n }}\n />\n ) : null;\n\n const greetingElement = isSelected ? (\n <div onClick={(e) => e.stopPropagation()}>\n <input\n value={localGreeting}\n onChange={(e) => { setLocalGreeting(e.target.value); updateProps({ greeting: e.target.value }); }}\n placeholder=\"Greeting (e.g. Best regards,)\"\n style={{ ...inputBase, ...greetingStyle }}\n />\n </div>\n ) : greeting ? (\n <p style={greetingStyle}>{greeting}</p>\n ) : null;\n\n const textContent = isSelected ? (\n <div onClick={(e) => e.stopPropagation()}>\n <input\n value={localName}\n onChange={(e) => { setLocalName(e.target.value); updateProps({ name: e.target.value }); }}\n placeholder=\"Name\"\n style={{ ...inputBase, ...nameStyle }}\n />\n <input\n value={localTitle}\n onChange={(e) => { setLocalTitle(e.target.value); updateProps({ title: e.target.value }); }}\n placeholder=\"Title\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localCompany}\n onChange={(e) => { setLocalCompany(e.target.value); updateProps({ company: e.target.value }); }}\n placeholder=\"Company\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localAddress}\n onChange={(e) => { setLocalAddress(e.target.value); updateProps({ address: e.target.value }); }}\n placeholder=\"Address\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localEmail}\n onChange={(e) => { setLocalEmail(e.target.value); updateProps({ email: e.target.value }); }}\n placeholder=\"Email\"\n style={{ ...inputBase, ...linkStyle, marginTop: 4, display: 'block' }}\n />\n <input\n value={localPhone}\n onChange={(e) => { setLocalPhone(e.target.value); updateProps({ phone: e.target.value }); }}\n placeholder=\"Phone\"\n style={{ ...inputBase, ...linkStyle, display: 'block' }}\n />\n <input\n value={localWebsite}\n onChange={(e) => { setLocalWebsite(e.target.value); updateProps({ website: e.target.value }); }}\n placeholder=\"Website\"\n style={{ ...inputBase, ...linkStyle, display: 'block' }}\n />\n </div>\n ) : (\n <div>\n {name && <p style={nameStyle}>{name}</p>}\n {title && <p style={detailStyle}>{title}</p>}\n {company && <p style={detailStyle}>{company}</p>}\n {address && <p style={detailStyle}>{address}</p>}\n {(email || phone || website) && (\n <p style={{ ...detailStyle, marginTop: 4 }}>\n {email && <span style={linkStyle}>{email}</span>}\n {email && (phone || website) && <span style={detailStyle}> &middot; </span>}\n {phone && <span style={linkStyle}>{phone}</span>}\n {phone && website && <span style={detailStyle}> &middot; </span>}\n {website && <span style={linkStyle}>{website}</span>}\n </p>\n )}\n {!name && !title && !company && !email && !phone && !website && (\n <p style={detailStyle}>Click to edit signature</p>\n )}\n </div>\n );\n\n if (layout === 'vertical') {\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n {imageElement && <div style={{ marginBottom: 12 }}>{imageElement}</div>}\n {textContent}\n </div>\n );\n }\n\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n <table cellPadding=\"0\" cellSpacing=\"0\" border={0} role=\"presentation\">\n <tbody>\n <tr>\n {imageElement && (\n <td style={{ verticalAlign: 'middle', paddingRight: 16 }}>\n {imageElement}\n </td>\n )}\n <td style={{ verticalAlign: 'middle' }}>\n {textContent}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n","import React, { useState, useEffect, useLayoutEffect, useRef, CSSProperties } from 'react';\nimport { TextProps, TextPropsDefaults, renderMarkdownString } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useDocument, useSelectedBlockId } from '@editor/editor-context';\n\nimport { useMarkdownToolbar } from '../helpers/use-markdown-toolbar';\nimport InlineFormattingToolbar from './inline-formatting-toolbar';\n\n// Helper function to get font family from existing Text component\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n case 'inherit':\n case null:\n case undefined:\n return undefined;\n }\n return undefined;\n}\n\n// Helper function to get padding from existing utils\nfunction getPadding(padding: any) {\n if (!padding) return undefined;\n\n // Object format from the schema (matching the original blocks)\n if (typeof padding === 'object' && !Array.isArray(padding) &&\n 'top' in padding && 'right' in padding && 'bottom' in padding && 'left' in padding) {\n return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n }\n\n // For backward compatibility with the array format\n if (Array.isArray(padding)) {\n if (padding.length === 1) {\n return `${padding[0]}px`;\n }\n if (padding.length === 2) {\n return `${padding[0]}px ${padding[1]}px`;\n }\n if (padding.length === 3) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px`;\n }\n if (padding.length === 4) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px ${padding[3]}px`;\n }\n }\n\n // For single number\n if (typeof padding === 'number') {\n return `${padding}px`;\n }\n\n return undefined;\n}\n\nexport default function TextEditor({ style, props }: TextProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const document = useDocument();\n const isSelected = selectedBlockId === blockId;\n\n const textContent = props?.text ?? TextPropsDefaults.text;\n const [localText, setLocalText] = useState(textContent);\n const isMarkdown = props?.markdown ?? false;\n\n const rootBlock = document.root;\n const rootFontFamily = rootBlock && rootBlock.type === 'EmailLayout'\n ? getFontFamily(rootBlock.data.fontFamily)\n : '\"Helvetica Neue\", Arial, sans-serif';\n\n useEffect(() => {\n setLocalText(textContent);\n }, [textContent]);\n\n const fontFamily = getFontFamily(style?.fontFamily) || rootFontFamily;\n\n const wStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n fontFamily,\n fontWeight: style?.fontWeight ?? undefined,\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n width: '100%',\n minHeight: '1em'\n };\n\n const textareaStyle: CSSProperties = {\n ...wStyle,\n border: 'none',\n outline: 'none',\n resize: 'none',\n backgroundColor: 'transparent',\n overflow: 'hidden',\n lineHeight: wStyle.lineHeight ?? 'inherit',\n margin: 0,\n display: 'block',\n width: '100%',\n fontSize: wStyle.fontSize,\n fontWeight: wStyle.fontWeight,\n textAlign: wStyle.textAlign\n };\n\n const commitText = (newText: string, opts?: { enableMarkdown?: boolean }) => {\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Text',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n ...(opts?.enableMarkdown ? { markdown: true } : {}),\n },\n },\n },\n });\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n commitText(e.target.value);\n };\n\n // When the block is rendered as a div (not selected), remember its height so\n // the textarea can seed itself with at least that tall on the next select.\n // Markdown's <p> margins make the rendered div taller than textarea.scrollHeight\n // for identical text, which otherwise causes a visible shrink on click-to-edit.\n const displayRef = useRef<HTMLDivElement | null>(null);\n const lastDisplayHeightRef = useRef<number>(0);\n\n useLayoutEffect(() => {\n if (!isSelected && displayRef.current) {\n const h = displayRef.current.offsetHeight;\n if (h > 0) lastDisplayHeightRef.current = h;\n }\n }, [isSelected, textContent, isMarkdown]);\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (!element) return;\n element.style.height = 'auto';\n const scrollH = element.scrollHeight;\n const floor = lastDisplayHeightRef.current;\n element.style.height = `${Math.max(scrollH, floor)}px`;\n };\n\n const { textareaRef, trackFocus, handleKeyDown, toolbarProps } = useMarkdownToolbar({\n text: localText,\n isSelected,\n commitText: (newText) => commitText(newText, { enableMarkdown: true }),\n trackSelection: (sel) => {\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: sel.start,\n selectionEnd: sel.end,\n });\n },\n });\n\n useLayoutEffect(() => {\n if (textareaRef.current) adjustTextareaHeight(textareaRef.current);\n }, [localText, isSelected]);\n\n if (isSelected) {\n return (\n <>\n <textarea\n ref={textareaRef}\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={1}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n />\n <InlineFormattingToolbar anchorEl={textareaRef.current} {...toolbarProps} />\n </>\n );\n }\n\n if (isMarkdown) {\n return (\n <div\n ref={displayRef}\n style={wStyle}\n dangerouslySetInnerHTML={{ __html: renderMarkdownString(textContent) }}\n />\n );\n }\n\n return (\n <div ref={displayRef} style={wStyle}>\n {textContent}\n </div>\n );\n}\n","import React from 'react';\nimport { z } from 'zod';\n\nimport {\n Avatar, AvatarPropsSchema,\n ButtonPropsSchema,\n Divider, DividerPropsSchema,\n HeadingPropsSchema,\n HtmlPropsSchema,\n Image, ImagePropsSchema,\n SignaturePropsSchema,\n Spacer, SpacerPropsSchema,\n TextPropsSchema\n} from '@blocks';\nimport {\n buildBlockComponent,\n buildBlockConfigurationDictionary,\n buildBlockConfigurationSchema,\n} from '@core';\n\nimport ColumnsContainerEditor from '@editor/blocks/columns-container/columns-container-editor';\nimport ColumnsContainerPropsSchema from '@editor/blocks/columns-container/columns-container-props-schema';\nimport ContainerEditor from '@editor/blocks/container/container-editor';\nimport ContainerPropsSchema from '@editor/blocks/container/container-props-schema';\nimport EmailLayoutEditor from '@editor/blocks/email-layout/email-layout-editor';\nimport EmailLayoutPropsSchema from '@editor/blocks/email-layout/email-layout-props-schema';\nimport EditorBlockWrapper from '@editor/blocks/helpers/block-wrappers/editor-block-wrapper';\nimport ButtonEditor from '@editor/blocks/button/button-editor';\nimport HeadingEditor from '@editor/blocks/heading/heading-editor';\nimport HtmlEditor from '@editor/blocks/html/html-editor';\nimport SignatureEditor from '@editor/blocks/signature/signature-editor';\nimport TextEditor from '@editor/blocks/text/text-editor';\n\nconst EDITOR_DICTIONARY = buildBlockConfigurationDictionary({\n Avatar: {\n schema: AvatarPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Avatar {...props} />\n </EditorBlockWrapper>\n ),\n },\n Button: {\n schema: ButtonPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ButtonEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Container: {\n schema: ContainerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ContainerEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n ColumnsContainer: {\n schema: ColumnsContainerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ColumnsContainerEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Heading: {\n schema: HeadingPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <HeadingEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Html: {\n schema: HtmlPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <HtmlEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Image: {\n schema: ImagePropsSchema,\n Component: (data) => {\n const props = {\n ...data,\n props: {\n ...data.props,\n url: data.props?.url ?? 'https://placehold.co/600x400@2x/F8F8F8/CCC?text=Your%20image',\n linkHref: null,\n },\n };\n return (\n <EditorBlockWrapper>\n <Image {...props} />\n </EditorBlockWrapper>\n );\n },\n },\n Text: {\n schema: TextPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <TextEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n EmailLayout: {\n schema: EmailLayoutPropsSchema,\n Component: (p) => <EmailLayoutEditor {...p} />,\n },\n Spacer: {\n schema: SpacerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Spacer {...props} />\n </EditorBlockWrapper>\n ),\n },\n Divider: {\n schema: DividerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Divider {...props} />\n </EditorBlockWrapper>\n ),\n },\n Signature: {\n schema: SignaturePropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <SignatureEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n});\n\nexport const EditorBlock = buildBlockComponent(EDITOR_DICTIONARY);\nexport const EditorBlockSchema = buildBlockConfigurationSchema(EDITOR_DICTIONARY);\nexport const EditorConfigurationSchema = z.record(z.string(), EditorBlockSchema);\n\nexport type TEditorBlock = z.infer<typeof EditorBlockSchema>;\nexport type TEditorConfiguration = Record<string, TEditorBlock>;\n","import React, { createContext, useContext } from 'react';\n\nimport { EditorBlock as CoreEditorBlock } from './core';\nimport { useDocument } from './editor-context';\n\nconst EditorBlockContext = createContext<string | null>(null);\nexport const useCurrentBlockId = () => useContext(EditorBlockContext)!;\n\ntype EditorBlockProps = {\n id: string;\n};\n\n/**\n *\n * @param id - Block id\n * @returns EditorBlock component that loads data from the EditorDocumentContext\n */\nexport default function EditorBlock({ id }: EditorBlockProps) {\n const document = useDocument();\n const block = document[id];\n if (!block) {\n throw new Error('Could not find block');\n }\n return (\n <EditorBlockContext.Provider value={id}>\n <CoreEditorBlock {...block} />\n </EditorBlockContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { AppRegistrationOutlined, LastPageOutlined } from '@mui/icons-material';\nimport { IconButton } from '@mui/material';\n\nimport { toggleInspectorDrawerOpen, useInspectorDrawerOpen } from '@editor/editor-context';\n\nexport default function ToggleInspectorPanelButton() {\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n\n const handleClick = () => {\n toggleInspectorDrawerOpen();\n };\n if (inspectorDrawerOpen) {\n return (\n <IconButton onClick={handleClick}>\n <LastPageOutlined fontSize=\"small\" />\n </IconButton>\n );\n }\n return (\n <IconButton onClick={handleClick}>\n <AppRegistrationOutlined fontSize=\"small\" />\n </IconButton>\n );\n}\n","import React from 'react';\n\nimport { FirstPageOutlined, MenuOutlined } from '@mui/icons-material';\nimport { IconButton } from '@mui/material';\n\nimport { toggleSamplesDrawerOpen, useSamplesDrawerOpen } from '@editor/editor-context';\n\nfunction useIcon() {\n const samplesDrawerOpen = useSamplesDrawerOpen();\n if (samplesDrawerOpen) {\n return <FirstPageOutlined fontSize=\"small\" />;\n }\n return <MenuOutlined fontSize=\"small\" />;\n}\n\nexport default function ToggleSamplesPanelButton() {\n const icon = useIcon();\n return <IconButton onClick={toggleSamplesDrawerOpen}>{icon}</IconButton>;\n}\n","/**\n * HTML formatter using the lightweight htmlfy library\n * https://github.com/j4w8n/htmlfy\n */\n\nimport { prettify } from 'htmlfy';\n\n/**\n * Format HTML string using htmlfy's prettify function \n * @param html The HTML string to format\n * @param spaces Indentation spaces (default: 2)\n * @returns Formatted HTML\n */\nexport function formatHtml(html: string, spaces: number = 2): string {\n try {\n return prettify(html, {\n tab_size: spaces,\n content_wrap: 80, // Wrap content at 80 characters\n tag_wrap: 60, // Wrap tag attributes at 60 characters\n ignore: [] // Don't ignore any elements\n });\n } catch (e) {\n console.error('Error formatting HTML:', e);\n // Fallback to basic formatting if htmlfy fails\n return html.trim()\n .replace(/>\\s*</g, '>\\n<')\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line)\n .join('\\n');\n }\n}\n\n/**\n * Minify HTML string using htmlfy's minify function\n * @param html The HTML string to minify\n * @returns Minified HTML\n */\nexport function minifyHtml(html: string): string {\n try {\n return minify(html);\n } catch (e) {\n console.error('Error minifying HTML:', e);\n // Fallback to basic minification\n return html.replace(/>\\s+</g, '><').trim();\n }\n} ","import hljs from 'highlight.js';\nimport jsonHighlighter from 'highlight.js/lib/languages/json';\nimport xmlHighlighter from 'highlight.js/lib/languages/xml';\nimport { formatHtml } from './html-formatter';\n\nhljs.registerLanguage('json', jsonHighlighter);\nhljs.registerLanguage('html', xmlHighlighter);\n\nexport async function html(value: string): Promise<string> {\n try {\n // Use our custom formatter\n const prettyValue = formatHtml(value, 2);\n return hljs.highlight(prettyValue, { language: 'html' }).value;\n } catch (e) {\n console.error('Error highlighting HTML:', e);\n return hljs.highlight(value, { language: 'html' }).value;\n }\n}\n\nexport async function json(value: string): Promise<string> {\n try {\n // Try to parse and then format with native JSON.stringify\n const parsed = JSON.parse(value);\n const prettyValue = JSON.stringify(parsed, null, 2);\n return hljs.highlight(prettyValue, { language: 'javascript' }).value;\n } catch (e) {\n console.error('Error highlighting JSON:', e);\n // If parsing fails, just highlight the original value\n return hljs.highlight(value, { language: 'javascript' }).value;\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { html, json } from './highlighters';\n\ntype TextEditorPanelProps = {\n type: 'json' | 'html' | 'javascript';\n value: string;\n};\nexport default function HighlightedCodePanel({ type, value }: TextEditorPanelProps) {\n const [code, setCode] = useState<string | null>(null);\n\n useEffect(() => {\n switch (type) {\n case 'html':\n html(value).then(setCode);\n return;\n case 'json':\n json(value).then(setCode);\n return;\n }\n }, [setCode, value, type]);\n\n if (code === null) {\n return null;\n }\n\n return (\n <pre\n style={{ \n margin: 0, \n padding: 16,\n overflowX: 'auto',\n whiteSpace: 'pre',\n fontSize: '12px',\n }}\n dangerouslySetInnerHTML={{ __html: code }}\n onClick={(ev) => {\n const s = window.getSelection();\n if (s === null) {\n return;\n }\n s.selectAllChildren(ev.currentTarget);\n }}\n />\n );\n}\n","import React, { useMemo } from 'react';\n\nimport { renderToStaticMarkup } from '@email-builder';\n\nimport { useDocument } from '@editor/editor-context';\n\nimport HighlightedCodePanel from './helper/highlighted-code-panel';\n\nexport default function HtmlPanel() {\n const document = useDocument();\n const code = useMemo(() => renderToStaticMarkup(document, { rootBlockId: 'root' }), [document]);\n return <HighlightedCodePanel type=\"html\" value={code} />;\n}\n","import React, { useMemo } from 'react';\n\nimport { useDocument } from '@editor/editor-context';\n\nimport HighlightedCodePanel from './helper/highlighted-code-panel';\n\nexport default function JsonPanel() {\n const document = useDocument();\n const code = useMemo(() => JSON.stringify(document, null, ' '), [document]);\n return <HighlightedCodePanel type=\"json\" value={code} />;\n}\n","import React, { useMemo } from 'react';\n\nimport { renderToText } from '@email-builder';\n\nimport { useDocument } from '@editor/editor-context';\n\nexport default function TextPanel() {\n const document = useDocument();\n const text = useMemo(() => renderToText(document, { rootBlockId: 'root' }), [document]);\n return (\n <pre\n style={{\n margin: 0,\n padding: 16,\n overflowX: 'auto',\n whiteSpace: 'pre-wrap',\n fontSize: '13px',\n fontFamily: 'monospace',\n lineHeight: '1.5',\n }}\n onClick={(ev) => {\n const s = window.getSelection();\n if (s === null) return;\n s.selectAllChildren(ev.currentTarget);\n }}\n >\n {text}\n </pre>\n );\n}\n","import React from 'react';\n\nimport { CodeOutlined, DataObjectOutlined, EditOutlined, PreviewOutlined, SubjectOutlined } from '@mui/icons-material';\nimport { Tab, Tabs, Tooltip } from '@mui/material';\n\nimport { setSelectedMainTab, useSelectedMainTab } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nexport default function MainTabsGroup() {\n const selectedMainTab = useSelectedMainTab();\n const handleChange = (_: unknown, v: unknown) => {\n switch (v) {\n case 'json':\n case 'preview':\n case 'editor':\n case 'html':\n case 'text':\n setSelectedMainTab(v);\n return;\n default:\n setSelectedMainTab('editor');\n }\n };\n\n return (\n <Tabs value={selectedMainTab} onChange={handleChange}>\n <Tab\n value=\"editor\"\n label={\n <Tooltip title={t('tab.edit', 'Edit')}>\n <EditOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"preview\"\n label={\n <Tooltip title={t('tab.preview', 'Preview')}>\n <PreviewOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"html\"\n label={\n <Tooltip title={t('tab.html-output', 'HTML output')}>\n <CodeOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"text\"\n label={\n <Tooltip title={t('tab.text-output', 'Plain text output')}>\n <SubjectOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"json\"\n label={\n <Tooltip title={t('tab.json-output', 'JSON output')}>\n <DataObjectOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n </Tabs>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Button, Tooltip } from '@mui/material';\nimport { AddOutlined, SaveOutlined, SaveAsOutlined } from '@mui/icons-material';\nimport { resetDocument, useDocument } from '@editor/editor-context';\nimport { t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { useSnackbar } from './snackbar-provider';\nimport { buildSavePayload, type SavePayload } from '../save-payload';\nimport SaveTemplateDialog from './save-template-dialog';\nimport EMPTY_EMAIL_MESSAGE from '@sample/empty-email-message';\nimport type { TemplateListItem } from '../index';\n\ntype SaveBarProps = {\n loadTemplates?: () => Promise<TemplateListItem[]>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n};\n\ntype DialogMode = null | 'save-as' | 'new-blank';\n\nexport default function SaveBar({ loadTemplates, saveAs }: SaveBarProps) {\n const {\n saveTemplate,\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n setCurrentTemplate,\n loadTemplate: ctxLoadTemplate,\n } = useEmailEditor();\n const { showMessage } = useSnackbar();\n const document = useDocument();\n const [dialogMode, setDialogMode] = useState<DialogMode>(null);\n const [nameError, setNameError] = useState<string | null>(null);\n\n const hasOpenRow = Boolean(currentTemplateId);\n const isSample = currentTemplateKind === 'sample';\n const primaryLabel = hasOpenRow ? t('savebar.save', 'Save') : t('savebar.save-as-new', 'Save as new…');\n\n const handlePrimary = async () => {\n try {\n if (!hasOpenRow) {\n setNameError(null);\n setDialogMode('save-as');\n return;\n }\n saveTemplate();\n showMessage(isSample ? t('savebar.sample-saved', 'Sample saved') : t('savebar.template-saved', 'Template saved'));\n if (loadTemplates) await loadTemplates();\n } catch (e) {\n console.error('Error saving:', e);\n showMessage(t('savebar.error-saving', 'Error saving'));\n }\n };\n\n const handleSaveAs = async (name: string): Promise<boolean> => {\n if (!saveAs) return false;\n try {\n const starterContent = dialogMode === 'new-blank' ? EMPTY_EMAIL_MESSAGE : document;\n const { id, slug } = await saveAs(name, buildSavePayload(starterContent));\n resetDocument(starterContent);\n setCurrentTemplate(id, slug, 'template');\n ctxLoadTemplate(starterContent, id, slug, 'template');\n if (loadTemplates) await loadTemplates();\n showMessage(\n dialogMode === 'new-blank'\n ? t('savebar.new-template-created', 'New template created')\n : t('savebar.template-saved', 'Template saved')\n );\n window.location.hash = `#template/${id}`;\n return true;\n } catch (e) {\n console.error('Error in saveAs:', e);\n showMessage(t('savebar.error-saving', 'Error saving'));\n return false;\n }\n };\n\n return (\n <>\n <Box\n sx={{\n position: 'sticky',\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n zIndex: 2,\n pb: 3,\n }}\n >\n <Box\n sx={{\n pointerEvents: 'auto',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 1.25,\n px: 2,\n py: 1.25,\n backgroundColor: 'background.paper',\n borderRadius: 999,\n boxShadow:\n '0 2px 6px rgba(33, 36, 67, 0.06), 0 16px 40px rgba(33, 36, 67, 0.14)',\n }}\n >\n {hasOpenRow && currentTemplateName && (\n <Box\n sx={{\n pl: 1,\n pr: 1,\n fontSize: 14,\n color: 'text.secondary',\n maxWidth: 220,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={currentTemplateName}\n >\n {isSample ? `${t('savebar.sample-prefix', 'Sample')} · ` : ''}\n <Box component=\"span\" sx={{ color: 'text.primary', fontWeight: 600 }}>\n {currentTemplateName}\n </Box>\n </Box>\n )}\n <Tooltip title={\n hasOpenRow\n ? (isSample\n ? t('savebar.save-changes-to-sample', 'Save changes to this sample')\n : t('savebar.save-changes', 'Save changes'))\n : t('savebar.save-as-new-template', 'Save as a new template')\n }>\n <Button\n variant=\"contained\"\n size=\"large\"\n startIcon={<SaveOutlined />}\n onClick={handlePrimary}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2.5, fontSize: 15, fontWeight: 600 }}\n >\n {primaryLabel}\n </Button>\n </Tooltip>\n {hasOpenRow && saveAs && (\n <Tooltip title={t('savebar.save-as-new-template', 'Save as a new template')}>\n <Button\n variant=\"outlined\"\n size=\"large\"\n startIcon={<SaveAsOutlined />}\n onClick={() => {\n setNameError(null);\n setDialogMode('save-as');\n }}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2, fontSize: 14 }}\n >\n {t('savebar.save-as', 'Save as…')}\n </Button>\n </Tooltip>\n )}\n {saveAs && (\n <Tooltip title={t('savebar.start-fresh', 'Start a fresh template')}>\n <Button\n variant=\"text\"\n size=\"large\"\n startIcon={<AddOutlined />}\n onClick={() => {\n setNameError(null);\n setDialogMode('new-blank');\n }}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2, fontSize: 14, color: 'text.secondary' }}\n >\n {t('savebar.new', 'New')}\n </Button>\n </Tooltip>\n )}\n </Box>\n </Box>\n\n <SaveTemplateDialog\n open={dialogMode !== null}\n mode={dialogMode === 'new-blank' ? 'new' : 'save-as'}\n onClose={() => {\n setDialogMode(null);\n setNameError(null);\n }}\n onSave={handleSaveAs}\n onNameChange={() => setNameError(null)}\n defaultName={\n dialogMode === 'new-blank'\n ? 'New Template'\n : currentTemplateName\n ? `${currentTemplateName} (Copy)`\n : 'New Template'\n }\n error={nameError}\n />\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { RedoOutlined, UndoOutlined } from '@mui/icons-material';\nimport { IconButton, Stack, Tooltip } from '@mui/material';\n\nimport { redo, undo, useCanRedo, useCanUndo } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nfunction isMac(): boolean {\n if (typeof navigator === 'undefined') return false;\n const platform = (navigator.platform || '').toLowerCase();\n if (platform.includes('mac')) return true;\n const ua = (navigator.userAgent || '').toLowerCase();\n return ua.includes('mac') && !ua.includes('windows');\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n const tag = target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if (target.isContentEditable) return true;\n return false;\n}\n\nexport default function UndoRedoButtons() {\n const canUndo = useCanUndo();\n const canRedo = useCanRedo();\n const mac = isMac();\n const modKey = mac ? '⌘' : 'Ctrl';\n const undoHint = `${modKey}+Z`;\n const redoHint = mac ? `${modKey}+⇧+Z` : `${modKey}+Shift+Z / ${modKey}+Y`;\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const mod = mac ? e.metaKey : e.ctrlKey;\n if (!mod) return;\n // Defer to the native undo stack when focus is inside a text field —\n // the user expects Cmd+Z to rewind the field they're typing in.\n if (isEditableTarget(e.target)) return;\n\n const key = e.key.toLowerCase();\n if (key === 'z' && !e.shiftKey) {\n e.preventDefault();\n undo();\n } else if ((key === 'z' && e.shiftKey) || (key === 'y' && !mac)) {\n e.preventDefault();\n redo();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [mac]);\n\n return (\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\n <Tooltip title={`${t('undo.tooltip', 'Undo')} (${undoHint})`}>\n <span>\n <IconButton\n size=\"small\"\n onClick={undo}\n disabled={!canUndo}\n aria-label={t('undo.label', 'Undo')}\n >\n <UndoOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={`${t('redo.tooltip', 'Redo')} (${redoHint})`}>\n <span>\n <IconButton\n size=\"small\"\n onClick={redo}\n disabled={!canRedo}\n aria-label={t('redo.label', 'Redo')}\n >\n <RedoOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Stack>\n );\n}\n","import React from 'react';\nimport { Box, InputBase } from '@mui/material';\nimport { setDocument, setLastFocusedEditable, useDocument } from '@editor/editor-context';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\n\nexport default function SubjectInput() {\n const document = useDocument();\n const root = document.root;\n if (!root || root.type !== 'EmailLayout') return null;\n const data = root.data as EmailLayoutProps;\n const subject = data.subject ?? '';\n\n const handleChange = (value: string) => {\n setDocument({\n root: { ...root, data: { ...data, subject: value } },\n });\n };\n\n const trackFocus = (e: React.SyntheticEvent) => {\n const target = e.target as HTMLInputElement | null;\n if (!target || typeof target.value !== 'string') return;\n setLastFocusedEditable({\n blockId: 'subject',\n field: 'subject',\n selectionStart: target.selectionStart ?? target.value.length,\n selectionEnd: target.selectionEnd ?? target.value.length,\n });\n };\n\n return (\n <Box\n sx={{\n px: 3,\n py: 1.25,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 49,\n zIndex: 'appBar',\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n }}\n >\n <Box sx={{ color: 'text.secondary', fontSize: 13, fontWeight: 600, minWidth: 56 }}>Subject</Box>\n <InputBase\n fullWidth\n placeholder=\"Email subject — supports {{variables}}\"\n value={subject}\n onChange={(e) => handleChange(e.target.value)}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={trackFocus}\n sx={{ fontSize: 14 }}\n />\n </Box>\n );\n}\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport { useDocument } from '@editor/editor-context';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\nimport {\n buildSampleValueMap,\n substituteSampleValues,\n TemplateVariable,\n} from '../variables/variable-utils';\n\nexport default function SubjectPreview() {\n const document = useDocument();\n const root = document.root;\n if (!root || root.type !== 'EmailLayout') return null;\n const data = root.data as EmailLayoutProps;\n const subject = data.subject ?? '';\n if (!subject) return null;\n\n const samples = buildSampleValueMap((data.variables ?? []) as TemplateVariable[]);\n const rendered = substituteSampleValues(subject, samples);\n\n return (\n <Box\n sx={{\n px: 3,\n py: 1.25,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 49,\n zIndex: 'appBar',\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n }}\n >\n <Box sx={{ color: 'text.secondary', fontSize: 13, fontWeight: 600, minWidth: 56 }}>\n Subject\n </Box>\n <Box sx={{ fontSize: 14 }}>{rendered}</Box>\n </Box>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Box } from '@mui/material';\nimport { CloudUploadOutlined } from '@mui/icons-material';\nimport {\n getDocument,\n setDocument,\n setSelectedBlockId,\n} from '@editor/editor-context';\nimport { useImageCallbacks, type UploadedImage } from '../image-context';\n\ntype Props = {\n enabled: boolean;\n children: React.ReactNode;\n};\n\nfunction generateId() {\n return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction buildImageBlock(uploaded: UploadedImage) {\n return {\n type: 'Image' as const,\n data: {\n props: {\n url: uploaded.url,\n width: uploaded.width ?? null,\n height: uploaded.height ?? null,\n alt: uploaded.alt ?? '',\n contentAlignment: 'middle' as const,\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n };\n}\n\nfunction appendImageBlock(uploaded: UploadedImage) {\n const doc = getDocument();\n const root: any = doc.root;\n if (!root || root.type !== 'EmailLayout') return;\n const id = generateId();\n const childrenIds = [...((root.data.childrenIds as string[] | null) ?? []), id];\n setDocument({\n [id]: buildImageBlock(uploaded),\n root: { ...root, data: { ...root.data, childrenIds } },\n } as any);\n setSelectedBlockId(id);\n}\n\nfunction findImageFile(items: FileList | DataTransferItemList | null | undefined): File | null {\n if (!items) return null;\n const fileList = items instanceof FileList ? Array.from(items) : Array.from(items);\n for (const item of fileList) {\n const file = item instanceof File ? item : (item as DataTransferItem).getAsFile?.();\n if (file && file.type.startsWith('image/')) return file;\n }\n return null;\n}\n\n/**\n * Listens for image-file drops and clipboard pastes on the canvas wrapper.\n * Calls `uploadImage` then appends a new Image block at the root. Renders a\n * drop overlay while a file is dragged over. No-op when uploadImage is not\n * provided or `enabled` is false.\n */\nexport default function ImageDropPasteHandler({ enabled, children }: Props) {\n const { uploadImage } = useImageCallbacks();\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const dragDepth = useRef(0);\n const [dragging, setDragging] = useState(false);\n const [uploading, setUploading] = useState(false);\n\n const active = enabled && Boolean(uploadImage);\n\n useEffect(() => {\n if (!active || !uploadImage) return;\n const handlePaste = async (e: ClipboardEvent) => {\n const target = e.target as HTMLElement | null;\n if (target?.tagName === 'INPUT' || target?.tagName === 'TEXTAREA' || target?.isContentEditable) return;\n const file = findImageFile(e.clipboardData?.files);\n if (!file) return;\n e.preventDefault();\n setUploading(true);\n try {\n const uploaded = await uploadImage(file);\n appendImageBlock(uploaded);\n } catch {\n // silent: surfaced via console; consumer can show their own toast\n } finally {\n setUploading(false);\n }\n };\n window.addEventListener('paste', handlePaste);\n return () => window.removeEventListener('paste', handlePaste);\n }, [active, uploadImage]);\n\n if (!active) return <>{children}</>;\n\n const onDragEnter = (e: React.DragEvent) => {\n if (!Array.from(e.dataTransfer?.items ?? []).some((i) => i.kind === 'file')) return;\n dragDepth.current += 1;\n setDragging(true);\n };\n const onDragLeave = () => {\n dragDepth.current = Math.max(0, dragDepth.current - 1);\n if (dragDepth.current === 0) setDragging(false);\n };\n const onDragOver = (e: React.DragEvent) => {\n if (!Array.from(e.dataTransfer?.items ?? []).some((i) => i.kind === 'file')) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n };\n const onDrop = async (e: React.DragEvent) => {\n dragDepth.current = 0;\n setDragging(false);\n const file = findImageFile(e.dataTransfer?.files);\n if (!file || !uploadImage) return;\n e.preventDefault();\n setUploading(true);\n try {\n const uploaded = await uploadImage(file);\n appendImageBlock(uploaded);\n } catch {\n // silent\n } finally {\n setUploading(false);\n }\n };\n\n return (\n <Box\n ref={wrapperRef}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n sx={{ position: 'relative' }}\n >\n {children}\n {(dragging || uploading) && (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(33, 150, 243, 0.06)',\n border: '2px dashed',\n borderColor: 'primary.main',\n borderRadius: 1,\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: 12,\n color: 'primary.dark',\n pointerEvents: 'none',\n zIndex: 10,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, fontWeight: 600, fontSize: 14 }}>\n <CloudUploadOutlined />\n {uploading ? 'Uploading…' : 'Drop image to insert'}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\n\nimport { MonitorOutlined, PhoneIphoneOutlined } from '@mui/icons-material';\nimport { Box, Stack, SxProps, ToggleButton, ToggleButtonGroup, Tooltip } from '@mui/material';\nimport { Reader } from '@email-builder';\n\nimport EditorBlock from '@editor/editor-block';\nimport {\n setSelectedScreenSize,\n useDocument,\n useSelectedMainTab,\n useSelectedScreenSize,\n usePersistenceEnabled,\n useWorkspaceBackground\n} from '@editor/editor-context';\nimport { t } from '@i18n';\nimport ToggleInspectorPanelButton from '../inspector-drawer/toggle-inspector-panel-button';\nimport ToggleSamplesPanelButton from '../templates-drawer/toggle-samples-panel-button';\n\nimport HtmlPanel from './html-panel';\nimport JsonPanel from './json-panel';\nimport TextPanel from './text-panel';\nimport MainTabsGroup from './main-tabs-group';\nimport SaveBar from './save-bar';\nimport UndoRedoButtons from './undo-redo-buttons';\nimport SubjectInput from './subject-input';\nimport SubjectPreview from './subject-preview';\nimport ImageDropPasteHandler from './image-drop-paste-handler';\nimport { TemplateListItem } from '../index';\nimport type { SavePayload } from '../save-payload';\nimport {\n applySampleValuesToDocument,\n buildSampleValueMap,\n TemplateVariable,\n} from '../variables/variable-utils';\n\ninterface TemplatePanelProps {\n loadTemplates?: () => Promise<TemplateListItem[]>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n samplesDrawerEnabled?: boolean;\n}\n\n// Editor-mode workspace backgrounds. 'checkerboard' is a 12-px light/dark\n// squares pattern (opt-in default per user ask); 'solid' is the previous flat\n// gray. Both sit behind the email card and never reach the rendered output.\nconst WORKSPACE_SOLID = '#e7e8ec';\nconst WORKSPACE_CHECKERBOARD =\n 'repeating-conic-gradient(#eceef2 0% 25%, #dfe1e6 0% 50%) 50% / 12px 12px';\n\nexport default function TemplatePanel({ loadTemplates, saveAs, samplesDrawerEnabled = true }: TemplatePanelProps) {\n const document = useDocument();\n const selectedMainTab = useSelectedMainTab();\n const selectedScreenSize = useSelectedScreenSize();\n const persistenceEnabled = usePersistenceEnabled();\n const workspaceBackground = useWorkspaceBackground();\n\n let mainBoxSx: SxProps = {\n height: '100%',\n };\n if (selectedScreenSize === 'mobile') {\n mainBoxSx = {\n ...mainBoxSx,\n margin: '32px auto',\n width: 370,\n height: 800,\n boxShadow:\n 'rgba(33, 36, 67, 0.04) 0px 10px 20px, rgba(33, 36, 67, 0.08) 0px 2px 4px',\n borderRadius: '16px',\n };\n }\n\n const handleScreenSizeChange = (_: unknown, value: unknown) => {\n switch (value) {\n case 'mobile':\n case 'desktop':\n setSelectedScreenSize(value);\n return;\n default:\n setSelectedScreenSize('desktop');\n }\n };\n\n const renderMainPanel = () => {\n switch (selectedMainTab) {\n case 'editor':\n return (\n <Box sx={mainBoxSx}>\n <EditorBlock id=\"root\" />\n </Box>\n );\n case 'preview': {\n const rootBlock = document.root;\n const layoutData =\n rootBlock && rootBlock.type === 'EmailLayout' ? (rootBlock.data as any) : undefined;\n const samples = buildSampleValueMap(\n (layoutData?.variables ?? []) as TemplateVariable[]\n );\n const previewDoc = applySampleValuesToDocument(document, samples);\n return (\n <Box sx={mainBoxSx}>\n <Reader document={previewDoc} rootBlockId=\"root\" />\n </Box>\n );\n }\n case 'html':\n return <HtmlPanel />;\n case 'text':\n return <TextPanel />;\n case 'json':\n return <JsonPanel />;\n }\n };\n\n const showSaveButtons = persistenceEnabled;\n\n return (\n <>\n <Stack\n sx={{\n height: 49,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 0,\n zIndex: 'appBar',\n px: 1,\n }}\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n {samplesDrawerEnabled && <ToggleSamplesPanelButton />}\n <Stack px={2} direction=\"row\" gap={2} width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" spacing={2}>\n <MainTabsGroup />\n </Stack>\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n {selectedMainTab === 'editor' && <UndoRedoButtons />}\n <ToggleButtonGroup value={selectedScreenSize} exclusive size=\"small\" onChange={handleScreenSizeChange}>\n <ToggleButton value=\"desktop\">\n <Tooltip title={t('canvas.desktop-view', 'Desktop view')}>\n <MonitorOutlined fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n <ToggleButton value=\"mobile\">\n <Tooltip title={t('canvas.mobile-view', 'Mobile view')}>\n <PhoneIphoneOutlined fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n </ToggleButtonGroup>\n </Stack>\n </Stack>\n <ToggleInspectorPanelButton />\n </Stack>\n {selectedMainTab === 'editor' && <SubjectInput />}\n {selectedMainTab === 'preview' && <SubjectPreview />}\n <ImageDropPasteHandler enabled={selectedMainTab === 'editor'}>\n <Box\n sx={{\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '16px',\n minWidth: 370,\n // Fills to the bottom of the viewport in editor mode so the\n // workspace gray doesn't end midway under a short email.\n // 49px toolbar + 49px subject bar = 98px fixed chrome above.\n minHeight: selectedMainTab === 'editor' ? 'calc(100vh - 98px)' : undefined,\n background:\n selectedMainTab === 'editor'\n ? workspaceBackground === 'checkerboard'\n ? WORKSPACE_CHECKERBOARD\n : WORKSPACE_SOLID\n : undefined,\n }}\n >\n <Box sx={{ flexGrow: 1 }}>{renderMainPanel()}</Box>\n {showSaveButtons && selectedMainTab === 'editor' && (\n <SaveBar loadTemplates={loadTemplates} saveAs={saveAs} />\n )}\n </Box>\n </ImageDropPasteHandler>\n </>\n );\n}\n","import React, { forwardRef, useImperativeHandle, useEffect, useMemo, useRef } from 'react';\nimport { I18nProvider } from '@lingui/react';\nimport { Stack, useTheme, ThemeProvider } from '@mui/material';\nimport { Theme } from '@mui/material/styles';\nimport defaultTheme from '../theme';\nimport { CssBaseline } from '@mui/material';\nimport { activateLocale, i18n, type SupportedLocale } from '../i18n';\n\nimport { TEditorConfiguration } from '@editor/core';\nimport {\n useDocument,\n getDocument,\n resetDocument,\n useInspectorDrawerOpen,\n useSamplesDrawerOpen,\n setPersistenceEnabled\n} from '@editor/editor-context';\nimport { EmailEditorProvider, useEmailEditor, EmailEditorContextType, EmailEditorProviderProps } from './context';\nimport { ImageCallbacksProvider, type ImageCallbacks, type LibraryImage, type UploadedImage } from './image-context';\nimport type { SavePayload } from './save-payload';\nimport InspectorDrawer, { INSPECTOR_DRAWER_WIDTH } from './inspector-drawer';\nimport SamplesDrawer, { SAMPLES_DRAWER_WIDTH } from './templates-drawer';\nimport TemplatePanel from './email-canvas';\nimport { SnackbarProvider } from './email-canvas/snackbar-provider';\n\n/**\n * Wraps a raw HTML string in an editor config with an EmailLayout root + one Html block.\n */\nfunction htmlToEditorConfig(html: string): TEditorConfiguration {\n return {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: ['block-html-import'],\n },\n },\n 'block-html-import': {\n type: 'Html',\n data: {\n style: {\n padding: { top: 0, bottom: 0, right: 0, left: 0 },\n },\n props: {\n contents: html,\n },\n },\n },\n };\n}\n\nexport type TemplateKind = 'template' | 'sample';\n\n// List-endpoint contract for templates and samples. Kept intentionally lean —\n// `loadTemplate(id)` is what fetches the heavy `TEditorConfiguration`.\nexport interface TemplateListItem {\n id: string;\n slug: string;\n kind: TemplateKind;\n description?: string;\n subject?: string;\n variables?: Array<{ name: string; description?: string }>;\n tags?: string[];\n thumbnailUrl?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\n// The ref interface for imperative controls\nexport interface EmailEditorRef {\n saveTemplate: () => TEditorConfiguration;\n loadTemplate: (template: TEditorConfiguration) => void;\n getTemplate: () => TEditorConfiguration;\n}\n\n// Props for the EmailEditor component\nexport interface EmailEditorProps {\n /**\n * Initial template to load. Can be either:\n * - A `TEditorConfiguration` object (the native editor format)\n * - A raw HTML string, which will be auto-wrapped in an Html block\n */\n initialTemplate?: TEditorConfiguration | string;\n initialTemplateId?: string;\n initialTemplateName?: string;\n /**\n * Called when the user saves the current template. Receives a `SavePayload`\n * containing the source `editorConfig` plus pre-rendered `bodyHtml` /\n * `bodyText` and the editor-managed `subject` / `variables` metadata.\n */\n onSave?: (payload: SavePayload) => void | Promise<void>;\n onChange?: (template: TEditorConfiguration) => void;\n /**\n * Duration for drawer enter transition in milliseconds. Set to 0 for instant.\n * @default 225\n */\n drawerEnterDuration?: number;\n /**\n * Duration for drawer exit transition in milliseconds. Set to 0 for instant.\n * @default 225\n */\n drawerExitDuration?: number;\n /**\n * Whether to show the samples drawer.\n * @default true\n */\n samplesDrawerEnabled?: boolean;\n /**\n * Whether to enable template persistence functionality and show save buttons.\n * When false (default), save functionality and related UI elements will be hidden.\n * When true, make sure to provide the necessary callbacks (onSave, saveAs, etc.).\n * \n * IMPORTANT: If you set this to true, you must provide callbacks to handle persistence\n * operations (onSave, saveAs, etc.). Otherwise, the save buttons will appear but won't\n * be functional.\n * @default false\n */\n persistenceEnabled?: boolean;\n /**\n * Minimum height of the editor container.\n * @default '100vh'\n */\n minHeight?: string;\n /**\n * Callback to load samples dynamically.\n * This will be called when the samples drawer is opened.\n */\n loadSamples?: () => Promise<TemplateListItem[]>;\n /**\n * Callback to load existing templates dynamically.\n * This will be called when the samples drawer is opened.\n */\n loadTemplates?: () => Promise<TemplateListItem[]>;\n /**\n * Callback to load a specific template by ID.\n * This will be called when a sample is selected from the drawer.\n */\n loadTemplate?: (templateId: string) => Promise<TEditorConfiguration | null>;\n /**\n * Callback to delete a template by ID.\n */\n deleteTemplate?: (templateId: string) => void;\n /**\n * Callback to copy a template with a new name.\n */\n copyTemplate?: (templateName: string, content: any) => void;\n /**\n * Callback to update a template's details. Receives the new slug and an\n * optional options bag with the full new tag list. Called from the\n * drawer's Edit-details dialog — the `tags` array replaces the existing\n * tag list when provided.\n */\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n /**\n * Callback to promote/demote a row between `template` and `sample`.\n * When omitted, promote/demote menu items are hidden.\n */\n setTemplateKind?: (templateId: string, kind: TemplateKind) => void | Promise<void>;\n /**\n * Callback to save a template with a new name. Receives the same\n * `SavePayload` shape as `onSave`. Returns the new row's `id` and `slug`.\n */\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n /**\n * Uploads a single image file and returns its public URL plus optional\n * intrinsic dimensions. When omitted, upload UI (button, drag-drop,\n * paste-to-insert) is hidden; URL paste still works.\n */\n uploadImage?: (file: File) => Promise<UploadedImage>;\n /**\n * Returns previously uploaded images for the library picker. When omitted,\n * the \"Pick from library\" button is hidden.\n */\n loadImages?: () => Promise<LibraryImage[]>;\n /**\n * Deletes an image from the library by URL. When omitted, the delete button\n * on library rows is hidden.\n */\n deleteImage?: (url: string) => Promise<void>;\n /**\n * Optional theme override. If not provided, the default theme will be used.\n * This allows for easy styling without requiring a separate ThemeProvider.\n */\n theme?: Theme;\n /**\n * UI language. One of \"en\", \"sv\", or \"fi\". Unknown values fall back to \"en\"\n * with a console.warn. Defaults to \"en\". Applies to editor chrome only —\n * email content and user data are never translated.\n */\n locale?: SupportedLocale | string;\n}\n\nfunction useDrawerTransition(cssProperty: 'margin-left' | 'margin-right', open: boolean) {\n const { transitions } = useTheme();\n return transitions.create(cssProperty, {\n easing: !open ? transitions.easing.sharp : transitions.easing.easeOut,\n duration: !open ? transitions.duration.leavingScreen : transitions.duration.enteringScreen,\n });\n}\n\n// Internal component that connects the App with the EmailEditor context\nconst EmailEditorInternal = forwardRef<EmailEditorRef, Omit<EmailEditorProps, 'initialTemplate' | 'initialTemplateId' | 'initialTemplateName' | 'onSave' | 'persistenceEnabled'>>((props, ref) => {\n const { \n drawerEnterDuration = 225,\n drawerExitDuration = 225,\n samplesDrawerEnabled = true,\n minHeight = '100vh',\n loadSamples,\n loadTemplates,\n loadTemplate,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n onChange,\n } = props;\n const { saveTemplate, loadTemplate: contextLoadTemplate, currentTemplateId } = useEmailEditor();\n const currentDocument = useDocument();\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n const samplesDrawerOpen = useSamplesDrawerOpen();\n\n const marginLeftTransition = useDrawerTransition('margin-left', samplesDrawerOpen);\n const marginRightTransition = useDrawerTransition('margin-right', inspectorDrawerOpen);\n\n // Notify the consuming app of changes without triggering React state updates\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const prevDocJsonRef = useRef<string>('');\n useEffect(() => {\n const docJson = JSON.stringify(currentDocument);\n if (docJson !== prevDocJsonRef.current) {\n prevDocJsonRef.current = docJson;\n onChangeRef.current?.(currentDocument);\n }\n }, [currentDocument]);\n\n // Expose the API via ref\n useImperativeHandle(ref, () => ({\n saveTemplate: () => {\n return saveTemplate();\n },\n loadTemplate: (newTemplate) => {\n contextLoadTemplate(newTemplate);\n resetDocument(newTemplate);\n },\n getTemplate: () => {\n return getDocument();\n }\n }));\n\n return (\n <Stack position=\"relative\" id=\"drawer-container\" sx={{ minHeight }}>\n <InspectorDrawer\n enterDuration={drawerEnterDuration}\n exitDuration={drawerExitDuration}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n />\n <SamplesDrawer\n enterDuration={drawerEnterDuration}\n exitDuration={drawerExitDuration}\n enabled={samplesDrawerEnabled}\n loadSamples={loadSamples}\n loadTemplates={loadTemplates}\n loadTemplate={loadTemplate}\n currentTemplateId={currentTemplateId}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n setTemplateKind={setTemplateKind}\n saveAs={saveAs}\n />\n\n <Stack\n sx={{\n marginRight: inspectorDrawerOpen ? `${INSPECTOR_DRAWER_WIDTH}px` : 0,\n marginLeft: samplesDrawerOpen && samplesDrawerEnabled ? `${SAMPLES_DRAWER_WIDTH}px` : 0,\n transition: [marginLeftTransition, marginRightTransition].join(', '),\n }}\n >\n <TemplatePanel loadTemplates={loadTemplates} saveAs={saveAs} samplesDrawerEnabled={samplesDrawerEnabled} />\n </Stack>\n </Stack>\n );\n});\n\n// The main EmailEditor component that external apps will use\nconst EmailEditor = forwardRef<EmailEditorRef, EmailEditorProps>((props, ref) => {\n const {\n initialTemplate: initialTemplateProp,\n initialTemplateId,\n initialTemplateName,\n onSave,\n onChange,\n drawerEnterDuration,\n drawerExitDuration,\n samplesDrawerEnabled,\n persistenceEnabled = false,\n minHeight = '100vh',\n loadSamples,\n loadTemplates,\n loadTemplate,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n uploadImage,\n loadImages,\n deleteImage,\n theme,\n locale,\n } = props;\n\n // Activate the requested locale before any UI renders. Subsequent prop\n // changes re-activate on render.\n activateLocale(locale);\n\n // Resolve: if it's a raw HTML string, wrap it in an editor config.\n // Memoize so a string prop doesn't create a new object every render.\n const resolvedTemplate = useMemo(\n () => typeof initialTemplateProp === 'string'\n ? htmlToEditorConfig(initialTemplateProp)\n : initialTemplateProp,\n [initialTemplateProp],\n );\n\n // Reset the editor synchronously during render (not in an effect) so the\n // Zustand store is up-to-date before child components mount / effects fire.\n // This prevents the onChange callback from emitting a stale empty document.\n const prevTemplateRef = useRef<TEditorConfiguration | undefined>(undefined);\n if (resolvedTemplate && resolvedTemplate !== prevTemplateRef.current) {\n prevTemplateRef.current = resolvedTemplate;\n resetDocument(resolvedTemplate);\n }\n\n // Update persistence mode when it changes\n useEffect(() => {\n setPersistenceEnabled(persistenceEnabled);\n }, [persistenceEnabled]);\n\n const imageCallbacks = useMemo<ImageCallbacks>(\n () => ({ uploadImage, loadImages, deleteImage }),\n [uploadImage, loadImages, deleteImage]\n );\n\n return (\n <I18nProvider i18n={i18n}>\n <ThemeProvider theme={theme || defaultTheme}>\n <CssBaseline />\n <div style={{ height: '100%', overflow: 'auto' }}>\n <SnackbarProvider>\n <ImageCallbacksProvider callbacks={imageCallbacks}>\n <EmailEditorProvider\n initialTemplate={resolvedTemplate}\n initialTemplateId={initialTemplateId}\n initialTemplateName={initialTemplateName}\n onSave={onSave}\n onChange={onChange}\n >\n <EmailEditorInternal\n ref={ref}\n drawerEnterDuration={drawerEnterDuration}\n drawerExitDuration={drawerExitDuration}\n samplesDrawerEnabled={samplesDrawerEnabled}\n minHeight={minHeight}\n loadSamples={loadSamples}\n loadTemplates={loadTemplates}\n loadTemplate={loadTemplate}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n setTemplateKind={setTemplateKind}\n saveAs={saveAs}\n onChange={onChange}\n />\n </EmailEditorProvider>\n </ImageCallbacksProvider>\n </SnackbarProvider>\n </div>\n </ThemeProvider>\n </I18nProvider>\n );\n});\n\nEmailEditor.displayName = 'EmailEditor';\nEmailEditorInternal.displayName = 'EmailEditorInternal';\n\n// Export both as default and named\nexport default EmailEditor;\nexport { EmailEditor };\n\n// Export context and hooks\nexport {\n EmailEditorProvider,\n useEmailEditor,\n type EmailEditorContextType,\n type EmailEditorProviderProps\n};\n\n// Export utility\nexport { htmlToEditorConfig };\n\n// Re-export the save payload type so consumers typing their callbacks have one import path.\nexport type { SavePayload, TemplateVariable } from './save-payload';\n\n// Image-callback types so consumers can type their handlers directly.\nexport type { ImageCallbacks, LibraryImage, UploadedImage } from './image-context'; "]}
1
+ {"version":3,"sources":["../src/blocks/text.tsx","../src/blocks/avatar.tsx","../src/blocks/button.tsx","../src/blocks/columns-container.tsx","../src/blocks/container.tsx","../src/blocks/divider.tsx","../src/blocks/heading.tsx","../src/blocks/html.tsx","../src/blocks/image.tsx","../src/blocks/signature.tsx","../src/blocks/spacer.tsx","../src/core/builders/build-block-component.tsx","../src/core/builders/build-block-configuration-schema.ts","../src/core/builders/build-block-configuration-dictionary.ts","../src/core/utils.ts","../src/email-builder/handlebars.ts","../src/email-builder/blocks/columns-container/columns-container-props-schema.ts","../src/email-builder/blocks/columns-container/columns-container-reader.tsx","../src/email-builder/blocks/container/container-props-schema.ts","../src/email-builder/blocks/container/container-reader.tsx","../src/email-builder/blocks/email-layout/email-layout-props-schema.ts","../src/email-builder/blocks/email-layout/email-layout-reader.tsx","../src/email-builder/reader/core.tsx","../src/email-builder/renderers/render-to-static-markup.tsx","../src/email-builder/renderers/render-to-text.ts","../src/theme.ts","../src/locales/en/messages.ts","../src/locales/fi/messages.ts","../src/locales/sv/messages.ts","../src/i18n/index.ts","../src/editor/editor-context.tsx","../src/app/save-payload.ts","../src/app/context.tsx","../src/app/image-context.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/base-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/radio-group-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/raw/raw-slider-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/slider-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/swatch.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/picker.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/base-color-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/color-input/index.tsx","../src/editor/blocks/helpers/font-family.ts","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-family.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-size-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/font-weight-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/letter-spacing-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/line-height-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/padding-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-align-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/single-style-property-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/style-inputs/multi-style-property-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/avatar-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/button-sidebar-panel.tsx","../src/editor/blocks/columns-container/columns-container-props-schema.ts","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/text-dimension-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/column-widths-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/columns-container-sidebar-panel.tsx","../src/editor/blocks/container/container-props-schema.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/container-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/divider-sidebar-panel.tsx","../src/editor/blocks/email-layout/email-layout-props-schema.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/helpers/inputs/boolean-input.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/email-layout-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/heading-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/html-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/image-library-dialog.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/image-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/signature-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/spacer-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/input-panels/text-sidebar-panel.tsx","../src/app/inspector-drawer/configuration-panel/index.tsx","../src/app/inspector-drawer/styles-panel.tsx","../src/app/inspector-drawer/template-panel-download-button.tsx","../src/app/inspector-drawer/template-panel.tsx","../src/app/variables/variable-utils.ts","../src/app/inspector-drawer/variables-panel.tsx","../src/app/inspector-drawer/index.tsx","../src/app/email-canvas/snackbar-provider.tsx","../src/app/templates-drawer/template-row.tsx","../src/editor/blocks/helpers/move-block.ts","../src/app/templates-drawer/outline-panel.tsx","../src/app/templates-drawer/new-template-picker-dialog.tsx","../src/app/templates-drawer/rename-dialog.tsx","../src/app/email-canvas/save-template-dialog.tsx","../sample-templates/empty-email-message.ts","../src/app/templates-drawer/index.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/block-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/buttons.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/blocks-menu.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/divider-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/placeholder-button.tsx","../src/editor/blocks/helpers/editor-children-ids/add-block-menu/index.tsx","../src/editor/blocks/helpers/block-parent-context.tsx","../src/editor/blocks/helpers/editor-children-ids/index.tsx","../src/editor/blocks/columns-container/columns-container-editor.tsx","../src/editor/blocks/container/container-editor.tsx","../src/editor/blocks/email-layout/email-layout-editor.tsx","../src/editor/blocks/helpers/block-wrappers/tune-menu.tsx","../src/editor/blocks/helpers/block-wrappers/editor-block-wrapper.tsx","../src/editor/blocks/button/button-editor.tsx","../src/editor/blocks/helpers/use-markdown-toolbar.ts","../src/editor/blocks/text/inline-formatting-toolbar.tsx","../src/editor/blocks/heading/heading-editor.tsx","../src/editor/blocks/html/html-editor.tsx","../src/editor/blocks/signature/signature-editor.tsx","../src/editor/blocks/text/text-editor.tsx","../src/editor/core.tsx","../src/editor/editor-block.tsx","../src/app/inspector-drawer/toggle-inspector-panel-button.tsx","../src/app/templates-drawer/toggle-samples-panel-button.tsx","../src/app/email-canvas/helper/html-formatter.ts","../src/app/email-canvas/helper/highlighters.tsx","../src/app/email-canvas/helper/highlighted-code-panel.tsx","../src/app/email-canvas/html-panel.tsx","../src/app/email-canvas/json-panel.tsx","../src/app/email-canvas/text-panel.tsx","../src/app/email-canvas/main-tabs-group.tsx","../src/app/email-canvas/save-bar.tsx","../src/app/email-canvas/undo-redo-buttons.tsx","../src/app/email-canvas/subject-input.tsx","../src/app/email-canvas/subject-preview.tsx","../src/app/email-canvas/image-drop-paste-handler.tsx","../src/app/email-canvas/index.tsx","../src/app/index.tsx"],"names":["html","React","PADDING_SCHEMA","z","getPadding","FONT_FAMILY_SCHEMA","getFontFamily","COLOR_SCHEMA","useMemo","ColumnsContainerPropsSchema","ContainerPropsSchema","getBorder","document","baseRenderToStaticMarkup","messages","createContext","useContext","useState","Stack","Box","value","Typography","InputLabel","InputProps","useEffect","renderButton","Button","ColorInput","TextField","ToggleButton","size","shape","imageUrl","alt","text","url","buttonStyle","buttonTextColor","buttonBackgroundColor","BasePropsShape","columns_container_props_schema_default","SpaceBarOutlined","lineColor","lineHeight","TemplateVariableSchema","EmailLayoutPropsSchema","backdropDisabled","RoundedCornerOutlined","useRef","_a","_b","_c","_d","_e","_f","_g","_h","_i","CircularProgress","Alert","VerticalAlignTopOutlined","VerticalAlignCenterOutlined","VerticalAlignBottomOutlined","greeting","name","title","company","address","email","phone","website","AspectRatioOutlined","imageSize","imageShape","layout","nameColor","textColor","linkColor","HeightOutlined","data","ToggleButtonGroup","t","InputAdornment","AddOutlined","Tooltip","current","next","IconButton","Chip","ContentCopyOutlined","DeleteOutline","Menu","MenuItem","FileDownloadOutlined","Divider","DeleteOutlined","insertAt","sourceBlock","ROOT_BLOCK_ID","LibraryAddOutlined","Dialog","DialogTitle","DialogContent","ListItemText","DialogActions","Drawer","Tabs","Tab","SearchOutlined","BUTTON_SX","HMobiledataOutlined","NotesOutlined","SmartButtonOutlined","ImageOutlined","AccountCircleOutlined","ContactMailOutlined","BusinessOutlined","HorizontalRuleOutlined","Crop32Outlined","HtmlOutlined","ViewColumnOutlined","ButtonBase","childrenIds","generateId","useCallback","e","collectBlock","getRoundedCorners","getButtonSizePadding","Paper","TextFieldsOutlined","getFontSize","getImageBorderRadius","useLayoutEffect","EditorBlock","DataObjectOutlined","CloudUploadOutlined","TemplatePanel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAM,YAAA,GAAe;AAAA,EACnB,GAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,YAAA,GAAe;AAAA,EACnB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,UAAUA,KAAAA,EAAsB;AACvC,EAAA,OAAO,SAAA,CAAU,SAASA,KAAAA,EAAM;AAAA,IAC9B,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEA,IAAM,cAAA,GAAN,cAA6B,QAAA,CAAS;AAAA,EACpC,KAAA,CAAM,QAAgB,IAAA,EAAc;AAClC,IAAA,OAAO,CAAA;AAAA;AAAA,EAET,MAAM,CAAA;AAAA;AAAA,EAEN,IAAI,CAAA;AAAA,QAAA,CAAA;AAAA,EAEJ;AAAA,EAEA,IAAA,CAAK,IAAA,EAAc,KAAA,EAAsB,IAAA,EAAc;AACrD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,kBAAA,EAAqB,IAAI,CAAA,IAAA,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,SAAA,EAAY,KAAK,qBAAqB,IAAI,CAAA,IAAA,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,IAAA,EAAc;AACtB,IAAA,OAAO,+BAA+B,IAAI,CAAA,IAAA,CAAA;AAAA,EAC5C;AACF,CAAA;AAEO,SAAS,qBAAqB,GAAA,EAAqB;AACxD,EAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK;AAAA,IAC7B,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,GAAA,EAAK,IAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAU,IAAI,cAAA;AAAe,GAC9B,CAAA;AACD,EAAA,IAAI,OAAOA,UAAS,QAAA,EAAU;AAC5B,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,UAAUA,KAAI,CAAA;AACvB;AAEO,SAAS,2BAA2B,GAAA,EAAqB;AAC9D,EAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,WAAA,CAAY,GAAA,EAAK;AAAA,IACnC,KAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAQ,IAAA;AAAA,IACR,GAAA,EAAK,IAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAU,IAAI,cAAA;AAAe,GAC9B,CAAA;AACD,EAAA,IAAI,OAAOA,UAAS,QAAA,EAAU;AAC5B,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,UAAUA,KAAI,CAAA;AACvB;AAOA,SAAS,cAAc,EAAA,EAA4C;AAA5C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,QAAA,EAnIzB,GAmIuB,EAAA,EAAe,KAAA,GAAA,SAAA,CAAf,IAAe,CAAb,UAAA,CAAA,CAAA;AACvB,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAM,oBAAA,CAAqB,QAAQ,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AACrE,EAAA,uBAAOC,OAAA,CAAA,aAAA,CAAC,wCAAQ,KAAA,CAAA,EAAR,EAAe,yBAAyB,EAAE,MAAA,EAAQ,MAAK,EAAA,CAAG,CAAA;AACpE;AAGA,IAAM,kBAAA,GAAqB,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,SAAS,cAAc,UAAA,EAAgD;AACrE,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,YAAA,GAAe,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAM,cAAA,GAAiB,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAM,aAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACtC,KAAA,EAAO,EACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAO,YAAA;AAAA,IACP,eAAA,EAAiB,YAAA;AAAA,IACjB,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAChD,UAAA,EAAY,kBAAA;AAAA,IACZ,UAAA,EAAY,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC3D,UAAA,EAAY,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAClD,eAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC9C,SAAA,EAAW,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,OAAA,EAAS;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAO,EACJ,MAAA,CAAO;AAAA,IACN,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC1C,MAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GACtC,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAIM,IAAM,SAAA,GAAY;AAElB,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM;AACR;AAEO,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAM,EAAc;AAnOlD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoOE,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,MAAA;AAAA,IAC7B,UAAA,EAAY,aAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,gBAAe,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,aAAA,KAAiB,OAAO,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IAC3E,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAAS,UAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AAEA,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,iBAAA,CAAkB,IAAA;AAC9C,EAAA,IAAI,+BAAO,QAAA,EAAU;AACnB,IAAA,uBAAOA,OAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,UAAU,IAAA,EAAM,CAAA;AAAA,EACvD;AACA,EAAA,uBAAOA,OAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAA,EAAS,IAAK,CAAA;AACnC;AClPA,IAAMC,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,iBAAA,GAAoBD,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,OAAA,EAASD;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,IAAA,EAAMA,EAAE,MAAA,EAAO,CAAE,GAAG,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC3C,KAAA,EAAOA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,SAAS,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACzC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GACrC,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAGM,IAAM,WAAA,GAAc;AAE3B,SAAS,eAAA,CAAgB,OAAwC,IAAA,EAAkC;AACjG,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,SAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,EAAA;AAAA,EACN,QAAA,EAAU,EAAA;AAAA,EACV,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO;AACT;AAEO,SAAS,MAAA,CAAO,EAAE,KAAA,EAAO,KAAA,EAAM,EAAgB;AAzDtD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0DE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,mBAAA,CAAoB,IAAA;AAChD,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,mBAAA,CAAoB,QAAA;AACxD,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,GAAA,KAAP,IAAA,GAAA,EAAA,GAAc,mBAAA,CAAoB,GAAA;AAC9C,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,mBAAA,CAAoB,KAAA;AAElD,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAASC,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AACA,EAAA,uBACEH,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,YAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,GAAA,EAAK,QAAA;AAAA,MACL,MAAA,EAAQ,IAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ,MAAA;AAAA,QACR,cAAA,EAAgB,MAAA;AAAA,QAChB,SAAA,EAAW,OAAA;AAAA,QACX,MAAA,EAAQ,IAAA;AAAA,QACR,KAAA,EAAO,IAAA;AAAA,QACP,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,cAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,SAAA,EAAW,QAAA;AAAA,QACX,YAAA,EAAc,eAAA,CAAgB,KAAA,EAAO,IAAI;AAAA;AAC3C;AAAA,GAEJ,CAAA;AAEJ;AAGA,IAAO,cAAA,GAAQ;AC1Ff,IAAMI,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,SAASG,eAAc,UAAA,EAAgD;AACrE,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEA,IAAMC,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,iBAAA,GAAoBD,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,eAAA,EAAiBI,aAAAA;AAAA,IACjB,QAAA,EAAUJ,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAChD,UAAA,EAAYE,mBAAAA;AAAA,IACZ,UAAA,EAAYF,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC3D,UAAA,EAAYA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAClD,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC9C,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,OAAA,EAASD;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,qBAAA,EAAuBI,aAAAA;AAAA,IACvB,WAAA,EAAaJ,CAAAA,CAAE,IAAA,CAAK,CAAC,WAAA,EAAa,MAAA,EAAQ,SAAS,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC1E,eAAA,EAAiBI,aAAAA;AAAA,IACjB,WAAWJ,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC3C,IAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC1E,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACrC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GACrC,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAIM,IAAM,WAAA,GAAc;AAE3B,SAAS,kBAAkB,KAAA,EAA6B;AA7FxD,EAAA,IAAA,EAAA;AA8FE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,KAAP,IAAA,GAAA,EAAA,GAAsB,mBAAA,CAAoB,WAAA;AAE9D,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,CAAA;AAAA;AAEb;AAEA,SAAS,qBAAqB,KAAA,EAA6B;AA3G3D,EAAA,IAAA,EAAA;AA4GE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,mBAAA,CAAoB,IAAA;AAChD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,CAAC,GAAG,CAAC,CAAA;AAAA,IACd,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,GAAG,EAAE,CAAA;AAAA,IACf,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,IAAI,EAAE,CAAA;AAAA,IAChB,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,CAAC,IAAI,EAAE,CAAA;AAAA;AAEpB;AAEO,IAAM,mBAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,EAAA;AAAA,EACN,GAAA,EAAK,EAAA;AAAA,EACL,SAAA,EAAW,KAAA;AAAA,EACX,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,SAAA;AAAA,EACb,eAAA,EAAiB,SAAA;AAAA,EACjB,qBAAA,EAAuB;AACzB;AAEO,SAAS,MAAA,CAAO,EAAE,KAAA,EAAO,KAAA,EAAM,EAAgB;AApItD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqIE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,mBAAA,CAAoB,IAAA;AAChD,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,GAAA,KAAP,IAAA,GAAA,EAAA,GAAc,mBAAA,CAAoB,GAAA;AAC9C,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,mBAAA,CAAoB,SAAA;AAC1D,EAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,mBAAA,CAAoB,eAAA;AACtE,EAAA,MAAM,qBAAA,GAAA,CAAwB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,qBAAA,KAAP,IAAA,GAAA,EAAA,GAAgC,mBAAA,CAAoB,qBAAA;AAElF,EAAA,MAAM,OAAA,GAAU,qBAAqB,KAAK,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAa,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAI,CAAA,GAAK,CAAA;AACzC,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAASC,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AACA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,KAAA,EAAO,eAAA;AAAA,IACP,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,EAAA;AAAA,IAC7B,UAAA,EAAYE,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,gBAAe,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,aAAA,KAAiB,OAAO,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IAC3E,eAAA,EAAiB,qBAAA;AAAA,IACjB,YAAA,EAAc,kBAAkB,KAAK,CAAA;AAAA,IACrC,OAAA,EAAS,YAAY,OAAA,GAAU,cAAA;AAAA,IAC/B,OAAA,EAAS,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtC,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,uBACEL,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gCACVA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,MAAM,GAAA,EAAK,KAAA,EAAO,WAAW,MAAA,EAAO,QAAA,EAAA,kBACrCA,OAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,uBAAA,EAAyB;AAAA,QACvB,QAAQ,CAAA,uCAAA,EAA0C,OAAA,CAAQ,CAAC,CAAC,0CAA0C,SAAS,CAAA,+BAAA;AAAA;AACjH;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA,CAAC,cAAM,IAAK,CAAA,kBACZA,OAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,uBAAA,EAAyB;AAAA,QACvB,MAAA,EAAQ,CAAA,uCAAA,EAA0C,OAAA,CAAQ,CAAC,CAAC,CAAA,sDAAA;AAAA;AAC9D;AAAA,GAEJ,CACF,CAAA;AAEJ;AAEA,IAAO,cAAA,GAAQ;AChLf,IAAMM,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAM,mBAAA,GAAsBA,EACzB,KAAA,CAAM,CAACA,EAAE,MAAA,EAAO,CAAE,OAAA,EAAQ,EAAGA,CAAAA,CAAE,MAAA,GAAS,OAAA,EAAQ,EAAGA,CAAAA,CAAE,MAAA,EAAO,CAAE,OAAA,EAAS,CAAC,CAAA,CACxE,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,2BAAA,GAA8BD,EAAE,MAAA,CAAO;AAAA,EAClD,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,eAAA,EAAiBI,aAAAA;AAAA,IACjB,OAAA,EAASL;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,WAAA,EAAa,mBAAA;AAAA,IACb,cAAcA,CAAAA,CACX,KAAA,CAAM,CAACA,CAAAA,CAAE,QAAQ,CAAC,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CAClC,QAAA,GACA,QAAA,EAAS;AAAA,IACZ,YAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC3C,gBAAA,EAAkBA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAAS,GAC3E,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAQM,IAAM,qBAAA,GAAwB;AAErC,IAAM,6BAAA,GAAgC;AAAA,EACpC,YAAA,EAAc,CAAA;AAAA,EACd,UAAA,EAAY,CAAA;AAAA,EACZ,gBAAA,EAAkB;AACpB,CAAA;AAEO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,OAAA,EAAS,OAAM,EAA0B;AA/DnF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgEE,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,OAAA,EAASC,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,YAAA,EAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,YAAA,KAAP,IAAA,GAAA,EAAA,GAAuB,6BAAA,CAA8B,YAAA;AAAA,IACnE,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,6BAAA,CAA8B,UAAA;AAAA,IAC/D,gBAAA,EAAA,CAAkB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,gBAAA,KAAP,IAAA,GAAA,EAAA,GAA2B,6BAAA,CAA8B,gBAAA;AAAA,IAC3E,aAAa,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO;AAAA,GACtB;AAEA,EAAA,uBACEH,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,MAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAY,GAAA;AAAA,MACZ,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA,EAAS,gBAAgB,UAAA;AAAW,KAAA;AAAA,oBAE1DA,QAAA,aAAA,CAAC,OAAA,EAAA,EAAM,OAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EAAA,kBAC5BA,OAAAA,CAAA,cAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,sBAClBA,OAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,CAAA,EAAG,OAAO,UAAA,EAAY,OAAA,EAAkB,mBAC1DA,OAAAA,CAAA,cAAC,SAAA,EAAA,EAAU,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,UAAA,EAAY,OAAA,EAAkB,mBAC1DA,OAAAA,CAAA,cAAC,SAAA,EAAA,EAAU,KAAA,EAAO,GAAG,KAAA,EAAO,UAAA,EAAY,OAAA,EAAkB,CAC5D,CACF;AAAA,GAEJ,CAAA;AAEJ;AAYA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,SAAQ,EAAU;AA3GrD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4GE,EAAA,MAAM,gBAAA,GAAA,CAAmB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,gBAAA,KAAP,IAAA,GAAA,EAAA,GAA2B,6BAAA,CAA8B,gBAAA;AAClF,EAAA,MAAM,YAAA,GAAA,CAAe,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,YAAA,KAAP,IAAA,GAAA,EAAA,GAAuB,6BAAA,CAA8B,YAAA;AAE1E,EAAA,IAAI,YAAA,KAAiB,CAAA,IAAK,KAAA,KAAU,CAAA,EAAG;AACrC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAuB;AAAA,IAC3B,SAAA,EAAW,aAAA;AAAA,IACX,aAAA,EAAe,gBAAA;AAAA,IACf,WAAA,EAAa,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AAAA,IAC1C,YAAA,EAAc,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AAAA,IAC1C,KAAA,EAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,WAApB,IAAA,GAAA,EAAA,GAA8B;AAAA,GACvC;AACA,EAAA,MAAM,QAAA,GAAA,CAAY,EAAA,GAAA,OAAA,IAAW,OAAA,CAAQ,KAAK,MAAxB,IAAA,GAAA,EAAA,GAA8B,IAAA;AAChD,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAe,QAAS,CAAA;AACrC;AAEA,SAAS,gBAAA,CAAiB,KAAA,EAAe,EAAE,UAAA,EAAY,cAAa,EAAmB;AACrF,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,OAAO,UAAA,GAAa,CAAA;AAAA,EACtB;AACA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,UAAA,GAAa,CAAA;AAAA,EACtB;AACA,EAAA,OAAQ,IAAI,UAAA,GAAc,CAAA;AAC5B;AAEA,SAAS,eAAA,CAAgB,KAAA,EAAe,EAAE,UAAA,EAAY,cAAa,EAAmB;AACpF,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,OAAO,UAAA,GAAa,CAAA;AAAA,IACtB;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAQ,IAAI,UAAA,GAAc,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,UAAA,GAAa,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,CAAA;AACT;AAEA,IAAO,yBAAA,GAAQ;ACzJf,IAAMM,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,oBAAA,GAAuBD,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,eAAA,EAAiBI,aAAAA;AAAA,IACjB,WAAA,EAAaA,aAAAA;AAAA,IACb,cAAcJ,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC7C,OAAA,EAASD;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAQM,IAAM,cAAA,GAAiB;AAE9B,SAAS,UAAU,KAAA,EAAgC;AACjD,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,WAAA,EAAa;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA,UAAA,EAAa,MAAM,WAAW,CAAA,CAAA;AACvC;AAEO,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,QAAA,EAAS,EAAmB;AAjD/D,EAAA,IAAA,EAAA,EAAA,EAAA;AAkDE,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,MAAA,EAAQ,UAAU,KAAK,CAAA;AAAA,IACvB,YAAA,EAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,YAAA,KAAP,IAAA,GAAA,EAAA,GAAuB,MAAA;AAAA,IACrC,OAAA,EAASE,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBAAOH,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,MAAA,EAAQ,CAAA;AAAA,EAC7B;AACA,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,UAAS,QAAS,CAAA;AACvC;AAEA,IAAO,iBAAA,GAAQ;AC3Df,IAAMM,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,kBAAA,GAAqBD,EAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,eAAA,EAAiBI,aAAAA;AAAA,IACjB,OAAA,EAASL;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,SAAA,EAAWI,aAAAA;AAAA,IACX,YAAYJ,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GAC5C,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAKM,IAAM,YAAA,GAAe;AAErB,IAAM,oBAAA,GAAuB;AAAA,EAClC,UAAA,EAAY,CAAA;AAAA,EACZ,SAAA,EAAW;AACb;AAEO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,EAAM,EAAiB;AAjDxD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkDE,EAAA,MAAM,EAAA,GAAoB;AAAA,IACxB,OAAA,EAASC,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO,CAAA;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B;AAAA,GAC7C;AACA,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,oBAAA,CAAqB,UAAA;AACjE,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,oBAAA,CAAqB,SAAA;AAChE,EAAA,uBACEH,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,EAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAW,CAAA,EAAG,cAAc,CAAA,SAAA,EAAY,cAAc,CAAA,CAAA;AAAA,QACtD,MAAA,EAAQ;AAAA;AACV;AAAA,GAEJ,CAAA;AAEJ;AAEA,IAAO,eAAA,GAAQ;ACjEf,IAAMM,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAE1F,IAAMC,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,SAASG,eAAc,UAAA,EAAgD;AACrE,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,kBAAA,GAAqBH,EAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACrC,KAAA,EAAOA,CAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACtD,UAAUA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA;AAAS,GAC3C,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOI,aAAAA;AAAA,IACP,eAAA,EAAiBA,aAAAA;AAAA,IACjB,UAAA,EAAYF,mBAAAA;AAAA,IACZ,UAAA,EAAYF,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC3D,UAAA,EAAYA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAClD,eAAeA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC9C,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,OAAA,EAASD;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAKM,IAAM,YAAA,GAAe;AAErB,IAAM,oBAAA,GAAuB;AAAA,EAClC,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM;AACR;AAEO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAO,KAAA,EAAM,EAAiB;AAjGxD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkGE,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,oBAAA,CAAqB,KAAA;AACnD,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,oBAAA,CAAqB,IAAA;AACjD,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,KAAA;AACtC,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,gBAAe,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,aAAA,KAAiB,OAAO,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IAC3E,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAYI,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,QAAA,EAAU,YAAY,KAAK,CAAA;AAAA,IAC3B,OAAA,EAASF,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AACA,EAAA,MAAMJ,KAAAA,GAAOQ,OAAAA,CAAQ,MAAO,UAAA,GAAa,0BAAA,CAA2B,IAAI,CAAA,GAAI,IAAA,EAAO,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AACrG,EAAA,MAAM,cAAc,UAAA,GAChB,EAAE,OAAO,MAAA,EAAQ,uBAAA,EAAyB,EAAE,MAAA,EAAQR,KAAAA,IAAA,IAAA,GAAAA,KAAAA,GAAQ,IAAG,EAAE,GACjE,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAU,IAAA,EAAK;AACpC,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,IAAA;AACH,MAAA,uBAAOC,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,WAAA,CAAa,CAAA;AAAA,IAC9B,KAAK,IAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,WAAA,CAAa,CAAA;AAAA,IAC9B,KAAK,IAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,WAAA,CAAa,CAAA;AAAA;AAElC;AAEA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA;AAEb;AAEA,IAAO,eAAA,GAAQ;ACvIf,IAAMI,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,SAASG,eAAc,UAAA,EAAgD;AACrE,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEA,IAAMC,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,eAAA,GAAkBD,EAAE,MAAA,CAAO;AAAA,EACtC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOI,aAAAA;AAAA,IACP,eAAA,EAAiBA,aAAAA;AAAA,IACjB,UAAA,EAAYF,mBAAAA;AAAA,IACZ,QAAA,EAAUF,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAChD,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACnE,OAAA,EAASD;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAAS,GAC1C,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAIM,IAAM,SAAA,GAAY;AAElB,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAM,EAAc;AArFlD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsFE,EAAA,MAAM,WAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA;AACxB,EAAA,MAAM,QAAA,GAA0B;AAAA,IAC9B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,UAAA,EAAYG,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,MAAA;AAAA,IAC7B,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAASF,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBAAOH,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,QAAA,EAAU,CAAA;AAAA,EAC/B;AACA,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,UAAU,uBAAA,EAAyB,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAG,CAAA;AAC9E;AAEA,IAAO,YAAA,GAAQ;AClGf,IAAMC,eAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,cAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,gBAAA,GAAmBD,EAAE,MAAA,CAAO;AAAA,EACvC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,OAAA,EAASD,eAAAA;AAAA,IACT,eAAA,EAAiBC,EACd,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,IACZ,SAAA,EAAWA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAAS,GACpE,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACtC,QAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACvC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACpC,KAAKA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACpC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACzC,gBAAA,EAAkBA,CAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAAS,GAC3E,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAIM,IAAM,UAAA,GAAa;AAEnB,SAAS,KAAA,CAAM,EAAE,KAAA,EAAO,KAAA,EAAM,EAAe;AA9CpD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+CE,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,OAAA,EAASC,WAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO,CAAA;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB;AAAA,GACjC;AAEA,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,IAAA;AACpC,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAC9B,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,KAAP,IAAA,GAAA,EAAA,GAAiB,MAAA;AAEhC,EAAA,MAAM,YAAA,mBACJH,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAA,CAAK,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,GAAA,KAAP,IAAA,GAAA,EAAA,GAAc,EAAA;AAAA,MACnB,GAAA,EAAA,CAAK,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,GAAA,KAAP,IAAA,GAAA,EAAA,GAAc,EAAA;AAAA,MACnB,KAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ,MAAA;AAAA,QACR,cAAA,EAAgB,MAAA;AAAA,QAChB,aAAA,EAAA,CAAe,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,gBAAA,KAAP,IAAA,GAAA,EAAA,GAA2B,QAAA;AAAA,QAC1C,OAAA,EAAS,cAAA;AAAA,QACT,QAAA,EAAU;AAAA;AACZ;AAAA,GACF;AAGF,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBAAe,YAAa,CAAA;AAAA,EACjD;AAEA,EAAA,uBACEA,QAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,YAAA,EAAA,kBACVA,QAAA,aAAA,CAAC,GAAA,EAAA,EAAE,MAAM,QAAA,EAAU,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,IAAU,MAAA,EAAO,QAAA,EAAA,EAC1D,YACH,CACF,CAAA;AAEJ;AAEA,IAAO,aAAA,GAAQ;ACtFf,IAAMI,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,SAASG,eAAc,UAAA,EAAgD;AACrE,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEA,IAAMC,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMD,gBAAAA,GAAiBC,EACpB,MAAA,CAAO;AAAA,EACN,GAAA,EAAKA,EAAE,MAAA,EAAO;AAAA,EACd,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA;AACV,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAMC,eAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAEnF,IAAM,oBAAA,GAAuBD,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,eAAA,EAAiBI,aAAAA;AAAA,IACjB,UAAA,EAAYF,mBAAAA;AAAA,IACZ,OAAA,EAASH;AAAA,GACV,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAAA,EACZ,KAAA,EAAOC,EACJ,MAAA,CAAO;AAAA,IACN,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACzC,MAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACrC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACtC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACxC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACxC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACtC,OAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACtC,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACxC,UAAUA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACzC,WAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IAC1C,UAAA,EAAYA,CAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAA,EAAU,SAAS,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IACxE,MAAA,EAAQA,CAAAA,CAAE,IAAA,CAAK,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,IAC/D,SAAA,EAAWI,aAAAA;AAAA,IACX,SAAA,EAAWA,aAAAA;AAAA,IACX,SAAA,EAAWA;AAAA,GACZ,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAGM,IAAM,cAAA,GAAiB;AAEvB,IAAM,sBAAA,GAAyB;AAAA,EACpC,QAAA,EAAU,EAAA;AAAA,EACV,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO,EAAA;AAAA,EACP,OAAA,EAAS,EAAA;AAAA,EACT,QAAA,EAAU,EAAA;AAAA,EACV,SAAA,EAAW,EAAA;AAAA,EACX,UAAA,EAAY,QAAA;AAAA,EACZ,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW;AACb;AAEA,SAAS,oBAAA,CAAqB,OAAe,IAAA,EAAkC;AAC7E,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAM,EAAmB;AA7H5D,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8HE,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,sBAAA,CAAuB,QAAA;AAC3D,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,sBAAA,CAAuB,IAAA;AACnD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,sBAAA,CAAuB,QAAA;AAC3D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,sBAAA,CAAuB,UAAA;AAC/D,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,KAAP,IAAA,GAAA,EAAA,GAAiB,sBAAA,CAAuB,MAAA;AACvD,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAE7D,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,UAAA,EAAYD,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,OAAA,EAASF,YAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AAEA,EAAA,MAAM,aAAA,GAA+B;AAAA,IACnC,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,YAAA,EAAc,CAAA;AAAA,IACd,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,WAAA,GAA6B;AAAA,IACjC,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,mBACnBH,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,KAAK,IAAA,IAAQ,OAAA;AAAA,MACb,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,OAAA;AAAA,QACX,YAAA,EAAc,oBAAA,CAAqB,UAAA,EAAY,SAAS,CAAA;AAAA,QACxD,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ;AAAA;AACV;AAAA,GACF,GACE,IAAA;AAEJ,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,IAAI,OAAO,YAAA,CAAa,IAAA,iBAAKA,OAAAA,CAAA,cAAC,GAAA,EAAA,EAAE,GAAA,EAAI,OAAA,EAAQ,IAAA,EAAM,UAAU,KAAK,CAAA,CAAA,EAAI,KAAA,EAAO,SAAA,EAAA,EAAY,KAAM,CAAI,CAAA;AAClG,EAAA,IAAI,OAAO,YAAA,CAAa,IAAA,iBAAKA,OAAAA,CAAA,cAAC,GAAA,EAAA,EAAE,GAAA,EAAI,OAAA,EAAQ,IAAA,EAAM,OAAO,KAAK,CAAA,CAAA,EAAI,KAAA,EAAO,SAAA,EAAA,EAAY,KAAM,CAAI,CAAA;AAC/F,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,OAAO,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,GAAI,OAAA,GAAU,WAAW,OAAO,CAAA,CAAA;AACtE,IAAA,YAAA,CAAa,IAAA,iBAAKA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,GAAA,EAAI,SAAA,EAAU,IAAA,EAAY,KAAA,EAAO,SAAA,EAAW,MAAA,EAAO,QAAA,EAAA,EAAU,OAAQ,CAAI,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,8BACJA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,IAAA,EACE,wBAAQA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,OAAO,SAAA,EAAA,EAAY,IAAK,GACnC,KAAA,oBAASA,QAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAc,KAAM,CAAA,EACvC,OAAA,oBAAWA,OAAAA,CAAA,cAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAc,OAAQ,GAC3C,OAAA,oBAAWA,QAAA,aAAA,CAAC,GAAA,EAAA,EAAE,OAAO,WAAA,EAAA,EAAc,OAAQ,CAAA,EAC3C,YAAA,CAAa,SAAS,CAAA,oBACrBA,OAAAA,CAAA,aAAA,CAAC,OAAE,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,WAAA,CAAA,EAAL,EAAkB,WAAW,CAAA,EAAE,CAAA,EAAA,EACtC,aAAa,GAAA,CAAI,CAAC,MAAM,CAAA,qBACvBA,OAAAA,CAAA,aAAA,CAACA,QAAM,QAAA,EAAN,EAAe,KAAK,CAAA,EAAA,EAClB,CAAA,GAAI,qBAAKA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,OAAO,WAAA,EAAA,EAAa,QAAU,GAC7C,IACH,CACD,CACH,CAEJ,CAAA;AAGF,EAAA,MAAM,eAAA,GAAkB,2BAAWA,OAAAA,CAAA,cAAC,GAAA,EAAA,EAAE,KAAA,EAAO,aAAA,EAAA,EAAgB,QAAS,CAAA,GAAO,IAAA;AAE7E,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,YAAA,EAAA,EACT,iBACA,YAAA,oBAAgBA,QAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAAA,EAAI,YAAa,GAChE,WACH,CAAA;AAAA,EAEJ;AAGA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBACT,eAAA,kBACDA,OAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAA,EAAY,KAAI,WAAA,EAAY,GAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAK,cAAA,EAAA,kBACrDA,OAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,IAAA,EACE,gCACCA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,eAAe,QAAA,EAAU,YAAA,EAAc,EAAA,EAAG,EAAA,EACpD,YACH,CAAA,kBAEFA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,aAAA,EAAe,QAAA,EAAS,EAAA,EAClC,WACH,CACF,CACF,CACF,CACF,CAAA;AAEJ;AAEA,IAAO,iBAAA,GAAQ;AC9PR,IAAM,iBAAA,GAAoBE,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA;AAAQ,GAC9C,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC;AAKM,IAAM,WAAA,GAAc;AAEpB,IAAM,mBAAA,GAAsB;AAAA,EACjC,MAAA,EAAQ;AACV;AAEO,SAAS,MAAA,CAAO,EAAE,KAAA,EAAM,EAAgB;AArB/C,EAAA,IAAA,EAAA;AAsBE,EAAA,MAAM,KAAA,GAAuB;AAAA,IAC3B,MAAA,EAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,KAAP,IAAA,GAAA,EAAA,GAAiB,mBAAA,CAAoB;AAAA,GAC/C;AACA,EAAA,uBAAOF,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAc,CAAA;AAC5B;AAEA,IAAO,cAAA,GAAQ;ACpBA,SAAR,oBAAkE,MAAA,EAAqC;AAC5G,EAAA,OAAO,SAAS,cAAA,CAAe,EAAE,IAAA,EAAM,MAAK,EAA0B;AACpE,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAI,CAAA,CAAE,SAAA;AAC/B,IAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,cAAA,CAAA,EAAA,EAAc,IAAA,CAAM,CAAA;AAAA,EAC9B,CAAA;AACF;ACJe,SAAR,8BACL,MAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,IAAA,KAC5CE,CAAAA,CAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,MACpB,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA,CAAE;AAAA,KACpB;AAAA,GACH;AAGA,EAAA,OAAOA,CAAAA,CAAE,mBAAmB,MAAA,EAAQ,YAAmB,EAAE,SAAA,CAAU,CAAC,MAAM,CAA0B,CAAA;AACtG;;;ACde,SAAR,kCACL,MAAA,EACA;AACA,EAAA,OAAO,MAAA;AACT;;;ACAO,IAAM,wBAAA,GAA2B;AAUjC,IAAM,kBAAA,GAAqB;ACb3B,IAAM,gBAAA,GAAmB,WAAW,MAAA;AAE3C,gBAAA,CAAiB,cAAA,CAAe,YAAA,EAAc,SAAU,KAAA,EAAgB,MAAA,EAAkB;AACxF,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,EAAA;AAClE,EAAA,MAAM,IAAA,GAAO,iBAAiB,IAAA,GAAO,KAAA,GAAQ,IAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AACnE,EAAA,IAAI,MAAA,CAAO,MAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AACrD,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,GAAS,MAAA;AACnD,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,KAAS,KAAA,EAAO,OAAO,KAAK,WAAA,EAAY;AACrD,EAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,IAAA,CAAK,kBAAA,EAAmB;AACpD,EAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,IAAA,CAAK,kBAAA,EAAmB;AACpD,EAAA,IAAI,IAAA,KAAS,UAAA,EAAY,OAAO,IAAA,CAAK,cAAA,EAAe;AACpD,EAAA,OAAO,KAAK,kBAAA,CAAmB,MAAA,EAAW,EAAE,SAAA,EAAW,MAAa,CAAA;AACtE,CAAC,CAAA;AAED,gBAAA,CAAiB,cAAA,CAAe,cAAA,EAAgB,SAAU,KAAA,EAAgB,OAAA,EAAmB;AAC3F,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,EAAA;AAClE,EAAA,MAAM,MAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC5D,EAAA,IAAI,OAAO,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAY,WAAW,OAAO,OAAA,KAAY,YAAY,MAAA,IAAW,OAAA,GAClE,OAAA,CAAgB,IAAA,GACjB,EAAC;AAML,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,KAAA,CAAA,EAAW;AAAA,MACtC,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,uBAAuB,QAAA,CAAS,qBAAA;AAAA,MAChC,uBAAuB,QAAA,CAAS;AAAA,KACjC,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA;AAAA,EACf,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACF,CAAC,CAAA;AAQM,SAAS,kBAAA,CAAmB,QAAgB,OAAA,EAAoC;AACrF,EAAA,MAAM,QAAA,GAAW,iBAAiB,OAAA,CAAQ,MAAA,EAAQ,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,CAAA;AACpF,EAAA,OAAO,SAAS,OAAO,CAAA;AACzB;AC5CA,IAAM,iBAAiB,2BAAA,CAAgC,KAAA,CAAM,MAAM,MAAA,EAAO,CAAE,QAAO,CAAE,KAAA;AAErF,IAAMM,4BAAAA,GAA8BN,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,4BAAgC,KAAA,CAAM,KAAA;AAAA,EAC7C,KAAA,EAAOA,CAAAA,CACJ,MAAA,CAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACH,cAAA,CAAA,EADG;AAAA,IAEN,OAAA,EAASA,EAAE,KAAA,CAAM;AAAA,MACfA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,MAC7CA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,MAC7CA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG;AAAA,KAC9C;AAAA,GACH,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC,CAAA;AAED,IAAO,sCAAA,GAAQM,4BAAAA;ACZA,SAAR,sBAAA,CAAwC,EAAE,KAAA,EAAO,KAAA,EAAM,EAA0B;AACtF,EAAA,MAAkC,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAC,EAApC,EAAA,OAAA,KAA0B,EAAA,EAAd,SAAA,GAAA,SAAA,CAAc,IAAd,CAAZ,SAAA,CAAA,CAAA;AACR,EAAA,IAAI,IAAA,GAAO,MAAA;AACX,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAA,GAAO,QAAQ,GAAA,CAAI,CAAC,QAAQ,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,OAAA,qBAAYR,OAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,GAAA,EAAK,SAAS,EAAA,EAAI,OAAA,EAAS,CAAE,CAAC,CAAA;AAAA,EAC1G;AAEA,EAAA,uBAAOA,QAAA,aAAA,CAAC,yBAAA,EAAA,EAAqB,OAAO,SAAA,EAAW,OAAA,EAAS,MAAM,KAAA,EAAc,CAAA;AAC9E;ACbO,IAAMS,qBAAAA,GAAuBP,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,qBAAyB,KAAA,CAAM,KAAA;AAAA,EACtC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,WAAA,EAAaA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAAS,GACtD,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC,CAAA;ACHc,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,KAAA,EAAM,EAAmB;AAhB1E,EAAA,IAAA,EAAA;AAiBE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,KAAP,IAAA,GAAA,EAAA,GAAsB,EAAC;AAC3C,EAAA,uBACEF,OAAAA,CAAA,aAAA,CAAC,qBAAc,KAAA,EAAA,EACZ,WAAA,CAAY,IAAI,CAAC,OAAA,qBAChBA,OAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,GAAA,EAAK,SAAS,EAAA,EAAI,OAAA,EAAS,CACzC,CACH,CAAA;AAEJ;ACfA,IAAMM,aAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAME,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEL,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC;AAEM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,aAAA,EAAeI,aAAAA;AAAA,EACf,kBAAkBJ,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,WAAA,EAAaI,aAAAA;AAAA,EACb,cAAcJ,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,WAAA,EAAaI,aAAAA;AAAA,EACb,SAAA,EAAWA,aAAAA;AAAA,EACX,UAAA,EAAYF,mBAAAA;AAAA,EACZ,WAAA,EAAaF,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACrD,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,WAAWA,CAAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA,CAAE,QAAA,GAAW,QAAA;AACxD,CAAC;AClCD,SAASG,eAAc,UAAA,EAA4C;AACjE,EAAA,MAAM,IAAI,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,aAAA;AACxB,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEb;AAEA,SAASK,UAAAA,CAAU,EAAE,WAAA,EAAY,EAAqB;AACpD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAa,WAAW,CAAA,CAAA;AACjC;AAEe,SAAR,kBAAmC,KAAA,EAAyB;AA7CnE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8CE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,EAAA,GAAqB,EAAC;AAC1C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,SAAA;AAAA,IAC1B,UAAA,EAAYL,cAAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,IAC1C,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,WAAA;AAAA,IACf,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,IAAI,MAAM,gBAAA,EAAkB;AAC1B,IAAA,uBACEL,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,SAAA,EAAA,EACT,YAAY,GAAA,CAAI,CAAC,4BAChBA,OAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,GAAA,EAAK,SAAS,EAAA,EAAI,OAAA,EAAS,CACzC,CACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,QAEL,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,CAAM,aAAA,KAAN,IAAA,GAAA,EAAA,GAAuB,SAAA;AAAA,QACxC,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAW,MAAA;AAAA,QACX,KAAA,EAAO;AAAA,OACT;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAU,OAAA;AAAA,UACV,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,EAAA,GAAqB,SAAA;AAAA,UACtC,YAAA,EAAA,CAAc,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,EAAA,GAAsB,MAAA;AAAA,UACpC,QAAA,EAAU,KAAA,CAAM,YAAA,GAAe,QAAA,GAAW,MAAA;AAAA,UAC1C,MAAA,EAAQU,WAAU,KAAK;AAAA,SACzB;AAAA,QACA,IAAA,EAAK,cAAA;AAAA,QACL,WAAA,EAAY,GAAA;AAAA,QACZ,WAAA,EAAY,GAAA;AAAA,QACZ,MAAA,EAAQ;AAAA,OAAA;AAAA,sBAERV,OAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EAAA,kBACzBA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,IAAA,EACE,WAAA,CAAY,GAAA,CAAI,CAAC,OAAA,qBAChBA,QAAA,aAAA,CAAC,WAAA,EAAA,EAAY,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,OAAA,EAAS,CACzC,CACH,CACF,CACF;AAAA;AACF,GACF;AAEJ;;;AC9DA,IAAM,aAAA,GAAgB,aAAA,CAA+B,EAAE,CAAA;AAEvD,SAAS,iBAAA,GAAoB;AAC3B,EAAA,OAAO,WAAW,aAAa,CAAA;AACjC;AAIO,SAAS,WAAA,CAAY,EAAE,EAAA,EAAG,EAAsB;AACrD,EAAA,MAAMW,YAAW,iBAAA,EAAkB;AACnC,EAAA,OAAOA,SAAAA,CAAS,EAAE,CAAA,mBAAIX,OAAAA,CAAA,cAAC,eAAA,EAAA,cAAA,CAAA,EAAA,EAAoBW,SAAAA,CAAS,EAAE,CAAA,CAAG,CAAA,GAAK,IAAA;AAChE;AAGA,IAAM,oBAAoB,iCAAA,CAAkC;AAAA,EAC1D,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQ,sCAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQF,qBAAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,sBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,gBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,oBAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAEf,CAAC,CAAA;AAEM,IAAM,iBAAA,GAAoB,8BAA8B,iBAAiB;AAGzE,IAAM,uBAAuBP,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAU,iBAAiB;AAG1E,IAAM,eAAA,GAAkB,oBAAoB,iBAAiB,CAAA;AAM9C,SAAR,MAAA,CAAwB,EAAE,QAAA,EAAAS,SAAAA,EAAU,aAAY,EAAiB;AACtE,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAC,aAAA,CAAc,UAAd,EAAuB,KAAA,EAAOW,SAAAA,EAAAA,kBAC7BX,OAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAI,aAAa,CAChC,CAAA;AAEJ;;;ACnGe,SAAR,oBAAA,CAAsCW,SAAAA,EAA2B,EAAE,WAAA,EAAa,WAAU,EAAa;AAC5G,EAAA,MAAMZ,QACJ,iBAAA,GACAa,sBAAA;AAAA,oBACEZ,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,QAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,cAAC,MAAA,EAAA,EAAO,QAAA,EAAUW,SAAAA,EAAU,WAAA,EAA0B,CACxD,CACF;AAAA,GACF;AACF,EAAA,IAAI,CAAC,WAAW,OAAOZ,KAAAA;AACvB,EAAA,OAAO,kBAAA,CAAmBA,OAAM,SAAS,CAAA;AAC3C;;;AChCe,SAAR,YAAA,CAA8BY,SAAAA,EAA2B,EAAE,WAAA,EAAa,WAAU,EAAqB;AAC5G,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,WAAA,CAAYA,SAAAA,EAAU,aAAa,KAAK,CAAA;AAExC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,QAAQ,SAAA,EAAW,MAAM,CAAA,CAAE,IAAA,EAAK,GAAI,IAAA;AAClE,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,OAAO,kBAAA,CAAmB,MAAM,SAAS,CAAA;AAC3C;AAEA,SAAS,WAAA,CAAYA,SAAAA,EAA2B,OAAA,EAAiB,KAAA,EAAuB;AAjBxF,EAAA,IAAA,EAAA;AAkBE,EAAA,MAAM,KAAA,GAAQA,UAAS,OAAO,CAAA;AAC9B,EAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA;AAEvB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,aAAA;AACH,MAAA,cAAA,CAAeA,SAAAA,EAAU,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,WAAA,EAAa,KAAK,CAAA;AACjD,MAAA;AAAA,IAEF,KAAK,WAAA;AACH,MAAA,cAAA,CAAeA,SAAAA,EAAAA,CAAU,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,aAAa,KAAK,CAAA;AACxD,MAAA;AAAA,IAEF,KAAK,kBAAA;AACH,MAAA,sBAAA,CAAuBA,SAAAA,EAAU,MAAM,KAAK,CAAA;AAC5C,MAAA;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AACtB,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,aAAA,CAAc,MAAM,KAAK,CAAA;AACzB,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,MAAA;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AACvB,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,MAAA;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AACtB,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA;AAAA;AAEN;AAEA,SAAS,cAAA,CAAeA,SAAAA,EAA2B,WAAA,EAA0C,KAAA,EAAuB;AAClH,EAAA,IAAI,CAAC,WAAA,EAAa;AAClB,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,IAAA,WAAA,CAAYA,SAAAA,EAAU,SAAS,KAAK,CAAA;AAAA,EACtC;AACF;AAEA,SAAS,sBAAA,CAAuBA,SAAAA,EAA2B,IAAA,EAAW,KAAA,EAAuB;AA/E7F,EAAA,IAAA,EAAA,EAAA,EAAA;AAgFE,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,OAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,IAAA,CAAI,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,WAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,MAAA,EAAQ;AAC5B,MAAA,cAAA,CAAeA,SAAAA,EAAU,GAAA,CAAI,WAAA,EAAa,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AACF;AAEA,SAAS,UAAA,CAAW,MAAW,KAAA,EAAuB;AAzFtD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0FE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,SAAb,IAAA,GAAA,EAAA,GAAqB,EAAA;AAClC,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,IAAA,CAAI,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,EAAU;AAEzB,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACf;AAEA,SAAS,aAAA,CAAc,MAAW,KAAA,EAAuB;AAtGzD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuGE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,SAAb,IAAA,GAAA,EAAA,GAAqB,EAAA;AAClC,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAb,IAAA,GAAA,EAAA,GAAsB,IAAA;AACpC,EAAA,MAAM,SAAS,KAAA,KAAU,IAAA,GAAO,IAAA,GAAO,KAAA,KAAU,OAAO,KAAA,GAAQ,MAAA;AAChE,EAAA,KAAA,CAAM,IAAA,CAAK,SAAS,IAAI,CAAA;AACxB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACf;AAEA,SAAS,YAAA,CAAa,MAAW,KAAA,EAAuB;AAhHxD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiHE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,SAAb,IAAA,GAAA,EAAA,GAAqB,EAAA;AAClC,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAb,IAAA,GAAA,EAAA,GAAoB,EAAA;AAEhC,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAC9B,WAAW,IAAA,EAAM;AACf,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB,WAAW,GAAA,EAAK;AACd,IAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EAChB;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACf;AAEA,SAAS,WAAA,CAAY,MAAW,KAAA,EAAuB;AA9HvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+HE,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAb,IAAA,GAAA,EAAA,GAAoB,EAAA;AAChC,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAb,IAAA,GAAA,EAAA,GAAoB,EAAA;AAChC,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,aAAb,IAAA,GAAA,EAAA,GAAyB,EAAA;AAE1C,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,EACnC,WAAW,GAAA,EAAK;AACd,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EACvB,WAAW,GAAA,EAAK;AACd,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9B;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACf;AAEA,SAAS,YAAA,CAAa,MAAW,KAAA,EAAuB;AA7IxD,EAAA,IAAA,EAAA,EAAA,EAAA;AA8IE,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAb,IAAA,GAAA,EAAA,GAAoB,EAAA;AAChC,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AACrB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACF;AAEA,SAAS,UAAA,CAAW,MAAW,KAAA,EAAuB;AArJtD,EAAA,IAAA,EAAA,EAAA,EAAA;AAsJE,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,aAAb,IAAA,GAAA,EAAA,GAAyB,EAAA;AAC1C,EAAA,IAAI,CAAC,QAAA,EAAU;AAGf,EAAA,MAAM,IAAA,GAAO,UAAU,QAAQ,CAAA;AAC/B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACF;AAEA,SAAS,UAAUZ,KAAAA,EAAsB;AACvC,EAAA,OAAOA,KAAAA,CAEJ,OAAA,CAAQ,cAAA,EAAgB,IAAI,CAAA,CAE5B,OAAA,CAAQ,uCAAA,EAAyC,IAAI,CAAA,CAErD,OAAA,CAAQ,cAAA,EAAgB,SAAS,CAAA,CAEjC,QAAQ,UAAA,EAAY,EAAE,CAAA,CAEtB,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CACrB,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA,CACpB,OAAA,CAAQ,OAAA,EAAS,GAAG,EACpB,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CACrB,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CAEtB,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,EAAM,CAAA,CACvB,IAAA,CAAK,IAAI,CAAA,CACT,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA,CACzB,IAAA,EAAK;AACV;ACtLA,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,WAAA,GAAc,SAAA;AACpB,IAAM,SAAA,GAAY,SAAA;AAClB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,WAAA,GAAc,SAAA;AACpB,IAAM,oBAAA,GACJ,+IAAA;AACF,IAAM,qBAAA,GACJ,8LAAA;AAEF,IAAM,aAAa,WAAA,CAAY;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,UAAA,EAAY;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,SAAA;AAAA,MACT,SAAA,EAAW;AAAA;AACb,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;AAED,IAAM,KAAA,GAAQ,YAAY,UAAA,EAAY;AAAA,EACpC,OAAA,EAAS;AAAA,IACP,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM,UAAA;AAAA,MACN,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA;AAAA,MAChC,IAAA,EAAM,MAAA,CAAO,WAAA,EAAa,IAAI;AAAA,KAChC;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA;AAAA,MAC9B,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,IAAI;AAAA,KAC9B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,SAAA,EAAW;AAAA,MACT,GAAA,EAAK,OAAA,CAAQ,YAAA,EAAc,GAAG,CAAA;AAAA,MAC9B,GAAA,EAAK,OAAA,CAAQ,YAAA,EAAc,GAAG,CAAA;AAAA,MAC9B,GAAA,EAAK,OAAA,CAAQ,YAAA,EAAc,GAAG,CAAA;AAAA,MAC9B,GAAA,EAAK,OAAA,CAAQ,YAAA,EAAc,GAAG,CAAA;AAAA,MAC9B,GAAA,EAAK;AAAA,KACP;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,cAAA,EAAgB;AAAA,MACd,cAAA,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAA,EASG,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,KAK1C;AAAA,IACA,QAAA,EAAU;AAAA,MACR,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE;AAAA,SAC5C;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,UAAA,EAAY,CAAA;AAAA,UACZ,WAAA,EAAa;AAAA,SACf;AAAA,QACA,aAAA,EAAe;AAAA,UACb,eAAA,EAAiB;AAAA;AACnB;AACF,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,cAAA,EAAgB;AAAA,QACd,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA;AACpC;AACF,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAA,EAAc;AAAA,QACZ,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,UAAA,EAAY,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA;AAAA,UAChC,aAAA,EAAe,UAAA,CAAW,OAAA,CAAQ,CAAC;AAAA;AACrC;AACF,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS;AAAA,OACX;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,UAAA,EAAY,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA;AAAA,UAChC,aAAA,EAAe,UAAA,CAAW,OAAA,CAAQ,CAAC;AAAA;AACrC;AACF,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,SAAA,EAAW,WAAA;AAAA,UACX,cAAA,EAAgB,WAAW,OAAA,CAAQ,OAAA;AAAA,UACnC,SAAA,EAAW,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,UACjC,OAAA,EAAS,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA;AAC9D;AACF,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,UAAA,CAAW,UAAA,CAAW,KAAA,CAAA,EADrB;AAAA,UAEJ,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA,SAC1C,CAAA;AAAA,QACA,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,UAAA,CAAW,UAAA,CAAW,QAAA,CAAA,EADrB;AAAA,UAEJ,UAAA,EAAY,WAAW,UAAA,CAAW,gBAAA;AAAA,UAClC,aAAA,EAAe,SAAA;AAAA,UACf,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,SACjC;AAAA;AACF,KACF;AAAA,IACA,WAAA,EAAa;AAAA,MACX,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,iBAAA,EAAmB;AAAA,YACjB,YAAA,EAAc;AAAA;AAChB;AACF;AACF,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,aAAA,EAAe,WAAA;AAAA,UACf,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE;AAAA;AAC5C;AACF,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,gDAAA,EAAkD;AAAA,YAChD,IAAA,EAAM,UAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ;AAAA;AACnC,SACF;AAAA,QACA,SAAA,EAAW;AAAA,UACT,YAAA,EAAc,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,UACpC,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,SAAA,EAAW;AAAA,UACT,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,UAAA,CAAW,OAAA,CAAQ,CAAC;AAAA,SAClC;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,UACxC,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,SACjC;AAAA,QACA,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA;AACpC;AACF,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,SAAA,EAAW;AAAA;AACb;AACF,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,cAAA,EAAgB;AAAA,QACd,OAAA,EAAS;AAAA,UACP,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,UAC1C,iBAAiB,KAAA,CAAM,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,SAAS,GAAG;AAAA;AAC7D;AACF,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,CAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ,CAAA;AAAA,UACR,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA,SAC9C;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA,SAC9C;AAAA,QACA,UAAA,EAAY;AAAA,UACV,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAO;AAAA,UACL,MAAA,EAAQ,EAAA;AAAA,UACR,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,YAAA;AAAA,UACR,2CAAA,EAA6C;AAAA,YAC3C,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,UAAA,EAAY,GAAG,CAAC,CAAA;AAAA,WAChD;AAAA,UACA,UAAA,EAAY;AAAA,YACV,OAAA,EAAS;AAAA;AACX;AACF;AACF,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR,YAAA,EAAc;AAAA,QACZ,SAAA,EAAW,CAAA;AAAA,QACX,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,YAAA,EAAc;AAAA,QACZ,kBAAA,EAAoB,IAAA;AAAA,QACpB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,6CAAA,EAA+C;AAAA,YAC7C,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA;AAC9C;AACF;AACF,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,YAAA,EAAc;AAAA,QACZ,gBAAA,EAAkB;AAAA;AACpB,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,cAAA,EAAgB;AAAA,QACd,SAAA,EAAW;AAAA,UACT,UAAA,EAAY,UAAA,CAAW,OAAA,CAAQ,EAAE;AAAA,SACnC;AAAA,QACA,cAAA,EAAgB;AAAA,UACd,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA;AACpC;AACF,KACF;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAA,EAAc;AAAA,QACZ,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,WAAA,EAAa;AAAA,UACX,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,SACjC;AAAA,QACA,aAAA,EAAe;AAAA,UACb,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,SACjC;AAAA,QACA,eAAA,EAAiB;AAAA,UACf,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,UACxC,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,UAC/B,4BAAA,EAA8B;AAAA,YAC5B,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,YACxC,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AACjC,SACF;AAAA,QACA,kBAAA,EAAoB;AAAA,UAClB,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UAC3C,QAAQ,CAAA,UAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,UACjD,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,UAC/B,4BAAA,EAA8B;AAAA,YAC5B,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,YAC3C,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,YACxC,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AACjC;AACF;AACF,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,UACnC,YAAA,EAAc,UAAA,CAAW,OAAA,CAAQ,GAAG;AAAA;AACtC;AACF,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,yCAAA,EAA2C;AAAA,YACzC,cAAc,CAAA,UAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,WACzD;AAAA,UACA,+CAAA,EAAiD;AAAA,YAC/C,cAAc,CAAA,UAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,WAAA;AAAA,WACzD;AAAA,UACA,SAAA,EAAW;AAAA,YACT,YAAA,EAAc,CAAA,UAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,KAAK,OAAO,CAAA,WAAA;AAAA,WAC5D;AAAA,UACA,yCAAA,EAA2C;AAAA,YACzC,YAAA,EAAc;AAAA,cACZ,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,cACxC,UAAA,EAAY;AAAA;AACd,WACF;AAAA,UACA,wDAAA,EAA0D;AAAA,YACxD,kBAAA,EAAoB;AAAA,cAClB,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA,aAC1C;AAAA,YACA,wBAAA,EAA0B;AAAA,cACxB,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,cACrC,WAAA,EAAa;AAAA;AACf;AACF,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,UAC1C,gBAAA,EAAkB;AAAA,YAChB,mBAAA,EAAqB,SAAA;AAAA,YACrB,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AACjC,SACF;AAAA,QACA,gBAAgB;AAAC;AACnB,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,cAAA,EAAgB;AAAA,UACd,UAAA,EAAY;AAAA,YACV,QAAA,EAAU,QAAA;AAAA,YACV,QAAA,EAAU;AAAA;AACZ;AACF;AACF,KACF;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,uBAAA,EAAyB;AAAA,YACvB,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,YAC1C,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AACjC;AACF;AACF,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,YAAA,EAAc;AAAA,QACZ,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,aAAA;AAAA,UACX,UAAA,EAAY,WAAW,UAAA,CAAW,gBAAA;AAAA,UAClC,eAAA,EAAiB;AAAA,YACf,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,WACjC;AAAA,UACA,0BAAA,EAA4B;AAAA,YAC1B,SAAA,EAAW,gCAAA;AAAA,YACX,KAAA,EAAO;AAAA,WACT;AAAA,UACA,0BAAA,EAA4B;AAAA,YAC1B,SAAA,EAAW;AAAA;AACb;AACF;AACF,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,YAAA,EAAc;AAAA,QACZ,OAAA,EAAS;AAAA,OACX;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ,CAAA;AAAA,UACR,eAAA,EAAiB,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AAC3C;AACF,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,aAAA,EAAe,MAAA;AAAA,UACf,QAAA,EAAU,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA;AAAA,UAC9B,WAAA,EAAa,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,UACnC,YAAA,EAAc,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,UACpC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,UAC1C,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,UAClC,UAAA,EAAY,GAAA;AAAA,UACZ,UAAA,EAAY,WAAW,UAAA,CAAW,gBAAA;AAAA,UAClC,UAAA,EAAY,YAAA;AAAA,UACZ,gBAAA,EAAkB;AAAA,YAChB,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA,WACjC;AAAA,UACA,SAAA,EAAW;AAAA,YACT,KAAA,EAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK;AAAA;AACjC;AACF;AACF,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM;AAAA,UACJ,YAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,cAAA,EAAgB;AAAA,QACd,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,UAC1C,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA;AACpC;AACF;AACF,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,IAClC,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,EAAA,EAAI;AAAA,MACF,UAAA,EAAY,WAAW,UAAA,CAAW,UAAA;AAAA,MAClC,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,MAC1C,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,UAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW;AAAA,KACpC;AAAA,IACA,KAAA,EAAO;AAAA,MACL,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE;AAAA,KAC5C;AAAA,IACA,KAAA,EAAO;AAAA,MACL,QAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,EAAE;AAAA,KAC5C;AAAA,IACA,QAAA,EAAU;AAAA,MACR,UAAA,EAAY,WAAW,UAAA,CAAW,gBAAA;AAAA,MAClC,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,aAAA,EAAe,MAAA;AAAA,MACf,UAAA,EAAY,WAAW,UAAA,CAAW,gBAAA;AAAA,MAClC,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,CAAA;AAAA,MACf,UAAA,EAAY;AAAA;AACd,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA;AAAA,IACA,6GAAA;AAAA,IACA,8GAAA;AAAA,IACA,8GAAA;AAAA,IACA,gHAAA;AAAA,IACA,GAAG,KAAA,CAAM,EAAE,CAAA,CAAE,KAAK,MAAM;AAAA;AAE5B,CAAC,CAAA;AAED,IAAO,aAAA,GAAQ;;;ACvgBkD,IAAM,QAAA,GAAS,IAAA,CAAK,KAAA,CAAM,0nUAAqnW,CAAA;;;ACA/oW,IAAMc,SAAAA,GAAS,IAAA,CAAK,KAAA,CAAM,k/VAA++W,CAAA;;;ACAzgX,IAAMA,SAAAA,GAAS,IAAA,CAAK,KAAA,CAAM,ypVAAsyW,CAAA;ACM13W,IAAM,iBAAA,GAAoB,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI;AAGlD,IAAM,QAAA,GAA8C;AAAA,EAClD,EAAA,EAAA,QAAA;AAAA,EACA,EAAA,EAAAA,SAAAA;AAAA,EACA,EAAA,EAAAA;AACF,CAAA;AAEA,IAAI,MAAA,GAAS,KAAA;AAEN,SAAS,eAAe,MAAA,EAA6C;AAC1E,EAAA,MAAM,WAA6B,iBAAA,CAAwC,QAAA,CAAS,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,EAAE,IAC3F,MAAA,GACD,IAAA;AACJ,EAAA,IAAI,MAAA,IAAU,aAAa,MAAA,EAAQ;AAEjC,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4CAAA,EAA+C,MAAM,CAAA,wBAAA,CAA0B,CAAA;AAAA,EAC9F;AACA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,CAAA;AAC/D,IAAA,MAAA,GAAS,IAAA;AAAA,EACX;AACA,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AACtB,EAAA,OAAO,QAAA;AACT;AAIO,SAAS,CAAA,CAAE,IAAY,QAAA,EAA2B;AACvD,EAAA,OAAO,IAAA,CAAK,EAAE,EAAA,EAAI,IAAI,EAAE,OAAA,EAAS,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,EAAA,EAAI,CAAA;AACnD;ACHA,IAAM,cAAA,GAAuC;AAAA,EAC3C,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,aAAA,EAAe,SAAA;AAAA,MACf,WAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAW,SAAA;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,aAAa;AAAC;AAChB;AAEJ,CAAA;AAMA,IAAM,WAAA,GAAc,GAAA;AACpB,SAAS,eAAA,CACP,IACA,IAAA,EACyB;AACzB,EAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,EAAA,OAAO,IAAI,IAAA,KAAe;AACxB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,GAAM,QAAQ,IAAA,EAAM;AACtB,MAAA,IAAA,GAAO,GAAA;AACP,MAAA,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACZ;AAAA,EACF,CAAA;AACF;AAEA,IAAM,mBAAmB,MAAA,EAAe;AAAA,EACtC,QAAA;AAAA,IACE,OAAO;AAAA,MACL,QAAA,EAAU,cAAA;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,kBAAA,EAAoB,QAAA;AAAA,MACpB,eAAA,EAAiB,QAAA;AAAA,MACjB,kBAAA,EAAoB,SAAA;AAAA,MACpB,mBAAA,EAAqB,IAAA;AAAA,MACrB,iBAAA,EAAmB,IAAA;AAAA,MACnB,kBAAA,EAAoB,KAAA;AAAA,MACpB,mBAAA,EAAqB,IAAA;AAAA,MACrB,cAAA,EAAgB,IAAA;AAAA,MAChB,aAAA,EAAe,IAAA;AAAA,MACf,mBAAA,EAAqB;AAAA,KACvB,CAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,GAAA;AAAA;AAAA;AAAA,MAGP,YAAY,CAAC,KAAA,MAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAS,CAAA;AAAA;AAAA;AAAA,MAGnD,UAAU,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA,CAAE,QAAA;AAAA,MACrC,SAAA,EAAW,CAAC,SAAA,KACV,eAAA;AAAA,QACE,CAAC,SAAA,EAAW,OAAA,EAAS,iBAAiB,SAAA,CAAU,SAAA,EAAW,SAAS,YAAY,CAAA;AAAA,QAChF;AAAA;AACF;AACJ;AAEJ,CAAA;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA;AAC3C;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAClD;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,kBAAkB,CAAA;AACrD;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,CAAA;AAClD;AAEO,SAAS,mBAAmB,eAAA,EAA4C;AAC7E,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,eAAA,EAAiB,CAAA;AACtD;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,kBAAkB,CAAA;AACrD;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAmB,CAAA;AACtD;AAEO,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,iBAAiB,CAAA;AACpD;AAEO,SAAS,qBAAA,GAAwB;AACtC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,kBAAkB,CAAA;AACrD;AAEO,SAAS,mBAAmB,eAAA,EAA4C;AAC7E,EAAA,MAAM,kBAAA,GAAqB,eAAA,KAAoB,IAAA,GAAO,QAAA,GAAW,qBAAA;AACjE,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,IAAI,oBAAoB,IAAA,EAAM;AAC5B,IAAA,OAAA,CAAQ,mBAAA,GAAsB,IAAA;AAAA,EAChC;AACA,EAAA,OAAO,iBAAiB,QAAA,CAAS,cAAA,CAAA;AAAA,IAC/B,eAAA;AAAA,IACA;AAAA,GAAA,EACG,OAAA,CACJ,CAAA;AACH;AAEO,SAAS,cAAc,kBAAA,EAAkD;AAC9E,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,kBAAA,EAAoB,CAAA;AACzD;AAEO,SAAS,cAAcF,SAAAA,EAA8B;AAG1D,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,QAAA,CAAS,QAAA,EAAS;AACvD,EAAA,WAAA,CAAY,KAAA,EAAM;AAClB,EAAA,gBAAA,CAAiB,QAAA,CAAS;AAAA,IACxB,QAAA,EAAAA,SAAAA;AAAA,IACA,kBAAA,EAAoB,QAAA;AAAA,IACpB,eAAA,EAAiB;AAAA,GAClB,CAAA;AACD,EAAA,WAAA,CAAY,KAAA,EAAM;AAClB,EAAA,WAAA,CAAY,MAAA,EAAO;AACrB;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,OAAO,gBAAA,CAAiB,UAAS,CAAE,QAAA;AACrC;AAEO,SAAS,YAAYA,SAAAA,EAA8B;AACxD,EAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,QAAA,EAAS,CAAE,QAAA;AAErD,EAAA,gBAAA,CAAiB,QAAA,CAAS;AAAA,IACxB,QAAA,EAAU,kCACL,gBAAA,CAAA,EACAA,SAAAA;AAAA,GAEN,CAAA;AACH;AAMO,SAAS,gBAAgBA,SAAAA,EAA8B;AAC5D,EAAA,gBAAA,CAAiB,QAAA,CAAS,EAAE,QAAA,EAAAA,SAAAA,EAAU,CAAA;AACxC;AAEO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,mBAAA,GAAsB,CAAC,gBAAA,CAAiB,QAAA,EAAS,CAAE,mBAAA;AACzD,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,mBAAA,EAAqB,CAAA;AAC1D;AAEO,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,iBAAA,GAAoB,CAAC,gBAAA,CAAiB,QAAA,EAAS,CAAE,iBAAA;AACvD,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,iBAAA,EAAmB,CAAA;AACxD;AAEO,SAAS,sBAAsB,kBAAA,EAAkD;AACtF,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,kBAAA,EAAoB,CAAA;AACzD;AAEO,SAAS,sBAAsB,kBAAA,EAA6B;AACjE,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,kBAAA,EAAoB,CAAA;AACzD;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAmB,CAAA;AACtD;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,OAAO,gBAAA,CAAiB,UAAS,CAAE,mBAAA;AACrC;AAEO,SAAS,iBAAA,GAAoB;AAClC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA;AACjD;AAEO,SAAS,kBAAkB,cAAA,EAA0C;AAC1E,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,cAAA,EAAgB,CAAA;AACrD;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAChD;AAEO,SAAS,gBAAA,GAAmB;AACjC,EAAA,OAAO,gBAAA,CAAiB,UAAS,CAAE,aAAA;AACrC;AAEO,SAAS,iBAAiB,aAAA,EAAwC;AACvE,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,aAAA,EAAe,CAAA;AACpD;AAEO,SAAS,sBAAA,GAAyB;AACvC,EAAA,OAAO,gBAAA,CAAiB,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAmB,CAAA;AACtD;AAEO,SAAS,uBAAuB,mBAAA,EAAoD;AACzF,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,mBAAA,EAAqB,CAAA;AAC1D;AAEO,SAAS,uBAAuB,mBAAA,EAA8C;AACnF,EAAA,OAAO,gBAAA,CAAiB,QAAA,CAAS,EAAE,mBAAA,EAAqB,CAAA;AAC1D;AAMO,SAAS,IAAA,GAAO;AACrB,EAAA,gBAAA,CAAiB,QAAA,CAAS,QAAA,EAAS,CAAE,IAAA,EAAK;AAC5C;AAEO,SAAS,IAAA,GAAO;AACrB,EAAA,gBAAA,CAAiB,QAAA,CAAS,QAAA,EAAS,CAAE,IAAA,EAAK;AAC5C;AAMO,SAAS,UAAA,GAAa;AAC3B,EAAA,OAAO,QAAA,CAAS,iBAAiB,QAAA,EAAU,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,SAAS,CAAC,CAAA;AAC3E;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,OAAO,QAAA,CAAS,iBAAiB,QAAA,EAAU,CAAC,MAAM,CAAA,CAAE,YAAA,CAAa,SAAS,CAAC,CAAA;AAC7E;;;ACrPA,IAAM,aAAA,GAAgB,MAAA;AAEf,SAAS,iBAAiB,GAAA,EAAwC;AA1BzE,EAAA,IAAA,EAAA,EAAA,EAAA;AA2BE,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,aAAc,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,aAAA,GAAgB,KAAK,IAAA,GAAO,MAAA;AAItE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,GAAA;AAAA,IACd,OAAA,EAAA,CAAS,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,OAAA,KAAZ,IAAA,GAAA,EAAA,GAAuB,MAAA;AAAA,IAChC,SAAA,EAAA,CAAW,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAA,KAAZ,IAAA,GAAA,EAAA,GAAyB,MAAA;AAAA,IACpC,UAAU,oBAAA,CAAqB,GAAA,EAAK,EAAE,WAAA,EAAa,eAAe,CAAA;AAAA,IAClE,UAAU,YAAA,CAAa,GAAA,EAAK,EAAE,WAAA,EAAa,eAAe;AAAA,GAC5D;AACF;;;ACIA,IAAM,kBAAA,GAAqBG,cAA6C,IAAI,CAAA;AAWrE,IAAM,sBAA0D,CAAC;AAAA,EACtE,QAAA;AAAA,EACA,iBAAA,GAAoB,IAAA;AAAA,EACpB,mBAAA,GAAsB,IAAA;AAAA,EACtB;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAwB,iBAAiB,CAAA;AAC3F,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAAwB,mBAAmB,CAAA;AACjG,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,SAA8B,IAAI,CAAA;AACxF,EAAA,MAAM,CAAC,mBAAA,EAAqB,2BAA2B,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AAChF,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAqD,EAAE,CAAA;AAGhF,EAAA,MAAM,SAAA,GAAY,OAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,MAAM,aAAa,WAAA,EAAY;AAC/B,IAAA,gBAAA,CAAiB,OAAA,CAAQ,OAAA,CAAQ,CAAA,QAAA,KAAY,QAAA,CAAS,UAAU,CAAC,CAAA;AACjE,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,SAAA,CAAU,OAAA,CAAQ,gBAAA,CAAiB,UAAU,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CACE,YAAA,EACA,UAAA,EACA,YAAA,EACA,MACA,IAAA,KACG;AACH,MAAA,IAAI,UAAA,KAAe,MAAA,EAAW,oBAAA,CAAqB,UAAU,CAAA;AAC7D,MAAA,IAAI,YAAA,KAAiB,MAAA,EAAW,sBAAA,CAAuB,YAAY,CAAA;AACnE,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,sBAAA,CAAuB,IAAI,CAAA;AACnD,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,2BAAA,CAA4B,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAE,CAAA;AAAA,IAChE,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CACE,UAAA,EACA,YAAA,EACA,IAAA,EACA,IAAA,KACG;AACH,MAAA,oBAAA,CAAqB,UAAU,CAAA;AAC/B,MAAA,sBAAA,CAAuB,YAAY,CAAA;AACnC,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,sBAAA,CAAuB,IAAI,CAAA;AACnD,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,2BAAA,CAA4B,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,EAAE,CAAA;AAAA,IAChE,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,sBAAA,GAAyB,WAAA,CAAY,CAAC,IAAA,KAAmB;AAC7D,IAAA,2BAAA,CAA4B,IAAI,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAA,GAAuB,WAAA,CAAY,CAAC,QAAA,KAAuD;AAC/F,IAAA,gBAAA,CAAiB,OAAA,GAAU,CAAC,GAAG,gBAAA,CAAiB,SAAS,QAAQ,CAAA;AACjE,IAAA,OAAO,MAAM;AACX,MAAA,gBAAA,CAAiB,UAAU,gBAAA,CAAiB,OAAA,CAAQ,MAAA,CAAO,CAAA,QAAA,KAAY,aAAa,QAAQ,CAAA;AAAA,IAC9F,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQP,OAAAA;AAAA,IACZ,OAAO;AAAA,MACL,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACEP,OAAAA,CAAA,aAAA,CAAC,mBAAmB,QAAA,EAAnB,EAA4B,SAC1B,QACH,CAAA;AAEJ;AAEO,IAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,OAAA,GAAUe,WAAW,kBAAkB,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,OAAA;AACT;ACvIA,IAAM,qBAAA,GAAwBD,aAAAA,CAA8B,EAAE,CAAA;AAEvD,SAAS,sBAAA,CAAuB;AAAA,EACrC,SAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBAAOd,QAAA,aAAA,CAAC,qBAAA,CAAsB,UAAtB,EAA+B,KAAA,EAAO,aAAY,QAAS,CAAA;AACrE;AAEO,SAAS,iBAAA,GAAoC;AAClD,EAAA,OAAOe,WAAW,qBAAqB,CAAA;AACzC;AC9BA,IAAM,UAAA,GAAqC;AAAA,EACzC,mBAAA,EAAqB,yBAAA;AAAA,EACrB,QAAA,EAAU,gBAAA;AAAA,EACV,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ,cAAA;AAAA,EACR,YAAA,EAAc,kBAAA;AAAA,EACd,eAAA,EAAiB,qBAAA;AAAA,EACjB,cAAA,EAAgB,oBAAA;AAAA,EAChB,aAAA,EAAe,mBAAA;AAAA,EACf,cAAA,EAAgB,oBAAA;AAAA,EAChB,iBAAA,EAAmB,uBAAA;AAAA,EACnB,cAAA,EAAgB,oBAAA;AAAA,EAChB,eAAA,EAAiB,qBAAA;AAAA,EACjB,eAAA,EAAiB,qBAAA;AAAA,EACjB,iBAAA,EAAmB,uBAAA;AAAA,EACnB,YAAA,EAAc,kBAAA;AAAA,EACd,OAAA,EAAS;AACX,CAAA;AAMe,SAAR,gBAAA,CAAkC,EAAE,KAAA,EAAO,QAAA,EAAS,EAAsB;AAC/E,EAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,EAAA,MAAM,YAAA,GAAe,GAAA,GAAM,CAAA,CAAE,GAAA,EAAK,KAAK,CAAA,GAAI,KAAA;AAC3C,EAAA,uBACEf,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,GAAG,CAAA,EAAA,kBACNA,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,UAAA,EAAW,KAAA,EAAM,kBAAiB,EAAA,EAAI,EAAE,OAAA,EAAS,OAAA,EAAS,EAAA,EAAI,CAAA,EAAE,EAAA,EACjF,YACH,mBACAA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,CAAA,EAAG,EAAA,EAAI,CAAA,EAAA,EACpB,QACH,CACF,CAAA;AAEJ;AClCe,SAAR,gBAAiC,EAAE,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,UAAS,EAAU;AAC1F,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,SAAS,YAAY,CAAA;AAG/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,YAAY,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,YAAW,YAAA,EAAA,kBAChBjB,OAAAA,CAAA,aAAA,CAAC,cAAW,MAAA,EAAM,IAAA,EAAA,EAAE,KAAM,CAAA,kBAC1BA,OAAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,KAAA;AAAA,MACA,IAAA,EAAK,OAAA;AAAA,MACL,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAe;AAC3B,QAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,UAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,QAClE;AACA,QAAA,QAAA,CAAS,CAAC,CAAA;AACV,QAAA,QAAA,CAAS,CAAC,CAAA;AAAA,MACZ;AAAA,KAAA;AAAA,IAEC;AAAA,GAEL,CAAA;AAEJ;ACrBe,SAAR,eAAgC,EAAA,EAAmE;AAAnE,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,KAAA,EAjBrE,GAiBuC,EAAA,EAAwC,KAAA,GAAA,SAAA,CAAxC,EAAA,EAAwC,CAAtC,WAAA,EAAW,OAAA,EAAO,UAAA,EAAU,OAAA,CAAA,CAAA;AACnE,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,UAAA,EAAW,QAAA,EAAS,OAAA,EAAS,CAAA,EAAG,cAAA,EAAe,eAAA,EAAgB,OAAM,MAAA,EAAA,kBAC1FjB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,CAAA,EAAG,UAAA,EAAY,CAAA,EAAE,EAAA,EAAI,SAAU,CAAA,kBACpElB,OAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACK,KAAA,CAAA,EADL;AAAA,MAEC,KAAA;AAAA,MACA,QAAA,EAAU,CAAC,CAAA,EAAGmB,MAAAA,KAAmB;AAC/B,QAAA,IAAI,OAAOA,WAAU,QAAA,EAAU;AAC7B,UAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,QACzE;AACA,QAAA,QAAA,CAASA,MAAK,CAAA;AAAA,MAChB;AAAA,KAAA;AAAA,GACF,kBACAnB,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAI,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,GAAE,EAAA,kBACzDlB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,OAAM,gBAAA,EAAiB,EAAA,EAAI,EAAE,UAAA,EAAY,CAAA,EAAE,EAAA,EACpE,KAAA,EACA,KACH,CACF,CACF,CAAA;AAEJ;;;ACnBe,SAAR,YAA6B,EAAA,EAA+D;AAA/D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,KAAA,EAAO,cAAc,QAAA,EApB3D,GAoBoC,IAAoC,KAAA,GAAA,SAAA,CAApC,EAAA,EAAoC,CAAlC,OAAA,EAAO,cAAA,EAAc,UAAA,CAAA,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIJ,SAAS,YAAY,CAAA;AAC/C,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,GAAG,UAAA,EAAW,YAAA,EAAA,kBAC5BjB,OAAAA,CAAA,aAAA,CAACqB,YAAA,EAAW,MAAA,EAAM,QAAE,KAAM,CAAA,kBAC1BrB,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA,EAAU,CAACmB,MAAAA,KAAkB;AAC3B,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,QAAA,CAASA,MAAK,CAAA;AAAA,MAChB;AAAA,KAAA,EACI,KAAA;AAAA,GAER,CAAA;AAEJ;ACtBe,SAAR,SAAA,CAA2B,EAAE,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,MAAM,UAAA,EAAAG,WAAAA,EAAY,YAAA,EAAc,QAAA,EAAS,EAAU;AACrH,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIN,SAAS,YAAY,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,GAAO,CAAA;AAGvD,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,YAAY,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,WAAA;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,cAAc,UAAA,GAAa,UAAA;AAAA,MACpC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA,EAAYsB,WAAAA;AAAA,MACZ,KAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAA,KAAO;AAChB,QAAA,MAAM,CAAA,GAAI,GAAG,MAAA,CAAO,KAAA;AACpB,QAAA,QAAA,CAAS,CAAC,CAAA;AACV,QAAA,QAAA,CAAS,CAAC,CAAA;AAAA,MACZ;AAAA;AAAA,GACF;AAEJ;AC9BA,IAAM,WAAA,GAAuB;AAAA,EAC3B,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AACe,SAAR,MAAA,CAAwB,EAAE,aAAA,EAAe,KAAA,EAAO,UAAS,EAAU;AACxE,EAAA,MAAME,aAAAA,GAAe,CAAC,UAAA,KAAuB;AAC3C,IAAA,uBACExB,OAAAA,CAAA,aAAA;AAAA,MAACyB,QAAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,UAAU,CAAA;AAAA,QAClC,EAAA,EAAI,iCACC,WAAA,CAAA,EADD;AAAA,UAEF,eAAA,EAAiB,UAAA;AAAA,UACjB,MAAA,EAAQ,WAAA;AAAA,UACR,WAAA,EAAa,KAAA,KAAU,UAAA,GAAa,OAAA,GAAU,UAAA;AAAA,UAC9C,QAAA,EAAU,EAAA;AAAA,UACV,OAAA,EAAS,aAAA;AAAA,UACT,SAAA,EAAW;AAAA,YACT,eAAA,EAAiB,UAAA;AAAA,YACjB,WAAA,EAAa;AAAA;AACf,SACF;AAAA;AAAA,KACF;AAAA,EAEJ,CAAA;AACA,EAAA,uBACEzB,QAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,KAAA,EAAM,MAAA,EAAO,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAA,EAAG,mBAAA,EAAqB,yBAAA,EAA0B,EAAA,EAC7F,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAMM,aAAAA,CAAa,CAAC,CAAC,CAC3C,CAAA;AAEJ;;;ACjCA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,EAAA,GAAc;AAAA,EAClB,CAAA,EAAG,CAAA;AAAA,EACH,2BAAA,EAA6B;AAAA,IAC3B,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,6BAAA,EAA+B;AAAA,IAC7B,EAAA,EAAI,CAAA;AAAA,IACJ,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,8BAAA,EAAgC;AAAA,IAC9B,KAAA,EAAO,KAAA;AAAA,IACP,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,EAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,qCAAA,EAAuC;AAAA,IACrC,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,WAAA;AAAA,IACR,WAAA,EAAa,UAAA;AAAA,IACb,YAAA,EAAc,KAAA;AAAA,IACd,KAAA,EAAO;AAAA;AAEX,CAAA;AAMe,SAAR,MAAA,CAAwB,EAAE,KAAA,EAAO,QAAA,EAAS,EAAU;AACzD,EAAA,uBACExB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,GAAG,EAAA,EAAI,EAAA,EAAA,kBACrBjB,OAAAA,CAAA,aAAA,CAAC,kBAAe,KAAA,EAAO,KAAA,EAAO,UAAoB,CAAA,kBAClDA,QAAA,aAAA,CAAC,MAAA,EAAA,EAAO,eAAe,qBAAA,EAAuB,KAAA,EAAc,UAAoB,CAAA,kBAChFA,QAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EAAA,kBACPlB,OAAAA,CAAA,aAAA,CAAC,iBAAc,QAAA,EAAQ,IAAA,EAAC,OAAO,KAAA,EAAO,QAAA,EAAoB,CAC5D,CACF,CAAA;AAEJ;;;AC9EA,IAAM,SAAA,GAAY;AAAA,EAChB,MAAA,EAAQ,WAAA;AAAA,EACR,WAAA,EAAa,WAAA;AAAA,EACb,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,OAAA,EAAS;AACX,CAAA;AAee,SAAR,WAA4B,EAAE,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,UAAS,EAAU;AACrF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIgB,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,YAAY,CAAA;AAC/C,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA+C;AACtE,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC1D,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,uBACEhB,OAAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA,QAAA,CAAS,IAAI,CAAA;AAAA,QACf;AAAA,OAAA;AAAA,sBAEAA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAS,SAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,EAAW,EAAG;AAAA,KAC7D;AAAA,EAEJ,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,eAAA,EAAiB,EAAA,EAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,SAAA,CAAA,EAAL,EAAgB,OAAA,EAAS,KAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IACrF;AACA,IAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,SAAS,eAAA,EAAiB,EAAA,EAAI,cAAA,CAAA,EAAA,EAAK,SAAA,CAAA,EAAA,kBAC7CA,OAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAS,SAAQ,CAChC,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,UAAA,EAAW,YAAA,EAAA,kBAChBjB,OAAAA,CAAA,cAACqB,UAAAA,EAAA,EAAW,EAAA,EAAI,EAAE,IAAI,GAAA,EAAI,EAAA,EAAI,KAAM,CAAA,kBACpCrB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAA,EAC7B,kBAAiB,EACjB,iBAAA,EACH,CAAA,kBACAjB,OAAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,IAAA,EAAM,QAAQ,QAAQ,CAAA;AAAA,MACtB,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,MAC/B,aAAA,EAAe;AAAA,QACb,EAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA;AAAE;AACnC,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,QAAA,CAAS,CAAC,CAAA;AACV,UAAA,QAAA,CAAS,CAAC,CAAA;AAAA,QACZ;AAAA;AAAA;AACF,GAEJ,CAAA;AAEJ;;;AClFe,SAAR0B,YAA4B,KAAA,EAAc;AAC/C,EAAA,uBAAO1B,OAAAA,CAAA,aAAA,CAAC,6CAAmB,KAAA,CAAA,EAAnB,EAA0B,UAAU,KAAA,EAAA,CAAO,CAAA;AACrD;AAOO,SAAS,mBAAmB,KAAA,EAAsB;AACvD,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,6CAAmB,KAAA,CAAA,EAAnB,EAA0B,UAAQ,IAAA,EAAA,CAAC,CAAA;AAC7C;;;ACpBO,IAAM,aAAA,GAAgB;AAAA,EAC3B;AAAA,IACE,GAAA,EAAK,aAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,cAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,gBAAA;AAAA,IACL,KAAA,EAAO,gBAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EACE;AAAA,GACJ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,cAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EACE;AAAA,GACJ;AAAA,EACA;AAAA,IACE,GAAA,EAAK,cAAA;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO;AAAA;AAEX,CAAA;;;ACpCO,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,QAAA,EAAU,cAAa,EAAkB;AACnF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,QAAAA,CAAS,sCAAgB,SAAS,CAAA;AAG5D,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,sCAAgB,SAAS,CAAA;AAAA,EACpC,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAA,KAAO;AAChB,QAAA,MAAM,CAAA,GAAI,GAAG,MAAA,CAAO,KAAA;AACpB,QAAA,QAAA,CAAS,CAAC,CAAA;AACV,QAAA,QAAA,CAAS,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAC,CAAA;AAAA,MAChC;AAAA,KAAA;AAAA,oBAEA3B,QAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAM,SAAA,EAAA,EAAW,CAAA,CAAE,qBAAA,EAAuB,sBAAsB,CAAE,CAAA;AAAA,IAC3E,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,qBAClBA,OAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,KAAA,EAAO,OAAO,GAAA,EAAK,EAAA,EAAI,EAAE,UAAA,EAAY,MAAA,CAAO,KAAA,EAAM,EAAA,EAC1E,CAAA,CAAE,CAAA,YAAA,EAAe,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAC5D,CACD;AAAA,GACH;AAEJ;AC5Be,SAAR,aAAA,CAA+B,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAC9E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,SAAS,YAAY,CAAA;AAG/C,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,YAAY,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,YAAA,GAAe,CAACJ,MAAAA,KAAkB;AACtC,IAAA,QAAA,CAASA,MAAK,CAAA;AACd,IAAA,QAAA,CAASA,MAAK,CAAA;AAAA,EAChB,CAAA;AACA,EAAA,uBACEnB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,GAAG,UAAA,EAAW,YAAA,EAAA,kBAC5BjB,OAAAA,CAAA,aAAA,CAACqB,YAAA,EAAW,MAAA,EAAM,QAAE,KAAM,CAAA,kBAC1BrB,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,sBAAmB,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MACrD,KAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,EAAA;AAAA,MACL,GAAA,EAAK;AAAA;AAAA,GAET,CAAA;AAEJ;ACzBe,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAChF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,SAAS,YAAY,CAAA;AAG/C,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,YAAY,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAAC,UAAA,KAAe;AACxB,QAAA,QAAA,CAAS,UAAU,CAAA;AACnB,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB;AAAA,KAAA;AAAA,oBAEAA,QAAA,aAAA,CAAC,YAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,qBAAA,EAAuB,SAAS,CAAE,CAAA;AAAA,oBAClEA,QAAA,aAAA,CAAC,YAAA,EAAA,EAAa,OAAM,MAAA,EAAA,EAAQ,CAAA,CAAE,kBAAA,EAAoB,MAAM,CAAE;AAAA,GAC5D;AAEJ;ACtBe,SAAR,kBAAA,CAAoC,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AACnF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,QAAAA,CAAiB,sCAAgB,CAAC,CAAA;AAE5D,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,sCAAgB,CAAC,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAc;AAClC,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,QAAA,CAAS,CAAA,KAAM,CAAA,GAAI,IAAA,GAAO,CAAC,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,GAAG,UAAA,EAAW,YAAA,EAAA,kBAC5BjB,OAAAA,CAAA,aAAA,CAACqB,YAAA,EAAW,MAAA,EAAM,QAAE,KAAM,CAAA,kBAC1BrB,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,oBAAiB,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MACnD,KAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK;AAAA;AAAA,GAET,CAAA;AAEJ;AC1Be,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAChF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,QAAAA,CAAiB,sCAAgB,CAAC,CAAA;AAE5D,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,sCAAgB,CAAC,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAc;AAClC,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,QAAA,CAAS,CAAA,KAAM,CAAA,GAAI,IAAA,GAAO,CAAC,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,GAAG,UAAA,EAAW,YAAA,EAAA,kBAC5BjB,OAAAA,CAAA,aAAA,CAACqB,YAAA,EAAW,MAAA,EAAM,QAAE,KAAM,CAAA,kBAC1BrB,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,6BAA0B,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MAC5D,KAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAM,EAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK;AAAA;AAAA,GAET,CAAA;AAEJ;ACfe,SAAR,YAAA,CAA8B,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAC7E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,SAAS,MAAM;AACvC,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAAA,EACF,CAAC,CAAA;AAED,EAAA,SAAS,YAAA,CAAa,cAAmC,MAAA,EAAgB;AACvE,IAAA,MAAM,CAAA,GAAI,iCACL,KAAA,CAAA,EADK;AAAA,MAER,CAAC,YAAY,GAAG;AAAA,KAClB,CAAA;AACA,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,QAAA,CAAS,CAAC,CAAA;AAAA,EACZ;AAEA,EAAA,uBACEhB,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,EAAG,YAAW,YAAA,EAAa,EAAA,EAAI,qBAC7CjB,OAAAA,CAAA,cAACqB,UAAAA,EAAA,EAAW,QAAM,IAAA,EAAA,EAAE,KAAM,CAAA,kBAE1BrB,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,4BAAyB,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MAC3D,OAAO,KAAA,CAAM,GAAA;AAAA,MACb,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,OAAO,GAAG,CAAA;AAAA,MAC1C,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,KAAA,EAAK;AAAA;AAAA,GACP,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,+BAA4B,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MAC9D,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,UAAU,GAAG,CAAA;AAAA,MAC7C,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,KAAA,EAAK;AAAA;AAAA,GACP,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,+BAA4B,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MAC9D,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,MAC3C,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,KAAA,EAAK;AAAA;AAAA,GACP,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,gCAA6B,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAAA,MAC/D,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,CAAC,GAAA,KAAQ,YAAA,CAAa,SAAS,GAAG,CAAA;AAAA,MAC5C,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,KAAA,EAAK;AAAA;AAAA,GAET,CAAA;AAEJ;AClFe,SAAR,cAAA,CAAgC,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAC/E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,QAAAA,CAAS,sCAAgB,MAAM,CAAA;AAGzD,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,sCAAgB,MAAM,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAACmB,MAAAA,KAAU;AACnB,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,QAAA,CAASA,MAAK,CAAA;AAAA,MAChB;AAAA,KAAA;AAAA,oBAEAnB,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,MAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,uBAAA,EAAA,EAAwB,QAAA,EAAS,SAAQ,CAC5C,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,yBAAA,EAAA,EAA0B,QAAA,EAAS,SAAQ,CAC9C,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,OAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAyB,QAAA,EAAS,SAAQ,CAC7C;AAAA,GACF;AAEJ;;;ACnBe,SAAR,wBAAA,CAA0C,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,EAA4B;AArBrG,EAAA,IAAA,EAAA;AAsBE,EAAA,MAAM,YAAA,GAAA,CAAe,EAAA,GAAA,KAAA,CAAM,IAAI,CAAA,KAAV,IAAA,GAAA,EAAA,GAAe,IAAA;AAEpC,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAW;AAC/B,IAAA,QAAA,CAAS,iCAAK,KAAA,CAAA,EAAL,EAAY,CAAC,IAAI,GAAG,GAAE,CAAC,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,iBAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,wBAAA,EAA0B,kBAAkB,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IACzI,KAAK,aAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,cAAc,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IACjI,KAAK,cAAA;AACH,MAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,IAAsB,CAAA;AAAA,UAClC,KAAA,EAAM,IAAA;AAAA,UACN,IAAA,EAAM,CAAA;AAAA,UACN,KAAA,EAAK,IAAA;AAAA,UACL,GAAA,EAAK,CAAA;AAAA,UACL,GAAA,EAAK,EAAA;AAAA,UACL,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,eAAe,CAAA;AAAA,UAC/C,YAAA;AAAA,UACA,QAAA,EAAU;AAAA;AAAA,OACZ;AAAA,IAEJ,KAAK,OAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,YAAY,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IAC7H,KAAK,YAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,aAAa,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IAC/H,KAAK,UAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,WAAW,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IACtH,KAAK,YAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,aAAa,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IAC5H,KAAK,YAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,aAAa,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IAC5H,KAAK,eAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,gBAAgB,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IACrI,KAAK,WAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,WAAW,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,IACvH,KAAK,SAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA,EAAG,YAAA,EAA4B,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA;AAErH;;;ACrDe,SAAR,uBAAA,CAAyC,EAAE,KAAA,EAAO,KAAA,EAAO,UAAS,EAAiC;AACxG,EAAA,uBACEA,QAAA,aAAA,CAAAA,OAAAA,CAAA,gBACG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,OAAAA,CAAA,cAAC,wBAAA,EAAA,EAAyB,GAAA,EAAK,MAAM,IAAA,EAAY,KAAA,EAAO,SAAS,EAAC,EAAG,QAAA,EAAoB,CAC1F,CACH,CAAA;AAEJ;;;ACDe,SAAR,kBAAA,CAAoC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA4B;AAlBvF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,SAAA,CAAU,CAAC,CAAA;AACzC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,YAAoB,mBAAA,CAAoB,IAAA;AACrD,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAA,KAAZ,YAAwB,mBAAA,CAAoB,QAAA;AAC7D,EAAA,MAAM,OAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,GAAA,KAAZ,YAAmB,mBAAA,CAAoB,GAAA;AACnD,EAAA,MAAM,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,YAAqB,mBAAA,CAAoB,KAAA;AAEvD,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,cAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,YAAA,EAAc,MAAM,CAAA;AAAA,MAC7B,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,uBAAoB,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAG,CAAA;AAAA,MACjE,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,EAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU,CAAC6B,KAAAA,KAAS;AAClB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,EAAAA,KAAAA,EAAK,CAAA,EAAE,CAAC,CAAA;AAAA,MACxD;AAAA;AAAA,GACF,kBACA7B,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,OAAO,CAAA;AAAA,MAChC,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAAC8B,MAAAA,KAAU;AACnB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,EAAAA,MAAAA,EAAM,CAAA,EAAE,CAAC,CAAA;AAAA,MACzD;AAAA,KAAA;AAAA,oBAEA9B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,wBAAA,EAA0B,QAAQ,CAAE,CAAA;AAAA,oBACpE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,wBAAA,EAA0B,QAAQ,CAAE,CAAA;AAAA,oBACpE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,SAAA,EAAA,EAAW,CAAA,CAAE,yBAAA,EAA2B,SAAS,CAAE;AAAA,GACzE,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,WAAW,CAAA;AAAA,MAC3C,YAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAU,CAAC+B,SAAAA,KAAa;AACtB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,EAAAA,SAAAA,EAAS,CAAA,EAAE,CAAC,CAAA;AAAA,MAC5D;AAAA;AAAA,GACF,kBACA/B,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,UAAU,CAAA;AAAA,MACrC,YAAA,EAAc,GAAA;AAAA,MACd,QAAA,EAAU,CAACgC,IAAAA,KAAQ;AACjB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,GAAA,EAAAA,IAAAA,EAAI,CAAA,EAAE,CAAC,CAAA;AAAA,MACvD;AAAA;AAAA,GACF,kBAEAhC,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,WAAA,EAAa,SAAS,CAAA;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;ACjEe,SAAR,kBAAA,CAAoC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA4B;AAjBvF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,SAAA,CAAU,CAAC,CAAA;AACzC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,YAAoB,mBAAA,CAAoB,IAAA;AACrD,EAAA,MAAM,OAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,GAAA,KAAZ,YAAmB,mBAAA,CAAoB,GAAA;AACnD,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,mBAAA,CAAoB,SAAA;AAC/D,EAAA,MAAM,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,YAAoB,mBAAA,CAAoB,IAAA;AACrD,EAAA,MAAM,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,WAAA,KAAZ,YAA2B,mBAAA,CAAoB,WAAA;AACnE,EAAA,MAAM,mBAAkB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,eAAA,KAAZ,YAA+B,mBAAA,CAAoB,eAAA;AAC3E,EAAA,MAAM,yBAAwB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,qBAAA,KAAZ,YAAqC,mBAAA,CAAoB,qBAAA;AAEvF,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,cAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,YAAA,EAAc,MAAM,CAAA;AAAA,MAC7B,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU,CAACiC,KAAAA,KAAS,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,EAAAA,KAAAA,KAAO,CAAC;AAAA;AAAA,GAC5E,kBACAjC,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,WAAA,EAAa,KAAK,CAAA;AAAA,MAC3B,YAAA,EAAc,GAAA;AAAA,MACd,QAAA,EAAU,CAACkC,IAAAA,KAAQ,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,GAAA,EAAAA,IAAAA,KAAM,CAAC;AAAA;AAAA,GAC1E,kBACAlC,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,OAAO,CAAA;AAAA,MAC/B,YAAA,EAAc,YAAY,YAAA,GAAe,MAAA;AAAA,MACzC,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,OAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,QAAV,EAAiB,SAAA,EAAW,CAAA,KAAM,YAAA,KAAe,CAAC;AAAA,KAAA;AAAA,oBAEhGA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,YAAA,EAAA,EAAc,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAE,CAAA;AAAA,oBACjE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,MAAA,EAAA,EAAQ,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAE;AAAA,GAC7D,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,YAAA,EAAc,MAAM,CAAA;AAAA,MAC7B,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU,CAAC6B,KAAAA,KAAS,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,EAAAA,KAAAA,KAAO,CAAC;AAAA,KAAA;AAAA,oBAE1E7B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,SAAA,EAAA,EAAW,CAAA,CAAE,SAAA,EAAW,IAAI,CAAE,CAAA;AAAA,oBAClD5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,OAAA,EAAA,EAAS,CAAA,CAAE,SAAA,EAAW,IAAI,CAAE,CAAA;AAAA,oBAChD5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,SAAA,EAAW,IAAI,CAAE,CAAA;AAAA,oBACjD5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,OAAA,EAAA,EAAS,CAAA,CAAE,SAAA,EAAW,IAAI,CAAE;AAAA,GAClD,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,OAAO,CAAA;AAAA,MAC/B,YAAA,EAAc,WAAA;AAAA,MACd,QAAA,EAAU,CAACmC,YAAAA,KAAgB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,WAAA,EAAAA,YAAAA,KAAc,CAAC;AAAA,KAAA;AAAA,oBAExFnC,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,WAAA,EAAA,EAAa,CAAA,CAAE,wBAAA,EAA0B,WAAW,CAAE,CAAA;AAAA,oBAC1E5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,SAAA,EAAA,EAAW,CAAA,CAAE,sBAAA,EAAwB,SAAS,CAAE,CAAA;AAAA,oBACpE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,MAAA,EAAA,EAAQ,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAE;AAAA,GAC7D,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,YAAY,CAAA;AAAA,MACzC,YAAA,EAAc,eAAA;AAAA,MACd,QAAA,EAAU,CAACU,gBAAAA,KAAoB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,eAAA,EAAAA,gBAAAA,KAAkB,CAAC;AAAA;AAAA,GAClG,kBACApC,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,cAAc,CAAA;AAAA,MACvC,YAAA,EAAc,qBAAA;AAAA,MACd,QAAA,EAAU,CAACW,sBAAAA,KAA0B,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,qBAAA,EAAAA,sBAAAA,KAAwB,CAAC;AAAA;AAAA,GAC9G,kBACArC,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,iBAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;ACnGA,IAAMsC,kBAAiB,2BAAA,CAAgC,KAAA,CAAM,MAAM,MAAA,EAAO,CAAE,QAAO,CAAE,KAAA;AAErF,IAAM9B,4BAAAA,GAA8BN,EAAE,MAAA,CAAO;AAAA,EAC3C,KAAA,EAAO,4BAAgC,KAAA,CAAM,KAAA;AAAA,EAC7C,KAAA,EAAOA,CAAAA,CACJ,MAAA,CAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACHoC,eAAAA,CAAAA,EADG;AAAA,IAEN,OAAA,EAASpC,EAAE,KAAA,CAAM;AAAA,MACfA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,MAC7CA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,MAC7CA,CAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,EAAG;AAAA,KAC9C;AAAA,GACH,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC,CAAA;AAGD,IAAOqC,uCAAAA,GAAQ/B,4BAAAA;ACbA,SAAR,kBAAA,CAAoC,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAA4B;AACrG,EAAA,MAAM,YAAA,GAA2D,CAAC,EAAA,KAAO;AACvE,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA,GAAO,KAAK,CAAA;AAAA,EACtC,CAAA;AACA,EAAA,uBACER,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,YAAA;AAAA,MACV,YAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAQ,UAAA;AAAA,MACR,WAAA,EAAY,MAAA;AAAA,MACZ,IAAA,EAAK,OAAA;AAAA,MACL,UAAA,EAAY;AAAA,QACV,YAAA,kBACE3B,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,gBAAA,EAAA,EAAiB,IAEnD;AAAA;AAEJ;AAAA,GACF;AAEJ;;;ACZe,SAAR,iBAAA,CAAmC,EAAE,YAAA,EAAc,QAAA,EAAS,EAA4B;AAC7F,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIJ,SAAkD,MAAM;AAC9F,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,YAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC1B,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAkB,KAAA,KAAqC;AAC5E,IAAA,MAAM,MAAA,GAAsB,CAAC,GAAG,YAAY,CAAA;AAC5C,IAAA,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA;AAChB,IAAA,eAAA,CAAgB,MAAM,CAAA;AACtB,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB,CAAA;AAGA,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAA6B;AAC3B,IAAA,OAAA,mBACEhB,OAAAA,CAAA,aAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,UAAA;AAAA,QACN,cAAc,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,CAAA,CAAA;AAAA,QAC7B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,UAAA,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,QACpB;AAAA;AAAA,KACF;AAAA,EAEJ;AACA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAA,kBAC9BjB,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,UAAA;AAAA,MACN,cAAc,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,CAAA,CAAA;AAAA,MAC7B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpB;AAAA;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,UAAA;AAAA,MACN,cAAc,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,CAAA,CAAA;AAAA,MAC7B,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACpB;AAAA;AAAA,KAED,OACH,CAAA;AAEJ;;;AC1Ce,SAAR,qBAAA,CAAuC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA+B;AAzB7F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0BE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAMuB,uCAAAA,CAA4B,SAAA,CAAU,CAAC,CAAA;AACnD,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEvC,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,eAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,mBAAmB,CAAA;AAAA,MAC7C,gBAAc,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,YAAA,MAAiB,IAAI,GAAA,GAAM,GAAA;AAAA,MACrD,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,iCAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,YAAA,EAAc,CAAA,KAAM,GAAA,GAAM,CAAA,GAAI,CAAA,KAAI,CAAC,CAAA;AAAA,MACnF;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA,CAAC4B,cAAA,EAAa,KAAA,EAAM,OAAI,GAAC,CAAA;AAAA,oBACzB5B,OAAAA,CAAA,aAAA,CAAC4B,cAAA,EAAa,KAAA,EAAM,OAAI,GAAC;AAAA,GAC3B,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,WAAA;AAAA,MAC1B,QAAA,EAAU,CAAC,WAAA,KAAgB;AACzB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,WAAA,EAAY,CAAA,EAAE,CAAC,CAAA;AAAA,MAC/D;AAAA;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,aAAa,CAAA;AAAA,MACrC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAACwC,gBAAAA,EAAA,EAAiB,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAG,CAAA;AAAA,MAC9D,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAK,IAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,eAAZ,IAAA,GAAA,EAAA,GAA0B,CAAA;AAAA,MACxC,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,UAAA,KAAa,CAAC;AAAA;AAAA,GACxF,kBACAxC,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,WAAW,CAAA;AAAA,MACvC,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,qBAAZ,IAAA,GAAA,EAAA,GAAgC,QAAA;AAAA,MAC9C,QAAA,EAAU,CAAC,gBAAA,KAAqB;AAC9B,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,gBAAA,EAAiB,CAAA,EAAE,CAAC,CAAA;AAAA,MACpE;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,KAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAyB,QAAA,EAAS,SAAQ,CAC7C,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,2BAAA,EAAA,EAA4B,QAAA,EAAS,SAAQ,CAChD,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC,2BAAA,EAAA,EAA4B,QAAA,EAAS,SAAQ,CAChD;AAAA,GACF,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;ACvFA,IAAMS,qBAAAA,GAAuBP,EAAE,MAAA,CAAO;AAAA,EACpC,KAAA,EAAO,qBAAyB,KAAA,CAAM,KAAA;AAAA,EACtC,KAAA,EAAOA,EACJ,MAAA,CAAO;AAAA,IACN,WAAA,EAAaA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA;AAAS,GACtD,CAAA,CACA,QAAA,EAAS,CACT,QAAA;AACL,CAAC,CAAA;AAED,IAAO,8BAAA,GAAQO,qBAAAA;;;ACFA,SAAR,qBAAA,CAAuC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA+B;AAC3F,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIO,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,8BAAA,CAAqB,SAAA,CAAU,CAAC,CAAA;AAC5C,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AACA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,iBAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,iBAAA,EAAmB,aAAA,EAAe,gBAAgB,SAAS,CAAA;AAAA,MACnE,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;AChBe,SAAR,mBAAA,CAAqC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA6B;AAhBzF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,SAAA,CAAU,CAAC,CAAA;AAC1C,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,oBAAA,CAAqB,SAAA;AAChE,EAAA,MAAM,cAAa,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAA,KAAZ,YAA0B,oBAAA,CAAqB,UAAA;AAElE,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,eAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,OAAO,CAAA;AAAA,MACjC,YAAA,EAAc,SAAA;AAAA,MACd,QAAA,EAAU,CAACe,UAAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,SAAA,EAAAA,UAAAA,KAAY,CAAC;AAAA;AAAA,GACtF,kBACAzC,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,QAAQ,CAAA;AAAA,MACjC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC,kBAAe,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAG,CAAA;AAAA,MAC5D,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,YAAA,EAAc,UAAA;AAAA,MACd,QAAA,EAAU,CAAC0C,WAAAA,KAAe,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,UAAA,EAAAA,WAAAA,KAAa,CAAC;AAAA;AAAA,GACxF,kBACA1C,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,iBAAA,EAAmB,SAAS,CAAA;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;ACrDA,IAAMM,cAAAA,GAAeJ,EAClB,MAAA,EAAO,CACP,MAAM,mBAAmB,CAAA,CACzB,QAAA,EAAS,CACT,QAAA,EAAS;AAEZ,IAAME,mBAAAA,GAAqBF,EACxB,IAAA,CAAK;AAAA,EACJ,aAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,QAAA,EAAS,CACT,QAAA,EAAS;AAEL,IAAMyC,uBAAAA,GAAyBzC,EAAE,MAAA,CAAO;AAAA,EAC7C,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,aAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC,CAAA;AAED,IAAM0C,uBAAAA,GAAyB1C,EAAE,MAAA,CAAO;AAAA,EACtC,aAAA,EAAeI,cAAAA;AAAA,EACf,kBAAkBJ,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAClD,WAAA,EAAaI,cAAAA;AAAA,EACb,cAAcJ,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,WAAA,EAAaI,cAAAA;AAAA,EACb,SAAA,EAAWA,cAAAA;AAAA,EACX,UAAA,EAAYF,mBAAAA;AAAA,EACZ,WAAA,EAAaF,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EACrD,SAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,WAAWA,CAAAA,CAAE,KAAA,CAAMyC,uBAAsB,CAAA,CAAE,QAAA,GAAW,QAAA;AACxD,CAAC,CAAA;AAED,IAAO,iCAAA,GAAQC,uBAAAA;AChCA,SAAR,YAAA,CAA8B,EAAE,KAAA,EAAO,YAAA,EAAc,UAAS,EAAU;AAC7E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI5B,SAAS,YAAY,CAAA;AAG/C,EAAAO,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,YAAY,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,KAAA;AAAA,UACT,QAAA,EAAU,CAAC,CAAA,EAAG,OAAA,KAAqB;AACjC,YAAA,QAAA,CAAS,OAAO,CAAA;AAChB,YAAA,QAAA,CAAS,OAAO,CAAA;AAAA,UAClB;AAAA;AAAA;AACF;AAAA,GAEJ;AAEJ;;;ACbe,SAAR,wBAAA,CAA0C,EAAE,IAAA,EAAM,OAAA,EAAQ,EAAkC;AAnBnG,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,iCAAA,CAAuB,SAAA,CAAU,CAAC,CAAA;AAC9C,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAA,CAAmB,EAAA,GAAA,IAAA,CAAK,gBAAA,KAAL,IAAA,GAAA,EAAA,GAAyB,KAAA;AAElD,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,QAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,yBAAA,EAA2B,kBAAkB,CAAA;AAAA,MACtD,YAAA,EAAc,gBAAA;AAAA,MACd,QAAA,EAAU,CAAC6C,iBAAAA,KAAqB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,gBAAA,EAAAA,iBAAAA,EAAiB,CAAC;AAAA;AAAA,GAC1E,EACC,CAAC,gBAAA,oBACA7C,QAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,gBAAgB,CAAA;AAAA,MAClD,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,aAAA,KAAL,IAAA,GAAA,EAAA,GAAsB,SAAA;AAAA,MACpC,QAAA,EAAU,CAAC,aAAA,KAAkB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,eAAc,CAAC;AAAA;AAAA,GACpE,kBACA1B,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,cAAc,CAAA;AAAA,MAC9C,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAoB,SAAA;AAAA,MAClC,QAAA,EAAU,CAAC,WAAA,KAAgB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,aAAY,CAAC;AAAA;AAAA,GAChE,kBACA1B,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,4BAAA,EAA8B,qBAAqB,CAAA;AAAA,MAC5D,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAoB,IAAA;AAAA,MAClC,QAAA,EAAU,CAAC,WAAA,KAAgB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,aAAY,CAAC;AAAA;AAAA,GAChE,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC8C,uBAAA,IAAsB,CAAA;AAAA,MAClC,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAK,IAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,6BAAA,EAA+B,sBAAsB,CAAA;AAAA,MAC9D,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,YAAA,KAAL,IAAA,GAAA,EAAA,GAAqB,CAAA;AAAA,MACnC,QAAA,EAAU,CAAC,YAAA,KAAiB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,cAAa,CAAC;AAAA;AAAA,GAEpE,CAAA,kBAEF9C,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,aAAa,CAAA;AAAA,MAC3C,YAAA,EAAa,aAAA;AAAA,MACb,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,YAAW,CAAC;AAAA;AAAA,GAC9D,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,YAAY,CAAA;AAAA,MACzC,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,SAAA;AAAA,MAChC,QAAA,EAAU,CAAC,SAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,WAAU,CAAC;AAAA;AAAA,GAE9D,CAAA;AAEJ;ACpEe,SAAR,mBAAA,CAAqC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA6B;AAfzF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIV,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,SAAA,CAAU,CAAC,CAAA;AAC1C,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,eAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA;AAAA,MACnC,IAAA,EAAM,CAAA;AAAA,MACN,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,YAAoB,oBAAA,CAAqB,IAAA;AAAA,MACvD,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,EAAK,CAAA,EAAE,CAAC,CAAA;AAAA,MACxD;AAAA;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,OAAO,CAAA;AAAA,MAC/B,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,YAAqB,oBAAA,CAAqB,KAAA;AAAA,MACxD,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,EAAM,CAAA,EAAE,CAAC,CAAA;AAAA,MACzD;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA,CAAC4B,cAAA,EAAa,KAAA,EAAM,QAAK,IAAE,CAAA;AAAA,oBAC3B5B,OAAAA,CAAA,aAAA,CAAC4B,cAAA,EAAa,KAAA,EAAM,QAAK,IAAE,CAAA;AAAA,oBAC3B5B,OAAAA,CAAA,aAAA,CAAC4B,cAAA,EAAa,KAAA,EAAM,QAAK,IAAE;AAAA,GAC7B,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,iBAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;ACnDe,SAAR,gBAAA,CAAkC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA0B;AAdnF,EAAA,IAAA,EAAA,EAAA,EAAA;AAeE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,SAAA,CAAU,CAAC,CAAA;AACvC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,YAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA;AAAA,MACnC,IAAA,EAAM,CAAA;AAAA,MACN,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,aAAZ,IAAA,GAAA,EAAA,GAAwB,EAAA;AAAA,MACtC,QAAA,EAAU,CAAC,QAAA,KAAa,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,KAAW,CAAC;AAAA;AAAA,GACpF,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,OAAO,CAAC,OAAA,EAAS,mBAAmB,YAAA,EAAc,UAAA,EAAY,aAAa,SAAS,CAAA;AAAA,MACpF,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;AChBe,SAAR,kBAAA,CAAoC,EAAE,IAAA,EAAM,OAAA,EAAS,QAAO,EAA4B;AAC7F,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAY,GAAI,iBAAA,EAAkB;AACtD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIgB,SAAgC,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,UAAU,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC1B,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,UAAA,EAAW;AAC9B,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,uBAAuB,CAAA;AAAA,IACnE,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,CAAA;AAEA,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,KAAK,OAAA,EAAQ;AAAA,IACf;AAAA,EAEF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,QAAA,GAAWhB,QAAQ,MAAM;AAC7B,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACnC,IAAA,IAAI,CAAC,GAAG,OAAO,MAAA;AACf,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,KAAQ;AA3DlC,MAAA,IAAA,EAAA;AA4DM,MAAA,MAAM,QAAA,GAAW,CAAA,EAAA,CAAG,EAAA,GAAA,GAAA,CAAI,GAAA,KAAJ,IAAA,GAAA,EAAA,GAAW,EAAE,CAAA,CAAA,EAAI,GAAA,CAAI,GAAG,CAAA,CAAA,CAAG,WAAA,EAAY;AAC3D,MAAA,OAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,IAC5B,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAElB,EAAA,MAAM,YAAA,GAAe,CAAO,GAAA,KAAgB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC1C,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,OAAA,CAAQ,qCAAqC,CAAA;AAC/D,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,YAAY,GAAG,CAAA;AACrB,MAAA,MAAM,OAAA,EAAQ;AAAA,IAChB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,wBAAwB,CAAA;AAClE,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACEP,QAAA,aAAA,CAAC,MAAA,EAAA,EAAO,MAAY,OAAA,EAAkB,QAAA,EAAS,IAAA,EAAK,SAAA,EAAS,IAAA,EAAA,kBAC3DA,QAAA,aAAA,CAAC,WAAA,EAAA,IAAA,EAAY,eAAa,CAAA,kBAC1BA,OAAAA,CAAA,cAAC,aAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EAAA,kBACrBA,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAY,2BAAA;AAAA,MACZ,KAAA,EAAO,KAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACxC,SAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY;AAAA,QACV,cAAA,kBACE3B,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAS,OAAA,EAAA,kBACvBA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAS,SAAQ,CACnC;AAAA,OAEJ;AAAA,MACA,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA;AAAE;AAAA,GACd,EAEC,KAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,MAC/B,KACH,CAAA,EAGD,IAAA,IAAQ,CAAC,MAAA,oBACRA,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,UAAA,EAAW,QAAA,EAAS,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EAAA,kBACrCjB,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,CAC9B,CAAA,EAGD,QAAA,IAAY,SAAS,MAAA,KAAW,CAAA,oBAC/BA,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,SAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,CAAA,MACjF,KAAA,GAAQ,8BAAA,GAAiC,+BAC5C,CAAA,EAGD,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,oBAC7BpB,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,mBAAA,EAAqB,uCAAA;AAAA,QACrB,GAAA,EAAK;AAAA;AACP,KAAA;AAAA,IAEC,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,qBACblB,OAAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAK,GAAA,CAAI,GAAA;AAAA,QACT,KAAA,EAAO,GAAA;AAAA,QACP,MAAA,EAAQ,MAAM,MAAA,CAAO,GAAG,CAAA;AAAA,QACxB,UAAU,WAAA,GAAc,MAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,GAAI;AAAA;AAAA,KAEzD;AAAA,GAGP,CAAA,kBACAA,OAAAA,CAAA,cAAC,aAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAACyB,UAAA,EAAO,OAAA,EAAS,OAAA,EAAA,EAAS,OAAK,CACjC,CACF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAIG;AAxJH,EAAA,IAAA,EAAA,EAAA,EAAA;AAyJE,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,EAAA,GAAsB,KAAA,CAAM,GAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,IAAO,KAAA,CAAM,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,IAAK,OAAA;AACzD,EAAA,uBACEzB,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,UAAA;AAAA,QACV,YAAA,EAAc,CAAA;AAAA,QACd,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,SAAA;AAAA,QACb,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,SAAA;AAAA,QACR,UAAA,EAAY,oBAAA;AAAA,QACZ,SAAA,EAAW,EAAE,WAAA,EAAa,cAAA,EAAe;AAAA,QACzC,qBAAA,EAAuB,EAAE,OAAA,EAAS,CAAA;AAAE,OACtC;AAAA,MACA,OAAA,EAAS;AAAA,KAAA;AAAA,oBAETlB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,KAAA;AAAA,QACV,GAAA;AAAA,QACA,GAAA,EAAA,CAAK,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,IAAA,GAAA,EAAA,GAAa,EAAA;AAAA,QAClB,EAAA,EAAI,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,eAAA,EAAiB,SAAA;AAAU;AAAA,KAC9G;AAAA,oBACAlB,QAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,IAAI,KAAA,EAAO,gBAAA,EAAkB,UAAU,QAAA,EAAU,YAAA,EAAc,YAAY,UAAA,EAAY,QAAA,MAClH,KACH,CAAA;AAAA,IACC,QAAA,oBACClB,OAAAA,CAAA,aAAA,CAAC,WAAQ,KAAA,EAAM,qBAAA,EAAA,kBACbA,OAAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,QAAA,EAAS;AAAA,QACX,CAAA;AAAA,QACA,EAAA,EAAI;AAAA,UACF,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,CAAA;AAAA,UACL,KAAA,EAAO,CAAA;AAAA,UACP,OAAA,EAAS,CAAA;AAAA,UACT,eAAA,EAAiB,wBAAA;AAAA,UACjB,UAAA,EAAY,eAAA;AAAA,UACZ,SAAA,EAAW,EAAE,eAAA,EAAiB,wBAAA;AAAyB,SACzD;AAAA,QACA,YAAA,EAAW;AAAA,OAAA;AAAA,sBAEXA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,UAAS,OAAA,EAAQ;AAAA,KAEpC;AAAA,GAEJ;AAEJ;;;AClLA,SAAS,UAAU,KAAA,EAA2C;AAC5D,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,OAAO,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACxC;AAEe,SAAR,iBAAA,CAAmC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA2B;AAhCrF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiCE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAW,GAAI,iBAAA,EAAkB;AACtD,EAAA,MAAM,YAAA,GAAe+B,OAAgC,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI/B,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEpD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,SAAA,CAAU,CAAC,CAAA;AACxC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,QAAA,KAA2C;AAlDzE,IAAA,IAAAgC,KAAAC,GAAAA,EAAAC,GAAAA,EAAAC,KAAAC,GAAAA,EAAAC,GAAAA,EAAAC,KAAAC,GAAAA,EAAAC,GAAAA;AAmDI,IAAA,UAAA,CAAW,iCACN,IAAA,CAAA,EADM;AAAA,MAET,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,IAAA,CAAK,KAAA,CAAA,EADH;AAAA,QAEL,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,KAAA,EAAA,CAAON,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,QAAA,CAAS,UAAT,IAAA,GAAAA,GAAAA,GAAAA,CAAkBD,GAAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAY,KAAA,KAA9B,OAAAE,GAAAA,GAAuC,IAAA;AAAA,QAC9C,MAAA,EAAA,CAAQG,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,QAAA,CAAS,WAAT,IAAA,GAAAA,GAAAA,GAAAA,CAAmBD,GAAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAY,MAAA,KAA/B,OAAAE,GAAAA,GAAyC,IAAA;AAAA,QACjD,GAAA,EAAA,CAAKG,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,QAAA,CAAS,QAAT,IAAA,GAAAA,GAAAA,GAAAA,CAAgBD,GAAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAY,GAAA,KAA5B,OAAAE,GAAAA,GAAmC;AAAA,OAC1C;AAAA,KACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAO,IAAA,KAAe,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACvC,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,IAAI,CAAA;AACvC,MAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA,IAC7B,SAAS,CAAA,EAAG;AACV,MAAA,cAAA,CAAe,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,eAAe,CAAA;AAAA,IACjE,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAZ,IAAA,GAAA,EAAA,GAAmB,EAAA;AAC/B,EAAA,MAAM,eAAA,GAAkB,UAAU,GAAG,CAAA;AAErC,EAAA,uBACExD,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,kBACpB,WAAA,IAAe,UAAA,qBACfA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAA,EAC7B,WAAA,oBACCjB,QAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,SAAA,mBAAYzB,OAAAA,CAAA,cAACyD,gBAAAA,EAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,oBAAKzD,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ,CAAA;AAAA,MAC9F,QAAA,EAAU,SAAA;AAAA,MACV,SAAS,MAAG;AA5F5B,QAAA,IAAAgD,GAAAA;AA4F+B,QAAA,OAAA,CAAAA,GAAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAsB,KAAA,EAAA;AAAA,MAAA;AAAA,KAAA;AAAA,IAEpC,YAAY,CAAA,CAAE,iBAAA,EAAmB,iBAAY,CAAA,GAAI,CAAA,CAAE,gBAAgB,QAAQ;AAAA,GAC9E,kBACAhD,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU,CAAO,CAAA,KAAM,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AArGvC,QAAA,IAAAgD,GAAAA;AAsGkB,QAAA,MAAM,QAAOA,GAAAA,GAAA,CAAA,CAAE,MAAA,CAAO,KAAA,KAAT,gBAAAA,GAAAA,CAAiB,CAAA,CAAA;AAC9B,QAAA,CAAA,CAAE,OAAO,KAAA,GAAQ,EAAA;AACjB,QAAA,IAAI,IAAA,EAAM,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,MACjC,CAAA;AAAA;AAAA,GAEJ,CAAA,EAED,UAAA,oBACChD,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAK,OAAA;AAAA,MACL,2BAAWzB,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ,CAAA;AAAA,MACjD,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI;AAAA,KAAA;AAAA,IAEjC,CAAA,CAAE,iBAAiB,SAAS;AAAA,GAGnC,GAGD,WAAA,oBACCA,QAAA,aAAA,CAAC0D,KAAAA,EAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA,EAAG,EAAA,EAAI,EAAE,EAAA,EAAI,GAAE,EAAA,EACtE,WACH,CAAA,kBAGF1D,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,YAAY,CAAA;AAAA,MACzC,YAAA,EAAc,GAAA;AAAA,MACd,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,IAAA,GAAO,EAAE,IAAA,EAAK,CAAE,WAAW,CAAA,GAAI,IAAA,GAAO,EAAE,IAAA,EAAK;AACnD,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,GAAA,EAAK,IAAA,EAAK,CAAA,EAAE,CAAC,CAAA;AAAA,MAC7D;AAAA;AAAA,GACF,EACC,eAAA,oBACCA,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,GAAA,EAAK,IAAA,sBACxElB,OAAAA,CAAA,aAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAS,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,cAAA,EAAgB,EAAA,EAAI,KAAA,EAAM,EAAG,mBACjFA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,EAAA,EAC5C,CAAA,CAAE,oBAAA,EAAsB,iGAAiG,CAC5H,CACF,CAAA,kBAGFlB,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,UAAU,CAAA;AAAA,MACrC,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAZ,IAAA,GAAA,EAAA,GAAmB,EAAA;AAAA,MACjC,QAAA,EAAU,CAAC,GAAA,KAAQ,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,GAAA,KAAM,CAAC;AAAA;AAAA,GAC1E,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,mBAAmB,CAAA;AAAA,MAC/C,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,aAAZ,IAAA,GAAA,EAAA,GAAwB,EAAA;AAAA,MACtC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,QAAA,GAAW,EAAE,IAAA,EAAK,CAAE,WAAW,CAAA,GAAI,IAAA,GAAO,EAAE,IAAA,EAAK;AACvD,QAAA,UAAA,CAAW,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,EAAS,CAAA,EAAE,CAAC,CAAA;AAAA,MAC5D;AAAA;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAA,kBAC9BjB,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,OAAO,CAAA;AAAA,MAC/B,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA;AAAA,MAC1B,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,KAAQ,CAAC;AAAA;AAAA,GAC9E,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,QAAQ,CAAA;AAAA,MACjC,YAAA,EAAA,CAAc,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA;AAAA,MAC1B,QAAA,EAAU,CAAC,MAAA,KAAW,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,MAAA,KAAS,CAAC;AAAA;AAAA,GAElF,CAAA,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,WAAW,CAAA;AAAA,MACvC,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,qBAAZ,IAAA,GAAA,EAAA,GAAgC,QAAA;AAAA,MAC9C,QAAA,EAAU,CAAC,gBAAA,KAAqB,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,gBAAA,KAAmB,CAAC;AAAA,KAAA;AAAA,oBAElGA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,KAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC2D,wBAAAA,EAAA,EAAyB,QAAA,EAAS,SAAQ,CAC7C,CAAA;AAAA,oBACA3D,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC4D,2BAAAA,EAAA,EAA4B,QAAA,EAAS,SAAQ,CAChD,CAAA;AAAA,oBACA5D,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAAC6D,2BAAAA,EAAA,EAA4B,QAAA,EAAS,SAAQ,CAChD;AAAA,GACF,kBAEA7D,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,iBAAA,EAAmB,WAAA,EAAa,SAAS,CAAA;AAAA,MACjD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GACpD,EAEC,UAAA,oBACCA,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,MACnC,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,QAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AAAA;AAAA,GAGN,CAAA;AAEJ;AC3Le,SAAR,qBAAA,CAAuC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA+B;AAnB7F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoBE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,oBAAA,CAAqB,SAAA,CAAU,CAAC,CAAA;AAC5C,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAA,KAAZ,YAAwB,sBAAA,CAAuB,QAAA;AAChE,EAAA,MAAM,QAAO,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAA,KAAZ,YAAoB,sBAAA,CAAuB,IAAA;AACxD,EAAA,MAAM,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,YAAqB,sBAAA,CAAuB,KAAA;AAC1D,EAAA,MAAM,WAAU,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,OAAA,KAAZ,YAAuB,sBAAA,CAAuB,OAAA;AAC9D,EAAA,MAAM,WAAU,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,OAAA,KAAZ,YAAuB,sBAAA,CAAuB,OAAA;AAC9D,EAAA,MAAM,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,YAAqB,sBAAA,CAAuB,KAAA;AAC1D,EAAA,MAAM,SAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,YAAqB,sBAAA,CAAuB,KAAA;AAC1D,EAAA,MAAM,WAAU,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,OAAA,KAAZ,YAAuB,sBAAA,CAAuB,OAAA;AAC9D,EAAA,MAAM,YAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAA,KAAZ,YAAwB,sBAAA,CAAuB,QAAA;AAChE,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,sBAAA,CAAuB,SAAA;AAClE,EAAA,MAAM,cAAa,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAA,KAAZ,YAA0B,sBAAA,CAAuB,UAAA;AACpE,EAAA,MAAM,UAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,KAAZ,YAAsB,sBAAA,CAAuB,MAAA;AAC5D,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,sBAAA,CAAuB,SAAA;AAClE,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,sBAAA,CAAuB,SAAA;AAClE,EAAA,MAAM,aAAY,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAA,KAAZ,YAAyB,sBAAA,CAAuB,SAAA;AAElE,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,iBAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,UAAU,CAAA;AAAA,MACzC,YAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAU,CAAC8D,SAAAA,KAAa,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,EAAAA,SAAAA,KAAW,CAAC;AAAA;AAAA,GACpF,kBACA9D,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,MAAM,CAAA;AAAA,MACjC,YAAA,EAAc,IAAA;AAAA,MACd,QAAA,EAAU,CAAC+D,KAAAA,KAAS,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,EAAAA,KAAAA,KAAO,CAAC;AAAA;AAAA,GAC5E,kBACA/D,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,OAAO,CAAA;AAAA,MACnC,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAACgE,MAAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,EAAAA,MAAAA,KAAQ,CAAC;AAAA;AAAA,GAC9E,kBACAhE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,SAAS,CAAA;AAAA,MACvC,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,CAACiE,QAAAA,KAAY,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,OAAA,EAAAA,QAAAA,KAAU,CAAC;AAAA;AAAA,GAClF,kBACAjE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,SAAS,CAAA;AAAA,MACvC,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,CAACkE,QAAAA,KAAY,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,OAAA,EAAAA,QAAAA,KAAU,CAAC;AAAA;AAAA,GAClF,kBACAlE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,OAAO,CAAA;AAAA,MACnC,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAACmE,MAAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,EAAAA,MAAAA,KAAQ,CAAC;AAAA;AAAA,GAC9E,kBACAnE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,OAAO,CAAA;AAAA,MACnC,YAAA,EAAc,KAAA;AAAA,MACd,QAAA,EAAU,CAACoE,MAAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,KAAA,EAAAA,MAAAA,KAAQ,CAAC;AAAA;AAAA,GAC9E,kBACApE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,SAAS,CAAA;AAAA,MACvC,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,CAACqE,QAAAA,KAAY,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,OAAA,EAAAA,QAAAA,KAAU,CAAC;AAAA;AAAA,GAClF,kBACArE,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,WAAW,CAAA;AAAA,MAC3C,YAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAU,CAAC+B,SAAAA,KAAa,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,EAAAA,SAAAA,KAAW,CAAC;AAAA;AAAA,GACpF,kBACA/B,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,YAAY,CAAA;AAAA,MAC7C,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAACsE,mBAAAA,EAAA,EAAoB,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAG,CAAA;AAAA,MACjE,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,EAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,QAAA,EAAU,CAACC,UAAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,SAAA,EAAAA,UAAAA,KAAY,CAAC;AAAA;AAAA,GACtF,kBACAvE,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,aAAa,CAAA;AAAA,MAC/C,YAAA,EAAc,UAAA;AAAA,MACd,QAAA,EAAU,CAACwE,WAAAA,KAAe,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,UAAA,EAAAA,WAAAA,KAAa,CAAC;AAAA,KAAA;AAAA,oBAEtFxE,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,wBAAA,EAA0B,QAAQ,CAAE,CAAA;AAAA,oBACpE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,QAAA,EAAA,EAAU,CAAA,CAAE,wBAAA,EAA0B,QAAQ,CAAE,CAAA;AAAA,oBACpE5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,SAAA,EAAA,EAAW,CAAA,CAAE,yBAAA,EAA2B,SAAS,CAAE;AAAA,GACzE,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,QAAQ,CAAA;AAAA,MACrC,YAAA,EAAc,MAAA;AAAA,MACd,QAAA,EAAU,CAACyE,OAAAA,KAAW,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,MAAA,EAAAA,OAAAA,KAAS,CAAC;AAAA,KAAA;AAAA,oBAE9EzE,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,YAAA,EAAA,EAAc,CAAA,CAAE,6BAAA,EAA+B,YAAY,CAAE,CAAA;AAAA,oBACjF5B,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,UAAA,EAAA,EAAY,CAAA,CAAE,2BAAA,EAA6B,UAAU,CAAE;AAAA,GAC7E,kBACA5B,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,YAAY,CAAA;AAAA,MAC7C,YAAA,EAAc,SAAA;AAAA,MACd,QAAA,EAAU,CAACgD,UAAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,SAAA,EAAAA,UAAAA,KAAY,CAAC;AAAA;AAAA,GACtF,kBACA1E,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,YAAY,CAAA;AAAA,MACzC,YAAA,EAAc,SAAA;AAAA,MACd,QAAA,EAAU,CAACiD,UAAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,SAAA,EAAAA,UAAAA,KAAY,CAAC;AAAA;AAAA,GACtF,kBACA3E,OAAAA,CAAA,aAAA;AAAA,IAAC0B,WAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,YAAY,CAAA;AAAA,MAC7C,YAAA,EAAc,SAAA;AAAA,MACd,QAAA,EAAU,CAACkD,UAAAA,KAAc,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAK,KAAA,CAAA,EAAV,EAAiB,SAAA,EAAAA,UAAAA,KAAY,CAAC;AAAA;AAAA,GACtF,kBACA5E,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAC,iBAAA,EAAmB,YAAA,EAAc,SAAS,CAAA;AAAA,MAClD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;AClIe,SAAR,kBAAA,CAAoC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA4B;AAbvF,EAAA,IAAA,EAAA,EAAA,EAAA;AAcE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAIgB,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,SAAA,CAAU,CAAC,CAAA;AACzC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,cAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,cAAA,EAAgB,QAAQ,CAAA;AAAA,MACjC,SAAA,kBAAWA,OAAAA,CAAA,aAAA,CAAC6E,cAAAA,EAAA,EAAe,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAG,CAAA;AAAA,MAC5D,KAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,KAAZ,YAAsB,mBAAA,CAAoB,MAAA;AAAA,MACxD,QAAA,EAAU,CAAC,MAAA,KAAW,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,MAAA,KAAS,CAAC;AAAA;AAAA,GAElF,CAAA;AAEJ;AC1Be,SAAR,gBAAA,CAAkC,EAAE,IAAA,EAAM,OAAA,EAAQ,EAA0B;AAdnF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAeE,EAAA,MAAM,GAAG,SAAS,CAAA,GAAI7D,SAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAe;AACjC,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,SAAA,CAAU,CAAC,CAAA;AACvC,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,YAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,eAAA,EAAiB,SAAS,CAAA;AAAA,MACnC,IAAA,EAAM,CAAA;AAAA,MACN,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,SAAZ,IAAA,GAAA,EAAA,GAAoB,EAAA;AAAA,MAClC,QAAA,EAAU,CAAC,IAAA,KAAS,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,IAAA,KAAO,CAAC;AAAA;AAAA,GAC5E,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,UAAU,CAAA;AAAA,MACrC,YAAA,EAAA,CAAc,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,aAAZ,IAAA,GAAA,EAAA,GAAwB,KAAA;AAAA,MACtC,QAAA,EAAU,CAAC,QAAA,KAAa,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAA,EAAV,EAAiB,QAAA,KAAW,CAAC;AAAA;AAAA,GACpF,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,iBAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,CAAC,KAAA,KAAU,UAAA,CAAW,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAM,CAAC;AAAA;AAAA,GAEtD,CAAA;AAEJ;;;ACrCA,SAAS,cAAc,GAAA,EAAa;AAClC,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,cAAc,WAAA,EAAa,SAAA,EAAU,EAAA,kBAClElB,OAAAA,CAAA,aAAA,CAACoB,YAAA,EAAW,KAAA,EAAM,gBAAA,EAAA,EAAkB,GAAI,CAC1C,CAAA;AAEJ;AAEe,SAAR,kBAAA,GAAsC;AAC3C,EAAA,MAAMT,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAE3C,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,OAAO,aAAA,CAAc,CAAA,CAAE,cAAA,EAAgB,8BAA8B,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,KAAA,GAAQA,UAAS,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,aAAA,CAAc,CAAA,CAAE,mBAAA,EAAqB,6CAA6C,CAAC,CAAA;AAAA,EAC5F;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAuB,WAAA,CAAY,EAAE,CAAC,eAAe,GAAG,IAAA,EAAM,CAAA;AAChF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA;AACvB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,QAAA;AACH,MAAA,uBAAOX,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC5G,KAAK,QAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC5G,KAAK,kBAAA;AACH,MAAA,uBACE9E,OAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAA6B,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAEjH,KAAK,WAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC/G,KAAK,SAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC7G,KAAK,SAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC7G,KAAK,MAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC1G,KAAK,OAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAkB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC3G,KAAK,aAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAwB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IACjH,KAAK,QAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC5G,KAAK,WAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC/G,KAAK,MAAA;AACH,MAAA,uBAAO9E,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,GAAA,EAAK,iBAAiB,IAAA,EAAY,OAAA,EAAS,CAAC8E,KAAAA,KAAS,SAAS,EAAE,IAAA,EAAM,IAAA,EAAAA,KAAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC1G;AACE,MAAA,uBAAO9E,QAAA,aAAA,CAAC,KAAA,EAAA,IAAA,EAAK,KAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,IAAI,CAAE,CAAA;AAAA;AAErD;ACnEe,SAAR,WAAA,GAA+B;AACpC,EAAA,MAAM,KAAA,GAAQ,aAAY,CAAE,IAAA;AAC5B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,IAAA,EAAE,iBAAe,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,KAAA;AACvB,EAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,4BAAwB,GAAA,EAAI,MAAA,EAAO,MAAY,OAAA,EAAS,CAAC8E,UAAS,WAAA,CAAY,EAAE,MAAM,EAAE,IAAA,EAAM,MAAAA,KAAAA,EAAK,EAAG,CAAA,EAAG,CAAA;AACnH;ACbe,SAAR,sBAAA,GAA0C;AAC/C,EAAA,MAAM,MAAM,WAAA,EAAY;AACxB,EAAA,MAAM,IAAA,GAAOvE,QAAQ,MAAM;AACzB,IAAA,OAAO,CAAA,gBAAA,EAAmB,mBAAmB,IAAA,CAAK,SAAA,CAAU,KAAK,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,EAC/E,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,uBACEP,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAM,SAAA;AAAA,MACN,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAAC,oBAAA,EAAA,IAAqB,CAAA;AAAA,MACjC,IAAA;AAAA,MACA,QAAA,EAAS,oBAAA;AAAA,MACT,SAAA,EAAS;AAAA,KAAA;AAAA,IACV;AAAA,GAED;AAEJ;;;ACqBe,SAAR,aAAA,CAA+B;AAAA,EACpC,cAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM;AAAA,IACJ,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,cAAA,EAAe;AACnB,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,CAAC,qBAAqB,CAAC,MAAA,CAAO,QAAQ,CAAA,CAAE,yBAAA,EAA2B,gDAAgD,CAAC,CAAA,EAAG;AACzH,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,cAAA,EAAgB;AAElB,MAAA,cAAA,CAAe,iBAAiB,CAAA;AAGhC,MAAA,MAAA,CAAO,SAAS,IAAA,GAAO,EAAA;AACvB,MAAA,MAAA,CAAO,SAAS,MAAA,EAAO;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAACA,SAAAA,EAAU;AAEvC,IAAA,IAAI,YAAA,EAAc;AAEhB,MAAA,YAAA,CAAa,CAAA,EAAG,mBAAmB,CAAA,OAAA,CAAA,EAAWA,SAAQ,CAAA;AAGtD,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,CAAE,iBAAA,EAAmB,+BAA+B,CAAC,CAAA;AAAA,IACpE;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,mBACJX,OAAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,mBAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,qBACdjB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAA,EACzD,CAAA,CAAE,+BAAA,EAAiC,sBAAsB,CAC5D,CAAA,kBACApB,OAAAA,CAAA,aAAA;AAAA,IAAC+E,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,mBAAA;AAAA,MACP,SAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAK,OAAA;AAAA,MACL,UAAU,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,uBAAuB,CAAC;AAAA,KAAA;AAAA,oBAEjD/E,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,cAAA,EAAe,EAAA,EAAI,EAAE,aAAA,EAAe,MAAA,EAAQ,GAAA,EAAK,MAAK,EAAA,kBACxE5B,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAS,SAAQ,CAAA,EAChC,CAAA,CAAE,uBAAA,EAAyB,cAAc,CAC5C,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,OAAM,OAAA,EAAQ,EAAA,EAAI,EAAE,aAAA,EAAe,MAAA,EAAQ,GAAA,EAAK,MAAK,EAAA,kBACjE5B,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAS,SAAQ,CAAA,EAChC,CAAA,CAAE,gBAAA,EAAkB,OAAO,CAC9B;AAAA,qBAEFA,OAAAA,CAAA,cAACoB,UAAAA,EAAA,EAAW,SAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,iBAAgB,EAAA,EACxD,CAAA,CAAE,6BAA6B,sDAAiD,CACnF,CACF,CACF,CAAA;AAGF,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,uBACEpB,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,cAAY,CAAA,CAAE,sBAAA,EAAwB,sBAAsB,CAAE,GACrF,eACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,SAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,iBAAA;AAAA,MACZ,aAAa,mBAAA,IAAA,IAAA,GAAA,mBAAA,GAAuB,EAAA;AAAA,MACpC,WAAA,EAAa,mBAAA;AAAA,MACb,OAAA,EAAS,QAAQ,cAAc,CAAA;AAAA,MAC/B,MAAA,EAAQ,CAAO,IAAA,EAAM,IAAA,KAAS,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5B,QAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,QAAA,MAAM,cAAA,CAAe,iBAAA,EAAmB,IAAA,EAAM,EAAE,MAAM,CAAA;AACtD,QAAA,kBAAA,CAAmB,mBAAmB,IAAI,CAAA;AAC1C,QAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,MAC7B,CAAA;AAAA;AAAA,GAEJ,CAAA,kBAEAA,QAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,OAAM,UAAA,EAAA,kBACtBA,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,OAAA,EAAS,KACb,CAAC,kBAAA,oBACAjB,OAAAA,CAAA,aAAA;AAAA,IAACoB,UAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAM,gBAAA;AAAA,MACN,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,kBAAA;AAAA,QACT,YAAA,EAAc,CAAA;AAAA,QACd,QAAA,EAAU;AAAA;AACZ,KAAA;AAAA,IAEC,CAAA,CAAE,0BAA0B,6FAA6F;AAAA,GAC5H,EAED,sCACCpB,OAAAA,CAAA,cAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAM,SAAA;AAAA,MACN,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,IAAoB,CAAA;AAAA,MAChC,OAAA,EAAS,mBAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,UAAU,CAAC;AAAA,KAAA;AAAA,IAEV,CAAA,CAAE,2BAA2B,yBAAyB;AAAA,GACzD,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAM,OAAA;AAAA,MACN,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAe,CAAA;AAAA,MAC3B,OAAA,EAAS,YAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,UAAU,CAAC;AAAA,KAAA;AAAA,IAEV,CAAA,CAAE,mBAAmB,iBAAiB;AAAA,GAE3C,CAEJ,CACF,CAAA,EAEC,kBAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAM,QAAA,EAAA,kBACtBA,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,EAAA,kBACdjB,OAAAA,CAAA,aAAA,CAAC,sBAAA,EAAA,IAAuB,CAC1B,CACF,CAAA,EAED,eACH,CAAA;AAEJ;AAUA,SAAS,cAAc,EAAE,UAAA,EAAY,aAAa,WAAA,EAAa,OAAA,EAAS,QAAO,EAAuB;AACpG,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIgB,SAAS,WAAW,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAmB,WAAW,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAGhD,EAAAO,UAAU,MAAM;AACd,IAAA,OAAA,CAAQ,WAAW,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAC5B,EAAAA,UAAU,MAAM;AACd,IAAA,OAAA,CAAQ,WAAW,CAAA;AAAA,EACrB,GAAG,CAAC,UAAA,EAAY,YAAY,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAEtC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,OAAA,GAAU,SAAS,IAAA,EAAK;AAC9B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAACyD,EAAAA,KAAMA,EAAAA,CAAE,aAAY,KAAM,OAAA,CAAQ,WAAA,EAAa,CAAA,EAAG;AAC/D,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,CAAC,GAAG,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1B,IAAA,WAAA,CAAY,EAAE,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgB,OAAA,CAAQ,IAAA,CAAK,OAAO,CAACA,EAAAA,KAAMA,EAAAA,KAAM,GAAG,CAAC,CAAA;AAExE,EAAA,MAAM,KAAA,GACJ,IAAA,KAAS,WAAA,IACT,IAAA,CAAK,WAAW,WAAA,CAAY,MAAA,IAC5B,IAAA,CAAK,IAAA,CAAK,CAACA,EAAAA,EAAG,CAAA,KAAMA,EAAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAE1C,EAAA,MAAM,aAAa,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,SAAS,CAAC,IAAA,CAAK,MAAK,EAAG;AACxC,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,EAAG,IAAI,CAAA;AAC9B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAA,CAAO,UAAA,CAAW,MAAM,YAAA,CAAa,KAAK,GAAG,IAAI,CAAA;AAAA,IACnD,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACEhF,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,GAAA,EAAA,kBACdjB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAA;AAAA,MACpC,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACvC,QAAA,EAAU,CAAC,OAAA,IAAW,MAAA;AAAA,MACtB,SAAA,EAAS;AAAA;AAAA,GACX,kBACA3B,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,sBACClB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,OAAA,EAAS,OAAA,EAAS,IAAI,GAAA,EAAI,EAAA,EACpF,CAAA,CAAE,aAAA,EAAe,MAAM,CAC1B,GACC,IAAA,CAAK,MAAA,GAAS,CAAA,mBACbpB,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,GAAA,EAAK,EAAA,EAAI,EAAE,QAAA,EAAU,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,CAAA,EAAE,EAAA,EAC1E,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACTjB,OAAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAO,GAAA;AAAA,MACP,IAAA,EAAK,OAAA;AAAA,MACL,UAAU,OAAA,IAAW,CAAC,SAAS,MAAM,SAAA,CAAU,GAAG,CAAA,GAAI;AAAA;AAAA,GAEzD,CACH,CAAA,mBAEAA,OAAAA,CAAA,cAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,OAAO,eAAA,EAAiB,OAAA,EAAS,OAAA,EAAS,EAAA,EAAI,CAAA,EAAE,EAAA,EACjF,CAAA,CAAE,gBAAA,EAAkB,cAAc,CACrC,CAAA,kBAEFpB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,CAAA,CAAE,gBAAA,EAAkB,WAAW,CAAA;AAAA,MAC5C,KAAA,EAAO,QAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC3C,QAAA,EAAU,CAAC,OAAA,IAAW,MAAA;AAAA,MACtB,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,MAAA,EAAO;AAAA,QACT,CAAA,MAAA,IAAW,EAAE,GAAA,KAAQ,WAAA,IAAe,CAAC,QAAA,IAAY,IAAA,CAAK,SAAS,CAAA,EAAG;AAChE,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,YAAA,kBACE3B,OAAAA,CAAA,aAAA,CAACiF,gBAAA,EAAe,QAAA,EAAS,KAAA,EAAA,kBACvBjF,OAAAA,CAAA,aAAA;AAAA,UAACyB,QAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAU,CAAC,OAAA,IAAW,MAAA,IAAU,CAAC,SAAS,IAAA,EAAK;AAAA,YAC/C,2BAAWzB,OAAAA,CAAA,cAACkF,WAAAA,EAAA,EAAY,UAAS,OAAA,EAAQ,CAAA;AAAA,YACzC,EAAA,EAAI,EAAE,aAAA,EAAe,MAAA;AAAO,WAAA;AAAA,UAE3B,CAAA,CAAE,cAAc,KAAK;AAAA,SAE1B;AAAA;AAEJ;AAAA,GAEJ,mBACAlF,OAAAA,CAAA,cAACmF,OAAAA,EAAA,EAAQ,OAAO,OAAA,GAAU,EAAA,GAAK,EAAE,uBAAA,EAAyB,4DAA4D,GAAG,SAAA,EAAU,KAAA,EAAA,kBACjInF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,QAAA,EAAU,CAAC,OAAA,IAAW,MAAA,IAAU,CAAC,KAAA,IAAS,CAAC,KAAK,IAAA,EAAK;AAAA,MACrD,SAAA,EAAW,4BAAYzB,OAAAA,CAAA,cAAC,aAAA,EAAA,EAAc,QAAA,EAAS,SAAQ,CAAA,GAAK;AAAA,KAAA;AAAA,IAE3D,MAAA,GAAS,CAAA,CAAE,eAAA,EAAiB,cAAS,CAAA,GAAI,SAAA,GAAY,CAAA,CAAE,gBAAA,EAAkB,OAAO,CAAA,GAAI,CAAA,CAAE,uBAAA,EAAyB,cAAc;AAAA,GAElI,CACF,CACF,CAAA;AAEJ;;;ACtUO,IAAM,gBAAA,GAAmB,0BAAA;AACzB,IAAM,wBAAA,GAA2B,EAAA;AACjC,IAAM,uBAAA,uBAA8B,GAAA,CAAI,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,WAAW,CAAC,CAAA;AAC7F,IAAM,mBAAA,uBAA0B,GAAA,CAAI,CAAC,MAAM,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAQrE,SAAS,oBAAA,CACd,IAAA,EACA,QAAA,EACA,gBAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,SAAS,OAAO,kBAAA;AACrB,EAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,wBAAA,EAA0B,OAAO,OAAO,wBAAwB,CAAA,WAAA,CAAA;AACrF,EAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,OAAO,GAAG,OAAO,oEAAA;AAC5C,EAAA,IAAI,uBAAA,CAAwB,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,kCAAA;AACjD,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,KAAM,gBAAA,IAAoB,CAAA,CAAE,IAAA,KAAS,OAAO,CAAA;AACtF,EAAA,IAAI,WAAW,OAAO,kBAAA;AACtB,EAAA,OAAO,IAAA;AACT;AAKA,IAAM,aAAA,GAAgB,sFAAA;AAEf,SAAS,kBAAkB,IAAA,EAA2C;AAC3E,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAA,GAAO,EAAE,CAAC,CAAA;AAChB,IAAA,IAAI,wBAAwB,GAAA,CAAI,IAAI,KAAK,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA,EAAG;AACxE,IAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA;AAClB;AAEA,SAAS,0BAAA,CACP,KACA,KAAA,EACA;AA/CF,EAAA,IAAA,EAAA,EAAA,EAAA;AAgDE,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,IAAI,IAAA,IAAQ,KAAK,IAAA,KAAS,aAAA,IAAiB,SAAQ,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,CAAA,KAAY,QAAA,EAAU;AAC1F,IAAA,KAAA,CAAO,IAAA,CAAK,KAAa,OAAO,CAAA;AAAA,EAClC;AACA,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7C,IAAA,IAAI,OAAO,MAAA,IAAU,CAAC,KAAA,IAAS,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,IAAA,MAAM,KAAA,GAAA,CAAS,EAAA,GAAA,KAAA,CAAc,IAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,KAAA;AACnC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,KAAS,UAAU,IAAA,KAAS,SAAA,IAAa,SAAS,QAAA,KAAa,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClG,MAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IAClB,WAAW,IAAA,KAAS,MAAA,IAAU,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AAChE,MAAA,KAAA,CAAM,MAAM,QAAQ,CAAA;AAAA,IACtB;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,GAAA,EAAgD;AAChF,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,0BAAA,CAA2B,GAAA,EAAK,CAAC,KAAA,KAAU;AAnE7C,IAAA,IAAA,EAAA;AAoEI,IAAA,KAAA,MAAW,IAAA,IAAQ,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC3C,MAAA,KAAA,CAAM,GAAA,CAAI,QAAO,EAAA,GAAA,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA,KAAd,IAAA,GAAA,EAAA,GAAmB,KAAK,CAAC,CAAA;AAAA,IAC5C;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAAc;AACjC,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACnD;AAEA,SAAS,oBAAA,CAAqB,SAAiB,OAAA,EAAiB;AAC9D,EAAA,MAAM,GAAA,GAAM,YAAY,OAAO,CAAA;AAC/B,EAAA,MAAM,SAAS,IAAI,MAAA,CAAO,CAAA,UAAA,EAAa,GAAG,2BAA2B,GAAG,CAAA;AACxE,EAAA,MAAM,SAAS,IAAI,MAAA,CAAO,CAAA,wCAAA,EAA2C,GAAG,6BAA6B,GAAG,CAAA;AACxG,EAAA,OAAO,CAAC,IAAA,KAAiB,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,IAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,IAAA,CAAM,CAAA;AACtG;AAQO,SAAS,gBAAA,CACd,GAAA,EACA,OAAA,EACA,OAAA,EAC+B;AAhGjC,EAAA,IAAA,EAAA;AAiGE,EAAA,IAAI,OAAA,KAAY,OAAA,EAAS,OAAO,EAAC;AACjC,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,OAAA,EAAS,OAAO,CAAA;AACrD,EAAA,MAAM,QAAuC,EAAC;AAE9C,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AACvC,IAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,IAAA,MAAM,UAAA,GAAA,CAAqB,EAAA,GAAA,UAAA,CAAW,OAAA,KAAX,IAAA,GAAA,EAAA,GAAsB,EAAA;AACjD,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAU,CAAA;AACrC,IAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,IAAA,GAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,iCAAK,UAAA,CAAA,EAAL,EAAiB,OAAA,EAAS,UAAA,EAAW,CAAA,EAAE,CAAA;AAAA,IACvE;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7C,IAAA,IAAI,OAAO,MAAA,IAAU,CAAC,KAAA,IAAS,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,IAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,IAAA,MAAM,QAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA;AACpB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,IAAA,CAAK,IAAA,KAAS,UAAU,IAAA,KAAS,SAAA,IAAa,SAAS,QAAA,KAAa,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClG,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,MAAA,IAAI,QAAA,KAAa,MAAM,IAAA,EAAM;AAC3B,QAAC,MAAc,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,QAAA,KAAW,CAAA,EAAE,CAAA;AAAA,MAC1F;AAAA,IACF,WAAW,IAAA,KAAS,MAAA,IAAU,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AAChE,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AAC3C,MAAA,IAAI,YAAA,KAAiB,MAAM,QAAA,EAAU;AACnC,QAAC,MAAc,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,QAAA,EAAU,YAAA,KAAe,CAAA,EAAE,CAAA;AAAA,MAClG;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AASO,SAAS,sBAAA,CAAuB,MAAc,OAAA,EAAsC;AACzF,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA;AAAA,IACR,8CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,0CAAA,EAA4C,EAAE,CAAA;AAChE,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,EAAE,CAAA;AAC3C,EAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,aAAA,EAAe,CAAC,OAAO,IAAA,KAAiB;AAtJ5D,IAAA,IAAA,EAAA;AAuJI,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,OAAO,KAAA;AAC/B,IAAA,OAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,KAAhB,IAAA,GAAA,EAAA,GAAqB,EAAA;AAAA,EAC9B,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,oBAAoB,SAAA,EAAuE;AACzG,EAAA,MAAM,CAAA,uBAAQ,GAAA,EAAoB;AAClC,EAAA,IAAI,CAAC,WAAW,OAAO,CAAA;AACvB,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,IAAI,CAAA,CAAE,QAAQ,OAAO,CAAA,CAAE,gBAAgB,QAAA,IAAY,CAAA,CAAE,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC3E,MAAA,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,WAAW,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,OAAO,CAAA;AACT;AAOO,SAAS,2BAAA,CACd,KACA,OAAA,EACsB;AACtB,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG,OAAO,GAAA;AAC/B,EAAA,MAAM,OAA6B,cAAA,CAAA,EAAA,EAAK,GAAA,CAAA;AAExC,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AACvC,IAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,IAAA,IAAI,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,EAAU;AAC1C,MAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,CAAW,OAAA,EAAS,OAAO,CAAA;AACrE,MAAA,IAAI,UAAA,KAAe,WAAW,OAAA,EAAS;AACrC,QAAA,IAAA,CAAK,IAAA,GAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,iCAAK,UAAA,CAAA,EAAL,EAAiB,OAAA,EAAS,UAAA,EAAW,CAAA,EAAE,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7C,IAAA,IAAI,OAAO,MAAA,IAAU,CAAC,KAAA,IAAS,OAAO,UAAU,QAAA,EAAU;AAC1D,IAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,IAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,IAAA,MAAM,QAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA;AACpB,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,IAAA,CAAK,IAAA,KAAS,UAAU,IAAA,KAAS,SAAA,IAAa,SAAS,QAAA,KAAa,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClG,MAAA,MAAM,OAAA,GAAU,sBAAA,CAAuB,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAC1D,MAAA,IAAI,OAAA,KAAY,MAAM,IAAA,EAAM;AAC1B,QAAC,KAAa,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,OAAA,KAAU,CAAA,EAAE,CAAA;AAAA,MACxF;AAAA,IACF,WAAW,IAAA,KAAS,MAAA,IAAU,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AAChE,MAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,KAAA,CAAM,QAAA,EAAU,OAAO,CAAA;AAClE,MAAA,IAAI,WAAA,KAAgB,MAAM,QAAA,EAAU;AAClC,QAAC,KAAa,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,QAAA,EAAU,WAAA,KAAc,CAAA,EAAE,CAAA;AAAA,MAChG;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;;;AC3KA,SAAS,eAAe,CAAA,EAAkC;AACxD,EAAA,OAAO;AAAA,IACL,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA,GAAc,MAAA;AAAA,IAC7C,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA,GAAc;AAAA,GAC/C;AACF;AAEe,SAAR,cAAA,GAAkC;AAjDzC,EAAA,IAAA,EAAA;AAkDE,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,cAAc,sBAAA,EAAuB;AAC3C,EAAA,MAAM,OAAOA,SAAAA,CAAS,IAAA;AAEtB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AACxC,IAAA,uBACEX,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,CAAA,EAAG,qBACNlB,OAAAA,CAAA,aAAA,CAAC0D,KAAAA,EAAA,EAAM,QAAA,EAAS,MAAA,EAAA,EAAQ,EAAE,yBAAA,EAA2B,sCAAsC,CAAE,CAC/F,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,SAAA,GAAA,CAAA,CAAiC,UAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAG;AA/DvE,IAAA,IAAAV,GAAAA,EAAA,EAAA;AA+D2E,IAAA,OAAA;AAAA,MACvE,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,WAAA,EAAA,CAAaA,GAAAA,GAAA,CAAA,CAAE,WAAA,KAAF,OAAAA,GAAAA,GAAiB,EAAA;AAAA,MAC9B,WAAA,EAAA,CAAc,EAAA,GAAA,CAAA,CAAkB,WAAA,KAAlB,IAAA,GAAA,EAAA,GAAiC;AAAA,KACjD;AAAA,EAAA,CAAE,CAAA;AAEF,EAAA,MAAM,KAAA,GAAQzC,QAAQ,MAAM,iBAAA,CAAkBI,SAAQ,CAAA,EAAG,CAACA,SAAQ,CAAC,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgBJ,OAAAA,CAAQ,MAAM,IAAI,IAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AACtF,EAAA,MAAM,UAAA,GAAaA,OAAAA;AAAA,IACjB,MAAM,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,MAAM,CAAA,IAAK,CAAC,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IAChE,CAAC,OAAO,aAAa;AAAA,GACvB;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,EAA0B,UAAA,GAA4C,EAAC,KAAM;AA5EvG,IAAA,IAAAyC,GAAAA;AA6EI,IAAA,MAAM,QAAA,GAAA,CAAiBA,GAAAA,GAAA,UAAA,CAAmB,IAAA,KAAnB,OAAAA,GAAAA,GAA2B,IAAA;AAClD,IAAA,MAAM,OAAA,GAAU,iCACX,QAAA,CAAA,EADW;AAAA,MAEd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,QAAA,CAAS,IAAA,CAAA,EADR;AAAA,QAEJ,SAAA,EAAW,IAAA,CAAK,GAAA,CAAI,cAAc;AAAA,OACpC;AAAA,KACF,CAAA;AACA,IAAA,WAAA,CAAY,aAAA,CAAA,cAAA,CAAA,EAAA,EAAM,UAAA,CAAA,EAAN,EAA0B,IAAA,EAAM,SAAQ,CAAQ,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,EAAe,KAAA,KAAqC;AACpE,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,KAAM,KAAA,GAAQ,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAM,KAAA,CAAA,GAAU,CAAE,CAAA;AAC3E,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,MAAM,MAAM;AAChB,IAAA,cAAA,CAAe,CAAC,GAAG,SAAA,EAAW,EAAE,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,CAAC,CAAA;AAAA,EAC/E,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAiB;AACrC,IAAA,cAAA,CAAe,CAAC,GAAG,SAAA,EAAW,EAAE,IAAA,EAAM,aAAa,EAAA,EAAI,WAAA,EAAa,EAAA,EAAI,CAAC,CAAA;AAAA,EAC3E,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAkB;AArGtC,IAAA,IAAAA,GAAAA;AAsGI,IAAA,MAAM,CAAA,GAAI,UAAU,KAAK,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,CAAA,CAAE,IAAA,GAAA,CAAOA,GAAAA,GAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,KAAhB,IAAA,GAAAA,GAAAA,GAAqB,CAAA,GAAI,CAAA;AACrD,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,MAAM,KAAK,MAAA,CAAO,OAAA;AAAA,QAChB,CAAA,CAAE,4BAA4B,0DAA0D,CAAA,GACtF,KAAK,CAAA,CAAE,IAAI,KAAK,UAAU,CAAA,CAAA;AAAA,OAC9B;AACA,MAAA,IAAI,CAAC,EAAA,EAAI;AAAA,IACX;AACA,IAAA,cAAA,CAAe,UAAU,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,OAAA,KAAoB;AACvD,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAK,CAAA,CAAE,IAAA;AACjC,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,IAAA,IAAI,YAAY,OAAA,EAAS;AACzB,IAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,OAAA,EAAS,SAAA,EAAW,KAAK,CAAA;AAC5D,IAAA,IAAI,KAAA,EAAO;AACX,IAAA,MAAM,QAAQ,OAAA,GAAU,gBAAA,CAAiBrC,WAAU,OAAA,EAAS,OAAO,IAAI,EAAC;AACxE,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,GAAA,CAAI,CAAC,GAAG,CAAA,KAAO,CAAA,KAAM,KAAA,GAAQ,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAL,EAAQ,IAAA,EAAM,OAAA,MAAY,CAAE,CAAA;AAChF,IAAA,cAAA,CAAe,MAAM,KAAK,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA;AAAA,IAChB,WAAA,KACG,YAAY,KAAA,KAAU,SAAA,IACpB,YAAY,OAAA,IAAWA,SAAAA,CAAS,YAAY,OAAO,CAAA;AAAA,GAC1D;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,KAAiB;AAnI9C,IAAA,IAAAqC,GAAAA,EAAA,EAAA,EAAA,EAAA;AAoII,IAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAI,CAAA,EAAA,CAAA;AAEvB,IAAA,IAAI,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC/B,MAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,MAAA,MAAMoC,QAAAA,GAAAA,CAAkBpC,GAAAA,GAAA,UAAA,CAAW,OAAA,KAAX,OAAAA,GAAAA,GAAsB,EAAA;AAC9C,MAAA,MAAMqC,KAAAA,GACJD,QAAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,cAAc,CAAA,GAAI,KAAA,GAAQA,QAAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA;AACvF,MAAA,WAAA,CAAY;AAAA,QACV,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,iCAAK,UAAA,CAAA,EAAL,EAAiB,OAAA,EAASC,KAAAA,EAAK,CAAA,EAAE;AAAA,OACzD,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAa1E,SAAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA;AACxB,IAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,KAAA,KAAX,IAAA,GAAA,EAAA,GAAoB,EAAC;AACnC,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,OAAA,GAAA,CAAkB,EAAA,GAAA,KAAA,CAAM,KAAK,CAAA,KAAX,IAAA,GAAA,EAAA,GAAgB,EAAA;AACxC,IAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,cAAc,CAAA,GAAI,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA;AACvF,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAA,CAAQ,OAAO,GAAG,iCACd,KAAA,CAAA,EADc;AAAA,QAEjB,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,SAAA,CAAA,EAAL,EAAgB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,CAAC,KAAK,GAAG,IAAA,EAAK,CAAA,EAAE;AAAA,OAC3D;AAAA,KACM,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAO,IAAA,KAAiB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,IACnD,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,IAER;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,CAAA,EAAG,qBACNlB,OAAAA,CAAA,cAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,UAAA,EAAW,UAAS,cAAA,EAAe,eAAA,EAAgB,IAAI,EAAE,EAAA,EAAI,GAAE,EAAA,kBACpFjB,QAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,IAAI,EAAE,UAAA,EAAY,KAAI,EAAA,EACnD,CAAA,CAAE,mBAAmB,WAAW,CACnC,mBACApB,OAAAA,CAAA,cAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,iBAAiB,cAAc,CAAA,EAAA,kBAC/CnF,OAAAA,CAAA,aAAA,CAACsF,YAAA,EAAW,IAAA,EAAK,SAAQ,OAAA,EAAS,GAAA,EAAK,cAAY,CAAA,CAAE,eAAA,EAAiB,cAAc,CAAA,EAAA,kBAClFtF,QAAA,aAAA,CAACkF,WAAAA,EAAA,EAAY,QAAA,EAAS,OAAA,EAAQ,CAChC,CACF,CACF,mBACAlF,OAAAA,CAAA,cAACoB,UAAAA,EAAA,EAAW,SAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,SAAS,OAAA,EAAS,EAAA,EAAI,GAAE,EAAA,EAClF,CAAA;AAAA,IACC,iBAAA;AAAA,IACA;AAAA,GAEJ,GAEC,UAAA,CAAW,MAAA,GAAS,qBACnBpB,OAAAA,CAAA,aAAA,CAAC0D,KAAAA,EAAA,EAAM,QAAA,EAAS,WAAU,EAAA,EAAI,EAAE,IAAI,CAAA,EAAE,EAAA,kBACpC1D,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,EAAE,QAAA,EAAU,IAAG,EAAA,EAAI,CAAA,CAAE,wBAAwB,oBAAoB,CAAE,mBACnFA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,OAAM,OAAA,EAAS,GAAA,EAAK,UAAA,EAAU,IAAA,EAAC,QAAA,EAAS,MAAA,EAAA,EACtD,WAAW,GAAA,CAAI,CAAC,IAAA,qBACfjB,OAAAA,CAAA,aAAA;AAAA,IAACuF,IAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,QAAA,EAAU,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACjC,UAAA,kBAAYvF,OAAAA,CAAA,aAAA,CAACkF,aAAA,IAAY,CAAA;AAAA,MACzB,EAAA,EAAI,EAAE,UAAA,EAAY,WAAA;AAAY;AAAA,GAEjC,CACH,CAAA,kBACAlF,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,kBAAkB,OAAA,EAAS,OAAA,EAAS,EAAA,EAAI,GAAA,EAAI,EAAA,EACpF,CAAA,CAAE,4BAAA,EAA8B,8BAA8B,CACjE,CACF,CAAA,EAGD,SAAA,CAAU,MAAA,KAAW,CAAA,mBACpBpB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAAA,EACvD,CAAA,CAAE,gBAAA,EAAkB,4CAA4C,CACnE,CAAA,mBAEApB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,CAAA,EAAA,EACb,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAG;AA1NhC,IAAA,IAAA+B,GAAAA;AA2NY,IAAA,uBAAAhD,OAAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,CAAA;AAAA,QACL,KAAA,EAAO,CAAA;AAAA,QACP,QAAA,EAAU,CAAA;AAAA,QACV,QAAA,EAAU,SAAA;AAAA,QACV,UAAA,EAAY,CAAA,CAAE,IAAA,GAAA,CAAOgD,GAAAA,GAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,KAAhB,IAAA,GAAAA,GAAAA,GAAqB,CAAA,GAAI,CAAA;AAAA,QAC9C,SAAA;AAAA,QACA,cAAA,EAAgB,CAAC,IAAA,KAAS,YAAA,CAAa,GAAG,IAAI,CAAA;AAAA,QAC9C,qBAAqB,CAAC,WAAA,KAAgB,SAAS,CAAA,EAAG,EAAE,aAAa,CAAA;AAAA,QACjE,qBAAqB,CAAC,WAAA,KAAgB,SAAS,CAAA,EAAG,EAAE,aAAa,CAAA;AAAA,QACjE,QAAA,EAAU,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,QAC1B,UAAU,MAAM,CAAA,CAAE,IAAA,IAAQ,iBAAA,CAAkB,EAAE,IAAI,CAAA;AAAA,QAClD,QAAQ,MAAM,CAAA,CAAE,IAAA,IAAQ,IAAA,CAAK,EAAE,IAAI;AAAA;AAAA,KACrC;AAAA,EAAA,CACD,CACH,CAEJ,CAAA;AAEJ;AAgBA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AA1QrB,EAAA,IAAA,EAAA,EAAA,EAAA;AA2QE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIhC,QAAAA,CAAS,SAAS,IAAI,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAKhD,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAA;AAE7B,EAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,EAAW,QAAA,EAAU,KAAK,CAAA;AACjE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,KAAK,UAAA,KAAe,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAErC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,SAAS,IAAI,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,IAAA,EAAK,KAAM,QAAA,CAAS,IAAA,EAAM;AACtC,MAAA,cAAA,CAAe,SAAA,CAAU,MAAM,CAAA;AAAA,IACjC;AAAA,EACF,CAAA;AAEA,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,IAAA,EAAM,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,WAAA,EAAa,SAAA,EAAU,EAAA,kBACzEjB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAG,UAAA,EAAW,YAAA,EAAA,kBAC5CjB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAA;AAAA,MACpC,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAC3B,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,UAAC,CAAA,CAAE,OAA4B,IAAA,EAAK;AAAA,QACtC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,UAAA,YAAA,CAAa,SAAS,IAAI,CAAA;AAC1B,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAC,CAAA,CAAE,OAA4B,IAAA,EAAK;AAAA,QACtC;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO,QAAQ,SAAS,CAAA;AAAA,MACxB,YAAY,SAAA,IAAA,IAAA,GAAA,SAAA,GAAa;AAAA;AAAA,GAC3B,kBACA3B,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,IAAA,EAAM,EAAA,EAAI,EAAE,IAAI,GAAA,EAAI,EAAA,kBAClDjB,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,qBAAqB,CAAA,EAAA,kBAC7DnF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,MAAA;AAAA,MACT,UAAU,CAAC,OAAA;AAAA,MACX,YAAA,EAAY,CAAA,CAAE,sBAAA,EAAwB,qBAAqB;AAAA,KAAA;AAAA,oBAE3DtF,OAAAA,CAAA,aAAA,CAACwF,mBAAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ;AAAA,GAE1C,CACF,CAAA,kBACAxF,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,SAAA,GAAY,CAAA,CAAE,8BAA8B,kBAAkB,CAAA,GAAI,CAAA,CAAE,uBAAA,EAAyB,0BAA0B,CAAA,EAAA,kBACrInF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,QAAA;AAAA,MACT,QAAA,EAAU,CAAC,OAAA,IAAW,CAAC,SAAA;AAAA,MACvB,YAAA,EAAY,CAAA,CAAE,4BAAA,EAA8B,kBAAkB;AAAA,KAAA;AAAA,oBAE9DtF,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,UAAS,OAAA,EAAQ;AAAA,GAEpC,CACF,CAAA,kBACAA,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,kBAAA,EAAoB,QAAQ,CAAA,EAAA,kBAC5CnF,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,QAAA;AAAA,MACT,YAAA,EAAY,CAAA,CAAE,kBAAA,EAAoB,QAAQ;AAAA,KAAA;AAAA,oBAE1CtF,OAAAA,CAAA,aAAA,CAACyF,aAAAA,EAAA,EAAc,UAAS,OAAA,EAAQ;AAAA,GAEpC,CACF,CACF,CAAA,kBACAzF,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,aAAa,CAAA;AAAA,MAC/C,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAA,CAAO,EAAA,GAAA,QAAA,CAAS,WAAA,KAAT,IAAA,GAAA,EAAA,GAAwB,EAAA;AAAA,MAC/B,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACnD,WAAA,EAAa,CAAA,CAAE,oBAAA,EAAsB,UAAU;AAAA;AAAA,GACjD,kBACA3B,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,CAAE,wBAAA,EAA0B,cAAc,CAAA;AAAA,MACjD,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAA,CAAO,EAAA,GAAA,QAAA,CAAS,WAAA,KAAT,IAAA,GAAA,EAAA,GAAwB,EAAA;AAAA,MAC/B,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACnD,WAAA,EAAa,CAAA,CAAE,uBAAA,EAAyB,uBAAuB,CAAA;AAAA,MAC/D,UAAA,EAAY;AAAA,QACV,cAAA,kBACE3B,OAAAA,CAAA,aAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAS,OAAA;AAAA,YACT,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,IAAI,IAAA;AAAK;AAAA;AAC1C;AAEJ;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA,CAACiB,OAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,KAAK,EAAA,EAAI,EAAE,EAAA,EAAI,IAAA,MAC5C,OAAA,KACE,MAAA,mBACCjB,OAAAA,CAAA,cAACuF,IAAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAM,SAAA,EAAU,OAAA,EAAQ,UAAA,EAAW,KAAA,EAAO,EAAE,kBAAA,EAAoB,gBAAgB,CAAA,EAAG,CAAA,mBAEtGvF,OAAAA,CAAA,aAAA;AAAA,IAACuF,IAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAA,KAAe,CAAA,GAAI,CAAA,CAAE,mBAAA,EAAqB,KAAK,CAAA,GAAI,CAAA,CAAE,oBAAA,EAAsB,MAAM,CAAC,CAAA;AAAA;AAAA,IAGlH,CACF,CAAA;AAEJ;;;ACxXO,IAAM,sBAAA,GAAyB,GAAA;AA0CvB,SAAR,eAAA,CAAiC;AAAA,EACtC,aAAA,GAAgB,GAAA;AAAA,EAChB,YAAA,GAAe,GAAA;AAAA,EACf,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,GAA0B,EAAC,EAAG;AAC5B,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,EAAA,MAAM,4BAA4B,MAAM;AACtC,IAAA,QAAQ,kBAAA;AAAoB,MAC1B,KAAK,qBAAA;AACH,QAAA,uBAAOvF,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAmB,CAAA;AAAA,MAC7B,KAAK,QAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,IAAY,CAAA;AAAA,MACtB,KAAK,WAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAe,CAAA;AAAA,MACzB,KAAK,mBAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACN,cAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,mBAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA;AAAW,OAChC;AAAA,MACA,UAAA,EAAY;AAAA,QACV,SAAA,EAAW,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA;AAAA,QACrD,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAW;AAAA,QAC9B,WAAA,EAAa;AAAA,OACf;AAAA,MACA,kBAAA,EAAoB;AAAA,QAClB,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,EAAA,EAAI;AAAA,QACF,KAAA,EAAO,sBAAsB,sBAAA,GAAyB;AAAA;AACxD,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,KAAA,EAAO,sBAAA,EAAwB,MAAA,EAAQ,EAAA,EAAI,YAAA,EAAc,GAAG,WAAA,EAAa,SAAA,EAAU,EAAA,kBAC5FlB,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,CAAA,EAAA,kBACPlB,OAAAA,CAAA,aAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,kBAAA;AAAA,QACP,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM,cAAc,CAAC,CAAA;AAAA,QACnC,OAAA,EAAQ,WAAA;AAAA,QACR,EAAA,EAAI,EAAE,gBAAA,EAAkB,EAAE,QAAA,EAAU,GAAG,EAAA,EAAI,CAAA,EAAG,QAAA,EAAU,EAAA,EAAG;AAAE,OAAA;AAAA,sBAE7DA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,UAAS,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,QAAQ,CAAA,EAAG,CAAA;AAAA,sBAChEA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,uBAAsB,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,SAAS,CAAA,EAAG,CAAA;AAAA,sBAC/EA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,aAAY,KAAA,EAAO,CAAA,CAAE,yBAAA,EAA2B,WAAW,CAAA,EAAG,CAAA;AAAA,sBACzEA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAM,qBAAoB,KAAA,EAAO,CAAA,CAAE,wBAAA,EAA0B,UAAU,CAAA,EAAG;AAAA,KAEnF,CACF,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,KAAA,EAAO,sBAAA,EAAwB,QAAQ,mBAAA,EAAqB,QAAA,EAAU,MAAA,EAAO,EAAA,EACrF,2BACH;AAAA,GACF;AAEJ;ACvHA,IAAM,eAAA,GAAkBJ,cAA0C,IAAI,CAAA;AAG/D,SAAS,WAAA,GAAc;AAC5B,EAAA,MAAM,OAAA,GAAUC,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAS,EAAkC;AAC5E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,SAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,GAAI,CAAA;AAE7C,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAc,cAAA,GAAiB,GAAA,KAAS;AAC3D,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,WAAA,CAAY,cAAc,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,WAAA,EAAY,EAAA,EAC5C,QAAA,kBACDA,OAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAc,EAAE,QAAA,EAAU,KAAA,EAAO,YAAY,QAAA,EAAS;AAAA,MACtD,MAAM,OAAA,KAAY,IAAA;AAAA,MAClB,OAAA,EAAS,WAAA;AAAA,MACT,OAAA;AAAA,MACA,gBAAA,EAAkB,QAAA;AAAA,MAClB,EAAA,EAAI;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA;AAAA,QACR,QAAA,EAAU;AAAA;AAAA;AACZ;AAAA,GAEJ,CAAA;AAEJ;ACRA,SAAS,aAAa,GAAA,EAA6B;AACjD,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,EAAE,OAAA,EAAQ;AACnC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA;AAC5B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAI,CAAA;AACxC,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,CAAE,iBAAiB,UAAU,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,IAAI,OAAA,GAAU,IAAI,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,CAAA,CAAE,oBAAA,EAAsB,OAAO,CAAC,CAAA,CAAA;AACtE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACtC,EAAA,IAAI,MAAA,GAAS,IAAI,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,kBAAA,EAAoB,OAAO,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,EAAE,CAAA;AACtC,EAAA,IAAI,OAAA,GAAU,IAAI,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,CAAA,CAAE,iBAAA,EAAmB,OAAO,CAAC,CAAA,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACtC,EAAA,IAAI,MAAA,GAAS,IAAI,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,mBAAA,EAAqB,QAAQ,CAAC,CAAA,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,EAAE,CAAA;AACrC,EAAA,OAAO,GAAG,MAAM,CAAA,EAAG,CAAA,CAAE,kBAAA,EAAoB,OAAO,CAAC,CAAA,CAAA;AACnD;AAEe,SAAR,WAAA,CAA6B;AAAA,EAClC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,cAAA,EAAe;AAC9C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIgB,SAAS,KAAK,CAAA;AACxC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,SAAA,GAAY,MAAM,aAAA,CAAc,IAAI,CAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAqC;AACrD,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,aAAA,CAAc,EAAE,aAAa,CAAA;AAAA,EAC/B,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,EAAA,KAAoB,MAAM;AAC3C,IAAA,SAAA,EAAU;AACV,IAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,EAAA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AApFlC,IAAA,IAAA,EAAA;AAqFI,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,EAAe;AACrC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,aAAA,CAAc,OAAO,CAAA;AACrB,QAAA,kBAAA,CAAmB,QAAA,CAAS,EAAA,EAAI,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,OAAM,EAAA,GAAA,QAAA,CAAS,IAAA,KAAT,IAAA,GAAA,EAAA,GAAiB,EAAE,CAAA;AAAA,MACnF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAwB;AACpC,IAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA;AAC/C,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,WAAA,IAAe,QAAA,IAAY,QAAA,IAAY,SAAA,IAAa,QAAA,IAAY;AAAA,GAClE;AAEA,EAAA,uBACEhB,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,YAAA,EAAc,MAAM,QAAA,CAAS,IAAI,CAAA;AAAA,MACjC,YAAA,EAAc,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,MAClC,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO,MAAA;AAAA,QACP,EAAA,EAAI,GAAA;AAAA,QACJ,EAAA,EAAI,CAAA;AAAA,QACJ,YAAA,EAAc,CAAA;AAAA,QACd,MAAA,EAAQ,SAAA;AAAA,QACR,OAAA,EAAS,YAAY,qBAAA,GAAwB,aAAA;AAAA,QAC7C,SAAA,EAAW,EAAE,OAAA,EAAS,qBAAA,EAAsB;AAAA,QAC5C,iBAAA,EAAmB,EAAE,OAAA,EAAS,WAAA,EAAa,cAAc,cAAA;AAAe;AAC1E,KAAA;AAAA,oBAEAlB,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,YAAW,YAAA,EAAa,OAAA,EAAS,qBACtDjB,OAAAA,CAAA,cAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,QAAA,EAAU,GAAG,QAAA,EAAU,CAAA,EAAG,IAAI,UAAA,GAAa,CAAA,GAAI,GAAE,EAAA,kBAC1DlB,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,YAAW,UAAA,EAAW,OAAA,EAAS,GAAG,EAAA,EAAI,EAAE,UAAU,CAAA,EAAE,EAAA,kBACzEjB,OAAAA,CAAA,aAAA;AAAA,MAACoB,UAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,EAAA,EAAI;AAAA,UACF,UAAA,EAAY,GAAA;AAAA,UACZ,QAAA,EAAU,CAAA;AAAA,UACV,QAAA,EAAU,QAAA;AAAA,UACV,YAAA,EAAc,UAAA;AAAA,UACd,UAAA,EAAY;AAAA,SACd;AAAA,QACA,OAAO,QAAA,CAAS;AAAA,OAAA;AAAA,MAEf,QAAA,CAAS;AAAA,KACZ,EACC,OAAA,IAAW,CAAC,UAAA,oBACXpB,OAAAA,CAAA,aAAA;AAAA,MAACoB,UAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,IAAI,EAAE,KAAA,EAAO,kBAAkB,UAAA,EAAY,CAAA,EAAG,UAAU,QAAA;AAAS,OAAA;AAAA,MAEhE;AAAA,KAGP,CAAA,EACC,QAAA,CAAS,WAAA,oBACRpB,OAAAA,CAAA,aAAA;AAAA,MAACoB,UAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,SAAA;AAAA,QACR,EAAA,EAAI;AAAA,UACF,KAAA,EAAO,gBAAA;AAAA,UACP,OAAA,EAAS,aAAA;AAAA,UACT,eAAA,EAAiB,CAAA;AAAA,UACjB,eAAA,EAAiB,UAAA;AAAA,UACjB,QAAA,EAAU,QAAA;AAAA,UACV,UAAA,EAAY;AAAA;AACd,OAAA;AAAA,MAEC,QAAA,CAAS;AAAA,KACZ,EAED,QAAA,CAAS,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAA,oBACvCpB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,OAAA,EAAS,GAAA,EAAK,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,QAAQ,GAAA,EAAK,GAAA,EAAI,EAAA,EAC5E,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBAClBjB,OAAAA,CAAA,aAAA;AAAA,MAACuF,IAAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,GAAA;AAAA,QACL,KAAA,EAAO,GAAA;AAAA,QACP,IAAA,EAAK,OAAA;AAAA,QACL,EAAA,EAAI,EAAE,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,WAAW,kBAAA,EAAoB,EAAE,EAAA,EAAI,IAAA,EAAK;AAAE;AAAA,KAE3E,CACH,CAEJ,CACF,CAAA;AAAA,IAEC,8BACCvF,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,gCACEA,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,YAAY,MAAM,CAAA,EAAA,kBAClCnF,OAAAA,CAAA,aAAA;AAAA,MAACsF,UAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAS,QAAA;AAAA,QACT,YAAA,EAAY,CAAA,CAAE,aAAA,EAAe,aAAa,CAAA;AAAA,QAC1C,eAAA,EAAc,MAAA;AAAA,QACd,eAAA,EAAe,OAAA,CAAQ,UAAU,CAAA,IAAK,MAAA;AAAA,QACtC,EAAA,EAAI;AAAA,UACF,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,CAAA;AAAA,UACL,KAAA,EAAO,CAAA;AAAA,UACP,SAAS,KAAA,IAAS,SAAA,IAAa,OAAA,CAAQ,UAAU,IAAI,CAAA,GAAI,IAAA;AAAA,UACzD,UAAA,EAAY;AAAA;AACd,OAAA;AAAA,sBAEAtF,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,UAAS,OAAA,EAAQ;AAAA,KAEvC,CAAA,kBACAA,OAAAA,CAAA,aAAA;AAAA,MAAC0F,IAAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,UAAA;AAAA,QACV,IAAA,EAAM,QAAQ,UAAU,CAAA;AAAA,QACxB,OAAA,EAAS,SAAA;AAAA,QACT,OAAA,EAAS,IAAA;AAAA,QACT,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,OAAA,EAAQ;AAAA,QACxD,eAAA,EAAiB,EAAE,QAAA,EAAU,KAAA,EAAO,YAAY,OAAA,EAAQ;AAAA,QACxD,SAAA,EAAW,EAAE,KAAA,EAAO,EAAE,IAAI,EAAE,QAAA,EAAU,GAAA,EAAI,EAAE;AAAE,OAAA;AAAA,MAE7C,QAAA,oBACC1F,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,OAAA,EAAS,SAAA,CAAU,QAAQ,CAAA,EAAA,kBACnC3F,OAAAA,CAAA,cAAC,YAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,8BAAA,EAAA,EAA+B,QAAA,EAAS,OAAA,EAAQ,CACnD,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,CAAA,CAAE,kBAAA,EAAoB,wBAAmB,CAAE,CAC5D,CAAA;AAAA,MAED,WAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,OAAA,EAAS,SAAA,CAAU,WAAW,CAAA,EAAA,kBACtC3F,OAAAA,CAAA,cAAC,YAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAACwF,mBAAAA,EAAA,EAAoB,QAAA,EAAS,OAAA,EAAQ,CACxC,CAAA,kBACAxF,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,CAAA,CAAE,eAAA,EAAiB,WAAW,CAAE,CACjD,CAAA;AAAA,MAED,qBAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,OAAA,EAAS,SAAA,CAAU,qBAAqB,CAAA,EAAA,kBAChD3F,OAAAA,CAAA,cAAC,YAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAS,OAAA,EAAQ,CACvC,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,CAAA,CAAE,2BAAA,EAA6B,uBAAuB,CAAE,CACzE,CAAA;AAAA,MAED,SAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,OAAA,EAAS,SAAA,CAAU,SAAS,CAAA,EAAA,kBACpC3F,OAAAA,CAAA,cAAC,YAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAS,OAAA,EAAQ,CACvC,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,CAAA,CAAE,aAAA,EAAe,mBAAmB,CAAE,CACvD,CAAA;AAAA,MAED,QAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,OAAA,EAAS,SAAA,CAAU,QAAQ,CAAA,EAAA,kBACnC3F,OAAAA,CAAA,cAAC,YAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC4F,oBAAAA,EAAA,EAAqB,QAAA,EAAS,OAAA,EAAQ,CACzC,CAAA,kBACA5F,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,CAAA,CAAE,YAAA,EAAc,oBAAoB,CAAE,CACvD,CAAA;AAAA,MAED,QAAA,IAAY;AAAA,wBACXA,OAAAA,CAAA,aAAA,CAAC6F,SAAAA,EAAA,EAAQ,KAAI,SAAA,EAAU,CAAA;AAAA,wBACvB7F,OAAAA,CAAA,aAAA,CAAC2F,UAAA,EAAS,GAAA,EAAI,UAAS,OAAA,EAAS,SAAA,CAAU,QAAQ,CAAA,EAAG,EAAA,EAAI,EAAE,KAAA,EAAO,YAAA,sBAChE3F,OAAAA,CAAA,cAAC,YAAA,EAAA,EAAa,EAAA,EAAI,EAAE,KAAA,EAAO,cAAa,EAAA,kBACtCA,QAAA,aAAA,CAAC8F,cAAAA,EAAA,EAAe,QAAA,EAAS,OAAA,EAAQ,CACnC,CAAA,kBACA9F,QAAA,aAAA,CAAC,YAAA,EAAA,IAAA,EAAc,EAAE,aAAA,EAAe,QAAQ,CAAE,CAC5C;AAAA;AACF,KAEJ;AAAA,GAEJ;AAEJ;;;AC/PO,SAAS,UAAA,CAAW,GAAc,CAAA,EAAuB;AAC9D,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,CAAE,IAAA,IAAQ,EAAE,QAAA,KAAa,CAAA,CAAE,UAAU,OAAO,KAAA;AAC3D,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,kBAAA,IAAsB,CAAA,CAAE,SAAS,kBAAA,EAAoB;AAClE,IAAA,OAAO,CAAA,CAAE,gBAAgB,CAAA,CAAE,WAAA;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CAAe,KAA2B,GAAA,EAA0B;AArB7E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsBE,EAAA,MAAM,KAAA,GAAa,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,IAAI,GAAA,CAAI,SAAS,aAAA,EAAe,OAAA,CAAQ,iBAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,WAAA,KAAZ,IAAA,GAAA,EAAA,GAA2B,EAAC;AACpE,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,WAAA,EAAa,OAAA,CAAQ,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,WAAA,KAAnB,IAAA,GAAA,EAAA,GAAkC,EAAC;AACzE,EAAA,MAAM,GAAA,GAAA,CAAM,uBAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,KAAnB,mBAA6B,GAAA,CAAI,WAAA,CAAA;AAC7C,EAAA,OAAA,CAAQ,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAoB,EAAC;AAC/B;AAEA,SAAS,gBAAA,CAAiB,KAAA,EAAY,GAAA,EAAgB,MAAA,EAAuB;AA9B7E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+BE,EAAA,IAAI,GAAA,CAAI,SAAS,aAAA,EAAe;AAC9B,IAAA,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAM,IAAA,CAAA,EAAX,EAAiB,WAAA,EAAa,MAAA,EAAO,CAAA,EAAE,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,WAAA,EAAa;AAC5B,IAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,MAEL,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAA,EAAX,EAAiB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EAAhB,EAAuB,WAAA,EAAa,QAAO,CAAA,EAAE;AAAA,KAC7E,CAAA;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAA,CAAA,CAAW,uBAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,KAAnB,IAAA,GAAA,EAAA,GAA8B,EAAC,EAAG,GAAA;AAAA,IAAI,CAAC,CAAA,EAAQ,CAAA,KAC9D,CAAA,KAAM,GAAA,CAAI,WAAA,GAAc,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAL,EAAQ,WAAA,EAAa,MAAA,EAAO,CAAA,GAAI;AAAA,GAC1D;AACA,EAAA,OAAO,iCAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAM,IAAA,CAAA,EAAX,EAAiB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAM,IAAA,CAAK,KAAA,CAAA,EAAhB,EAAuB,OAAA,KAAU,CAAA,EAAE,CAAA;AACtF;AAOO,SAAS,YAAA,CACd,GAAA,EACA,UAAA,EACA,WAAA,EACS;AAvDX,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwDE,EAAA,IAAI,UAAA,KAAe,aAAa,OAAO,IAAA;AACvC,EAAA,MAAM,KAAA,GAAa,IAAI,UAAU,CAAA;AACjC,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,WAAA,KAAZ,IAAA,GAAA,EAAA,GAA2B,EAAG,CAAA;AAChF,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa,MAAA,CAAO,KAAK,GAAA,CAAI,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,WAAA,KAAnB,IAAA,GAAA,EAAA,GAAkC,EAAG,CAAA;AACrF,EAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,IAAA,KAAA,MAAW,GAAA,IAAA,CAAO,uBAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,UAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,KAAnB,IAAA,GAAA,EAAA,GAA8B,EAAC,EAAG;AAClD,MAAA,MAAA,CAAO,KAAK,GAAA,CAAI,EAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAA,EAAA,GAAmB,EAAG,CAAA;AAAA,IACxC;AAAA,EACF;AACA,EAAA,KAAA,MAAW,WAAW,MAAA,EAAQ;AAC5B,IAAA,IAAI,YAAA,CAAa,GAAA,EAAK,OAAA,EAAS,WAAW,GAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,cAAA,CACd,GAAA,EACA,QAAA,EACA,YAAA,EACA,cACA,WAAA,EACsC;AArFxC,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuFE,EAAA,IAAI,aAAa,GAAA,EAAK,QAAA,EAAU,YAAA,CAAa,QAAQ,GAAG,OAAO,IAAA;AAE/D,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,EAAK,YAAY,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAC3C,EAAA,IAAI,WAAA,GAAc,GAAG,OAAO,IAAA;AAE5B,EAAA,IAAI,UAAA,CAAW,YAAA,EAAc,YAAY,CAAA,EAAG;AAG1C,IAAA,MAAM,GAAA,GAAM,CAAC,GAAG,MAAM,CAAA;AACtB,IAAA,GAAA,CAAI,MAAA,CAAO,aAAa,CAAC,CAAA;AACzB,IAAA,IAAI+F,SAAAA,GAAW,WAAA;AACf,IAAA,IAAIA,SAAAA,GAAW,WAAA,EAAaA,SAAAA,IAAY,CAAA;AACxC,IAAA,IAAIA,SAAAA,GAAW,CAAA,EAAGA,SAAAA,GAAW,CAAA;AAC7B,IAAA,IAAIA,SAAAA,GAAW,GAAA,CAAI,MAAA,EAAQA,YAAW,GAAA,CAAI,MAAA;AAC1C,IAAA,GAAA,CAAI,MAAA,CAAOA,SAAAA,EAAU,CAAA,EAAG,QAAQ,CAAA;AAChC,IAAA,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,EAAA,EAAI,CAAA,KAAM,OAAO,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA;AACnD,IAAA,MAAMC,YAAAA,GAAmB,GAAA,CAAI,YAAA,CAAa,QAAQ,CAAA;AAClD,IAAA,OAAO;AAAA,MACL,CAAC,YAAA,CAAa,QAAQ,GAAG,gBAAA,CAAiBA,YAAAA,EAAa,cAAc,GAAG;AAAA,KAC1E;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,EAAA,SAAA,CAAU,MAAA,CAAO,aAAa,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,EAAK,YAAY,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,MAAM,CAAA;AAC5B,EAAA,IAAI,QAAA,GAAW,WAAA;AACf,EAAA,IAAI,QAAA,GAAW,GAAG,QAAA,GAAW,CAAA;AAC7B,EAAA,IAAI,QAAA,GAAW,SAAA,CAAU,MAAA,EAAQ,QAAA,GAAW,SAAA,CAAU,MAAA;AACtD,EAAA,SAAA,CAAU,MAAA,CAAO,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA;AAItC,EAAA,IAAI,YAAA,CAAa,QAAA,KAAa,YAAA,CAAa,QAAA,EAAU;AACnD,IAAA,MAAM,KAAA,GAAa,GAAA,CAAI,YAAA,CAAa,QAAQ,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAA,CAAA,CAAW,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAA,KAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,KAAnB,IAAA,GAAA,EAAA,GAA8B,EAAC,EAAG,GAAA,CAAI,CAAC,GAAQ,CAAA,KAAc;AAC5E,MAAA,IAAI,YAAA,CAAa,IAAA,KAAS,kBAAA,IAAsB,CAAA,KAAM,aAAa,WAAA,EAAa;AAC9E,QAAA,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAL,EAAQ,WAAA,EAAa,SAAA,EAAU,CAAA;AAAA,MACxC;AACA,MAAA,IAAI,YAAA,CAAa,IAAA,KAAS,kBAAA,IAAsB,CAAA,KAAM,aAAa,WAAA,EAAa;AAC9E,QAAA,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAL,EAAQ,WAAA,EAAa,SAAA,EAAU,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,CAAC,YAAA,CAAa,QAAQ,GAAG,iCACpB,KAAA,CAAA,EADoB;AAAA,QAEvB,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAA,EAAX,EAAiB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EAAhB,EAAuB,OAAA,EAAQ,CAAA,EAAE;AAAA,OACjE;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAmB,GAAA,CAAI,YAAA,CAAa,QAAQ,CAAA;AAClD,EAAA,MAAM,WAAA,GAAmB,GAAA,CAAI,YAAA,CAAa,QAAQ,CAAA;AAClD,EAAA,OAAO;AAAA,IACL,CAAC,YAAA,CAAa,QAAQ,GAAG,gBAAA,CAAiB,WAAA,EAAa,cAAc,SAAS,CAAA;AAAA,IAC9E,CAAC,YAAA,CAAa,QAAQ,GAAG,gBAAA,CAAiB,WAAA,EAAa,cAAc,SAAS;AAAA,GAChF;AACF;;;AC9GA,IAAMC,cAAAA,GAAgB,MAAA;AACtB,IAAM,WAAA,GAAc,EAAA;AAkBpB,SAAS,YAAY,IAAA,EAA+B;AAClD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,aAAA;AACH,MAAA,uBAAOjG,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAkB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC7C,KAAK,SAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC/C,KAAK,MAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,UAAS,OAAA,EAAQ,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC/C,KAAK,OAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,UAAS,OAAA,EAAQ,CAAA;AAAA,IACzC,KAAK,QAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAAsB,UAAS,OAAA,EAAQ,CAAA;AAAA,IACjD,KAAK,WAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC/C,KAAK,SAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,sBAAA,EAAA,EAAuB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAClD,KAAK,QAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC1C,KAAK,MAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,UAAS,OAAA,EAAQ,CAAA;AAAA,IACxC,KAAK,WAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAACkG,kBAAAA,EAAA,EAAmB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC9C,KAAK,kBAAA;AACH,MAAA,uBAAOlG,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,EAAmB,UAAS,OAAA,EAAQ,CAAA;AAAA,IAC9C;AACE,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,UAAS,OAAA,EAAQ,CAAA;AAAA;AAEhD;AAEA,SAAS,YAAY,IAAA,EAAqD;AACxE,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,UAAU,IAAA,CAAK,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC/C,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,OAAO,OAAA,CAAQ,SAAS,WAAA,GAAc,OAAA,CAAQ,MAAM,CAAA,EAAG,WAAA,GAAc,CAAC,CAAA,GAAI,QAAA,GAAM,OAAA;AAClF;AAQA,SAAS,SAAA,CAAU,EAAA,EAAY,GAAA,EAA2B,GAAA,EAAoC;AApG9F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqGE,EAAA,MAAM,KAAA,GAAa,IAAI,EAAE,CAAA;AACzB,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,OAAe,KAAA,CAAM,IAAA;AAC3B,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,EAAA,GAAc,EAAC;AAC5B,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,EAAA,GAAc,EAAC;AAC7B,EAAA,MAAM,QAAA,GAAiC,GAAA,GACnC,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,aAAA,EAAe,GAAA,CAAI,aAAA,EAAe,aAAA,EAAe,GAAA,CAAI,aAAA,KAC3E,EAAC;AAEL,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,GAAA,GAAA,CAAO,EAAA,GAAA,IAAA,CAAK,WAAA,KAAL,IAAA,GAAA,EAAA,GAAwC,EAAC;AACtD,MAAA,MAAM,iBAAA,GAA+B,EAAE,IAAA,EAAM,aAAA,EAAe,UAAU,MAAA,EAAO;AAC7E,MAAA,MAAM,WAAW,GAAA,CACd,GAAA;AAAA,QAAI,CAAC,OAAA,EAAS,CAAA,KACb,SAAA,CAAU,SAAS,GAAA,EAAK;AAAA,UACtB,MAAA,EAAQ,iBAAA;AAAA,UACR,aAAA,EAAe,CAAA;AAAA,UACf,eAAe,GAAA,CAAI;AAAA,SACpB;AAAA,OACH,CACC,MAAA,CAAO,CAAC,CAAA,KAAwB,MAAM,IAAI,CAAA;AAC7C,MAAA,OAAO;AAAA,QACL,EAAA;AAAA,QACA,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,QAAQ,CAAA;AAAA,QACnC,IAAA,EAAM,YAAY,aAAa,CAAA;AAAA,QAC/B,QAAA;AAAA,QACA,oBAAA,EAAsB;AAAA,OACxB;AAAA,IACF;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,GAAA,GAAA,CAAO,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,EAAA,GAAyC,EAAC;AACvD,MAAA,MAAM,iBAAA,GAA+B,EAAE,IAAA,EAAM,WAAA,EAAa,UAAU,EAAA,EAAG;AACvE,MAAA,MAAM,WAAW,GAAA,CACd,GAAA;AAAA,QAAI,CAAC,OAAA,EAAS,CAAA,KACb,SAAA,CAAU,SAAS,GAAA,EAAK;AAAA,UACtB,MAAA,EAAQ,iBAAA;AAAA,UACR,aAAA,EAAe,CAAA;AAAA,UACf,eAAe,GAAA,CAAI;AAAA,SACpB;AAAA,OACH,CACC,MAAA,CAAO,CAAC,CAAA,KAAwB,MAAM,IAAI,CAAA;AAC7C,MAAA,MAAM,QAAQ,QAAA,CAAS,MAAA;AACvB,MAAA,OAAO,cAAA,CAAA;AAAA,QACL,EAAA;AAAA,QACA,KAAA,EAAO,WAAA;AAAA,QACP,OAAA,EAAS,KAAA,KAAU,CAAA,GAAI,SAAA,GAAY,GAAG,KAAK,CAAA,SAAA,CAAA;AAAA,QAC3C,IAAA,EAAM,YAAY,WAAW,CAAA;AAAA,QAC7B,QAAA;AAAA,QACA,oBAAA,EAAsB;AAAA,OAAA,EACnB,QAAA,CAAA;AAAA,IAEP;AAAA,IACA,KAAK,kBAAA,EAAoB;AACvB,MAAA,MAAM,OAAA,GAAA,CAA6C,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,EAAA,GAAiB,EAAC;AACrE,MAAA,MAAM,WAA0B,EAAC;AACjC,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,MAAA,KAAW;AA7JvC,QAAA,IAAAgD,GAAAA;AA8JQ,QAAA,MAAM,UAASA,GAAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAAA,MAAmB,EAAC;AACnC,QAAA,MAAM,YAAA,GAA0B;AAAA,UAC9B,IAAA,EAAM,kBAAA;AAAA,UACN,QAAA,EAAU,EAAA;AAAA,UACV,WAAA,EAAa;AAAA,SACf;AACA,QAAA,MAAM,cAAc,MAAA,CACjB,GAAA;AAAA,UAAI,CAAC,OAAA,EAAS,CAAA,KACb,SAAA,CAAU,SAAS,GAAA,EAAK;AAAA,YACtB,MAAA,EAAQ,YAAA;AAAA,YACR,aAAA,EAAe,CAAA;AAAA,YACf,eAAe,MAAA,CAAO;AAAA,WACvB;AAAA,SACH,CACC,MAAA,CAAO,CAAC,CAAA,KAAwB,MAAM,IAAI,CAAA;AAC7C,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA;AAAA,UACvB,KAAA,EAAO,CAAA,OAAA,EAAU,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA,UAC3B,SAAS,WAAA,CAAY,MAAA,KAAW,IAAI,SAAA,GAAY,CAAA,EAAG,YAAY,MAAM,CAAA,SAAA,CAAA;AAAA,UACrE,IAAA,kBAAMhD,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAgB,QAAA,EAAS,OAAA,EAAQ,EAAA,EAAI,EAAE,OAAA,EAAS,GAAA,EAAI,EAAG,CAAA;AAAA,UAC9D,QAAA,EAAU,WAAA;AAAA,UACV,oBAAA,EAAsB;AAAA,SACvB,CAAA;AAAA,MACH,CAAC,CAAA;AACD,MAAA,OAAO,cAAA,CAAA;AAAA,QACL,EAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QACP,OAAA,EAAS,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAA;AAAA,QAC1B,IAAA,EAAM,YAAY,kBAAkB,CAAA;AAAA,QACpC;AAAA,OAAA,EACG,QAAA,CAAA;AAAA,IAEP;AAAA,IACA,KAAK,MAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,cAAA,CAAA,EAAE,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,EAAG,IAAA,EAAM,WAAA,CAAY,IAAI,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA,IAC1F,KAAK,MAAA;AACH,MAAA,OAAO,cAAA,CAAA,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA,EAAG,IAAA,EAAM,WAAA,CAAY,MAAM,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA,IAClG,KAAK,OAAA;AACH,MAAA,OAAO,cAAA,CAAA;AAAA,QACL,EAAA;AAAA,QACA,KAAA,EAAO,OAAA;AAAA,QACP,OAAA,EAAA,CAAS,iBAAY,KAAA,CAAM,GAAG,MAArB,IAAA,GAAA,EAAA,GAA0B,WAAA,CAAY,MAAM,GAAG,CAAA;AAAA,QACxD,IAAA,EAAM,YAAY,OAAO;AAAA,OAAA,EACtB,QAAA,CAAA;AAAA,IAEP,KAAK,QAAA;AACH,MAAA,OAAO,cAAA,CAAA,EAAE,EAAA,EAAI,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA,EAAG,IAAA,EAAM,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA,IACtG,KAAK,SAAA;AACH,MAAA,OAAO,iBAAE,EAAA,EAAI,KAAA,EAAO,WAAW,IAAA,EAAM,WAAA,CAAY,SAAS,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA,IAClE,KAAK,QAAA;AACH,MAAA,OAAO,cAAA,CAAA;AAAA,QACL,EAAA;AAAA,QACA,KAAA,EAAO,QAAA;AAAA,QACP,SAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,QAC9C,IAAA,EAAM,YAAY,QAAQ;AAAA,OAAA,EACvB,QAAA,CAAA;AAAA,IAEP,KAAK,WAAA;AACH,MAAA,OAAO,cAAA,CAAA,EAAE,EAAA,EAAI,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,EAAG,IAAA,EAAM,WAAA,CAAY,WAAW,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA,IACxG;AACE,MAAA,OAAO,iBAAE,EAAA,EAAI,KAAA,EAAO,MAAM,IAAA,EAAM,WAAA,CAAY,IAAI,CAAA,EAAA,EAAM,QAAA,CAAA;AAAA;AAE5D;AAIA,IAAM,SAAA,GAAY,kCAAA;AASH,SAAR,YAAA,GAAgC;AACrC,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIK,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,SAAA,CAAUiF,cAAAA,EAAetF,SAAQ,CAAA;AAE9C,EAAA,MAAM,WAAA,GAAc,CAClB,OAAA,EACA,YAAA,EACA,WAAA,KACG;AACH,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZA,SAAAA;AAAA,MACA,OAAA,CAAQ,QAAA;AAAA,MACR,OAAA,CAAQ,YAAA;AAAA,MACR,YAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,WAAA,CAAY,KAAY,CAAA;AACxB,MAAA,kBAAA,CAAmB,QAAQ,QAAQ,CAAA;AAAA,IACrC;AAAA,EACF,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,IAAA,kBACClB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,WAAU,IAAA,EAAK,EAAA,EAAI,EAAE,UAAA,EAAY,MAAA,EAAQ,EAAA,EAAI,KAAK,EAAA,EAAI,GAAA,EAAI,EAAA,EACvF,CAAA,CAAE,eAAA,EAAiB,SAAS,CAC/B,CAAA,kBACApB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,SAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,kBAAkB,EAAA,EAAI,GAAA,EAAK,EAAA,EAAI,CAAA,EAAE,EAAA,EAC3F,CAAA,CAAE,cAAA,EAAgB,2EAA2E,CAChG,CAAA,EACC,IAAA,mBACCpB,OAAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,eAAA;AAAA,MACA,QAAA,EAAUW,SAAAA;AAAA,MACV,QAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AAAA,sBAGFX,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,OAAO,gBAAA,EAAkB,EAAA,EAAI,GAAA,EAAI,EAAA,EAAG,qBAEtE,CAEJ,CAAA;AAEJ;AAYA,SAAS,UAAA,CAAW;AAAA,EAClB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA,EAAAT,SAAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIK,SAAS,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAkB,IAAI,CAAA;AACpD,EAAA,MAAM,cAAc,OAAA,CAAQ,IAAA,CAAK,YAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,CAAK,EAAA,CAAG,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,YAAA,IAAgB,eAAA,KAAoB,IAAA,CAAK,EAAA;AAE5D,EAAA,MAAM,OAAA,GACJ,gBACA,IAAA,CAAK,MAAA,KAAW,UAChB,IAAA,CAAK,aAAA,KAAkB,MAAA,IACvB,IAAA,CAAK,aAAA,KAAkB,MAAA;AACzB,EAAA,MAAM,SAAA,GAAY,OAAA,IAAY,IAAA,CAAK,aAAA,GAA2B,CAAA;AAC9D,EAAA,MAAM,WAAA,GAAc,OAAA,IAAY,IAAA,CAAK,aAAA,GAA4B,KAAK,aAAA,GAA2B,CAAA;AAEjG,EAAA,MAAM,YAAA,GAAA,CAAe,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAA,MAAa,IAAA,CAAK,EAAA;AAGjD,EAAA,MAAM,SAAA,GAAY,OAAA;AAElB,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAuC;AAC9D,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,IAAA,CAAK,MAAA,EAAQ;AAChC,IAAA,MAAM,UAAuB,EAAE,QAAA,EAAU,KAAK,EAAA,EAAI,YAAA,EAAc,KAAK,MAAA,EAAO;AAC5E,IAAA,CAAA,CAAE,aAAa,OAAA,CAAQ,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AACzD,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,IAAA,CAAK,KAAK,CAAA;AAC/C,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,WAAA,CAAY,OAAO,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,IAAI,CAAA;AAI5C,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAgD;AACtE,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AACnD,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,OAAA,GAAU,IAAA,CAAK,GAAA;AAC3B,IAAA,MAAM,CAAA,GAAI,KAAK,MAAA,IAAU,EAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,IAAA,CAAK,oBAAoB,CAAA;AAEvD,IAAA,IAAI,iBAAiB,CAAA,GAAI,CAAA,GAAI,QAAQ,CAAA,GAAI,CAAA,GAAI,MAAM,OAAO,QAAA;AAC1D,IAAA,IAAI,CAAA,GAAI,CAAA,GAAI,GAAA,EAAK,OAAO,QAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAuC;AAC7D,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,IAAI,QAAA,CAAS,QAAA,KAAa,IAAA,CAAK,EAAA,EAAI;AACjC,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,wBAAwB,YAAA,CAAaL,SAAAA,EAAU,SAAS,QAAA,EAAU,IAAA,CAAK,EAAE,CAAA,EAAG;AACnF,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,eAAe,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAQ,QAAA,IAAY,GAAA,KAAQ,OAAA,KAAY,CAAC,KAAK,MAAA,EAAQ;AACzD,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAC5B,IAAA,UAAA,CAAW,GAAG,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,MAAM,UAAA,CAAW,IAAI,CAAA;AAE7C,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAuC;AACzD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AAC3B,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,IAAI,OAAA,KAAY,QAAA,IAAY,IAAA,CAAK,oBAAA,EAAsB;AACrD,MAAA,YAAA,GAAe,IAAA,CAAK,oBAAA;AAGpB,MAAA,WAAA,GAAc,MAAA,CAAO,gBAAA;AAAA,IACvB,YAAY,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,OAAA,KAAY,KAAK,MAAA,EAAQ;AACvE,MAAA,YAAA,GAAe,IAAA,CAAK,MAAA;AACpB,MAAA,WAAA,GAAe,IAAA,CAAK,aAAA,IAA4B,OAAA,KAAY,OAAA,GAAU,CAAA,GAAI,CAAA,CAAA;AAAA,IAC5E;AACA,IAAA,IAAI,YAAA,EAAc,WAAA,CAAY,QAAA,EAAU,YAAA,EAAc,WAAW,CAAA;AACjE,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAkB;AACpC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,IAAA,CAAK,MAAA,EAAQ;AAC9B,IAAA,MAAM,SAAA,GAAa,KAAK,aAAA,GAA2B,KAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAeA,SAAAA,EAAU,IAAA,CAAK,EAAA,EAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,SAAA,IAAa,KAAA,GAAQ,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AACzG,IAAA,IAAI,KAAA,cAAmB,KAAY,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,UAAU,UAAA,EAAW,EAAA,EAC7B,OAAA,KAAY,QAAA,oBAAYlB,OAAAA,CAAA,cAAC,QAAA,EAAA,EAAS,KAAA,EAAc,CAAA,kBACjDA,OAAAA,CAAA,aAAA;AAAA,IAACiB,KAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAW,QAAA;AAAA,MACX,OAAA,EAAS,GAAA;AAAA,MACT,SAAA;AAAA,MACA,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,MAAM,YAAA,IAAgB,kBAAA,CAAmB,KAAK,EAAE,CAAA;AAAA,MACzD,cAAc,MAAM,YAAA,IAAgB,CAAC,QAAA,IAAY,iBAAA,CAAkB,KAAK,EAAE,CAAA;AAAA,MAC1E,YAAA,EAAc,MAAM,YAAA,IAAgB,iBAAA,CAAkB,IAAI,CAAA;AAAA,MAC1D,EAAA,EAAI;AAAA,QACF,EAAA,EAAI,CAAA,EAAG,KAAA,GAAQ,EAAA,GAAK,CAAC,CAAA,EAAA,CAAA;AAAA,QACrB,EAAA,EAAI,GAAA;AAAA,QACJ,EAAA,EAAI,IAAA;AAAA,QACJ,SAAA,EAAW,EAAA;AAAA,QACX,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ,YAAA,GAAgB,SAAA,GAAY,MAAA,GAAS,SAAA,GAAa,SAAA;AAAA,QAC1D,eAAA,EAAiB,UAAA,GACb,iBAAA,GACA,OAAA,KAAY,WACV,0BAAA,GACA,aAAA;AAAA,QACN,OAAA,EAAS,eAAe,GAAA,GAAM,CAAA;AAAA,QAC9B,OAAA,EACE,OAAA,KAAY,QAAA,GACR,qCAAA,GACA,MAAA;AAAA,QACN,UAAA,EAAY,2CAAA;AAAA,QACZ,SAAA,EAAW;AAAA,UACT,eAAA,EAAiB,aAAa,iBAAA,GAAoB;AAAA,SACpD;AAAA,QACA,4BAAA,EAA8B,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QAC3C,UAAA,EAAY;AAAA;AACd,KAAA;AAAA,IAEC,WAAA,mBACCjB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,WAAW,UAAA,GAAa,QAAA;AAAA,QACpC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,QACvB,CAAA;AAAA,QACA,IAAI,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,QAAQ,SAAA;AAAU,OAAA;AAAA,MAE9D,QAAA,mBAAWlB,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAS,OAAA,EAAQ,CAAA,mBAAKA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,UAAS,OAAA,EAAQ;AAAA,KAC/E,mBAEAA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,KAAA,EAAO,EAAA,EAAG,EAAG,CAAA;AAAA,oBAE1BlB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,KAAA,EAAO,aAAa,cAAA,GAAiB,gBAAA;AAAA,UACrC,UAAA,EAAY;AAAA;AACd,OAAA;AAAA,MAEC,IAAA,CAAK;AAAA,KACR;AAAA,oBACAlB,OAAAA,CAAA,aAAA;AAAA,MAACoB,UAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,EAAA,EAAI;AAAA,UACF,UAAA,EAAY,GAAA;AAAA,UACZ,KAAA,EAAO,aAAa,cAAA,GAAiB,cAAA;AAAA,UACrC,UAAA,EAAY;AAAA;AACd,OAAA;AAAA,MAEC,IAAA,CAAK;AAAA,KACR;AAAA,IACC,IAAA,CAAK,OAAA,oBACJpB,OAAAA,CAAA,aAAA;AAAA,MAACoB,UAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,OAAA;AAAA,QACR,EAAA,EAAI;AAAA,UACF,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU,QAAA;AAAA,UACV,YAAA,EAAc,UAAA;AAAA,UACd,UAAA,EAAY,QAAA;AAAA,UACZ,IAAA,EAAM,CAAA;AAAA,UACN,QAAA,EAAU;AAAA;AACZ,OAAA;AAAA,MACD,SAAA;AAAA,MACI,IAAA,CAAK;AAAA,KACV;AAAA,IAED,OAAA,oBACCpB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mBAAA;AAAA,QACV,EAAA,EAAI;AAAA,UACF,OAAA,EAAS,MAAA;AAAA,UACT,EAAA,EAAI,MAAA;AAAA,UACJ,OAAA,EAAS,aAAa,CAAA,GAAI,CAAA;AAAA,UAC1B,UAAA,EAAY;AAAA;AACd,OAAA;AAAA,sBAEAlB,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAM,SAAA,EAAA,kBACbnF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,QAACsF,UAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,UAAU,CAAC,SAAA;AAAA,UACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,UAAA,CAAW,EAAE,CAAA;AAAA,UACf,CAAA;AAAA,UACA,YAAA,EAAY,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,GAAA,CAAA;AAAA,UAC9B,EAAA,EAAI,EAAE,CAAA,EAAG,IAAA;AAAK,SAAA;AAAA,wBAEdtF,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAgB,UAAS,OAAA,EAAQ;AAAA,OAEtC,CACF,CAAA;AAAA,sBACAA,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAM,WAAA,EAAA,kBACbnF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,QAACsF,UAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,UAAU,CAAC,WAAA;AAAA,UACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,UAAA,CAAW,CAAC,CAAA;AAAA,UACd,CAAA;AAAA,UACA,YAAA,EAAY,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,KAAA,CAAA;AAAA,UAC9B,EAAA,EAAI,EAAE,CAAA,EAAG,IAAA;AAAK,SAAA;AAAA,wBAEdtF,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAkB,UAAS,OAAA,EAAQ;AAAA,OAExC,CACF;AAAA;AACF,GAEJ,EACC,YAAY,OAAA,oBAAWA,QAAA,aAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAc,CAClD,CAAA,EACC,WAAA,IAAe,4BACdA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,IAAA,EACE,IAAA,CAAK,SAAU,GAAA,CAAI,CAAC,KAAA,qBACnBlB,OAAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAK,KAAA,CAAM,EAAA;AAAA,MACX,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,GAAQ,CAAA;AAAA,MACf,eAAA;AAAA,MACA,QAAA,EAAUW,SAAAA;AAAA,MACV,QAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AAAA,GAEH,CACH,CAEJ,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,KAAA,EAAM,EAAsB;AAC9C,EAAA,uBACEX,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,UAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KAAA;AAAA,oBAEAlB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,QAAA,EAAU,UAAA;AAAA,UACV,IAAA,EAAM,CAAA,EAAG,KAAA,GAAQ,EAAA,GAAK,EAAE,CAAA,EAAA,CAAA;AAAA,UACxB,KAAA,EAAO,CAAA;AAAA,UACP,GAAA,EAAK,EAAA;AAAA,UACL,MAAA,EAAQ,CAAA;AAAA,UACR,eAAA,EAAiB,cAAA;AAAA,UACjB,YAAA,EAAc,CAAA;AAAA,UACd,aAAA,EAAe;AAAA;AACjB;AAAA;AACF,GACF;AAEJ;AC3iBe,SAAR,uBAAA,CAAyC;AAAA,EAC9C,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAiC;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIF,SAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC1E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtC,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,mBAAA,GAAsB,uBAAuB,IAAA,KAAS,QAAA,GAAW,YAAA,GAAe,cAAc,CAAC,CAAA;AAC5I,MAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAA,EAAa,IAAI,CAAC,CAAA;AAE5B,EAAA,MAAM,WAAW,MAAqB;AACpC,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,CAAA,CAAE,8BAA8B,kBAAkB,CAAA;AACvE,IAAA,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAY,KAAM,OAAA,CAAQ,WAAA,EAAa,CAAA,EAAG;AACxE,MAAA,OAAO,IAAA,KAAS,WACZ,CAAA,CAAE,2BAAA,EAA6B,wCAAwC,CAAA,GACvE,CAAA,CAAE,+BAA+B,0CAA0C,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,eAAe,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/B,IAAA,MAAM,MAAM,QAAA,EAAS;AACrB,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,MAAM,QAAA,CAAS,IAAA,CAAK,IAAA,IAAQ,eAAe,CAAA;AACtD,MAAA,IAAI,IAAI,OAAA,EAAQ;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,aAAa,CAAA;AAE7D,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACmG,MAAAA,EAAA,EAAO,MAAY,OAAA,EAAS,IAAA,GAAO,MAAA,GAAY,OAAA,EAAS,QAAA,EAAS,IAAA,EAAK,WAAS,IAAA,EAAA,kBAC9EnG,OAAAA,CAAA,aAAA,CAACoG,WAAAA,EAAA,IAAA,EACE,IAAA,KAAS,QAAA,GACN,CAAA,CAAE,qBAAA,EAAuB,YAAY,CAAA,GACrC,CAAA,CAAE,uBAAA,EAAyB,cAAc,CAC/C,CAAA,kBACApG,OAAAA,CAAA,aAAA,CAACqG,aAAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EAAA,kBACrBrG,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,SAAQ,WAAA,EAAY,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EAAA,EACzC,CAAA,CAAE,mBAAA,EAAqB,YAAY,CACtC,CAAA,kBACApB,OAAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAK,IAAA;AAAA,MACL,EAAA,EAAI;AAAA,QACF,EAAA,EAAI,CAAA;AAAA,QACJ,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,SAAA;AAAA,QACb,YAAA,EAAc,CAAA;AAAA,QACd,EAAA,EAAI,CAAA;AAAA,QACJ,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACb,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,UAAU,eAAA,KAAoB,IAAA;AAAA,QAC9B,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAI;AAAA,OAAA;AAAA,sBAEtCA,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAY,QAAA,EAAU,GAAA,EAAK,KAAK,IAAA,EAAM,CAAA,sBAChElB,OAAAA,CAAA,cAAC,uBAAA,EAAA,EAAwB,QAAA,EAAS,SAAQ,EAAA,EAAI,EAAE,OAAO,gBAAA,EAAiB,EAAG,mBAC3EA,OAAAA,CAAA,cAACsG,YAAAA,EAAA,EAAa,SAAS,CAAA,CAAE,oBAAA,EAAsB,OAAO,CAAA,EAAG,SAAA,EAAW,EAAE,mBAAA,EAAqB,2BAA2B,GAAG,CAC3H;AAAA,KACF;AAAA,IACC,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,qBACbtG,OAAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAK,CAAA,CAAE,EAAA;AAAA,QACP,QAAA,EAAU,oBAAoB,CAAA,CAAE,EAAA;AAAA,QAChC,OAAA,EAAS,MAAM,kBAAA,CAAmB,CAAA,CAAE,EAAE;AAAA,OAAA;AAAA,sBAEtCA,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,UAAU,GAAA,EAAK,GAAA,EAAK,MAAM,CAAA,EAAE,EAAA,kBAClElB,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,SAAQ,EAAA,EAAI,EAAE,OAAO,gBAAA,EAAiB,EAAG,mBACvEA,OAAAA,CAAA,aAAA,CAACsG,YAAAA,EAAA,EAAa,OAAA,EAAS,CAAA,CAAE,MAAM,SAAA,EAAW,CAAA,CAAE,aAAa,CAC3D;AAAA,KAEH;AAAA,GACH,kBACAtG,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAA;AAAA,MACpC,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,MAAA,EAAO;AAAA,MACvC,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACtB,QAAA,IAAI,KAAA,WAAgB,IAAI,CAAA;AAAA,MAC1B,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,EAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,IAAA,OAAW,YAAA,EAAa;AAAA,MACpD,CAAA;AAAA,MACA,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,MACpB,YAAY,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,GAAA;AAAA,MACrB,QAAA,EAAU;AAAA;AAAA,GAEd,mBACA3B,OAAAA,CAAA,cAACuG,aAAAA,EAAA,IAAA,kBACCvG,OAAAA,CAAA,aAAA,CAACyB,QAAAA,EAAA,EAAO,OAAA,EAAS,OAAA,EAAS,UAAU,IAAA,EAAA,EACjC,CAAA,CAAE,iBAAiB,QAAQ,CAC9B,CAAA,kBACAzB,OAAAA,CAAA,aAAA,CAACyB,UAAA,EAAO,OAAA,EAAQ,aAAY,OAAA,EAAS,YAAA,EAAc,UAAU,IAAA,EAAA,EAC1D,IAAA,GACG,CAAA,CAAE,iBAAA,EAAmB,gBAAW,CAAA,GAChC,SAAS,QAAA,GACP,CAAA,CAAE,wBAAwB,eAAe,CAAA,GACzC,EAAE,wBAAA,EAA0B,iBAAiB,CACrD,CACF,CACF,CAAA;AAEJ;ACnIe,SAAR,YAAA,CAA8B;AAAA,EACnC,IAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAc,EAAC;AAAA,EACf,aAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIT,SAAS,WAAW,CAAA;AAC5C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAmB,WAAW,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAElD,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,MAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAA,EAAa,WAAW,CAAC,CAAA;AAEnC,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,OAAA,GAAU,SAAS,IAAA,EAAK;AAC9B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAACyD,EAAAA,KAAMA,EAAAA,CAAE,aAAY,KAAM,OAAA,CAAQ,WAAA,EAAa,CAAA,EAAG;AAC/D,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,CAAC,GAAG,IAAA,EAAM,OAAO,CAAC,CAAA;AAC1B,IAAA,WAAA,CAAY,EAAE,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgB,OAAA,CAAQ,IAAA,CAAK,OAAO,CAACA,EAAAA,KAAMA,EAAAA,KAAM,GAAG,CAAC,CAAA;AAExE,EAAA,MAAM,aAAA,GACJ,IAAA,CAAK,MAAA,KAAW,WAAA,CAAY,MAAA,IAC5B,IAAA,CAAK,KAAA,CAAM,CAACA,EAAAA,EAAG,CAAA,KAAMA,EAAAA,KAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAE3C,EAAA,MAAM,eAAe,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/B,IAAA,MAAM,WAAA,GAAc,KAAK,IAAA,EAAK;AAC9B,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,QAAA,CAAS,CAAA,CAAE,oBAAA,EAAsB,qBAAqB,CAAC,CAAA;AACvD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,cAAc,WAAA,KAAgB,WAAA;AACpC,IAAA,IAAI,WAAA,IAAe,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,WAAA,CAAY,WAAA,EAAa,CAAA,EAAG;AAC3F,MAAA,QAAA,CAAS,CAAA,CAAE,oBAAA,EAAsB,0CAA0C,CAAC,CAAA;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,eAAe,aAAA,EAAe;AACjC,MAAA,OAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,WAAA,EAAa,EAAE,IAAA,EAAM,CAAA;AACpC,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,CAAC,CAAA;AACnD,MAAA,QAAA,CAAS,CAAA,CAAE,sBAAA,EAAwB,mCAAmC,CAAC,CAAA;AAAA,IACzE,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACEhF,OAAAA,CAAA,aAAA,CAACmG,MAAAA,EAAA,EAAO,IAAA,EAAY,OAAA,EAAS,UAAA,GAAa,MAAA,GAAY,OAAA,EAAS,QAAA,EAAS,IAAA,EAAK,WAAS,IAAA,EAAA,kBACpFnG,OAAAA,CAAA,aAAA,CAACoG,WAAAA,EAAA,IAAA,EAAa,CAAA,CAAE,cAAA,EAAgB,cAAc,CAAE,CAAA,kBAChDpG,OAAAA,CAAA,aAAA,CAACqG,aAAAA,EAAA,IAAA,kBACCrG,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAO,OAAA;AAAA,MACP,KAAA,EAAO,CAAA,CAAE,mBAAA,EAAqB,MAAM,CAAA;AAAA,MACpC,SAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACtB,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,MACT,YAAY,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,GAAA;AAAA,MACrB,QAAA,EAAU,UAAA;AAAA,MACV,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,YAAY,YAAA,EAAa;AAAA,MACrD;AAAA;AAAA,GACF,kBACA3B,OAAAA,CAAA,aAAA,CAACoB,YAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,KAAA,EAAO,kBAAkB,OAAA,EAAS,OAAA,EAAS,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,GAAA,MACvF,CAAA,CAAE,aAAA,EAAe,MAAM,CAC1B,CAAA,EACC,IAAA,CAAK,SAAS,CAAA,mBACbpB,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,GAAA,EAAK,EAAA,EAAI,EAAE,UAAU,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,CAAA,EAAE,EAAA,EAC1E,KAAK,GAAA,CAAI,CAAC,GAAA,qBACTjB,OAAAA,CAAA,aAAA;AAAA,IAACuF,IAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAO,GAAA;AAAA,MACP,IAAA,EAAK,OAAA;AAAA,MACL,QAAA,EAAU,UAAA,GAAa,MAAA,GAAY,MAAM,UAAU,GAAG;AAAA;AAAA,GAEzD,CACH,CAAA,mBAEAvF,OAAAA,CAAA,cAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,EAAA,EAAI,EAAE,OAAO,eAAA,EAAiB,OAAA,EAAS,OAAA,EAAS,EAAA,EAAI,CAAA,EAAE,EAAA,EACjF,CAAA,CAAE,gBAAA,EAAkB,cAAc,CACrC,CAAA,kBAEFpB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,CAAA,CAAE,wBAAA,EAA0B,2BAA2B,CAAA;AAAA,MACpE,KAAA,EAAO,QAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC3C,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,MAAA,EAAO;AAAA,QACT,CAAA,MAAA,IAAW,EAAE,GAAA,KAAQ,WAAA,IAAe,CAAC,QAAA,IAAY,IAAA,CAAK,SAAS,CAAA,EAAG;AAChE,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,SAAA,CAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,YAAA,kBACE3B,OAAAA,CAAA,aAAA,CAACiF,gBAAA,EAAe,QAAA,EAAS,KAAA,EAAA,kBACvBjF,OAAAA,CAAA,aAAA;AAAA,UAACyB,QAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,CAAC,QAAA,CAAS,IAAA,EAAK,IAAK,UAAA;AAAA,YAC9B,2BAAWzB,OAAAA,CAAA,cAACkF,WAAAA,EAAA,EAAY,UAAS,OAAA,EAAQ,CAAA;AAAA,YACzC,EAAA,EAAI,EAAE,aAAA,EAAe,MAAA;AAAO,WAAA;AAAA,UAE3B,CAAA,CAAE,cAAc,KAAK;AAAA,SAE1B;AAAA;AAEJ;AAAA,GACF,kBACAlF,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,SAAA,EAAW,CAAA,EAAE,EAAG,CAC7B,CAAA,kBACAlB,OAAAA,CAAA,aAAA,CAACuG,aAAAA,EAAA,IAAA,kBACCvG,OAAAA,CAAA,aAAA,CAACyB,QAAAA,EAAA,EAAO,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,UAAA,EAAA,EACjC,EAAE,eAAA,EAAiB,QAAQ,CAC9B,CAAA,kBACAzB,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,YAAA;AAAA,MACT,OAAA,EAAQ,WAAA;AAAA,MACR,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,EAAK,IAAK;AAAA,KAAA;AAAA,IAEzB,aAAa,CAAA,CAAE,eAAA,EAAiB,cAAS,CAAA,GAAI,CAAA,CAAE,eAAe,MAAM;AAAA,GAEzE,CACF,CAAA;AAEJ;AC9Je,SAAR,kBAAA,CAAoC;AAAA,EACzC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA,GAAc,EAAA;AAAA,EACd,OAAO,aAAA,GAAgB,IAAA;AAAA,EACvB,IAAA,GAAO;AACT,CAAA,EAA4B;AAC1B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIT,SAAS,WAAW,CAAA;AAC5D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AAGtD,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,eAAA,CAAgB,WAAW,CAAA;AAC3B,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,WAAW,CAAC,CAAA;AAGtB,EAAA,MAAM,eAAe,aAAA,IAAiB,aAAA;AAEtC,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AACnE,IAAA,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAE9B,IAAA,IAAI,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK,EAAG;AACzB,MAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA,IACrB;AAGA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAa,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC7B,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG;AACxB,MAAA,gBAAA,CAAiB,CAAA,CAAE,8BAAA,EAAgC,8BAA8B,CAAC,CAAA;AAClF,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAGlC,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,QAAA,MAAM,UAAU,MAAM,MAAA;AACtB,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,UAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA,MAAA,IAAW,WAAW,KAAA,EAAO;AAE3B,QAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,QAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAAA,IAC/C,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAACmG,MAAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA,EAAS,YAAA;AAAA,MACT,QAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAS;AAAA,KAAA;AAAA,oBAETnG,OAAAA,CAAA,aAAA,CAACoG,WAAAA,EAAA,MACE,IAAA,KAAS,KAAA,GACN,CAAA,CAAE,uBAAA,EAAyB,uBAAuB,CAAA,GAClD,CAAA,CAAE,mBAAA,EAAqB,wBAAwB,CACrD,CAAA;AAAA,oBACApG,OAAAA,CAAA,aAAA,CAACqG,aAAAA,EAAA,IAAA,kBACCrG,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EAAA,kBACflB,OAAAA,CAAA,aAAA;AAAA,MAAC2B,SAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAO,OAAA;AAAA,QACP,EAAA,EAAG,eAAA;AAAA,QACH,KAAA,EAAO,CAAA,CAAE,wBAAA,EAA0B,eAAe,CAAA;AAAA,QAClD,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAQ,UAAA;AAAA,QACR,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,MAAA,EAAO;AAAA,QACvC,KAAA,EAAO,CAAC,CAAC,YAAA;AAAA,QACT,UAAA,EAAY,YAAA;AAAA,QACZ,UAAA,EAAY,CAAC,CAAA,KAAM;AACjB,UAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,IAAW,YAAA,CAAa,MAAK,IAAK,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc;AAC9E,YAAA,UAAA,EAAW;AAAA,UACb;AAAA,QACF,CAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KAEd,CACF,CAAA;AAAA,oBACA3B,QAAA,aAAA,CAACuG,aAAAA,EAAA,sBACCvG,OAAAA,CAAA,cAACyB,QAAAA,EAAA,EAAO,SAAS,YAAA,EAAc,QAAA,EAAU,gBAAe,CAAA,CAAE,eAAA,EAAiB,QAAQ,CAAE,CAAA,kBACrFzB,OAAAA,CAAA,aAAA;AAAA,MAACyB,QAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAQ,WAAA;AAAA,QACR,KAAA,EAAM,SAAA;AAAA,QACN,UAAU,CAAC,YAAA,CAAa,MAAK,IAAK,CAAC,CAAC,YAAA,IAAgB;AAAA,OAAA;AAAA,MAEnD,YAAA,GACG,CAAA,CAAE,oBAAA,EAAsB,WAAW,CAAA,GACnC,IAAA,KAAS,KAAA,GACP,CAAA,CAAE,oBAAA,EAAsB,QAAQ,CAAA,GAChC,CAAA,CAAE,oBAAoB,MAAM;AAAA,KAEtC;AAAA,GACF;AAEJ;;;AC1JA,IAAM,mBAAA,GAA4C;AAAA,EAChD,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,aAAA,EAAe,SAAA;AAAA,MACf,WAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAW,SAAA;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,aAAa;AAAC;AAChB;AAEJ,CAAA;AAEA,IAAO,2BAAA,GAAQ,mBAAA;;;ACoBR,IAAM,oBAAA,GAAuB,GAAA;AAKpC,IAAM,qBAAqB,OAAyB;AAAA,EAClD,EAAA,EAAI,aAAA;AAAA,EACJ,IAAA,EAAM,CAAA,CAAE,YAAA,EAAc,aAAa,CAAA;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,CAAA,CAAE,mBAAA,EAAqB,8CAA8C;AACpF,CAAA,CAAA;AAIA,IAAM,YAAA,GAA8E;AAAA,EAClF,EAAE,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,mBAAA,EAAqB,UAAU,cAAA,EAAe;AAAA,EAC9E,EAAE,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,uBAAA,EAAyB,UAAU,kBAAA,EAAmB;AAAA,EACtF,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,UAAU,iBAAA;AACpD,CAAA;AAEA,SAAS,gBAAA,CAAiB,CAAA,EAAqB,CAAA,EAAqB,GAAA,EAAsB;AACxF,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAA;AAAA,EACpC;AACA,EAAA,MAAM,EAAA,GAAK,EAAE,GAAG,CAAA;AAChB,EAAA,MAAM,EAAA,GAAK,EAAE,GAAG,CAAA;AAChB,EAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,EAAI,OAAO,CAAA;AACvB,EAAA,IAAI,CAAC,IAAI,OAAO,CAAA;AAChB,EAAA,IAAI,CAAC,IAAI,OAAO,EAAA;AAChB,EAAA,OAAO,IAAI,IAAA,CAAK,EAAE,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,CAAA,CAAE,OAAA,EAAQ;AACvD;AAqBe,SAAR,aAAA,CAA+B;AAAA,EACpC,aAAA,GAAgB,GAAA;AAAA,EAChB,YAAA,GAAe,GAAA;AAAA,EACf,OAAA,GAAU,IAAA;AAAA,EACV,WAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAuB;AAnGvB,EAAA,IAAA,EAAA,EAAA,EAAA;AAoGE,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,EAAA,MAAM,EAAE,kBAAA,EAAoB,YAAA,EAAc,eAAA,KAAoB,cAAA,EAAe;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AAEpC,EAAA,MAAM,CAAC,SAAS,UAAU,CAAA,GAAIT,SAA6B,CAAC,kBAAA,EAAoB,CAAC,CAAA;AACjF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAA6B,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAExE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAA8C,WAAW,CAAA;AACnG,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAkB,WAAW,CAAA;AAC3D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,QAAAA,CAAmB,EAAE,CAAA;AAEzD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAkC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwE,IAAI,CAAA;AACtH,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAuC,IAAI,CAAA;AAG/E,EAAA,MAAM,kBAAA,GAAqB,CAAO,UAAA,KAAuB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACvD,IAAA,IAAI,eAAe,aAAA,EAAe;AAChC,MAAA,OAAO,2BAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,aAAa,UAAU,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA;AAGA,EAAA,MAAM,WAAW,CAAC,KAAA,EAA2B,QAAA,KAC3C,KAAA,CAAM,IAAI,CAAC,IAAA,KAAU,IAAA,CAAK,IAAA,GAAO,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,UAAS,CAAE,CAAA;AAGtE,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,iBAAA,IAAqB,CAAC,WAAA,EAAa;AACpD,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,WAAA,EAAY,CACT,IAAA,CAAK,CAAC,OAAA,KAAY;AACjB,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,EAAS,QAAQ,CAAA;AAC7C,MAAA,MAAM,gBAAgB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,aAAa,CAAA;AACnE,MAAA,UAAA,CAAW,gBAAgB,UAAA,GAAa,CAAC,oBAAmB,EAAG,GAAG,UAAU,CAAC,CAAA;AAAA,IAC/E,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAC9C,MAAA,UAAA,CAAW,CAAC,kBAAA,EAAoB,CAAC,CAAA;AAAA,IACnC,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAAA,EAC3C,CAAA,EAAG,CAAC,OAAA,EAAS,iBAAA,EAAmB,WAAW,CAAC,CAAA;AAG5C,EAAA,MAAM,mBAAmB,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnC,IAAA,IAAI,CAAC,aAAA,EAAe;AACpB,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,aAAA,EAAc;AACpC,MAAA,YAAA,CAAa,QAAA,CAAS,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,MAAA,iBAAA,CAAkB,0BAA0B,CAAA;AAAA,IAC9C,CAAA,SAAE;AACA,MAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,CAAA;AAKA,EAAA,MAAM,gBAAA,GAAmB,CAAC,EAAA,EAAY,IAAA,EAAc,MAAoB,IAAA,KAAoB;AAC1F,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,MAAM,GAAA,GAAwB,EAAE,EAAA,EAAI,IAAA,EAAM,MAAM,IAAA,EAAM,SAAA,EAAW,GAAA,EAAK,SAAA,EAAW,GAAA,EAAI;AACrF,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,UAAA,CAAW,CAAC,IAAA,KAAU,IAAA,CAAK,IAAA,CAAK,CAACyD,EAAAA,KAAMA,EAAAA,CAAE,EAAA,KAAO,EAAE,IAAI,IAAA,GAAO,CAAC,GAAG,IAAA,EAAM,GAAG,CAAE,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,CAAC,IAAA,KAAU,IAAA,CAAK,IAAA,CAAK,CAACA,EAAAA,KAAMA,EAAAA,CAAE,EAAA,KAAO,EAAE,IAAI,IAAA,GAAO,CAAC,GAAG,IAAA,EAAM,GAAG,CAAE,CAAA;AAAA,IAChF;AAAA,EACF,CAAA;AAEA,EAAAzD,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,aAAA,EAAe;AAChC,IAAA,gBAAA,EAAiB;AAAA,EAEnB,CAAA,EAAG,CAAC,OAAA,EAAS,aAAa,CAAC,CAAA;AAG3B,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAa;AAC5B,MAAA,MAAM,SAAU,CAAA,CAAsC,MAAA;AACtD,MAAA,IAAI,KAAA,CAAM,QAAQ,MAAM,CAAA,eAAgB,QAAA,CAAS,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,IACtE,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,uBAAuB,OAAO,CAAA;AACtD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,qBAAA,EAAuB,OAAO,CAAA;AAAA,EACxE,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAIhB,QAAQ,MAAM;AACjD,IAAA,MAAM,IAAA,uBAAW,GAAA,EAA8B;AAC/C,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AACzC,IAAA,KAAA,MAAWyE,MAAK,SAAA,EAAW,IAAA,CAAK,GAAA,CAAIA,EAAAA,CAAE,IAAIA,EAAC,CAAA;AAC3C,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AACpC,IAAA,OAAO;AAAA,MACL,cAAc,GAAA,CAAI,MAAA,CAAO,CAACA,EAAAA,KAAMA,EAAAA,CAAE,SAAS,UAAU,CAAA;AAAA,MACrD,YAAY,GAAA,CAAI,MAAA,CAAO,CAACA,EAAAA,KAAMA,EAAAA,CAAE,SAAS,QAAQ;AAAA,KACnD;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAEvB,EAAA,MAAM,OAAA,GAAUzE,QAAQ,MAAM;AAlNhC,IAAA,IAAAyC,GAAAA,EAAAC,GAAAA;AAmNI,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,IAAA,KAAA,MAAW+B,EAAAA,IAAK,YAAA,EAAc,CAAAhC,GAAAA,GAAAgC,EAAAA,CAAE,IAAA,KAAF,IAAA,GAAA,MAAA,GAAAhC,GAAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAI,GAAG,CAAA,CAAA;AAClE,IAAA,KAAA,MAAW,CAAA,IAAK,UAAA,EAAY,CAAAC,GAAAA,GAAA,CAAA,CAAE,IAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAI,GAAG,CAAA,CAAA;AAChE,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EAC9B,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAA,MAAM,oBAAA,GAAuB1C,QAAQ,MAAM;AACzC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACvC,IAAA,OAAO,CAACyE,EAAAA,KAAwB;AAC9B,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,QAAA,GAAW,CAACA,EAAAA,CAAE,IAAA,EAAMA,GAAE,WAAA,EAAaA,EAAAA,CAAE,OAAO,CAAA,CAC/C,OAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,EACR,WAAA,EAAY;AACf,QAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,IAAI,GAAG,OAAO,KAAA;AAAA,MACvC;AACA,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,IAAI,CAACA,EAAAA,CAAE,IAAA,IAAQA,GAAE,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,KAAA;AAC3C,QAAA,IAAI,CAAC,UAAA,CAAW,KAAA,CAAM,CAAC,GAAA,KAAQA,EAAAA,CAAE,IAAA,CAAM,QAAA,CAAS,GAAG,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,MAChE;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAEvB,EAAA,MAAM,iBAAA,GAAoBzE,OAAAA;AAAA,IACxB,MAAM,YAAA,CAAa,MAAA,CAAO,oBAAoB,EAAE,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,IACtG,CAAC,YAAA,EAAc,oBAAA,EAAsB,OAAO;AAAA,GAC9C;AAEA,EAAA,MAAM,eAAA,GAAkBA,OAAAA;AAAA,IACtB,MAAM,UAAA,CAAW,MAAA,CAAO,oBAAoB,EAAE,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,gBAAA,CAAiB,CAAA,EAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,IACpG,CAAC,UAAA,EAAY,oBAAA,EAAsB,OAAO;AAAA,GAC5C;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgB;AACjC,IAAA,aAAA,CAAc,CAAC,IAAA,KAAU,IAAA,CAAK,QAAA,CAAS,GAAG,IAAI,IAAA,CAAK,MAAA,CAAO,CAACyE,EAAAA,KAAMA,OAAM,GAAG,CAAA,GAAI,CAAC,GAAG,IAAA,EAAM,GAAG,CAAE,CAAA;AAAA,EAC/F,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,QAAA,KAA+B;AACtD,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,CAAC,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACX,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AACjD,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,WAAA,CAAY,sCAAsC,CAAA;AAClD,UAAA;AAAA,QACF;AACA,QAAA,YAAA,CAAa,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,OAAA,CAAA,EAAW,IAAI,CAAA;AAC5C,QAAA,WAAA,CAAY,qBAAqB,CAAA;AAAA,MACnC,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,CAAC,CAAA;AAC9C,QAAA,WAAA,CAAY,4BAA4B,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA,CAAA,GAAG;AACE,EACP,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAA+B;AACnD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,CAAQ,WAAW,QAAA,CAAS,IAAI,2BAA2B,CAAA,EAAG;AAC1E,IAAA,cAAA,CAAe,SAAS,EAAE,CAAA;AAC1B,IAAA,WAAA,CAAY,kBAAkB,CAAA;AAAA,EAChC,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAO,OAAA,EAAiB,IAAA,KAA+B,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AApRpF,IAAA,IAAAhC,GAAAA,EAAAC,GAAAA;AAqRI,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,cAAA,EAAgB;AACtC,IAAA,MAAM,cAAA,CAAe,YAAA,CAAa,EAAA,EAAI,OAAA,EAAS,IAAI,CAAA;AACnD,IAAA,MAAM,OAAA,GAAA,CAAUA,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAA,KAAN,IAAA,GAAAA,GAAAA,GAAc,YAAA,CAAa,IAAA,KAA3B,IAAA,GAAAC,GAAAA,GAAmC,EAAC;AAGpD,IAAA,MAAM,KAAA,GAAQ,CAAC+B,EAAAA,KACbA,EAAAA,CAAE,OAAO,YAAA,CAAa,EAAA,GAAK,aAAA,CAAA,cAAA,CAAA,EAAA,EAAKA,EAAAA,CAAAA,EAAL,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAQ,CAAA,GAAIA,EAAAA;AACtE,IAAA,YAAA,CAAa,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AACtC,IAAA,UAAA,CAAW,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,iBAAA,KAAsB,aAAa,EAAA,EAAI;AACzC,MAAA,kBAAA,CAAmB,YAAA,CAAa,EAAA,EAAI,OAAA,EAAS,MAAA,EAAW,OAAO,CAAA;AAAA,IACjE;AACA,IAAA,WAAA,CAAY,eAAe,CAAA;AAAA,EAC7B,CAAA,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,EAAA,EAAY,IAAA,KAAuB;AAC1D,IAAA,YAAA,CAAa,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,CAACA,EAAAA,KAAOA,EAAAA,CAAE,EAAA,KAAO,EAAA,GAAK,iCAAKA,EAAAA,CAAAA,EAAL,EAAQ,IAAA,EAAK,CAAA,GAAIA,EAAE,CAAC,CAAA;AAC1E,IAAA,UAAA,CAAW,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,CAACA,EAAAA,KAAOA,EAAAA,CAAE,EAAA,KAAO,EAAA,GAAK,iCAAKA,EAAAA,CAAAA,EAAL,EAAQ,IAAA,EAAK,CAAA,GAAIA,EAAE,CAAC,CAAA;AAAA,EAC1E,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,EAA4B,IAAA,KAAuB;AACxE,IAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,IAAA,CAAC,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACX,MAAA,IAAI;AACF,QAAA,MAAM,eAAA,CAAgB,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA;AACvC,QAAA,eAAA,CAAgB,QAAA,CAAS,IAAI,IAAI,CAAA;AACjC,QAAA,IAAI,iBAAA,KAAsB,SAAS,EAAA,EAAI;AACrC,UAAA,kBAAA,CAAmB,QAAA,CAAS,EAAA,EAAI,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,QACrD;AACA,QAAA,WAAA,CAAY,IAAA,KAAS,QAAA,GAAW,oBAAA,GAAuB,qBAAqB,CAAA;AAAA,MAC9E,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAChD,QAAA,WAAA,CAAY,8BAA8B,CAAA;AAAA,MAC5C;AAAA,IACF,CAAA,CAAA,GAAG;AAAA,EACL,CAAA;AAEA,EAAA,MAAM,yBAAA,GAA4B,CAAC,MAAA,KAA6B;AAC9D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,CAAC,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACX,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB,MAAA,CAAO,EAAE,CAAA;AAClD,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,WAAA,CAAY,uBAAuB,CAAA;AACnC,UAAA;AAAA,QACF;AACA,QAAA,aAAA,CAAc,OAAO,CAAA;AACrB,QAAA,gBAAA,CAAiB,EAAE,OAAA,EAAS,WAAA,EAAa,GAAG,MAAA,CAAO,IAAI,WAAW,CAAA;AAAA,MACpE,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,CAAC,CAAA;AAC5C,QAAA,WAAA,CAAY,0BAA0B,CAAA;AAAA,MACxC;AAAA,IACF,CAAA,CAAA,GAAG;AAAA,EACL,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAO,YAAA,KAA2C,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC3E,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,aAAA,EAAe,OAAO,KAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,CAACA,EAAAA,KAAMA,EAAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,YAAA,CAAa,WAAA,EAAa,CAAA;AAC1F,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,WAAA,CAAY,0CAA0C,CAAA;AACtD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA;AAC9B,MAAA,MAAM,EAAE,IAAI,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,YAAA,EAAc,gBAAA,CAAiB,OAAO,CAAC,CAAA;AACzE,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,kBAAA,CAAmB,EAAA,EAAI,MAAM,UAAU,CAAA;AACvC,MAAA,eAAA,CAAgB,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,UAAU,CAAA;AAC7C,MAAA,WAAA,CAAY,uBAAuB,CAAA;AACnC,MAAA,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA;AACtC,MAAA,MAAM,gBAAA,EAAiB;AACvB,MAAA,gBAAA,CAAiB,EAAA,EAAI,MAAM,UAAU,CAAA;AACrC,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAC3C,MAAA,WAAA,CAAY,yBAAyB,CAAA;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAgC;AACrD,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAC7B,IAAA,EACA,SAAA,KACqB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACrB,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,MAAM,OAAO,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,UAAA;AAC3B,IAAA,IAAI;AACF,MAAA,IAAI,OAAA,GAAuC,2BAAA;AAC3C,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,OAAA,GAAU,MAAM,mBAAmB,SAAS,CAAA;AAC5C,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,WAAA,CAAY,oCAAoC,CAAA;AAChD,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,MAAM,EAAE,IAAI,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,OAAO,CAAC,CAAA;AACjE,MAAA,IAAI,IAAA,KAAS,YAAY,eAAA,EAAiB;AACxC,QAAA,IAAI;AACF,UAAA,MAAM,eAAA,CAAgB,IAAI,QAAQ,CAAA;AAClC,UAAA,eAAA,CAAgB,IAAI,QAAQ,CAAA;AAAA,QAC9B,SAAS,CAAA,EAAG;AACV,UAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,CAAC,CAAA;AAAA,QACtD;AAAA,MACF;AACA,MAAA,aAAA,CAAc,OAAO,CAAA;AACrB,MAAA,kBAAA,CAAmB,EAAA,EAAI,MAAM,IAAI,CAAA;AACjC,MAAA,eAAA,CAAgB,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,IAAI,CAAA;AACvC,MAAA,WAAA,CAAY,IAAA,KAAS,QAAA,GAAW,oBAAA,GAAuB,sBAAsB,CAAA;AAC7E,MAAA,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA;AACtC,MAAA,MAAM,gBAAA,EAAiB;AACvB,MAAA,gBAAA,CAAiB,EAAA,EAAI,MAAM,IAAI,CAAA;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,mBAAmB,CAAC,CAAA;AAClC,MAAA,WAAA,CAAY,gBAAgB,CAAA;AAC5B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAgB,SAAA,CAAU,GAAA,CAAI,CAACA,EAAAA,KAAMA,GAAE,IAAI,CAAA;AAEjD,EAAA,uBACEhF,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAACwG,MAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM,iBAAA;AAAA,MACN,YAAY,EAAE,KAAA,EAAO,EAAE,QAAA,EAAU,YAAW,EAAE;AAAA,MAC9C,UAAA,EAAY;AAAA,QACV,SAAA,EAAW,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA;AAAA,QACrD,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAW;AAAA,QAC9B,WAAA,EAAa;AAAA,OACf;AAAA,MACA,kBAAA,EAAoB,EAAE,KAAA,EAAO,aAAA,EAAe,MAAM,YAAA,EAAa;AAAA,MAC/D,EAAA,EAAI,EAAE,KAAA,EAAO,iBAAA,GAAoB,uBAAuB,CAAA;AAAE,KAAA;AAAA,oBAE1DxG,OAAAA,CAAA,aAAA;AAAA,MAACiB,KAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,CAAA;AAAA,QACJ,EAAA,EAAI,CAAA;AAAA,QACJ,KAAA,EAAO,oBAAA;AAAA,QACP,MAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS,GAAA;AAAA,QACT,EAAA,EAAI,EAAE,SAAA,EAAW,MAAA;AAAO,OAAA;AAAA,sBAExBjB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,UAAA,EAAW,QAAA,EAAS,cAAA,EAAe,eAAA,EAAgB,EAAA,EAAI,EAAE,IAAI,CAAA,EAAE,EAAA,kBACpFjB,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAU,IAAA,EAAA,kBACjCpB,OAAAA,CAAA,aAAA,CAAC,SAAM,EAAA,EAAG,gBAAA,EAAA,EAAiB,SAAO,CACpC,CAAA,EACC,MAAA,KAAW,aAAA,KAAkB,WAAA,IAAe,aAAA,KAAkB,SAAA,CAAA,oBAC7DA,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,aAAA,KAAkB,SAAA,GAAY,CAAA,CAAE,mBAAA,EAAqB,YAAY,CAAA,GAAI,CAAA,CAAE,qBAAA,EAAuB,cAAc,CAAA,EAAA,kBAC1HnF,OAAAA,CAAA,aAAA;AAAA,QAACsF,UAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,SAAS,MAAM,aAAA,CAAc,aAAA,KAAkB,SAAA,GAAY,WAAW,UAAU,CAAA;AAAA,UAChF,YAAA,EAAY,kBAAkB,SAAA,GAAY,CAAA,CAAE,qBAAqB,YAAY,CAAA,GAAI,CAAA,CAAE,qBAAA,EAAuB,cAAc;AAAA,SAAA;AAAA,wBAExHtF,OAAAA,CAAA,aAAA,CAACkF,WAAAA,EAAA,EAAY,UAAS,OAAA,EAAQ;AAAA,OAElC,CAEJ,CAAA;AAAA,sBAEAlF,OAAAA,CAAA,aAAA;AAAA,QAACyG,IAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,QAAA,EAAU,CAAC,CAAA,EAAG,CAAA,KAAM,iBAAiB,CAAC,CAAA;AAAA,UACtC,OAAA,EAAQ,WAAA;AAAA,UACR,EAAA,EAAI,EAAE,SAAA,EAAW,EAAA,EAAI,kBAAkB,EAAE,SAAA,EAAW,EAAA,EAAI,QAAA,EAAU,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,QAAA,EAAU,IAAG;AAAE,SAAA;AAAA,wBAE3FzG,OAAAA,CAAA,aAAA,CAAC0G,GAAAA,EAAA,EAAI,KAAA,EAAM,WAAA,EAAY,KAAA,EAAO,CAAA,CAAE,sBAAA,EAAwB,WAAW,CAAA,EAAG,QAAA,EAAU,CAAC,aAAA,EAAe,CAAA;AAAA,wBAChG1G,OAAAA,CAAA,aAAA,CAAC0G,GAAAA,EAAA,EAAI,KAAA,EAAM,SAAA,EAAU,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,SAAS,CAAA,EAAG,CAAA;AAAA,wBAChE1G,OAAAA,CAAA,aAAA,CAAC0G,GAAAA,EAAA,EAAI,KAAA,EAAM,SAAA,EAAU,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,SAAS,CAAA,EAAG;AAAA,OAClE;AAAA,MAEC,aAAA,KAAkB,SAAA,mBACjB1G,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAa,CAAA,mBAEdA,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,QAAC2B,SAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,WAAA,EAAa,kBAAkB,WAAA,GAAc,CAAA,CAAE,2BAA2B,kBAAkB,CAAA,GAAI,CAAA,CAAE,uBAAA,EAAyB,gBAAgB,CAAA;AAAA,UAC3I,KAAA,EAAO,MAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACzC,UAAA,EAAY;AAAA,YACV,cAAA,kBACE3B,OAAAA,CAAA,aAAA,CAACiF,gBAAA,EAAe,QAAA,EAAS,OAAA,EAAA,kBACvBjF,QAAA,aAAA,CAAC2G,cAAAA,EAAA,EAAe,QAAA,EAAS,SAAQ,CACnC;AAAA;AAEJ;AAAA,OACF,kBAEA3G,OAAAA,CAAA,aAAA;AAAA,QAAC2B,SAAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAM,IAAA;AAAA,UACN,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,SAAS,CAAA;AAAA,UACpC,KAAA,EAAO,OAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAgB;AAAA,SAAA;AAAA,QAEpD,YAAA,CAAa,IAAI,CAAC,GAAA,qBACjB3B,OAAAA,CAAA,aAAA,CAAC2F,UAAA,EAAS,GAAA,EAAK,IAAI,KAAA,EAAO,KAAA,EAAO,IAAI,KAAA,EAAA,EAClC,CAAA,CAAE,IAAI,QAAA,EAAU,GAAA,CAAI,QAAQ,CAC/B,CACD;AAAA,SAGF,OAAA,CAAQ,MAAA,GAAS,qBAChB3F,OAAAA,CAAA,cAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,EAAA,EAAI,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAK,GAAA,EAAI,EAAA,kBACtDjB,OAAAA,CAAA,aAAA;AAAA,QAACuF,IAAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,CAAA,CAAE,gBAAA,EAAkB,KAAK,CAAA;AAAA,UAChC,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAO,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,SAAA,GAAY,SAAA;AAAA,UAC7C,OAAA,EAAS,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,QAAA,GAAW,UAAA;AAAA,UAC9C,OAAA,EAAS,MAAM,aAAA,CAAc,EAAE;AAAA;AAAA,SAEhC,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,qBACZvF,OAAAA,CAAA,aAAA;AAAA,QAACuF,IAAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,GAAA;AAAA,UACL,KAAA,EAAO,CAAA,CAAE,CAAA,IAAA,EAAO,GAAG,IAAI,GAAG,CAAA;AAAA,UAC1B,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,EAAS,IAAA;AAAA,UACT,KAAA,EAAO,UAAA,CAAW,QAAA,CAAS,GAAG,IAAI,SAAA,GAAY,SAAA;AAAA,UAC9C,OAAA,EAAS,UAAA,CAAW,QAAA,CAAS,GAAG,IAAI,QAAA,GAAW,UAAA;AAAA,UAC/C,OAAA,EAAS,MAAM,SAAA,CAAU,GAAG;AAAA;AAAA,OAE/B,CACH,CAAA,EAGD,aAAA,KAAkB,WAAA,mBACjBvF,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,IAAA,EACE,gBAAA,mBACClB,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,UAAA,EAAW,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,EAAA,EAAI,qBAC1CjB,OAAAA,CAAA,aAAA,CAACyD,gBAAAA,EAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,CAC9B,IACE,cAAA,mBACFzD,OAAAA,CAAA,aAAA,CAAC0D,KAAAA,EAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,EAAE,EAAA,EACjC,cACH,CAAA,GACE,iBAAA,CAAkB,SAAS,CAAA,mBAC7B1D,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,IAAA,EAAM,IAAI,EAAE,KAAA,EAAO,MAAA,EAAO,EAAA,EACvC,iBAAA,CAAkB,GAAA,CAAI,CAAC,QAAA,qBACtBjB,OAAAA,CAAA,aAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,KAAK,QAAA,CAAS,EAAA;AAAA,UACd,QAAA;AAAA,UACA,SAAA,EAAW,sBAAsB,QAAA,CAAS,EAAA;AAAA,UAC1C,cAAA,EAAgB,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAA;AAAA,UACpD,WAAA,EAAa,YAAA,GAAe,MAAM,eAAA,CAAgB,QAAQ,CAAA,GAAI,MAAA;AAAA,UAC9D,QAAA,EAAU,cAAA,GAAiB,MAAM,eAAA,CAAgB,QAAQ,CAAA,GAAI,MAAA;AAAA,UAC7D,QAAA,EAAU,cAAA,GAAiB,MAAM,YAAA,CAAa,QAAQ,CAAA,GAAI,MAAA;AAAA,UAC1D,WAAW,eAAA,GAAkB,MAAM,aAAA,CAAc,QAAA,EAAU,QAAQ,CAAA,GAAI;AAAA;AAAA,OAE1E,CACH,CAAA,mBAEAA,OAAAA,CAAA,cAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,EAAA,EAAI,GAAE,EAAA,EAC9D,YAAA,CAAa,MAAA,KAAW,CAAA,GACrB,EAAE,qBAAA,EAAuB,wBAAwB,CAAA,GACjD,CAAA,CAAE,6BAA6B,iCAAiC,CACtE,CAEJ,CAAA,mBAEApB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,IAAA,EACE,iCACClB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,UAAA,EAAW,QAAA,EAAS,KAAA,EAAM,MAAA,EAAO,IAAI,CAAA,EAAA,kBAC1CjB,OAAAA,CAAA,aAAA,CAACyD,kBAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,CAC9B,IACE,eAAA,CAAgB,MAAA,GAAS,CAAA,mBAC3BzD,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,OAAA,EAAS,MAAM,EAAA,EAAI,EAAE,KAAA,EAAO,MAAA,MAChC,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,qBACpBjB,OAAAA,CAAA,aAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,KAAK,MAAA,CAAO,EAAA;AAAA,UACZ,QAAA,EAAU,MAAA;AAAA,UACV,SAAA,EAAW,sBAAsB,MAAA,CAAO,EAAA;AAAA,UACxC,cAAA,EAAgB,MAAM,kBAAA,CAAmB,MAAA,CAAO,EAAE,CAAA;AAAA,UAClD,qBAAA,EAAuB,MAAA,GAAS,MAAM,yBAAA,CAA0B,MAAM,CAAA,GAAI,MAAA;AAAA,UAC1E,QAAA,EAAU,cAAA,GAAiB,MAAM,eAAA,CAAgB,MAAM,CAAA,GAAI,MAAA;AAAA,UAC3D,QAAA,EAAU,cAAA,GAAiB,MAAM,YAAA,CAAa,MAAM,CAAA,GAAI,MAAA;AAAA,UACxD,UAAU,eAAA,GAAkB,MAAM,aAAA,CAAc,MAAA,EAAQ,UAAU,CAAA,GAAI;AAAA;AAAA,OAEzE,CACH,CAAA,mBAEAA,OAAAA,CAAA,aAAA,CAACoB,UAAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,EAAA,EAAI,CAAA,EAAE,EAAA,EAC9D,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,CAAA,CAAE,mBAAA,EAAqB,sBAAsB,CAAA,GAAI,CAAA,CAAE,yBAAA,EAA2B,+BAA+B,CAC1I,CAEJ,CAEJ;AAAA;AAEJ,GACF,EAEC,YAAA,oBACCpB,OAAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,CAAC,CAAC,YAAA;AAAA,MACR,aAAa,YAAA,CAAa,IAAA;AAAA,MAC1B,WAAA,EAAA,CAAa,EAAA,GAAA,YAAA,CAAa,IAAA,KAAb,IAAA,GAAA,EAAA,GAAqB,EAAC;AAAA,MACnC,eAAe,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,aAAa,IAAI,CAAA;AAAA,MAClE,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,MACnC,QAAA,EAAU;AAAA;AAAA,GACZ,kBAGFA,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,CAAC,CAAC,aAAA;AAAA,MACR,SAAS,MAAM;AACb,QAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,MAAA,EAAQ,kBAAA;AAAA,MACR,YAAA,EAAc,MAAM,WAAA,CAAY,IAAI,CAAA;AAAA,MACpC,WAAA,EAAA,CAAa,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,WAAA,KAAf,IAAA,GAAA,EAAA,GAA8B,cAAA;AAAA,MAC3C,KAAA,EAAO;AAAA;AAAA,GACT,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,MAAM,UAAA,KAAe,IAAA;AAAA,MACrB,MAAM,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,UAAA;AAAA,MACpB,OAAA,EAAS,UAAA;AAAA,MACT,aAAA,EACE,UAAA,KAAe,QAAA,GACX,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,IAC5B,YAAA,CAAa,GAAA,CAAI,CAACgF,EAAAA,KAAMA,GAAE,IAAI,CAAA;AAAA,MAEpC,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,MACjC,QAAA,EAAU;AAAA;AAAA,GAEd,CAAA;AAEJ;AC9lBA,IAAM4B,aAAqB,EAAE,CAAA,EAAG,KAAK,OAAA,EAAS,MAAA,EAAQ,eAAe,QAAA,EAAS;AAC9E,IAAM,OAAA,GAAmB;AAAA,EACvB,EAAA,EAAI,IAAA;AAAA,EACJ,KAAA,EAAO,MAAA;AAAA,EACP,OAAA,EAAS,WAAA;AAAA,EACT,OAAA,EAAS,MAAA;AAAA,EACT,cAAA,EAAgB,QAAA;AAAA,EAChB,CAAA,EAAG,CAAA;AAAA,EACH,MAAA,EAAQ,WAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA;AAEe,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,IAAA,EAAM,SAAQ,EAAyB;AACtF,EAAA,uBACE5G,OAAAA,CAAA,aAAA;AAAA,IAACyB,QAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAImF,UAAAA;AAAA,MACJ,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,KAAA;AAAA,oBAEA5G,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,WAAU,IAAK,CAAA;AAAA,oBACxBlB,OAAAA,CAAA,aAAA,CAACoB,YAAA,EAAW,OAAA,EAAQ,WAAS,KAAM;AAAA,GACrC;AAEJ;ACVO,IAAM,OAAA,GAA0B;AAAA,EACrC;AAAA,IACE,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,kBAAMpB,OAAAA,CAAA,aAAA,CAAC6G,qBAAA,IAAoB,CAAA;AAAA,IAC3B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,iBAAA,EAAmB,cAAc,CAAA,EAAE;AAAA,QACpD,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,QAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA;AAAG;AACtD;AACF,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,kBAAM7G,OAAAA,CAAA,aAAA,CAAC8G,eAAA,IAAc,CAAA;AAAA,IACrB,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,CAAE,gBAAgB,mBAAmB,CAAA,EAAG,UAAU,IAAA,EAAK;AAAA,QACtE,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,QAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAA,UACpD,UAAA,EAAY;AAAA;AACd;AACF,KACF;AAAA,GACF;AAAA,EAEA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,kBAAM9G,OAAAA,CAAA,aAAA,CAAC+G,qBAAA,IAAoB,CAAA;AAAA,IAC3B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,CAAA,CAAE,gBAAA,EAAkB,QAAQ,CAAA;AAAA,UAClC,GAAA,EAAK;AAAA,SACP;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,kBAAM/G,OAAAA,CAAA,aAAA,CAACgH,eAAA,IAAc,CAAA;AAAA,IACrB,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,GAAA,EAAK,wDAAA;AAAA,UACL,GAAA,EAAK,CAAA,CAAE,mBAAA,EAAqB,gBAAgB,CAAA;AAAA,UAC5C,gBAAA,EAAkB,QAAA;AAAA,UAClB,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,kBAAMhH,OAAAA,CAAA,aAAA,CAACiH,uBAAA,IAAsB,CAAA;AAAA,IAC7B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,sCAAA;AAAA,UACV,KAAA,EAAO;AAAA,SACT;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,oBAAA;AAAA,IACP,IAAA,kBAAMjH,OAAAA,CAAA,aAAA,CAACkH,qBAAA,IAAoB,CAAA;AAAA,IAC3B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,CAAA,CAAE,2BAAA,EAA6B,eAAe,CAAA;AAAA,UACxD,IAAA,EAAM,CAAA,CAAE,uBAAA,EAAyB,UAAU,CAAA;AAAA,UAC3C,KAAA,EAAO,CAAA,CAAE,wBAAA,EAA0B,mBAAmB,CAAA;AAAA,UACtD,OAAA,EAAS,CAAA,CAAE,0BAAA,EAA4B,WAAW,CAAA;AAAA,UAClD,KAAA,EAAO,kBAAA;AAAA,UACP,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU,oDAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,UACX,UAAA,EAAY,QAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,mBAAA;AAAA,IACP,IAAA,kBAAMlH,OAAAA,CAAA,aAAA,CAACmH,kBAAA,IAAiB,CAAA;AAAA,IACxB,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,CAAA,CAAE,0BAAA,EAA4B,WAAW,CAAA;AAAA,UAClD,OAAA,EAAS,CAAA,CAAE,yBAAA,EAA2B,gCAAgC,CAAA;AAAA,UACtE,KAAA,EAAO,qBAAA;AAAA,UACP,OAAA,EAAS,iBAAA;AAAA,UACT,QAAA,EAAU,gDAAA;AAAA,UACV,SAAA,EAAW,EAAA;AAAA,UACX,UAAA,EAAY,SAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,kBAAMnH,OAAAA,CAAA,aAAA,CAACoH,wBAAA,IAAuB,CAAA;AAAA,IAC9B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,CAAA,EAAE,EAAE;AAAA,QAC7D,KAAA,EAAO;AAAA,UACL,SAAA,EAAW;AAAA;AACb;AACF,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,kBAAMpH,OAAAA,CAAA,aAAA,CAACqH,gBAAA,IAAe,CAAA;AAAA,IACtB,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,QAAA;AAAA,MACN,MAAM;AAAC,KACT;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,kBAAMrH,OAAAA,CAAA,aAAA,CAACsH,cAAA,IAAa,CAAA;AAAA,IACpB,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,QAAA,EAAW,EAAE,cAAA,EAAgB,aAAa,CAAC,CAAA,SAAA,CAAA,EAAY;AAAA,QAC1E,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,EAAA;AAAA,UACV,SAAA,EAAW,IAAA;AAAA,UACX,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,QAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA;AAAG;AACtD;AACF,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,kBAAMtH,OAAAA,CAAA,aAAA,CAACuH,oBAAA,IAAmB,CAAA;AAAA,IAC1B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,kBAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,EAAA;AAAA,UACZ,YAAA,EAAc,CAAA;AAAA,UACd,SAAS,CAAC,EAAE,WAAA,EAAa,IAAG,EAAG,EAAE,WAAA,EAAa,IAAG,EAAG,EAAE,WAAA,EAAa,IAAI;AAAA,SACzE;AAAA,QACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,kBAAMvH,OAAAA,CAAA,aAAA,CAACkG,oBAAA,IAAmB,CAAA;AAAA,IAC1B,OAAO,OAAO;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,KACF;AAAA;AACF;AAAA;AAIF,CAAA;;;AClMA,IAAM,UAAA,GAAqC;AAAA,EACzC,OAAA,EAAS,mBAAA;AAAA,EACT,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ,kBAAA;AAAA,EACR,KAAA,EAAO,iBAAA;AAAA,EACP,MAAA,EAAQ,kBAAA;AAAA,EACR,oBAAA,EAAsB,8BAAA;AAAA,EACtB,mBAAA,EAAqB,6BAAA;AAAA,EACrB,OAAA,EAAS,mBAAA;AAAA,EACT,MAAA,EAAQ,kBAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS,mBAAA;AAAA,EACT,SAAA,EAAW;AACb,CAAA;AAOe,SAAR,UAAA,CAA4B,EAAE,QAAA,EAAU,WAAA,EAAa,UAAS,EAAoB;AACvF,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAwB;AACvC,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACElG,OAAAA,CAAA,aAAA;AAAA,IAAC0F,IAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAI,IAAA;AAAA,MACJ,QAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,QAAA,EAAS;AAAA,MACzD,eAAA,EAAiB,EAAE,QAAA,EAAU,KAAA,EAAO,YAAY,QAAA;AAAS,KAAA;AAAA,oBAEzD1F,QAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,QAAQ,mBAAA,EAAqB,iBAAA,MACpD,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACflB,OAAAA,CAAA,aAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,CAAA;AAAA,QACL,KAAA,EAAO,UAAA,CAAW,CAAA,CAAE,KAAK,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAA,CAAE,KAAK,CAAA,EAAG,CAAA,CAAE,KAAK,IAAI,CAAA,CAAE,KAAA;AAAA,QACjE,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,OAAO;AAAA;AAAA,KAEnC,CACH;AAAA,GACF;AAEJ;ACvDe,SAAR,aAAA,CAA+B,EAAE,aAAA,EAAe,OAAA,EAAQ,EAAU;AACvE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIgB,SAAS,KAAK,CAAA;AAE5C,EAAAO,UAAU,MAAM;AACd,IAAA,SAAS,QAAA,CAAS,EAAE,OAAA,EAAS,OAAA,EAAQ,EAAe;AAClD,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,cAAc,qBAAA,EAAsB;AACjD,MAAA,MAAM,QAAQ,IAAA,CAAK,CAAA;AACnB,MAAA,MAAM,UAAU,IAAA,CAAK,CAAA;AACrB,MAAA,MAAM,IAAA,GAAO,UAAU,IAAA,CAAK,KAAA;AAE5B,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,KAAK,IAAI,EAAA,EAAI;AAClC,QAAA,IAAI,OAAA,GAAU,OAAA,IAAW,OAAA,GAAU,IAAA,EAAM;AACvC,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,QAAQ,CAAA;AAC7C,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,QAAQ,CAAA;AAAA,IAClD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,EAAe,UAAU,CAAC,CAAA;AAE9B,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAAC,QAAK,EAAA,EAAI,OAAA,EAAA,kBACRA,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,EAAA,EAAI;AAAA,QACF,CAAA,EAAG,IAAA;AAAA,QACH,QAAA,EAAU,UAAA;AAAA,QACV,GAAA,EAAK,OAAA;AAAA,QACL,IAAA,EAAM,KAAA;AAAA,QACN,SAAA,EAAW,mBAAA;AAAA,QACX,OAAA,EAAS,YAAA;AAAA,QACT,KAAA,EAAO,sBAAA;AAAA,QACP,MAAA,EAAQ,KAAA;AAAA,QACR,4BAAA,EAA8B;AAAA,UAC5B,OAAA,EAAS,YAAA;AAAA,UACT,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,QAAA,OAAA,EAAQ;AAAA,MACV;AAAA,KAAA;AAAA,oBAEAtF,OAAAA,CAAA,aAAA,CAACkF,WAAAA,EAAA,EAAY,UAAS,OAAA,EAAQ;AAAA,GAElC,CAAA;AAEJ;ACvDe,SAAR,iBAAA,CAAmC,EAAE,OAAA,EAAQ,EAAU;AAC5D,EAAA,uBACElF,OAAAA,CAAA,aAAA;AAAA,IAACwH,UAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,YAAA,EAAc,QAAA;AAAA,QACd,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,EAAA;AAAA,QACR,KAAA,EAAO,MAAA;AAAA,QACP,OAAA,EAAS;AAAA;AACX,KAAA;AAAA,oBAEAxH,OAAAA,CAAA,aAAA;AAAA,MAACkF,WAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,CAAA,EAAG,IAAA;AAAA,UACH,OAAA,EAAS,YAAA;AAAA,UACT,YAAA,EAAc,EAAA;AAAA,UACd,KAAA,EAAO;AAAA,SACT;AAAA,QACA,QAAA,EAAS;AAAA;AAAA;AACX,GACF;AAEJ;;;ACvBe,SAAR,cAAA,CAAgC,EAAE,QAAA,EAAU,WAAA,EAAY,EAAU;AACvE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIlE,SAA6B,IAAI,CAAA;AACzE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAA6B,IAAI,CAAA;AAE3E,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,eAAA,CAAgB,aAAa,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAMQ,gBAAe,MAAM;AACzB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,uBAAOxB,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAkB,SAAS,iBAAA,EAAmB,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAA8B,SAAS,iBAAA,EAAmB,CAAA;AAAA,IAClF;AAAA,EACF,CAAA;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAW,EAAA,EACvDwB,aAAAA,EACH,CAAA,kBACAxB,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAU,YAAA,EAAc,WAAA,EAAa,eAAA,EAAiB,QAAA,EAAoB,CACxF,CAAA;AAEJ;AC5BA,IAAM,kBAAA,GAAqBc,cAAsC,IAAI,CAAA;AAO9D,SAAS,mBAAA,CAAoB;AAAA,EAClC,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,uBAAOd,QAAA,aAAA,CAAC,kBAAA,CAAmB,UAAnB,EAA4B,KAAA,EAAO,QAAO,QAAS,CAAA;AAC7D;AAEO,SAAS,cAAA,GAAyC;AACvD,EAAA,OAAOe,WAAW,kBAAkB,CAAA;AACtC;;;ACFA,SAAS,UAAA,GAAa;AACpB,EAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAC5B;AASe,SAAR,iBAAA,CAAmC,EAAE,WAAA,EAAa,QAAA,EAAU,WAAU,EAA2B;AACtG,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAwB;AAC3C,IAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,IAAA,OAAO,QAAA,CAAS;AAAA,MACd,OAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAa,CAAC,GAAI,WAAA,IAAe,IAAK,OAAO;AAAA,KAC9C,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAqB,KAAA,KAAkB;AAC1D,IAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,IAAA,MAAM,cAAA,GAAiB,CAAC,GAAI,WAAA,IAAe,EAAG,CAAA;AAC9C,IAAA,cAAA,CAAe,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AACvC,IAAA,OAAO,QAAA,CAAS;AAAA,MACd,OAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AAC5C,IAAA,uBACEf,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAA,EAAW,IAAA,EAAC,QAAA,EAAU,aAAa,CAAA,EAClD,SAAA,oBACCA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAsB,WAAA,EAAa,CAAA,EAAG,WAAA,EAAW,IAAA,EAAC,CAEtE,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,EACG,YAAY,GAAA,CAAI,CAAC,OAAA,EAAS,CAAA,qBACzBA,OAAAA,CAAA,aAAA,CAAC,YAAS,GAAA,EAAK,OAAA,EAAA,kBACbA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,EAAe,QAAA,EAAU,CAAC,KAAA,KAAU,WAAA,CAAY,OAAO,CAAC,CAAA,EAAG,GAC3D,SAAA,oBAAaA,OAAAA,CAAA,aAAA,CAAC,kBAAe,SAAA,EAAsB,WAAA,EAAa,GAAG,CAAA,EACnE,SAAA,mBACCA,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,aAAA,EAAe,CAAA,sBAC7DA,OAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,IAAI,OAAA,EAAS,CAC5B,oBAEAA,OAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,EAAA,EAAI,OAAA,EAAS,CAE9B,CACD,CAAA,kBACDA,QAAA,aAAA,CAAC,cAAA,EAAA,EAAe,UAAU,WAAA,EAAa,CAAA,EACtC,SAAA,oBAAaA,QAAA,aAAA,CAAC,cAAA,EAAA,EAAe,WAAsB,WAAA,EAAa,WAAA,CAAY,QAAQ,CACvF,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAIG;AACD,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIK,SAAS,KAAK,CAAA;AAEtC,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAItB,EAAA,IAAI,aAAaL,SAAAA,EAAU,QAAA,CAAS,UAAU,SAAA,CAAU,QAAQ,GAAG,OAAO,IAAA;AAE1E,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAuC;AAC7D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,KAAK,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAuC;AACzD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,MACZA,SAAAA;AAAA,MACA,OAAA,CAAQ,QAAA;AAAA,MACR,OAAA,CAAQ,YAAA;AAAA,MACR,SAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,WAAA,CAAY,KAAY,CAAA;AACxB,MAAA,kBAAA,CAAmB,QAAQ,QAAQ,CAAA;AAAA,IACrC;AACA,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,cAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ,UAAA;AAAA,MACR,EAAA,EAAI;AAAA,QACF,MAAA,EAAQ,WAAA,GAAc,EAAA,GAAK,IAAA,GAAO,EAAA,GAAK,CAAA;AAAA,QACvC,EAAA,EAAI,cAAc,CAAA,GAAI,CAAA;AAAA,QACtB,EAAA,EAAI,WAAA,GAAc,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,QACnC,YAAA,EAAc,CAAA;AAAA,QACd,eAAA,EAAiB,OAAO,0BAAA,GAA6B,aAAA;AAAA,QACrD,OAAA,EAAS,OAAO,sCAAA,GAAyC,MAAA;AAAA,QACzD,UAAA,EAAY;AAAA;AACd;AAAA,GACF;AAEJ;;;AC5IA,IAAM,gBAAgB,CAAC,EAAE,WAAA,EAAa,IAAG,EAAG,EAAE,WAAA,EAAa,IAAG,EAAG,EAAE,WAAA,EAAa,IAAI,CAAA;AAErE,SAAR,sBAAA,CAAwC,EAAE,KAAA,EAAO,KAAA,EAAM,EAA0B;AAZxF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAaE,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,MAAkC,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAC,EAApC,EAAA,OAAA,KAA0B,EAAA,EAAd,SAAA,GAAA,SAAA,CAAc,IAAd,CAAZ,SAAA,CAAA,CAAA;AACR,EAAA,MAAM,eAAe,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,aAAA;AAEhC,EAAA,MAAM,eAAe,CAAC,WAAA,EAAwB,EAAE,KAAA,EAAO,OAAA,EAAS,aAAY,KAA4B;AACtG,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,YAAY,CAAA;AACjC,IAAA,QAAA,CAAS,WAAW,CAAA,GAAI,EAAE,WAAA,EAAY;AACtC,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG,KAAA;AAAA,MACX,CAAC,cAAc,GAAG;AAAA,QAChB,IAAA,EAAM,kBAAA;AAAA,QACN,IAAA,EAAMqB,wCAA4B,KAAA,CAAM;AAAA,UACtC,KAAA;AAAA,UACA,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,YAEL,OAAA,EAAS;AAAA,WACX;AAAA,SACD;AAAA;AACH,KACD,CAAA;AACD,IAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,uBACEvC,OAAAA,CAAA,aAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,KAAA;AAAA,MACA,OAAA,EAAS;AAAA,wBACPA,OAAAA,CAAA,aAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAA,CAAa,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,CAAA,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAA;AAAA,YAC3B,WAAW,EAAE,IAAA,EAAM,oBAAoB,QAAA,EAAU,cAAA,EAAgB,aAAa,CAAA,EAAE;AAAA,YAChF,QAAA,EAAU,CAAC,MAAA,KAAW,YAAA,CAAa,GAAG,MAAM;AAAA;AAAA,SAC9C;AAAA,wBACAA,OAAAA,CAAA,aAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAA,CAAa,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,CAAA,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAA;AAAA,YAC3B,WAAW,EAAE,IAAA,EAAM,oBAAoB,QAAA,EAAU,cAAA,EAAgB,aAAa,CAAA,EAAE;AAAA,YAChF,QAAA,EAAU,CAAC,MAAA,KAAW,YAAA,CAAa,GAAG,MAAM;AAAA;AAAA,SAC9C;AAAA,wBACAA,OAAAA,CAAA,aAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAA,CAAa,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,CAAA,CAAA,KAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAA;AAAA,YAC3B,WAAW,EAAE,IAAA,EAAM,oBAAoB,QAAA,EAAU,cAAA,EAAgB,aAAa,CAAA,EAAE;AAAA,YAChF,QAAA,EAAU,CAAC,MAAA,KAAW,YAAA,CAAa,GAAG,MAAM;AAAA;AAAA;AAC9C;AACF;AAAA,GACF;AAEJ;AClDe,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,KAAA,EAAM,EAAmB;AAV1E,EAAA,IAAA,EAAA;AAWE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,KAAP,IAAA,GAAA,EAAA,GAAsB,EAAC;AAE3C,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAc,KAAA,EAAA,kBACbA,OAAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,WAAA;AAAA,MACA,SAAA,EAAW,EAAE,IAAA,EAAM,WAAA,EAAa,UAAU,cAAA,EAAe;AAAA,MACzD,UAAU,CAAC,EAAE,OAAO,OAAA,EAAS,WAAA,EAAAyH,cAAY,KAAM;AAC7C,QAAA,WAAA,CAAY;AAAA,UACV,CAAC,OAAO,GAAG,KAAA;AAAA,UACX,CAAC,cAAc,GAAG;AAAA,YAChB,IAAA,EAAM,WAAA;AAAA,YACN,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD9G,SAAAA,CAAS,cAAc,EAAE,IAAA,CAAA,EADxB;AAAA,cAEJ,KAAA,EAAO,EAAE,WAAA,EAAa8G,YAAAA;AAAY,aACpC;AAAA;AACF,SACD,CAAA;AACD,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,MAC5B;AAAA;AAAA,GAEJ,CAAA;AAEJ;AC5BA,SAASC,WAAAA,GAAa;AACpB,EAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACtE;AAEA,SAAS,WAAA,CAAY,QAA6B,WAAA,EAAyE;AAb3H,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAcE,EAAA,MAAM,QAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACvC,IAAA,KAAA,CAAM,KAAK,IAAIA,WAAAA,EAAW;AAAA,EAC5B;AAEA,EAAA,MAAM,WAAW,CAAC,GAAA,KAChB,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,GAAA,CAAI,CAAC,EAAA,KAAI;AApBlB,IAAA,IAAA1E,GAAAA;AAoBqB,IAAA,OAAA,CAAAA,GAAAA,GAAA,KAAA,CAAM,EAAE,CAAA,KAAR,OAAAA,GAAAA,GAAa,EAAA;AAAA,EAAA,CAAA,CAAA;AAEhC,EAAA,MAAM,YAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACnD,IAAA,MAAM,CAAA,GAAI,KAAA;AACV,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAK,CAAA;AACzB,IAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAC1B,MAAA,SAAA,CAAU,KAAK,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACd,CAAA,CAAA,EADc;AAAA,QAEjB,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,CAAA,CAAE,IAAA,CAAA,EADD;AAAA,UAEJ,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,KAAA,CAAA,EAAZ,EAAmB,WAAA,EAAa,QAAA,CAAA,CAAS,EAAA,GAAA,CAAA,CAAE,IAAA,CAAK,KAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAW,CAAA,EAAE;AAAA,SAC7E;AAAA,OACF,CAAA;AAAA,IACF,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,kBAAA,EAAoB;AACxC,MAAA,SAAA,CAAU,KAAK,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACd,CAAA,CAAA,EADc;AAAA,QAEjB,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,CAAA,CAAE,IAAA,CAAA,EADD;AAAA,UAEJ,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,CAAA,CAAE,IAAA,CAAK,KAAA,CAAA,EADL;AAAA,YAEL,OAAA,EAAA,CAAS,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,IAAA,CAAK,KAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,OAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,GAAA,CAAI,CAAC,CAAA,KAAY,aAAA,CAAA,cAAA,CAAA,EAAA,EAC5C,CAAA,CAAA,EAD4C;AAAA,cAE/C,WAAA,EAAa,QAAA,CAAS,CAAA,CAAE,WAAW;AAAA,aACrC,CAAA;AAAA,WACF;AAAA,SACF;AAAA,OACF,CAAA;AAAA,IACF,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,KAAK,CAAA,GAAI,CAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,KAAA,CAAM,WAAW,CAAA,EAAE;AAC5D;AAEA,SAAS,YAAA,CAAa,SAAiBrC,SAAAA,EAAoD;AAvD3F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwDE,EAAA,MAAM,KAAA,GAAQA,UAAS,OAAO,CAAA;AAC9B,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,MAAA,GAA8B,EAAE,CAAC,OAAO,GAAG,KAAA,EAAM;AACvD,EAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,IAAA,KAAA,MAAW,OAAA,IAAA,CAAW,iBAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,WAAA,KAAlB,IAAA,GAAA,EAAA,GAAiC,EAAC,EAAG;AACzD,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,OAAA,EAASA,SAAQ,CAAC,CAAA;AAAA,IACvD;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,IAAA,KAAA,MAAW,GAAA,IAAA,CAAO,iBAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,OAAA,KAAlB,IAAA,GAAA,EAAA,GAA6B,EAAC,EAAG;AACjD,MAAA,KAAA,MAAW,OAAA,IAAA,CAAW,EAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAA,EAAA,GAAmB,EAAC,EAAG;AAC3C,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,OAAA,EAASA,SAAQ,CAAC,CAAA;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAASN,eAAc,UAAA,EAA4C;AACjE,EAAA,MAAM,IAAI,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,aAAA;AACxB,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEb;AAEe,SAAR,kBAAmC,KAAA,EAAyB;AAlGnE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmGE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,EAAA,GAAqB,EAAC;AAC1C,EAAA,MAAMM,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAE3C,EAAA,MAAM,YAAA,GAAegH,WAAAA,CAAY,CAAC,CAAA,KAAqB;AAxGzD,IAAA,IAAA3E,KAAAC,GAAAA,EAAAC,GAAAA;AAyGI,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,QAAQ,WAAA,EAAa;AACjD,IAAA,IAAI,CAAC,eAAA,EAAiB;AAEtB,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAI,OAAO,OAAA,KAAY,OAAA,IAAW,OAAO,OAAA,KAAY,UAAA,IAAc,OAAO,iBAAA,EAAmB;AAC3F,MAAA;AAAA,IACF;AAEA,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,MAAM,oBAAoB,CAAC,GAAA,KACzB,2BAAK,MAAA,CAAO,CAAC,OAAO,EAAA,KAAO,eAAA,CAAA;AAE7B,IAAA,MAAM,YAAiC,cAAA,CAAA,EAAA,EAAKvC,SAAAA,CAAAA;AAC5C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,IAAI,OAAO,eAAA,EAAiB;AAC5B,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,aAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,MAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAA,EAAX,EAAiB,aAAa,iBAAA,CAAkB,KAAA,CAAM,IAAA,CAAK,WAAW,GAAE,CAAA,EAAE,CAAA;AAC5G,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAA,EAAL,EAAY,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAA,EAAX,EAAiB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EAAhB,EAAuB,WAAA,EAAa,iBAAA,CAAA,CAAkBqC,GAAAA,GAAA,KAAA,CAAM,IAAA,CAAK,KAAA,KAAX,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAkB,WAAW,CAAA,EAAE,CAAA,EAAE,CAAA,EAAE,CAAA;AACnJ,UAAA;AAAA,QACF,KAAK,kBAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,QAAL,EAAY,IAAA,EAAM,iCAAK,KAAA,CAAM,IAAA,CAAA,EAAX,EAAiB,KAAA,EAAO,iCAAK,KAAA,CAAM,IAAA,CAAK,QAAhB,EAAuB,OAAA,EAAA,CAASE,OAAAD,GAAAA,GAAA,KAAA,CAAM,IAAA,CAAK,KAAA,KAAX,gBAAAA,GAAAA,CAAkB,OAAA,KAAlB,gBAAAC,GAAAA,CAA2B,GAAA,CAAI,CAAC,CAAA,KAAY,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,CAAA,CAAA,EAAL,EAAQ,aAAa,iBAAA,CAAkB,CAAA,CAAE,WAAW,CAAA,EAAE,CAAA,CAAA,KAAM,CAAA,EAAE,CAAA;AACpM,UAAA;AAAA,QACF;AACE,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,KAAA;AAAA;AACpB,IACF;AACA,IAAA,OAAO,UAAU,eAAe,CAAA;AAChC,IAAA,eAAA,CAAgB,SAAgB,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,eAAA,EAAiBvC,SAAQ,CAAC,CAAA;AAE9B,EAAA,MAAM,UAAA,GAAagH,WAAAA,CAAY,CAAC,CAAA,KAAqB;AACnD,IAAA,IAAI,EAAE,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,CAAA,IAAY,CAAA,CAAE,QAAQ,GAAA,EAAK;AAChD,IAAA,IAAI,CAAC,eAAA,EAAiB;AAGtB,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAI,OAAO,OAAA,KAAY,OAAA,IAAW,OAAO,OAAA,KAAY,UAAA,IAAc,OAAO,iBAAA,EAAmB;AAC3F,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,eAAA,EAAiBhH,SAAQ,CAAA;AACrD,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAEtC,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,CAAU,EAAE,qBAAqB,IAAA,EAAM,WAAA,EAAa,eAAA,EAAiB,MAAA,EAAQ,CAAA;AAClG,IAAA,SAAA,CAAU,SAAA,CAAU,UAAU,OAAO,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,eAAA,EAAiBA,SAAQ,CAAC,CAAA;AAE9B,EAAA,MAAM,WAAA,GAAcgH,WAAAA,CAAY,CAAO,CAAA,KAAsB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AA9J/D,IAAA,IAAA3E,GAAAA;AAgKI,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAI,OAAO,OAAA,KAAY,OAAA,IAAW,OAAO,OAAA,KAAY,UAAA,IAAc,OAAO,iBAAA,EAAmB;AAC3F,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAOA,GAAAA,GAAA,CAAA,CAAE,aAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,IAAiB,OAAA,CAAQ,YAAA,CAAA;AACtC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC1B,SAAQ4E,EAAAA,EAAA;AACN,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,EAAC,iCAAQ,mBAAA,CAAA,IAAuB,CAAC,OAAO,WAAA,IAAe,CAAC,OAAO,MAAA,EAAQ;AAE3E,IAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,IAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,SAAA,KAAc,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,WAAW,CAAA;AACtF,IAAA,MAAM,MAAM,cAAA,CAAA,EAAA,EAAKjH,SAAAA,CAAAA;AAGjB,IAAA,MAAA,CAAO,MAAA,CAAO,KAAK,SAAS,CAAA;AAG5B,IAAA,MAAM,kBAAA,GAAqB,CAAC,GAAI,WAAA,IAAe,EAAG,CAAA;AAClD,IAAA,MAAM,cAAc,eAAA,GAAkB,kBAAA,CAAmB,QAAQ,eAAe,CAAA,GAAI,IAAI,kBAAA,CAAmB,MAAA;AAC3G,IAAA,kBAAA,CAAmB,MAAA,CAAO,WAAA,EAAa,CAAA,EAAG,SAAS,CAAA;AAEnD,IAAA,GAAA,CAAI,cAAc,CAAA,GAAI;AAAA,MACpB,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACDA,SAAAA,CAAS,cAAc,EAAE,IAAA,CAAA,EADxB;AAAA,QAEJ,WAAA,EAAa;AAAA,OACf;AAAA,KACF;AAEA,IAAA,eAAA,CAAgB,GAAG,CAAA;AACnB,IAAA,kBAAA,CAAmB,SAAS,CAAA;AAAA,EAC9B,IAAG,CAACA,SAAAA,EAAU,WAAA,EAAa,eAAA,EAAiB,cAAc,CAAC,CAAA;AAE3D,EAAAY,UAAU,MAAM;AACd,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,YAAY,CAAA;AAC/C,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,UAAU,CAAA;AAC7C,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAC5C,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,YAAY,CAAA;AAClD,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,UAAU,CAAA;AAChD,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,WAAW,CAAA;AAAA,IACjD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAA,EAAY,WAAW,CAAC,CAAA;AAE1C,EAAA,MAAM,SAAA,GAAiC;AAAA,IACrC,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,SAAA;AAAA,IAC1B,UAAA,EAAYlB,cAAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,IAC1C,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,WAAA;AAAA,IACf,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,cAAA,mBACJL,OAAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,WAAA;AAAA,MACA,SAAA,EAAW,EAAE,IAAA,EAAM,aAAA,EAAe,UAAU,MAAA,EAAO;AAAA,MACnD,UAAU,CAAC,EAAE,OAAO,OAAA,EAAS,WAAA,EAAAyH,cAAY,KAAM;AAC7C,QAAA,WAAA,CAAY;AAAA,UACV,CAAC,OAAO,GAAG,KAAA;AAAA,UACX,CAAC,cAAc,GAAG;AAAA,YAChB,IAAA,EAAM,aAAA;AAAA,YACN,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD9G,SAAAA,CAAS,cAAc,EAAE,IAAA,CAAA,EADxB;AAAA,cAEJ,WAAA,EAAa8G;AAAA,aACf;AAAA;AACF,SACD,CAAA;AACD,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,MAC5B;AAAA;AAAA,GACF;AAQF,EAAA,MAAM,cAAA,GAAiB,GAAA;AAIvB,EAAA,MAAM,SAAA,GAAiC;AAAA,IACrC,QAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,YAAA,EAAc,EAAA;AAAA,IACd,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,MAAM,gBAAA,EAAkB;AAC1B,IAAA,uBACEzH,OAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,QACzB,CAAA;AAAA,QACA,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,UAEL,OAAA,EAAS,MAAA;AAAA,UACT,KAAA,EAAO,MAAA;AAAA,UACP,SAAA,EAAW;AAAA,SACb;AAAA,OAAA;AAAA,sBAEAA,OAAAA,CAAA,aAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,YAEL,eAAA,EAAiB,SAAA;AAAA,YACjB,OAAA,EAAS;AAAA,WACX;AAAA,SAAA;AAAA,wBAEAA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAS,EAAA,EAAI,cAAe;AAAA;AACvE,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAS,MAAM;AACb,QAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,QAEL,OAAA,EAAS,WAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAW;AAAA,OACb;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,iCACF,SAAA,CAAA,EADE;AAAA,UAEL,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,CAAM,aAAA,KAAN,IAAA,GAAA,EAAA,GAAuB,SAAA;AAAA,UACxC,OAAA,EAAS;AAAA,SACX;AAAA,OAAA;AAAA,sBAEAA,OAAAA,CAAA,aAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAM,MAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU,OAAA;AAAA,YACV,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,CAAM,WAAA,KAAN,IAAA,GAAA,EAAA,GAAqB,SAAA;AAAA,YACtC,YAAA,EAAA,CAAc,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,EAAA,GAAsB,MAAA;AAAA,YACpC,QAAA,EAAU,KAAA,CAAM,YAAA,GAAe,QAAA,GAAW,MAAA;AAAA,YAC1C,SAAS,MAAM;AACb,cAAA,MAAM,IAAI,KAAA,CAAM,WAAA;AAChB,cAAA,IAAI,CAAC,CAAA,EAAG;AACN,gBAAA,OAAO,MAAA;AAAA,cACT;AACA,cAAA,OAAO,aAAa,CAAC,CAAA,CAAA;AAAA,YACvB,CAAA;AAAG,WACL;AAAA,UACA,IAAA,EAAK,cAAA;AAAA,UACL,WAAA,EAAY,GAAA;AAAA,UACZ,WAAA,EAAY,GAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SAAA;AAAA,wBAERA,OAAAA,CAAA,aAAA,CAAC,+BACCA,OAAAA,CAAA,cAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,sBAClBA,OAAAA,CAAA,cAAC,IAAA,EAAA,IAAA,EAAI,cAAe,CACtB,CACF;AAAA;AACF;AACF,GACF;AAEJ;ACrUA,IAAM,EAAA,GAAc;AAAA,EAClB,QAAA,EAAU,UAAA;AAAA,EACV,GAAA,EAAK,CAAA;AAAA,EACL,IAAA,EAAM,GAAA;AAAA,EACN,YAAA,EAAc,EAAA;AAAA,EACd,QAAA,EAAU,GAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAA;AAEA,SAAS6H,aAAAA,CAAa,SAAiBlH,SAAAA,EAAoD;AApB3F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqBE,EAAA,MAAM,KAAA,GAAQA,UAAS,OAAO,CAAA;AAC9B,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,MAAA,GAA8B,EAAE,CAAC,OAAO,GAAG,KAAA,EAAM;AAGvD,EAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,IAAA,MAAM,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,CAAK,UAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,WAAA,KAAlB,YAAiC,EAAC;AACtD,IAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQkH,aAAAA,CAAa,OAAA,EAASlH,SAAQ,CAAC,CAAA;AAAA,IACvD;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,kBAAA,EAAoB;AACrC,IAAA,MAAM,WAAU,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAA,CAAK,UAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,OAAA,KAAlB,YAA6B,EAAC;AAC9C,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,KAAA,MAAW,OAAA,IAAA,CAAW,EAAA,GAAA,GAAA,CAAI,WAAA,KAAJ,IAAA,GAAA,EAAA,GAAmB,EAAC,EAAG;AAC3C,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQkH,aAAAA,CAAa,OAAA,EAASlH,SAAQ,CAAC,CAAA;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,aAAA,EAAe;AAChC,IAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,CAAM,IAAA,CAAK,WAAA,KAAX,YAA0B,EAAC;AAC/C,IAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQkH,aAAAA,CAAa,OAAA,EAASlH,SAAQ,CAAC,CAAA;AAAA,IACvD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAKe,SAAR,QAAA,CAA0B,EAAE,OAAA,EAAQ,EAAU;AACnD,EAAA,MAAMA,YAAW,WAAA,EAAY;AAE7B,EAAA,MAAM,oBAAoB,MAAM;AAzDlC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0DI,IAAA,MAAM,iBAAA,GAAoB,CAAC,WAAA,KAA6C;AACtE,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAO,WAAA;AAAA,MACT;AACA,MAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,OAAO,CAAA;AAAA,IAChD,CAAA;AACA,IAAA,MAAM,YAA6B,cAAA,CAAA,EAAA,EAAKA,SAAAA,CAAAA;AACxC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA;AAAA,MACF;AACA,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,aAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACX,KAAA,CAAA,EADW;AAAA,YAEd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,KAAA,CAAM,IAAA,CAAA,EADL;AAAA,cAEJ,WAAA,EAAa,iBAAA,CAAkB,KAAA,CAAM,IAAA,CAAK,WAAW;AAAA,aACvD;AAAA,WACF,CAAA;AACA,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACX,KAAA,CAAA,EADW;AAAA,YAEd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,KAAA,CAAM,IAAA,CAAA,EADL;AAAA,cAEJ,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EADT;AAAA,gBAEL,aAAa,iBAAA,CAAA,CAAkB,EAAA,GAAA,KAAA,CAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,WAAW;AAAA,eAC9D;AAAA,aACF;AAAA,WACF,CAAA;AACA,UAAA;AAAA,QACF,KAAK,kBAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI;AAAA,YACd,IAAA,EAAM,kBAAA;AAAA,YACN,IAAA,EAAM;AAAA,cACJ,KAAA,EAAO,MAAM,IAAA,CAAK,KAAA;AAAA,cAClB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EADT;AAAA,gBAEL,OAAA,EAAA,CAAS,iBAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,OAAA,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,kBAC9C,WAAA,EAAa,iBAAA,CAAkB,CAAA,CAAE,WAAW;AAAA,iBAC9C,CAAA;AAAA,eACF;AAAA;AACF,WACF;AACA,UAAA;AAAA,QACF;AACE,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,KAAA;AAAA;AACpB,IACF;AACA,IAAA,OAAO,UAAU,OAAO,CAAA;AACxB,IAAA,aAAA,CAAc,SAAS,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,MAAA,GAASkH,aAAAA,CAAa,OAAA,EAASlH,SAAQ,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,CAAU,EAAE,qBAAqB,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,MAAA,EAAQ,CAAA;AAC1F,IAAA,SAAA,CAAU,SAAA,CAAU,UAAU,OAAO,CAAA;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,SAAA,KAA6B;AAxHxD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyHI,IAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAqC;AAC5D,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA;AACjC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AACA,MAAA,MAAM,WAAA,GAAc,CAAC,GAAG,GAAG,CAAA;AAC3B,MAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,KAAA,GAAQ,CAAA,EAAG;AACnC,QAAA,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG,WAAA,CAAY,QAAQ,CAAC,CAAC,CAAA,GAAI,CAAC,YAAY,KAAA,GAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,MAC5F,WAAW,SAAA,KAAc,MAAA,IAAU,KAAA,GAAQ,WAAA,CAAY,SAAS,CAAA,EAAG;AACjE,QAAA,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG,WAAA,CAAY,QAAQ,CAAC,CAAC,CAAA,GAAI,CAAC,YAAY,KAAA,GAAQ,CAAC,CAAA,EAAG,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,MAC5F;AACA,MAAA,OAAO,WAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,YAA6B,cAAA,CAAA,EAAA,EAAKA,SAAAA,CAAAA;AACxC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA;AAAA,MACF;AACA,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,aAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACX,KAAA,CAAA,EADW;AAAA,YAEd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,KAAA,CAAM,IAAA,CAAA,EADL;AAAA,cAEJ,WAAA,EAAa,eAAA,CAAgB,KAAA,CAAM,IAAA,CAAK,WAAW;AAAA,aACrD;AAAA,WACF,CAAA;AACA,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EACX,KAAA,CAAA,EADW;AAAA,YAEd,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACD,KAAA,CAAM,IAAA,CAAA,EADL;AAAA,cAEJ,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EADT;AAAA,gBAEL,aAAa,eAAA,CAAA,CAAgB,EAAA,GAAA,KAAA,CAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,WAAW;AAAA,eAC5D;AAAA,aACF;AAAA,WACF,CAAA;AACA,UAAA;AAAA,QACF,KAAK,kBAAA;AACH,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI;AAAA,YACd,IAAA,EAAM,kBAAA;AAAA,YACN,IAAA,EAAM;AAAA,cACJ,KAAA,EAAO,MAAM,IAAA,CAAK,KAAA;AAAA,cAClB,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,KAAA,CAAM,IAAA,CAAK,KAAA,CAAA,EADT;AAAA,gBAEL,OAAA,EAAA,CAAS,iBAAM,IAAA,CAAK,KAAA,KAAX,mBAAkB,OAAA,KAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,kBAC9C,WAAA,EAAa,eAAA,CAAgB,CAAA,CAAE,WAAW;AAAA,iBAC5C,CAAA;AAAA,eACF;AAAA;AACF,WACF;AACA,UAAA;AAAA,QACF;AACE,UAAA,SAAA,CAAU,EAAE,CAAA,GAAI,KAAA;AAAA;AACpB,IACF;AAEA,IAAA,aAAA,CAAc,SAAS,CAAA;AACvB,IAAA,kBAAA,CAAmB,OAAO,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAC,SAAM,EAAA,EAAQ,OAAA,EAAS,CAAC,EAAA,KAAO,EAAA,CAAG,eAAA,EAAgB,EAAA,kBACjDA,OAAAA,CAAA,aAAA,CAACiB,OAAA,IAAA,kBACCjB,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,EAAE,cAAA,EAAgB,SAAS,GAAG,SAAA,EAAU,YAAA,EAAA,kBACtDnF,OAAAA,CAAA,aAAA,CAACsF,YAAA,EAAW,YAAA,EAAY,EAAE,cAAA,EAAgB,SAAS,GAAG,OAAA,EAAS,MAAM,gBAAgB,IAAI,CAAA,EAAG,EAAA,EAAI,EAAE,OAAO,cAAA,EAAe,EAAA,kBACtHtF,OAAAA,CAAA,aAAA,CAAC,uBAAoB,QAAA,EAAS,OAAA,EAAQ,CACxC,CACF,mBACAA,OAAAA,CAAA,cAACmF,OAAAA,EAAA,EAAQ,OAAO,CAAA,CAAE,gBAAA,EAAkB,WAAW,CAAA,EAAG,WAAU,YAAA,EAAA,kBAC1DnF,QAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,YAAA,EAAY,CAAA,CAAE,kBAAkB,WAAW,CAAA,EAAG,SAAS,MAAM,eAAA,CAAgB,MAAM,CAAA,EAAG,EAAA,EAAI,EAAE,KAAA,EAAO,cAAA,EAAe,EAAA,kBAC5HtF,QAAA,aAAA,CAAC,qBAAA,EAAA,EAAsB,UAAS,OAAA,EAAQ,CAC1C,CACF,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAACmF,SAAA,EAAQ,KAAA,EAAO,EAAE,WAAA,EAAa,YAAY,GAAG,SAAA,EAAU,YAAA,EAAA,kBACtDnF,OAAAA,CAAA,cAACsF,UAAAA,EAAA,EAAW,cAAY,CAAA,CAAE,WAAA,EAAa,YAAY,CAAA,EAAG,OAAA,EAAS,iBAAiB,EAAA,EAAI,EAAE,OAAO,cAAA,EAAe,EAAA,kBAC1GtF,OAAAA,CAAA,aAAA,CAACwF,qBAAA,EAAoB,QAAA,EAAS,OAAA,EAAQ,CACxC,CACF,CAAA,kBACAxF,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,QAAQ,GAAG,SAAA,EAAU,YAAA,EAAA,kBACpDnF,OAAAA,CAAA,aAAA,CAACsF,YAAA,EAAW,YAAA,EAAY,CAAA,CAAE,aAAA,EAAe,QAAQ,CAAA,EAAG,OAAA,EAAS,mBAAmB,EAAA,EAAI,EAAE,OAAO,cAAA,EAAe,EAAA,kBAC1GtF,OAAAA,CAAA,aAAA,CAAC8F,gBAAA,EAAe,QAAA,EAAS,SAAQ,CACnC,CACF,CACF,CACF,CAAA;AAEJ;;;ACjMe,SAAR,kBAAA,CAAoC,EAAE,QAAA,EAAS,EAA6B;AACjF,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI9E,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAElC,EAAA,MAAM,cAAA,GAAA,CAAiB,+CAAe,QAAA,MAAa,OAAA;AAEnD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,IAAA,OAAA,GAAU,8BAAA;AAAA,EACZ,CAAA,MAAA,IAAY,WAAA,IAAe,CAAC,aAAA,IAAkB,mBAAmB,OAAA,EAAS;AACxE,IAAA,OAAA,GAAU,gCAAA;AAAA,EACZ;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,uBAAOhB,OAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAkB,CAAA;AAAA,EACrC,CAAA;AAMA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAW,CAAA,IAAK,eAAA,KAAoB,OAAA;AAE9D,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAuC;AAC9D,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,CAAA,CAAE,aAAa,aAAA,GAAgB,MAAA;AAC/B,IAAA,CAAA,CAAE,YAAA,CAAa,OAAA,CAAQ,YAAA,EAAc,OAAO,CAAA;AAC5C,IAAA,gBAAA,CAAiB,EAAE,QAAA,EAAU,OAAA,EAAS,YAAA,EAAc,WAAA,CAAY,QAAQ,CAAA;AAAA,EAC1E,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,MAAA;AAAA,QACV,aAAA,EAAe,MAAA;AAAA,QACf,OAAA;AAAA,QACA,OAAA,EAAS,iBAAiB,GAAA,GAAM,CAAA;AAAA,QAChC,MAAA,EAAQ,SAAA,GAAa,aAAA,GAAgB,UAAA,GAAa,SAAA,GAAa;AAAA,OACjE;AAAA,MACA,YAAA,EAAc,CAAC,EAAA,KAAO;AACpB,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,EAAA,CAAG,eAAA,EAAgB;AAAA,MACrB,CAAA;AAAA,MACA,cAAc,MAAM;AAClB,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,kBAAA,CAAmB,OAAO,CAAA;AAC1B,QAAA,EAAA,CAAG,eAAA,EAAgB;AAAA,MACrB;AAAA,KAAA;AAAA,IAEC,UAAA,EAAW;AAAA,IACX;AAAA,GACH;AAEJ;ACvFA,SAASb,eAAc,UAAA,EAAuC;AAC5D,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAEA,IAAMF,eAAa,CAAC,OAAA,KAClB,OAAA,GAAU,CAAA,EAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,MAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAAO,MAAA;AAE1F,SAAS2H,mBAAkB,KAAA,EAA6B;AAhCxD,EAAA,IAAA,EAAA;AAiCE,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAA,KAAP,IAAA,GAAA,EAAA,GAAsB,mBAAA,CAAoB,WAAA;AAC9D,EAAA,QAAQ,WAAA;AAAa,IACnB,KAAK,WAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAO,CAAA;AAAA;AAEb;AAEA,SAASC,sBAAqB,KAAA,EAA6B;AA7C3D,EAAA,IAAA,EAAA;AA8CE,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,mBAAA,CAAoB,IAAA;AAChD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,CAAC,GAAG,CAAC,CAAA;AAAA,IACd,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,GAAG,EAAE,CAAA;AAAA,IACf,KAAK,OAAA;AACH,MAAA,OAAO,CAAC,IAAI,EAAE,CAAA;AAAA,IAChB,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,CAAC,IAAI,EAAE,CAAA;AAAA;AAEpB;AAEe,SAAR,YAAA,CAA8B,EAAE,KAAA,EAAO,KAAA,EAAM,EAAgB;AA5DpE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6DE,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,aAAa,eAAA,KAAoB,OAAA;AAEvC,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,mBAAA,CAAoB,IAAA;AAChD,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,mBAAA,CAAoB,SAAA;AAC1D,EAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,mBAAA,CAAoB,eAAA;AACtE,EAAA,MAAM,qBAAA,GAAA,CAAwB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,qBAAA,KAAP,IAAA,GAAA,EAAA,GAAgC,mBAAA,CAAoB,qBAAA;AAElF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI/G,SAAS,IAAI,CAAA;AAE/C,EAAAO,UAAU,MAAM;AACd,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,OAAA,GAAUwG,sBAAqB,KAAK,CAAA;AAE1C,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAAS5H,YAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO;AAAA,GACpC;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,KAAA,EAAO,eAAA;AAAA,IACP,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,EAAA;AAAA,IAC7B,UAAA,EAAYE,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA;AAAA,IAC3C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,eAAA,EAAiB,qBAAA;AAAA,IACjB,YAAA,EAAcyH,mBAAkB,KAAK,CAAA;AAAA,IACrC,OAAA,EAAS,YAAY,OAAA,GAAU,cAAA;AAAA,IAC/B,OAAA,EAAS,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtC,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2C;AACnE,IAAA,MAAM,OAAA,GAAU,EAAE,MAAA,CAAO,KAAA;AACzB,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,KAAA,EAAO,iCACF,KAAA,CAAA,EADE;AAAA,YAEL,IAAA,EAAM;AAAA,WACR;AAAA;AACF;AACF,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,UAAA,GAA4B,iCAC7B,SAAA,CAAA,EAD6B;AAAA,MAEhC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO,YAAY,MAAA,GAAS,MAAA;AAAA,MAC5B,SAAA,EAAW;AAAA,KACb,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAA8C;AA3HtE,MAAA,IAAA9E,GAAAA,EAAAC,GAAAA;AA4HM,MAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,MAAA,sBAAA,CAAuB;AAAA,QACrB,OAAA;AAAA,QACA,KAAA,EAAO,MAAA;AAAA,QACP,iBAAgBD,GAAAA,GAAA,EAAA,CAAG,mBAAH,IAAA,GAAAA,GAAAA,GAAqB,GAAG,KAAA,CAAM,MAAA;AAAA,QAC9C,eAAcC,GAAAA,GAAA,EAAA,CAAG,iBAAH,IAAA,GAAAA,GAAAA,GAAmB,GAAG,KAAA,CAAM;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,uBACEjD,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,YAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,CAAC,CAAA;AAAA,QACd,CAAA;AAAA,QACA,KAAA,EAAO;AAAA;AAAA,KAEX,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,YAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,6BACXA,OAAAA,CAAA,cAAC,MAAA,EAAA,IAAA,EAAM,IAAK,CACd,CACF,CAAA;AAEJ;ACnJO,SAAS,mBAAmB,EAAE,IAAA,EAAM,UAAA,EAAY,UAAA,EAAY,gBAAe,EAAY;AAC5F,EAAA,MAAM,WAAA,GAAc+C,OAAmC,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI/B,QAAAA,CAAmC,EAAE,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA;AACzF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAgC,MAAM,CAAA;AAC9E,EAAA,MAAM,mBAAA,GAAsB+B,OAAwC,IAAI,CAAA;AAExE,EAAA,MAAM,OAAA,GAAUA,OAAO,IAAI,CAAA;AAC3B,EAAAxB,UAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,aAAA,GAAgBoG,WAAAA;AAAA,IACpB,CAAC,OAAe,GAAA,KAAgB;AAC9B,MAAA,MAAM,IAAA,GAAO,EAAE,KAAA,EAAO,GAAA,EAAI;AAC1B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAiB,IAAA,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAEA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,CAAA,KAAiD;AAjCtD,MAAA,IAAA,EAAA,EAAA,EAAA;AAkCM,MAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,MAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,EAAA,CAAG,cAAA,KAAH,IAAA,GAAA,EAAA,GAAqB,GAAG,KAAA,CAAM,MAAA;AAC5C,MAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,EAAA,CAAG,YAAA,KAAH,IAAA,GAAA,EAAA,GAAmB,GAAG,KAAA,CAAM,MAAA;AACxC,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAApG,UAAU,MAAM;AACd,IAAA,MAAM,SAAS,mBAAA,CAAoB,OAAA;AACnC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,EAAA,CAAG,KAAA,EAAM;AACT,IAAA,EAAA,CAAG,iBAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AAC7C,IAAA,aAAA,CAAc,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AACtC,IAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,EAChC,CAAA,EAAG,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAExB,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,SAAA,CAAU,KAAA,KAAU,UAAU,GAAA,EAAK;AACpD,MAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,UAAU,KAAA,EAAO,SAAA,CAAU,GAAG,CAAC,CAAA;AAE/C,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,EAAgB,MAAA,KAAmB;AA3D5D,IAAA,IAAA,EAAA,EAAA,EAAA;AA4DI,IAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,IAAA,IAAI,CAAC,EAAA,EAAI;AAKT,IAAA,IAAI,KAAA,GAAA,CAAQ,EAAA,GAAA,EAAA,CAAG,cAAA,KAAH,IAAA,GAAA,EAAA,GAAqB,SAAA,CAAU,KAAA;AAC3C,IAAA,IAAI,GAAA,GAAA,CAAM,EAAA,GAAA,EAAA,CAAG,YAAA,KAAH,IAAA,GAAA,EAAA,GAAmB,SAAA,CAAU,GAAA;AACvC,IAAA,IAAI,UAAU,GAAA,EAAK;AACjB,MAAA,KAAA,GAAQ,SAAA,CAAU,KAAA;AAClB,MAAA,GAAA,GAAM,SAAA,CAAU,GAAA;AAAA,IAClB;AACA,IAAA,IAAI,UAAU,GAAA,EAAK;AACnB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,MAAM,UAAU,CAAA,EAAG,MAAM,CAAA,EAAG,QAAQ,GAAG,MAAM,CAAA,CAAA;AAC7C,IAAA,MAAM,UAAU,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,GAAG,KAAK,CAAA,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAQ,MAAA,CAAO,MAAA;AAChC,IAAA,MAAM,MAAA,GAAS,WAAW,QAAA,CAAS,MAAA;AACnC,IAAA,mBAAA,CAAoB,OAAA,GAAU,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,MAAA,EAAO;AAC7D,IAAA,UAAA,CAAW,OAAO,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,CAAc,IAAA,EAAM,IAAI,CAAA;AACjD,EAAA,MAAM,YAAA,GAAe,MAAM,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA;AACjD,EAAA,MAAM,eAAA,GAAkB,MAAM,aAAA,CAAc,KAAA,EAAO,MAAM,CAAA;AACzD,EAAA,MAAM,cAAA,GAAiB,MACrB,aAAA,CAAc,yCAAA,EAA2C,SAAS,CAAA;AAEpE,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAiD;AACnE,IAAA,IAAI,SAAA,CAAU,KAAA,KAAU,SAAA,CAAU,GAAA,EAAK;AACvC,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,eAAe,MAAM;AA/F7B,IAAA,IAAA,EAAA;AAgGI,IAAA,eAAA,CAAgB,MAAM,CAAA;AACtB,IAAA,CAAA,EAAA,GAAA,WAAA,CAAY,YAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,EAAA;AAAA,EACvB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,UAAA,CAAW,MAAM,CAAA;AACjD,EAAA,MAAM,kBAAA,GAAqB,MAAM,UAAA,CAAW,OAAO,CAAA;AACnD,EAAA,MAAM,iBAAA,GAAoB,MAAM,UAAA,CAAW,MAAM,CAAA;AAEjD,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAgB;AACxC,IAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,IAAA,MAAM,MAAM,SAAA,CAAU,GAAA;AACtB,IAAA,IAAI,UAAU,GAAA,EAAK;AACjB,MAAA,eAAA,CAAgB,MAAM,CAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA;AACpC,IAAA,MAAM,UAAU,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,GAAG,KAAK,CAAA,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,QAAQ,OAAA,CAAQ,MAAA;AACjC,IAAA,mBAAA,CAAoB,OAAA,GAAU,EAAE,KAAA,EAAO,QAAA,EAAU,KAAK,QAAA,EAAS;AAC/D,IAAA,UAAA,CAAW,OAAO,CAAA;AAClB,IAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAkB;AAC3C,IAAA,aAAA,CAAc,CAAA,oBAAA,EAAuB,KAAK,CAAA,EAAA,CAAA,EAAM,SAAS,CAAA;AACzD,IAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,UAAA,KAAuB;AAC/C,IAAA,aAAA,CAAc,CAAA,0BAAA,EAA6B,UAAU,CAAA,EAAA,CAAA,EAAM,SAAS,CAAA;AACpE,IAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAgD;AACrE,IAAA,IAAI,EAAE,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,CAAA,EAAU;AAC/B,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY;AAC9B,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,UAAA,EAAW;AAAA,IACb,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,EAAa;AAAA,IACf,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,eAAA,EAAgB;AAAA,IAClB,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,iBAAA,EAAkB;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAiB,UAAA,KAAe,SAAA,CAAU,KAAA,KAAU,SAAA,CAAU,OAAO,YAAA,KAAiB,MAAA,CAAA;AAE5F,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,OAAA,EAAS,cAAA;AAAA,MACT,YAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa,eAAA;AAAA,MACb,UAAA,EAAY,cAAA;AAAA,MACZ,aAAA,EAAe,iBAAA;AAAA,MACf,YAAA,EAAc,gBAAA;AAAA,MACd,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,iBAAA;AAAA,MACf,aAAA,EAAe,iBAAA;AAAA,MACf,YAAA,EAAc,gBAAA;AAAA,MACd,cAAA,EAAgB;AAAA;AAClB,GACF;AACF;AC1IA,IAAM,YAAA,GAAwD;AAAA,EAC5D;AAAA,IACE,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,gBAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,cAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO;AAAA;AAEX,CAAA;AAEe,SAAR,uBAAA,CAAyC;AAAA,EAC9C,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAU;AACR,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIP,SAAS,EAAE,CAAA;AACjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,SAAS,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAM,OAAO,CAAA,GAAIA,SAAS,YAAA,CAAa,CAAC,EAAE,KAAK,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS+B,OAAyB,IAAI,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAWA,OAAyB,IAAI,CAAA;AAE9C,EAAAxB,UAAU,MAAM;AACd,IAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,MAAA,MAAA,CAAO,EAAE,CAAA;AACT,MAAA,UAAA,CAAW,MAAG;AA5FpB,QAAA,IAAA,EAAA;AA4FuB,QAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,YAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,KAAA,EAAA;AAAA,MAAA,CAAA,EAAS,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAA,IAAW,iBAAiB,OAAA,EAAS;AACnC,MAAA,QAAA,CAAS,SAAS,CAAA;AAGlB,MAAA,UAAA,CAAW,MAAG;AAjGpB,QAAA,IAAA,EAAA;AAiGuB,QAAA,OAAA,CAAA,EAAA,GAAA,QAAA,CAAS,YAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA,EAAA;AAAA,MAAA,CAAA,EAAS,CAAC,CAAA;AAAA,IAC/C,CAAA,MAAA,IAAW,iBAAiB,MAAA,EAAQ;AAClC,MAAA,OAAA,CAAQ,YAAA,CAAa,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,IAC/B;AAAA,EACF,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB,CAAA,CAAE,cAAA,EAAe;AAE9D,EAAA,uBACEvB,QAAA,aAAA,CAAC,MAAA,EAAA,EAAO,MAAM,OAAA,EAAS,QAAA,EAAoB,SAAA,EAAU,WAAA,EAAY,KAAA,EAAO,EAAE,QAAQ,IAAA,EAAK,EAAA,kBACrFA,OAAAA,CAAA,aAAA,CAACgI,KAAAA,EAAA,EAAM,SAAA,EAAW,CAAA,EAAG,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAK,IAAI,IAAA,EAAM,EAAA,EAAI,GAAA,EAAI,EAAG,WAAA,EAAa,WAAA,EAAA,EACnE,iBAAiB,MAAA,mBAChBhI,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,UAAA,EAAW,QAAA,EAAS,OAAA,EAAS,GAAA,EAAK,EAAA,EAAI,EAAE,EAAA,EAAI,GAAA,EAAI,EAAA,kBACrEjB,OAAAA,CAAA,aAAA;AAAA,IAAC2B,SAAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,MAAA;AAAA,MACV,KAAA,EAAO,GAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACtC,WAAA,EAAY,qBAAA;AAAA,MACZ,OAAA,EAAQ,UAAA;AAAA,MACR,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,UAAA,IAAI,OAAA,eAAsB,OAAO,CAAA;AAAA,eAC5B,cAAA,EAAe;AAAA,QACtB,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU;AAC7B,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,cAAA,EAAe;AAAA,QACjB;AAAA,MACF,CAAA;AAAA,MACA,EAAA,EAAI,EAAE,KAAA,EAAO,GAAA;AAAI;AAAA,GAErB,IACE,YAAA,KAAiB,OAAA,mBACnB3B,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,YAAW,QAAA,EAAS,OAAA,EAAS,GAAA,EAAK,EAAA,EAAI,EAAE,EAAA,EAAI,KAAK,EAAA,EAAI,IAAA,EAAK,EAAA,kBAC/EjB,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,IAAA,EAAK,OAAA;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AACnB,QAAA,QAAA,CAAS,CAAC,CAAA;AAGV,QAAA,aAAA,CAAc,CAAC,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,CAAA,EAAG,UAAA,EAAY,aAAA,EAAe,QAAQ,SAAA;AAAU;AAAA,GAC3G,kBACAA,OAAAA,CAAA,aAAA,CAACsF,YAAA,EAAW,IAAA,EAAK,SAAQ,OAAA,EAAS,cAAA,EAAgB,OAAO,CAAA,CAAE,eAAA,EAAiB,QAAQ,CAAA,EAAA,kBAClFtF,QAAA,aAAA,CAAC,uBAAA,EAAA,EAAwB,UAAS,OAAA,EAAQ,CAC5C,CACF,CAAA,GACE,YAAA,KAAiB,yBACnBA,OAAAA,CAAA,cAACiB,KAAAA,EAAA,EAAM,WAAU,KAAA,EAAM,UAAA,EAAW,UAAS,OAAA,EAAS,GAAA,EAAK,IAAI,EAAE,EAAA,EAAI,KAAK,EAAA,EAAI,IAAA,EAAK,EAAA,kBAC/EjB,OAAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,QAAA,MAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AACnB,QAAA,OAAA,CAAQ,CAAC,CAAA;AAET,QAAA,YAAA,CAAa,CAAC,CAAA;AAAA,MAChB,CAAA;AAAA,MACA,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAQ,UAAA;AAAA,MACR,EAAA,EAAI,EAAE,QAAA,EAAU,GAAA,EAAK,UAAU,EAAA;AAAG,KAAA;AAAA,IAEjC,YAAA,CAAa,IAAI,CAAC,GAAA,qBACjBA,OAAAA,CAAA,aAAA,CAAC2F,QAAAA,EAAA,EAAS,GAAA,EAAK,GAAA,CAAI,OAAO,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,EAAA,EAAI,EAAE,UAAA,EAAY,IAAI,KAAA,EAAM,EAAA,EACrE,GAAA,CAAI,KACP,CACD;AAAA,GACH,kBACA3F,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,cAAA,EAAgB,KAAA,EAAO,CAAA,CAAE,iBAAiB,QAAQ,CAAA,EAAA,kBAClFtF,OAAAA,CAAA,aAAA,CAACiI,kBAAAA,EAAA,EAAmB,QAAA,EAAS,OAAA,EAAQ,CACvC,CACF,CAAA,mBAEAjI,QAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,wBAC9BjB,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,SAAQ,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,cAAc,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,cAAA,EAAgB,MAAM,CAAA,EAAA,kBAC/HtF,OAAAA,CAAA,cAAC,kBAAA,EAAA,EAAmB,QAAA,EAAS,OAAA,EAAQ,CACvC,CAAA,kBACAA,QAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,UAAU,KAAA,EAAO,CAAA,CAAE,yBAAA,EAA2B,gBAAgB,CAAA,EAAG,YAAA,EAAY,EAAE,gBAAA,EAAkB,QAAQ,CAAA,EAAA,kBACzItF,OAAAA,CAAA,aAAA,CAAC,wBAAqB,QAAA,EAAS,OAAA,EAAQ,CACzC,CAAA,kBACAA,OAAAA,CAAA,cAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,WAAA,EAAa,OAAO,CAAA,CAAE,4BAAA,EAA8B,mBAAmB,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,mBAAA,EAAqB,WAAW,CAAA,EAAA,kBACxJtF,OAAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,EAAyB,QAAA,EAAS,SAAQ,CAC7C,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,KAAA,EAAO,CAAA,CAAE,oBAAoB,UAAU,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,kBAAA,EAAoB,UAAU,qBAClItF,OAAAA,CAAA,aAAA,CAAC,sBAAA,EAAA,EAAuB,QAAA,EAAS,OAAA,EAAQ,CAC3C,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,MAAK,OAAA,EAAQ,OAAA,EAAS,cAAA,EAAgB,KAAA,EAAO,CAAA,CAAE,oBAAA,EAAsB,YAAY,CAAA,EAAG,YAAA,EAAY,CAAA,CAAE,oBAAA,EAAsB,YAAY,CAAA,EAAA,kBAC9ItF,OAAAA,CAAA,aAAA,CAAC,uBAAA,EAAA,EAAwB,QAAA,EAAS,OAAA,EAAQ,CAC5C,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,SAAS,aAAA,EAAe,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,aAAa,CAAA,EAAG,cAAY,CAAA,CAAE,qBAAA,EAAuB,aAAa,CAAA,EAAA,kBACjJtF,OAAAA,CAAA,aAAA,CAACiI,kBAAAA,EAAA,EAAmB,QAAA,EAAS,OAAA,EAAQ,CACvC,CAAA,kBACAjI,QAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,eAAe,KAAA,EAAO,CAAA,CAAE,uBAAA,EAAyB,cAAc,CAAA,EAAG,YAAA,EAAY,EAAE,cAAA,EAAgB,MAAM,CAAA,EAAA,kBACtItF,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAS,OAAA,EAAQ,CACjC,CACF,CAEJ,CACF,CAAA;AAEJ;;;ACjMA,SAASK,eAAc,UAAA,EAAuC;AAC5D,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAGA,SAASF,aAAW,OAAA,EAAc;AAChC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAGrB,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,CAAC,MAAM,OAAA,CAAQ,OAAO,CAAA,IACrD,KAAA,IAAS,WAAW,OAAA,IAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,UAAU,OAAA,EAAS;AACtF,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA;AAAA,EAChF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtB;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,MAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtE;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,GAAG,OAAO,CAAA,EAAA,CAAA;AAAA,EACnB;AAEA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS+H,aAAY,KAAA,EAA2B;AAC9C,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,EAAA;AAAA;AAEb;AAEe,SAAR,aAAA,CAA+B,EAAE,KAAA,EAAO,KAAA,EAAM,EAAiB;AAnFtE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoFE,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAMvH,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,aAAa,eAAA,KAAoB,OAAA;AAEvC,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,oBAAA,CAAqB,KAAA;AACnD,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,oBAAA,CAAqB,IAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIK,SAAS,WAAW,CAAA;AACtD,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,KAAA;AAEtC,EAAA,MAAM,YAAYL,SAAAA,CAAS,IAAA;AAC3B,EAAA,MAAM,cAAA,GAAiB,aAAa,SAAA,CAAU,IAAA,KAAS,gBACnDN,cAAAA,CAAc,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA,GACvC,qCAAA;AAEJ,EAAAkB,UAAU,MAAM;AACd,IAAA,YAAA,CAAa,WAAW,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAA,GAAalB,cAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA,IAAK,cAAA;AAEvD,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,gBAAe,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,aAAA,KAAiB,OAAO,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IAC3E,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA;AAAA,IACA,QAAA,EAAU6H,aAAY,KAAK,CAAA;AAAA,IAC3B,OAAA,EAAS/H,YAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO,CAAA;AAAA,IAClC,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,aAAA,GAA+B,iCAChC,MAAA,CAAA,EADgC;AAAA,IAEnC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,MAAA;AAAA,IACR,eAAA,EAAiB,aAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAA,CAAY,EAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,SAAA;AAAA,IACjC,MAAA,EAAQ,CAAA;AAAA,IACR,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,EAAiB,IAAA,KAAwC;AAC3E,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,KAAA,EAAO,gDACF,KAAA,CAAA,EADE;AAAA,YAEL,IAAA,EAAM;AAAA,WAAA,CAAA,EAAA,CACF,6BAAM,cAAA,IAAiB,EAAE,QAAA,EAAU,IAAA,KAAS,EAAC;AAAA;AAErD;AACF,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA8C;AACtE,IAAA,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EAC3B,CAAA;AAIA,EAAA,MAAM,UAAA,GAAa4C,OAAkC,IAAI,CAAA;AACzD,EAAA,MAAM,oBAAA,GAAuBA,OAAe,CAAC,CAAA;AAE7C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,OAAA,EAAS;AACrC,MAAA,MAAM,CAAA,GAAI,WAAW,OAAA,CAAQ,YAAA;AAC7B,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,oBAAA,CAAqB,OAAA,GAAU,CAAA;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,UAAA,EAAY,WAAA,EAAa,UAAA,EAAY,KAAK,CAAC,CAAA;AAE/C,EAAA,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAiC;AAC7D,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACvB,IAAA,MAAM,UAAU,OAAA,CAAQ,YAAA;AACxB,IAAA,MAAM,QAAQ,oBAAA,CAAqB,OAAA;AACnC,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,CAAC,CAAA,EAAA,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,YAAA,KAAiB,kBAAA,CAAmB;AAAA,IAClF,IAAA,EAAM,SAAA;AAAA,IACN,UAAA;AAAA,IACA,UAAA,EAAY,CAAC,OAAA,KAAY,UAAA,CAAW,SAAS,EAAE,cAAA,EAAgB,MAAM,CAAA;AAAA,IACrE,cAAA,EAAgB,CAAC,GAAA,KAAQ;AACvB,MAAA,sBAAA,CAAuB;AAAA,QACrB,OAAA;AAAA,QACA,KAAA,EAAO,MAAA;AAAA,QACP,gBAAgB,GAAA,CAAI,KAAA;AAAA,QACpB,cAAc,GAAA,CAAI;AAAA,OACnB,CAAA;AAAA,IACH;AAAA,GACD,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,WAAA,CAAY,OAAA,EAAS,oBAAA,CAAqB,WAAA,CAAY,OAAO,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,SAAA,EAAW,UAAU,CAAC,CAAA;AAE1B,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACE/C,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,CAAC,CAAA;AAAA,QACd,CAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAC,CAAA,KAAM,oBAAA,CAAqB,EAAE,MAA6B;AAAA;AAAA,KACtE,kBACAA,OAAAA,CAAA,aAAA,CAAC,0CAAwB,QAAA,EAAU,WAAA,CAAY,OAAA,EAAA,EAAa,YAAA,CAAc,CAC5E,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,eAEF,UAAA,GACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,uBAAA,EAAyB,EAAE,MAAA,EAAQ,0BAAA,CAA2B,WAAW,CAAA;AAAE,MAE7E,EAAE,GAAA,EAAK,YAAY,KAAA,EAAO,MAAA,EAAQ,UAAU,WAAA,EAAY;AAE5D,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,IAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,YAAA,CAAc,CAAA;AAAA,IAC/B,KAAK,IAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,YAAA,CAAc,CAAA;AAAA,IAC/B,KAAK,IAAA;AACH,MAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,cAAA,CAAA,EAAA,EAAO,YAAA,CAAc,CAAA;AAAA;AAEnC;ACrOe,SAAR,UAAA,CAA4B,EAAE,KAAA,EAAO,KAAA,EAAM,EAAc;AALhE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAME,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,aAAa,eAAA,KAAoB,OAAA;AAEvC,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,EAAA;AACpC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIgB,SAAS,QAAQ,CAAA;AAE3D,EAAAO,UAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,QAAA,GAA0B;AAAA,IAC9B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,MAAA;AAAA,IAC7B,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,UAAS,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,IACZ,GAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAA,EAAM,MAAM,OAAA,CAAQ,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAC/F;AAAA,GACN;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA8C;AAClE,IAAA,MAAM,WAAA,GAAc,EAAE,MAAA,CAAO,KAAA;AAC7B,IAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,KAAA,EAAO,iCACF,KAAA,CAAA,EADE;AAAA,YAEL,QAAA,EAAU;AAAA,WACZ;AAAA;AACF;AACF,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAiC;AAC7D,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACvB,MAAA,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,YAAY,CAAA,EAAA,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,aAAA,GAA+B,iCAChC,QAAA,CAAA,EADgC;AAAA,MAEnC,UAAA,EAAY,4CAAA;AAAA,MACZ,QAAA,EAAU,EAAA;AAAA,MACV,KAAA,EAAA,CAAO,EAAA,GAAA,QAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,MAAA;AAAA,MACzB,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,MAAA,EAAQ,MAAA;AAAA,MACR,QAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,MAAA;AAAA,MACP,OAAA,EAAS,OAAA;AAAA,MACT,MAAA,EAAQ,CAAA;AAAA,MACR,eAAA,EAAiB;AAAA,KACnB,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAiD;AAnEzE,MAAA,IAAAyB,GAAAA,EAAAC,GAAAA;AAoEM,MAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,MAAA,sBAAA,CAAuB;AAAA,QACrB,OAAA;AAAA,QACA,KAAA,EAAO,UAAA;AAAA,QACP,iBAAgBD,GAAAA,GAAA,EAAA,CAAG,mBAAH,IAAA,GAAAA,GAAAA,GAAqB,GAAG,KAAA,CAAM,MAAA;AAAA,QAC9C,eAAcC,GAAAA,GAAA,EAAA,CAAG,iBAAH,IAAA,GAAAA,GAAAA,GAAmB,GAAG,KAAA,CAAM;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,uBACEjD,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,QAAA,EAAA,kBACVA,OAAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,aAAA;AAAA,QACP,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,CAAC,CAAA;AAAA,QACd,CAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAC,CAAA,KAAM,oBAAA,CAAqB,EAAE,MAA6B,CAAA;AAAA,QACpE,GAAA,EAAK,CAAC,EAAA,KAAO,EAAA,IAAM,qBAAqB,EAAE;AAAA;AAAA,KAE9C,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,QAAA,EAAU,CAAA;AAAA,EAC/B;AACA,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,UAAU,uBAAA,EAAyB,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAG,CAAA;AAC9E;ACjGA,SAASmI,qBAAAA,CAAqB,OAAe,IAAA,EAAkC;AAC7E,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,IAAA,GAAO,KAAA;AAAA,IAChB,KAAK,QAAA;AAAA,IACL;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEe,SAAR,eAAA,CAAiC,EAAE,KAAA,EAAO,KAAA,EAAM,EAAmB;AAjB1E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkBE,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,aAAa,eAAA,KAAoB,OAAA;AAEvC,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,sBAAA,CAAuB,QAAA;AAC3D,EAAA,MAAM,IAAA,GAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,sBAAA,CAAuB,IAAA;AACnD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,sBAAA,CAAuB,KAAA;AACrD,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,KAAP,IAAA,GAAA,EAAA,GAAkB,sBAAA,CAAuB,OAAA;AACzD,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,sBAAA,CAAuB,QAAA;AAC3D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,sBAAA,CAAuB,UAAA;AAC/D,EAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAA,KAAP,IAAA,GAAA,EAAA,GAAiB,sBAAA,CAAuB,MAAA;AACvD,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAC7D,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,sBAAA,CAAuB,SAAA;AAE7D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAInH,SAAS,QAAQ,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,OAAO,CAAA;AACxD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,OAAO,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,OAAO,CAAA;AAExD,EAAAO,UAAU,MAAM;AAAE,IAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAC3D,EAAAA,UAAU,MAAM;AAAE,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAC/C,EAAAA,UAAU,MAAM;AAAE,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAClD,EAAAA,UAAU,MAAM;AAAE,IAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACxD,EAAAA,UAAU,MAAM;AAAE,IAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACxD,EAAAA,UAAU,MAAM;AAAE,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAClD,EAAAA,UAAU,MAAM;AAAE,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAClD,EAAAA,UAAU,MAAM;AAAE,IAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAExD,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,KAAmC;AACtD,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,QACT,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,KAAA,EAAO,kCAAK,KAAA,CAAA,EAAU,OAAA;AAAA;AACxB;AACF,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,aAAA,GAA+B;AAAA,IACnC,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,YAAA,EAAc,CAAA;AAAA,IACd,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,MAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,WAAA,GAA6B;AAAA,IACjC,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,eAAA,EAAiB,aAAA;AAAA,IACjB,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,UAAS,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,IACZ,GAAG,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAA,EAAM,MAAM,OAAA,CAAQ,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA,GAC/F;AAAA,GACN;AAEA,EAAA,MAAM,YAAA,GAAe,QAAA,mBACnBvB,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,KAAK,IAAA,IAAQ,OAAA;AAAA,MACb,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,OAAA;AAAA,QACX,YAAA,EAAcmI,qBAAAA,CAAqB,UAAA,EAAY,SAAS,CAAA;AAAA,QACxD,OAAA,EAAS,OAAA;AAAA,QACT,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ;AAAA;AACV;AAAA,GACF,GACE,IAAA;AAEJ,EAAA,MAAM,eAAA,GAAkB,UAAA,mBACtBnI,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBACrCA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,aAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,gBAAA,CAAiB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAChG,WAAA,EAAY,+BAAA;AAAA,MACZ,KAAA,EAAO,kCAAK,SAAA,CAAA,EAAc,aAAA;AAAA;AAAA,GAE9B,CAAA,GACE,QAAA,mBACFA,OAAAA,CAAA,cAAC,GAAA,EAAA,EAAE,KAAA,EAAO,aAAA,EAAA,EAAgB,QAAS,CAAA,GACjC,IAAA;AAEJ,EAAA,MAAM,WAAA,GAAc,UAAA,mBAClBA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAA,kBACrCA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MACxF,WAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAO,kCAAK,SAAA,CAAA,EAAc,SAAA;AAAA;AAAA,GAC5B,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC1F,WAAA,EAAY,OAAA;AAAA,MACZ,KAAA,EAAO,kCAAK,SAAA,CAAA,EAAc,WAAA;AAAA;AAAA,GAC5B,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,YAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC9F,WAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO,kCAAK,SAAA,CAAA,EAAc,WAAA;AAAA;AAAA,GAC5B,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,YAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC9F,WAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO,kCAAK,SAAA,CAAA,EAAc,WAAA;AAAA;AAAA,GAC5B,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC1F,WAAA,EAAY,OAAA;AAAA,MACZ,KAAA,EAAO,gDAAK,SAAA,CAAA,EAAc,SAAA,CAAA,EAAnB,EAA8B,SAAA,EAAW,CAAA,EAAG,SAAS,OAAA,EAAQ;AAAA;AAAA,GACtE,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC1F,WAAA,EAAY,OAAA;AAAA,MACZ,OAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,SAAA,CAAA,EAAc,SAAA,CAAA,EAAnB,EAA8B,SAAS,OAAA,EAAQ;AAAA;AAAA,GACxD,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,YAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,QAAA,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAG,QAAA,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,MAAG,CAAA;AAAA,MAC9F,WAAA,EAAY,SAAA;AAAA,MACZ,OAAO,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAK,SAAA,CAAA,EAAc,SAAA,CAAA,EAAnB,EAA8B,SAAS,OAAA,EAAQ;AAAA;AAAA,GAE1D,CAAA,mBAEAA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,IAAA,EACE,IAAA,oBAAQA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,SAAA,EAAA,EAAY,IAAK,CAAA,EACnC,KAAA,oBAASA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAc,KAAM,CAAA,EACvC,OAAA,oBAAWA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAc,OAAQ,CAAA,EAC3C,OAAA,oBAAWA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAc,OAAQ,CAAA,EAAA,CAC1C,KAAA,IAAS,KAAA,IAAS,OAAA,qBAClBA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,WAAA,CAAA,EAAL,EAAkB,SAAA,EAAW,CAAA,EAAE,CAAA,EAAA,EACtC,KAAA,oBAASA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,SAAA,EAAA,EAAY,KAAM,CAAA,EACxC,KAAA,KAAU,KAAA,IAAS,OAAA,CAAA,oBAAYA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,WAAA,EAAA,EAAa,QAAU,CAAA,EACnE,KAAA,oBAASA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,SAAA,EAAA,EAAY,KAAM,CAAA,EACxC,KAAA,IAAS,OAAA,oBAAWA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,WAAA,EAAA,EAAa,QAAU,CAAA,EACxD,OAAA,oBAAWA,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,SAAA,EAAA,EAAY,OAAQ,CAC/C,CAAA,EAED,CAAC,IAAA,IAAQ,CAAC,KAAA,IAAS,CAAC,OAAA,IAAW,CAAC,KAAA,IAAS,CAAC,KAAA,IAAS,CAAC,OAAA,oBACnDA,OAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,WAAA,EAAA,EAAa,yBAAuB,CAElD,CAAA;AAGF,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,SAAI,KAAA,EAAO,YAAA,EAAA,EACT,iBACA,YAAA,oBAAgBA,QAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAAA,EAAI,YAAa,GAChE,WACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBACT,eAAA,kBACDA,OAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAA,EAAY,KAAI,WAAA,EAAY,GAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAK,cAAA,EAAA,kBACrDA,OAAAA,CAAA,aAAA,CAAC,OAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,IAAA,EACE,gCACCA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,eAAe,QAAA,EAAU,YAAA,EAAc,EAAA,EAAG,EAAA,EACpD,YACH,CAAA,kBAEFA,OAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,aAAA,EAAe,QAAA,EAAS,EAAA,EAClC,WACH,CACF,CACF,CACF,CACF,CAAA;AAEJ;ACxOA,SAASK,gBAAc,UAAA,EAAuC;AAC5D,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,aAAA;AACH,MAAA,OAAO,kEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,wFAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,6FAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,gHAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,uIAAA;AAAA,IACT,KAAK,cAAA;AACH,MAAA,OAAO,4DAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,uEAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,2DAAA;AAAA,IACT,KAAK,SAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA;AAEX,EAAA,OAAO,MAAA;AACT;AAGA,SAASF,aAAW,OAAA,EAAc;AAChC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAGrB,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,CAAC,MAAM,OAAA,CAAQ,OAAO,CAAA,IACrD,KAAA,IAAS,WAAW,OAAA,IAAW,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,UAAU,OAAA,EAAS;AACtF,IAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,IAAI,CAAA,EAAA,CAAA;AAAA,EAChF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtB;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,GAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,MAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IACtE;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,GAAG,OAAO,CAAA,EAAA,CAAA;AAAA,EACnB;AAEA,EAAA,OAAO,MAAA;AACT;AAEe,SAAR,UAAA,CAA4B,EAAE,KAAA,EAAO,KAAA,EAAM,EAAc;AAvEhE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwEE,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAMQ,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,aAAa,eAAA,KAAoB,OAAA;AAEvC,EAAA,MAAM,WAAA,GAAA,CAAc,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,IAAA,KAAP,IAAA,GAAA,EAAA,GAAe,iBAAA,CAAkB,IAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIK,SAAS,WAAW,CAAA;AACtD,EAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,KAAA;AAEtC,EAAA,MAAM,YAAYL,SAAAA,CAAS,IAAA;AAC3B,EAAA,MAAM,cAAA,GAAiB,aAAa,SAAA,CAAU,IAAA,KAAS,gBACnDN,eAAAA,CAAc,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA,GACvC,qCAAA;AAEJ,EAAAkB,UAAU,MAAM;AACd,IAAA,YAAA,CAAa,WAAW,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAA,GAAalB,eAAAA,CAAc,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAU,CAAA,IAAK,cAAA;AAEvD,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,EAAA,GAAgB,MAAA;AAAA,IACvB,eAAA,EAAA,CAAiB,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,eAAA,KAAP,IAAA,GAAA,EAAA,GAA0B,MAAA;AAAA,IAC3C,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,QAAA,KAAP,IAAA,GAAA,EAAA,GAAmB,MAAA;AAAA,IAC7B,UAAA;AAAA,IACA,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,MAAA;AAAA,IACjC,gBAAe,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,aAAA,KAAiB,OAAO,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IAC3E,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,SAAA,KAAP,IAAA,GAAA,EAAA,GAAoB,MAAA;AAAA,IAC/B,OAAA,EAASF,YAAAA,CAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAO,CAAA;AAAA,IAClC,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,aAAA,GAA+B,iCAChC,MAAA,CAAA,EADgC;AAAA,IAEnC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,MAAA;AAAA,IACR,eAAA,EAAiB,aAAA;AAAA,IACjB,QAAA,EAAU,QAAA;AAAA,IACV,UAAA,EAAA,CAAY,EAAA,GAAA,MAAA,CAAO,UAAA,KAAP,IAAA,GAAA,EAAA,GAAqB,SAAA;AAAA,IACjC,MAAA,EAAQ,CAAA;AAAA,IACR,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,WAAW,MAAA,CAAO;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,EAAiB,IAAA,KAAwC;AAC3E,IAAA,YAAA,CAAa,OAAO,CAAA;AACpB,IAAA,WAAA,CAAY;AAAA,MACV,CAAC,OAAO,GAAG;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,KAAA,EAAO,gDACF,KAAA,CAAA,EADE;AAAA,YAEL,IAAA,EAAM;AAAA,WAAA,CAAA,EAAA,CACF,6BAAM,cAAA,IAAiB,EAAE,QAAA,EAAU,IAAA,KAAS,EAAC;AAAA;AAErD;AACF,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA8C;AACtE,IAAA,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EAC3B,CAAA;AAMA,EAAA,MAAM,UAAA,GAAa4C,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,oBAAA,GAAuBA,OAAe,CAAC,CAAA;AAE7C,EAAAqF,gBAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,OAAA,EAAS;AACrC,MAAA,MAAM,CAAA,GAAI,WAAW,OAAA,CAAQ,YAAA;AAC7B,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,oBAAA,CAAqB,OAAA,GAAU,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,WAAA,EAAa,UAAU,CAAC,CAAA;AAExC,EAAA,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAiC;AAC7D,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACvB,IAAA,MAAM,UAAU,OAAA,CAAQ,YAAA;AACxB,IAAA,MAAM,QAAQ,oBAAA,CAAqB,OAAA;AACnC,IAAA,OAAA,CAAQ,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,CAAC,CAAA,EAAA,CAAA;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,aAAA,EAAe,YAAA,KAAiB,kBAAA,CAAmB;AAAA,IAClF,IAAA,EAAM,SAAA;AAAA,IACN,UAAA;AAAA,IACA,UAAA,EAAY,CAAC,OAAA,KAAY,UAAA,CAAW,SAAS,EAAE,cAAA,EAAgB,MAAM,CAAA;AAAA,IACrE,cAAA,EAAgB,CAAC,GAAA,KAAQ;AACvB,MAAA,sBAAA,CAAuB;AAAA,QACrB,OAAA;AAAA,QACA,KAAA,EAAO,MAAA;AAAA,QACP,gBAAgB,GAAA,CAAI,KAAA;AAAA,QACpB,cAAc,GAAA,CAAI;AAAA,OACnB,CAAA;AAAA,IACH;AAAA,GACD,CAAA;AAED,EAAAA,gBAAgB,MAAM;AACpB,IAAA,IAAI,WAAA,CAAY,OAAA,EAAS,oBAAA,CAAqB,WAAA,CAAY,OAAO,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,SAAA,EAAW,UAAU,CAAC,CAAA;AAE1B,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACEpI,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,KAAA,EAAO,SAAA;AAAA,QACP,QAAA,EAAU,gBAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,CAAC,CAAA;AAAA,QACd,CAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAC,CAAA,KAAM,oBAAA,CAAqB,EAAE,MAA6B;AAAA;AAAA,KACtE,kBACAA,OAAAA,CAAA,aAAA,CAAC,0CAAwB,QAAA,EAAU,WAAA,CAAY,OAAA,EAAA,EAAa,YAAA,CAAc,CAC5E,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACEA,OAAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP,uBAAA,EAAyB,EAAE,MAAA,EAAQ,oBAAA,CAAqB,WAAW,CAAA;AAAE;AAAA,KACvE;AAAA,EAEJ;AAEA,EAAA,uBACEA,QAAA,aAAA,CAAC,KAAA,EAAA,EAAI,KAAK,UAAA,EAAY,KAAA,EAAO,UAC1B,WACH,CAAA;AAEJ;;;AC7LA,IAAM,oBAAoB,iCAAA,CAAkC;AAAA,EAC1D,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,cAAA,CAAA,EAAA,EAAW,KAAA,CAAO,CACrB;AAAA,GAEJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,cAAA,CAAA,EAAA,EAAiB,KAAA,CAAO,CAC3B;AAAA,GAEJ;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,8BAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,cAAA,CAAA,EAAA,EAAoB,KAAA,CAAO,CAC9B;AAAA,GAEJ;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,MAAA,EAAQuC,uCAAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVvC,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,sBAAA,EAAA,cAAA,CAAA,EAAA,EAA2B,KAAA,CAAO,CACrC;AAAA,GAEJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,cAAA,CAAA,EAAA,EAAkB,KAAA,CAAO,CAC5B;AAAA,GAEJ;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,cAAA,CAAA,EAAA,EAAe,KAAA,CAAO,CACzB;AAAA,GAEJ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,gBAAA;AAAA,IACR,SAAA,EAAW,CAAC,IAAA,KAAS;AApFzB,MAAA,IAAA,EAAA,EAAA,EAAA;AAqFM,MAAA,MAAM,KAAA,GAAQ,iCACT,IAAA,CAAA,EADS;AAAA,QAEZ,KAAA,EAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACF,IAAA,CAAK,KAAA,CAAA,EADH;AAAA,UAEL,GAAA,EAAA,CAAK,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,QAAZ,IAAA,GAAA,EAAA,GAAmB,8DAAA;AAAA,UACxB,QAAA,EAAU;AAAA,SACZ;AAAA,OACF,CAAA;AACA,MAAA,uBACEA,QAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,cAAA,CAAA,EAAA,EAAU,KAAA,CAAO,CACpB,CAAA;AAAA,IAEJ;AAAA,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,UAAA,EAAA,cAAA,CAAA,EAAA,EAAe,KAAA,CAAO,CACzB;AAAA,GAEJ;AAAA,EACA,WAAA,EAAa;AAAA,IACX,MAAA,EAAQ,iCAAA;AAAA,IACR,WAAW,CAAC,CAAA,qBAAMA,OAAAA,CAAA,aAAA,CAAC,sCAAsB,CAAA,CAAG;AAAA,GAC9C;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,cAAA,CAAA,EAAA,EAAW,KAAA,CAAO,CACrB;AAAA,GAEJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,cAAA,CAAA,EAAA,EAAY,KAAA,CAAO,CACtB;AAAA,GAEJ;AAAA,EACA,SAAA,EAAW;AAAA,IACT,MAAA,EAAQ,oBAAA;AAAA,IACR,SAAA,EAAW,CAAC,KAAA,qBACVA,OAAAA,CAAA,aAAA,CAAC,kBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,cAAA,CAAA,EAAA,EAAoB,KAAA,CAAO,CAC9B;AAAA;AAGN,CAAC,CAAA;AAEM,IAAMqI,YAAAA,GAAc,oBAAoB,iBAAiB,CAAA;AACzD,IAAM,iBAAA,GAAoB,8BAA8B,iBAAiB,CAAA;AACvCnI,CAAAA,CAAE,MAAA,CAAOA,CAAAA,CAAE,MAAA,IAAU,iBAAiB;;;ACvI/E,IAAM,kBAAA,GAAqBY,cAA6B,IAAI,CAAA;AACrD,IAAM,iBAAA,GAAoB,MAAMC,UAAAA,CAAW,kBAAkB,CAAA;AAWrD,SAAR,WAAA,CAA6B,EAAE,EAAA,EAAG,EAAqB;AAC5D,EAAA,MAAMJ,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQA,UAAS,EAAE,CAAA;AACzB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AACA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAC,kBAAA,CAAmB,UAAnB,EAA4B,KAAA,EAAO,EAAA,EAAA,kBAClCA,OAAAA,CAAA,aAAA,CAACqI,YAAAA,EAAA,cAAA,CAAA,EAAA,EAAoB,MAAO,CAC9B,CAAA;AAEJ;ACrBe,SAAR,0BAAA,GAA8C;AACnD,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,yBAAA,EAA0B;AAAA,EAC5B,CAAA;AACA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,uBACErI,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,OAAA,EAAS,WAAA,EAAA,kBACnBtF,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,QAAA,EAAS,SAAQ,CACrC,CAAA;AAAA,EAEJ;AACA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACsF,UAAAA,EAAA,EAAW,OAAA,EAAS,WAAA,EAAA,kBACnBtF,OAAAA,CAAA,aAAA,CAAC,uBAAA,EAAA,EAAwB,QAAA,EAAS,SAAQ,CAC5C,CAAA;AAEJ;AClBA,SAAS,OAAA,GAAU;AACjB,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,iBAAA,EAAA,EAAkB,UAAS,OAAA,EAAQ,CAAA;AAAA,EAC7C;AACA,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,UAAS,OAAA,EAAQ,CAAA;AACxC;AAEe,SAAR,wBAAA,GAA4C;AACjD,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,uBAAOA,OAAAA,CAAA,aAAA,CAACsF,YAAA,EAAW,OAAA,EAAS,2BAA0B,IAAK,CAAA;AAC7D;ACLO,SAAS,UAAA,CAAWvF,KAAAA,EAAc,MAAA,GAAiB,CAAA,EAAW;AACnE,EAAA,IAAI;AACF,IAAA,OAAO,SAASA,KAAAA,EAAM;AAAA,MACpB,QAAA,EAAU,MAAA;AAAA,MACV,YAAA,EAAc,EAAA;AAAA;AAAA,MACd,QAAA,EAAU,EAAA;AAAA;AAAA,MACV,QAAQ;AAAC;AAAA,KACV,CAAA;AAAA,EACH,SAAS,CAAA,EAAG;AACV,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,CAAC,CAAA;AAEzC,IAAA,OAAOA,KAAAA,CAAK,MAAK,CACd,OAAA,CAAQ,UAAU,MAAM,CAAA,CACxB,MAAM,IAAI,CAAA,CACV,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAM,CAAA,CACvB,OAAO,CAAA,IAAA,KAAQ,IAAI,CAAA,CACnB,IAAA,CAAK,IAAI,CAAA;AAAA,EACd;AACF;;;AC1BA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,eAAe,CAAA;AAC7C,IAAA,CAAK,gBAAA,CAAiB,QAAQ,cAAc,CAAA;AAE5C,SAAsB,KAAK,KAAA,EAAgC;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzD,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,EAAO,CAAC,CAAA;AACvC,MAAA,OAAO,KAAK,SAAA,CAAU,WAAA,EAAa,EAAE,QAAA,EAAU,MAAA,EAAQ,CAAA,CAAE,KAAA;AAAA,IAC3D,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAC3C,MAAA,OAAO,KAAK,SAAA,CAAU,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,CAAA,CAAE,KAAA;AAAA,IACrD;AAAA,EACF,CAAA,CAAA;AAAA;AAEA,SAAsB,KAAK,KAAA,EAAgC;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzD,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAClD,MAAA,OAAO,KAAK,SAAA,CAAU,WAAA,EAAa,EAAE,QAAA,EAAU,YAAA,EAAc,CAAA,CAAE,KAAA;AAAA,IACjE,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAE3C,MAAA,OAAO,KAAK,SAAA,CAAU,KAAA,EAAO,EAAE,QAAA,EAAU,YAAA,EAAc,CAAA,CAAE,KAAA;AAAA,IAC3D;AAAA,EACF,CAAA,CAAA;AAAA;;;ACtBe,SAAR,oBAAA,CAAsC,EAAE,IAAA,EAAM,KAAA,EAAM,EAAyB;AAClF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIiB,SAAwB,IAAI,CAAA;AAEpD,EAAAO,UAAU,MAAM;AACd,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,OAAO,CAAA;AACxB,QAAA;AAAA;AACJ,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,KAAA,EAAO,IAAI,CAAC,CAAA;AAEzB,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEvB,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,MAAA;AAAA,QACX,UAAA,EAAY,KAAA;AAAA,QACZ,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,IAAA,EAAK;AAAA,MACxC,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,MAAM,CAAA,GAAI,OAAO,YAAA,EAAa;AAC9B,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA;AAAA,QACF;AACA,QAAA,CAAA,CAAE,iBAAA,CAAkB,GAAG,aAAa,CAAA;AAAA,MACtC;AAAA;AAAA,GACF;AAEJ;;;ACrCe,SAAR,SAAA,GAA6B;AAClC,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAOJ,OAAAA,CAAQ,MAAM,oBAAA,CAAqBI,SAAAA,EAAU,EAAE,WAAA,EAAa,MAAA,EAAQ,CAAA,EAAG,CAACA,SAAQ,CAAC,CAAA;AAC9F,EAAA,uBAAOX,OAAAA,CAAA,aAAA,CAAC,wBAAqB,IAAA,EAAK,MAAA,EAAO,OAAO,IAAA,EAAM,CAAA;AACxD;ACNe,SAAR,SAAA,GAA6B;AAClC,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAOJ,OAAAA,CAAQ,MAAM,IAAA,CAAK,SAAA,CAAUI,SAAAA,EAAU,IAAA,EAAM,IAAI,CAAA,EAAG,CAACA,SAAQ,CAAC,CAAA;AAC3E,EAAA,uBAAOX,OAAAA,CAAA,aAAA,CAAC,wBAAqB,IAAA,EAAK,MAAA,EAAO,OAAO,IAAA,EAAM,CAAA;AACxD;ACJe,SAAR,SAAA,GAA6B;AAClC,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAOJ,OAAAA,CAAQ,MAAM,YAAA,CAAaI,SAAAA,EAAU,EAAE,WAAA,EAAa,MAAA,EAAQ,CAAA,EAAG,CAACA,SAAQ,CAAC,CAAA;AACtF,EAAA,uBACEX,OAAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW,MAAA;AAAA,QACX,UAAA,EAAY,UAAA;AAAA,QACZ,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY,WAAA;AAAA,QACZ,UAAA,EAAY;AAAA,OACd;AAAA,MACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,QAAA,MAAM,CAAA,GAAI,OAAO,YAAA,EAAa;AAC9B,QAAA,IAAI,MAAM,IAAA,EAAM;AAChB,QAAA,CAAA,CAAE,iBAAA,CAAkB,GAAG,aAAa,CAAA;AAAA,MACtC;AAAA,KAAA;AAAA,IAEC;AAAA,GACH;AAEJ;ACrBe,SAAR,aAAA,GAAiC;AACtC,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,EAAY,CAAA,KAAe;AAC/C,IAAA,QAAQ,CAAA;AAAG,MACT,KAAK,MAAA;AAAA,MACL,KAAK,SAAA;AAAA,MACL,KAAK,QAAA;AAAA,MACL,KAAK,MAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,kBAAA,CAAmB,CAAC,CAAA;AACpB,QAAA;AAAA,MACF;AACE,QAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA;AAC/B,EACF,CAAA;AAEA,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAACyG,IAAAA,EAAA,EAAK,OAAO,eAAA,EAAiB,QAAA,EAAU,YAAA,EAAA,kBACtCzG,OAAAA,CAAA,aAAA;AAAA,IAAC0G,GAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,QAAA;AAAA,MACN,uBACE1G,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,UAAA,EAAY,MAAM,qBAClCnF,OAAAA,CAAA,cAAC,YAAA,EAAA,EAAa,QAAA,EAAS,SAAQ,CACjC;AAAA;AAAA,GAEJ,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC0G,GAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,SAAA;AAAA,MACN,uBACE1G,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,aAAA,EAAe,SAAS,qBACxCnF,OAAAA,CAAA,cAAC,eAAA,EAAA,EAAgB,QAAA,EAAS,SAAQ,CACpC;AAAA;AAAA,GAEJ,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC0G,GAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,MAAA;AAAA,MACN,uBACE1G,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,aAAa,qBAChDnF,OAAAA,CAAA,cAAC,YAAA,EAAA,EAAa,QAAA,EAAS,SAAQ,CACjC;AAAA;AAAA,GAEJ,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC0G,GAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,MAAA;AAAA,MACN,uBACE1G,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,iBAAA,EAAmB,mBAAmB,qBACtDnF,OAAAA,CAAA,cAAC,eAAA,EAAA,EAAgB,QAAA,EAAS,SAAQ,CACpC;AAAA;AAAA,GAEJ,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC0G,GAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,MAAA;AAAA,MACN,uBACE1G,OAAAA,CAAA,cAACmF,OAAAA,EAAA,EAAQ,OAAO,CAAA,CAAE,iBAAA,EAAmB,aAAa,CAAA,EAAA,kBAChDnF,OAAAA,CAAA,aAAA,CAACsI,oBAAA,EAAmB,QAAA,EAAS,SAAQ,CACvC;AAAA;AAAA,GAGN,CAAA;AAEJ;ACjDe,SAAR,OAAA,CAAyB,EAAE,aAAA,EAAe,MAAA,EAAO,EAAiB;AACvE,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,cAAA,EAAe;AACnB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,WAAA,EAAY;AACpC,EAAA,MAAM3H,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIK,SAAqB,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAE9D,EAAA,MAAM,UAAA,GAAa,QAAQ,iBAAiB,CAAA;AAC5C,EAAA,MAAM,WAAW,mBAAA,KAAwB,QAAA;AACzC,EAAA,MAAM,YAAA,GAAe,aAAa,CAAA,CAAE,cAAA,EAAgB,MAAM,CAAA,GAAI,CAAA,CAAE,uBAAuB,mBAAc,CAAA;AAErG,EAAA,MAAM,gBAAgB,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAChC,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,aAAA,CAAc,SAAS,CAAA;AACvB,QAAA;AAAA,MACF;AACA,MAAA,YAAA,EAAa;AACb,MAAA,WAAA,CAAY,QAAA,GAAW,EAAE,sBAAA,EAAwB,cAAc,IAAI,CAAA,CAAE,wBAAA,EAA0B,gBAAgB,CAAC,CAAA;AAChH,MAAA,IAAI,aAAA,QAAqB,aAAA,EAAc;AAAA,IACzC,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAChC,MAAA,WAAA,CAAY,CAAA,CAAE,sBAAA,EAAwB,cAAc,CAAC,CAAA;AAAA,IACvD;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAO,IAAA,KAAmC,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC7D,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,UAAA,KAAe,WAAA,GAAc,2BAAA,GAAsBL,SAAAA;AAC1E,MAAA,MAAM,EAAE,IAAI,IAAA,EAAK,GAAI,MAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,cAAc,CAAC,CAAA;AACxE,MAAA,aAAA,CAAc,cAAc,CAAA;AAC5B,MAAA,kBAAA,CAAmB,EAAA,EAAI,MAAM,UAAU,CAAA;AACvC,MAAA,eAAA,CAAgB,cAAA,EAAgB,EAAA,EAAI,IAAA,EAAM,UAAU,CAAA;AACpD,MAAA,IAAI,aAAA,QAAqB,aAAA,EAAc;AACvC,MAAA,WAAA;AAAA,QACE,UAAA,KAAe,cACX,CAAA,CAAE,8BAAA,EAAgC,sBAAsB,CAAA,GACxD,CAAA,CAAE,0BAA0B,gBAAgB;AAAA,OAClD;AACA,MAAA,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO,CAAA,UAAA,EAAa,EAAE,CAAA,CAAA;AACtC,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAC,CAAA;AACnC,MAAA,WAAA,CAAY,CAAA,CAAE,sBAAA,EAAwB,cAAc,CAAC,CAAA;AACrD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACEX,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,QAAA;AAAA,QACV,MAAA,EAAQ,CAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,cAAA,EAAgB,QAAA;AAAA,QAChB,aAAA,EAAe,MAAA;AAAA,QACf,MAAA,EAAQ,CAAA;AAAA,QACR,EAAA,EAAI;AAAA;AACN,KAAA;AAAA,oBAEAlB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,aAAA,EAAe,MAAA;AAAA,UACf,OAAA,EAAS,aAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,IAAA;AAAA,UACL,EAAA,EAAI,CAAA;AAAA,UACJ,EAAA,EAAI,IAAA;AAAA,UACJ,eAAA,EAAiB,kBAAA;AAAA,UACjB,YAAA,EAAc,GAAA;AAAA,UACd,SAAA,EACE;AAAA;AACJ,OAAA;AAAA,MAEC,UAAA,IAAc,mBAAA,oBACblB,OAAAA,CAAA,aAAA;AAAA,QAACkB,GAAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,EAAA,EAAI,CAAA;AAAA,YACJ,EAAA,EAAI,CAAA;AAAA,YACJ,QAAA,EAAU,EAAA;AAAA,YACV,KAAA,EAAO,gBAAA;AAAA,YACP,QAAA,EAAU,GAAA;AAAA,YACV,UAAA,EAAY,QAAA;AAAA,YACZ,QAAA,EAAU,QAAA;AAAA,YACV,YAAA,EAAc;AAAA,WAChB;AAAA,UACA,KAAA,EAAO;AAAA,SAAA;AAAA,QAEN,WAAW,CAAA,EAAG,CAAA,CAAE,uBAAA,EAAyB,QAAQ,CAAC,CAAA,MAAA,CAAA,GAAQ,EAAA;AAAA,wBAC3DlB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,EAAA,EAAI,EAAE,KAAA,EAAO,cAAA,EAAgB,UAAA,EAAY,GAAA,MAC5D,mBACH;AAAA,OACF;AAAA,sBAEFlB,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EACP,UAAA,GACK,WACG,CAAA,CAAE,gCAAA,EAAkC,6BAA6B,CAAA,GACjE,CAAA,CAAE,wBAAwB,cAAc,CAAA,GAC5C,EAAE,8BAAA,EAAgC,wBAAwB,CAAA,EAAA,kBAE9DnF,OAAAA,CAAA,aAAA;AAAA,QAACyB,QAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,IAAa,CAAA;AAAA,UACzB,OAAA,EAAS,aAAA;AAAA,UACT,EAAA,EAAI,EAAE,YAAA,EAAc,GAAA,EAAK,aAAA,EAAe,MAAA,EAAQ,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA;AAAI,SAAA;AAAA,QAEtF;AAAA,OAEL,CAAA;AAAA,MACC,UAAA,IAAc,MAAA,oBACbA,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,8BAAA,EAAgC,wBAAwB,CAAA,EAAA,kBACxEnF,OAAAA,CAAA,aAAA;AAAA,QAACyB,QAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAAC,cAAA,EAAA,IAAe,CAAA;AAAA,UAC3B,SAAS,MAAM;AACb,YAAA,YAAA,CAAa,IAAI,CAAA;AACjB,YAAA,aAAA,CAAc,SAAS,CAAA;AAAA,UACzB,CAAA;AAAA,UACA,EAAA,EAAI,EAAE,YAAA,EAAc,GAAA,EAAK,eAAe,MAAA,EAAQ,EAAA,EAAI,CAAA,EAAG,QAAA,EAAU,EAAA;AAAG,SAAA;AAAA,QAEnE,CAAA,CAAE,mBAAmB,eAAU;AAAA,OAEpC,CAAA;AAAA,MAED,MAAA,oBACCA,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,wBAAwB,CAAA,EAAA,kBAC/DnF,OAAAA,CAAA,aAAA;AAAA,QAACyB,QAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,kBAAWzB,OAAAA,CAAA,aAAA,CAACkF,aAAA,IAAY,CAAA;AAAA,UACxB,SAAS,MAAM;AACb,YAAA,YAAA,CAAa,IAAI,CAAA;AACjB,YAAA,aAAA,CAAc,WAAW,CAAA;AAAA,UAC3B,CAAA;AAAA,UACA,EAAA,EAAI,EAAE,YAAA,EAAc,GAAA,EAAK,aAAA,EAAe,MAAA,EAAQ,EAAA,EAAI,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,gBAAA;AAAiB,SAAA;AAAA,QAE5F,CAAA,CAAE,eAAe,KAAK;AAAA,OAE3B;AAAA;AAEJ,GACF,kBAEAlF,OAAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,MAAM,UAAA,KAAe,IAAA;AAAA,MACrB,IAAA,EAAM,UAAA,KAAe,WAAA,GAAc,KAAA,GAAQ,SAAA;AAAA,MAC3C,SAAS,MAAM;AACb,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,MAAA,EAAQ,YAAA;AAAA,MACR,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC,aACE,UAAA,KAAe,WAAA,GACX,iBACA,mBAAA,GACE,CAAA,EAAG,mBAAmB,CAAA,OAAA,CAAA,GACtB,cAAA;AAAA,MAER,KAAA,EAAO;AAAA;AAAA,GAEX,CAAA;AAEJ;AC3LA,SAAS,KAAA,GAAiB;AACxB,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,EAAa,OAAO,KAAA;AAC7C,EAAA,MAAM,QAAA,GAAA,CAAY,SAAA,CAAU,QAAA,IAAY,EAAA,EAAI,WAAA,EAAY;AACxD,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,IAAA;AACrC,EAAA,MAAM,EAAA,GAAA,CAAM,SAAA,CAAU,SAAA,IAAa,EAAA,EAAI,WAAA,EAAY;AACnD,EAAA,OAAO,GAAG,QAAA,CAAS,KAAK,KAAK,CAAC,EAAA,CAAG,SAAS,SAAS,CAAA;AACrD;AAEA,SAAS,iBAAiB,MAAA,EAAqC;AAC7D,EAAA,IAAI,EAAE,MAAA,YAAkB,WAAA,CAAA,EAAc,OAAO,KAAA;AAC7C,EAAA,MAAM,MAAM,MAAA,CAAO,OAAA;AACnB,EAAA,IAAI,QAAQ,OAAA,IAAW,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,UAAU,OAAO,IAAA;AACtE,EAAA,IAAI,MAAA,CAAO,mBAAmB,OAAO,IAAA;AACrC,EAAA,OAAO,KAAA;AACT;AAEe,SAAR,eAAA,GAAmC;AACxC,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,MAAM,KAAA,EAAM;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,GAAM,MAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,GAAG,MAAM,CAAA,EAAA,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAM,CAAA,EAAG,MAAM,cAAS,CAAA,EAAG,MAAM,cAAc,MAAM,CAAA,EAAA,CAAA;AAEtE,EAAAuB,UAAU,MAAM;AACd,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqB;AACtC,MAAA,MAAM,GAAA,GAAM,GAAA,GAAM,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,OAAA;AAChC,MAAA,IAAI,CAAC,GAAA,EAAK;AAGV,MAAA,IAAI,gBAAA,CAAiB,CAAA,CAAE,MAAM,CAAA,EAAG;AAEhC,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAA,CAAI,WAAA,EAAY;AAC9B,MAAA,IAAI,GAAA,KAAQ,GAAA,IAAO,CAAC,CAAA,CAAE,QAAA,EAAU;AAC9B,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAA,EAAK;AAAA,MACP,CAAA,MAAA,IAAY,QAAQ,GAAA,IAAO,CAAA,CAAE,YAAc,GAAA,KAAQ,GAAA,IAAO,CAAC,GAAA,EAAM;AAC/D,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IAAA,EAAK;AAAA,MACP;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,GAAA,EAAK,UAAA,EAAW,QAAA,EAAA,kBAC9CjB,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,cAAA,EAAgB,MAAM,CAAC,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAA,EAAA,kBACvDnF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,UAAU,CAAC,OAAA;AAAA,MACX,YAAA,EAAY,CAAA,CAAE,YAAA,EAAc,MAAM;AAAA,KAAA;AAAA,oBAElCtF,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,UAAS,OAAA,EAAQ;AAAA,GAEnC,CACF,CAAA,kBACAA,QAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,gBAAgB,MAAM,CAAC,KAAK,QAAQ,CAAA,CAAA,CAAA,EAAA,kBACvDnF,OAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA;AAAA,IAACsF,UAAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,UAAU,CAAC,OAAA;AAAA,MACX,YAAA,EAAY,CAAA,CAAE,YAAA,EAAc,MAAM;AAAA,KAAA;AAAA,oBAElCtF,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,UAAS,OAAA,EAAQ;AAAA,GAEnC,CACF,CACF,CAAA;AAEJ;AC3Ee,SAAR,YAAA,GAAgC;AANvC,EAAA,IAAA,EAAA;AAOE,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,OAAOA,SAAAA,CAAS,IAAA;AACtB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,eAAe,OAAO,IAAA;AACjD,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,IAAA,CAAK,OAAA,KAAL,IAAA,GAAA,EAAA,GAAgB,EAAA;AAEhC,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,WAAA,CAAY;AAAA,MACV,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,iCAAK,IAAA,CAAA,EAAL,EAAW,OAAA,EAAS,KAAA,EAAM,CAAA,EAAE;AAAA,KACpD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAA4B;AAnBlD,IAAA,IAAAqC,GAAAA,EAAA,EAAA;AAoBI,IAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,CAAO,UAAU,QAAA,EAAU;AACjD,IAAA,sBAAA,CAAuB;AAAA,MACrB,OAAA,EAAS,SAAA;AAAA,MACT,KAAA,EAAO,SAAA;AAAA,MACP,iBAAgBA,GAAAA,GAAA,MAAA,CAAO,mBAAP,IAAA,GAAAA,GAAAA,GAAyB,OAAO,KAAA,CAAM,MAAA;AAAA,MACtD,YAAA,EAAA,CAAc,EAAA,GAAA,MAAA,CAAO,YAAA,KAAP,IAAA,GAAA,EAAA,GAAuB,OAAO,KAAA,CAAM;AAAA,KACnD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACEhD,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,EAAA,EAAI,CAAA;AAAA,QACJ,EAAA,EAAI,IAAA;AAAA,QACJ,YAAA,EAAc,CAAA;AAAA,QACd,WAAA,EAAa,SAAA;AAAA,QACb,eAAA,EAAiB,OAAA;AAAA,QACjB,QAAA,EAAU,QAAA;AAAA,QACV,GAAA,EAAK,EAAA;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK;AAAA;AACP,KAAA;AAAA,oBAEAlB,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,UAAU,EAAA,EAAI,UAAA,EAAY,KAAK,QAAA,EAAU,EAAA,MAC1E,CAAA,CAAE,eAAA,EAAiB,SAAS,CAC/B,CAAA;AAAA,oBACAlB,OAAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,CAAA,CAAE,qBAAA,EAAuB,6CAAwC,CAAA;AAAA,QAC9E,KAAA,EAAO,OAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QAC5C,OAAA,EAAS,UAAA;AAAA,QACT,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,OAAA,EAAS,UAAA;AAAA,QACT,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA;AAAG;AAAA;AACrB,GACF;AAEJ;ACnDe,SAAR,cAAA,GAAkC;AAXzC,EAAA,IAAA,EAAA,EAAA,EAAA;AAYE,EAAA,MAAMW,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,OAAOA,SAAAA,CAAS,IAAA;AACtB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,eAAe,OAAO,IAAA;AACjD,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,IAAA,CAAK,OAAA,KAAL,IAAA,GAAA,EAAA,GAAgB,EAAA;AAChC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,UAAU,mBAAA,CAAA,CAAqB,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,EAAA,GAAkB,EAAyB,CAAA;AAChF,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,OAAA,EAAS,OAAO,CAAA;AAExD,EAAA,uBACEX,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,EAAA,EAAI,CAAA;AAAA,QACJ,EAAA,EAAI,IAAA;AAAA,QACJ,YAAA,EAAc,CAAA;AAAA,QACd,WAAA,EAAa,SAAA;AAAA,QACb,eAAA,EAAiB,OAAA;AAAA,QACjB,QAAA,EAAU,QAAA;AAAA,QACV,GAAA,EAAK,EAAA;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK;AAAA;AACP,KAAA;AAAA,oBAEAlB,OAAAA,CAAA,aAAA,CAACkB,KAAA,EAAI,EAAA,EAAI,EAAE,KAAA,EAAO,gBAAA,EAAkB,UAAU,EAAA,EAAI,UAAA,EAAY,KAAK,QAAA,EAAU,EAAA,MAC1E,CAAA,CAAE,eAAA,EAAiB,SAAS,CAC/B,CAAA;AAAA,oBACAlB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,IAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAA,EAAI,QAAS;AAAA,GACvC;AAEJ;AC7BA,SAASwG,WAAAA,GAAa;AACpB,EAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACtE;AAEA,SAAS,gBAAgB,QAAA,EAAyB;AAnBlD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoBE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,KAAA,EAAA,CAAO,EAAA,GAAA,QAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,IAAA;AAAA,QACzB,MAAA,EAAA,CAAQ,EAAA,GAAA,QAAA,CAAS,MAAA,KAAT,IAAA,GAAA,EAAA,GAAmB,IAAA;AAAA,QAC3B,GAAA,EAAA,CAAK,EAAA,GAAA,QAAA,CAAS,GAAA,KAAT,IAAA,GAAA,EAAA,GAAgB,EAAA;AAAA,QACrB,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,KAAA,EAAO,EAAE,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAA,EAAG;AAAE;AACjE,GACF;AACF;AAEA,SAAS,iBAAiB,QAAA,EAAyB;AAnCnD,EAAA,IAAA,EAAA;AAoCE,EAAA,MAAM,MAAM,WAAA,EAAY;AACxB,EAAA,MAAM,OAAY,GAAA,CAAI,IAAA;AACtB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,aAAA,EAAe;AAC1C,EAAA,MAAM,KAAKA,WAAAA,EAAW;AACtB,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,CAAK,EAAA,GAAA,IAAA,CAAK,KAAK,WAAA,KAAV,IAAA,GAAA,EAAA,GAA6C,EAAC,EAAI,EAAE,CAAA;AAC9E,EAAA,WAAA,CAAY;AAAA,IACV,CAAC,EAAE,GAAG,eAAA,CAAgB,QAAQ,CAAA;AAAA,IAC9B,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,IAAA,CAAA,EAAL,EAAW,IAAA,EAAM,iCAAK,IAAA,CAAK,IAAA,CAAA,EAAV,EAAgB,WAAA,EAAY,CAAA,EAAE;AAAA,GAC/C,CAAA;AACR,EAAA,kBAAA,CAAmB,EAAE,CAAA;AACvB;AAEA,SAAS,cAAc,KAAA,EAAwE;AAhD/F,EAAA,IAAA,EAAA;AAiDE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,QAAA,GAAW,iBAAiB,QAAA,GAAW,KAAA,CAAM,KAAK,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AACjF,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAA,YAAgB,IAAA,GAAO,IAAA,GAAA,CAAQ,UAA0B,SAAA,KAA1B,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AAC5C,IAAA,IAAI,QAAQ,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,GAAG,OAAO,IAAA;AAAA,EACrD;AACA,EAAA,OAAO,IAAA;AACT;AAQe,SAAR,qBAAA,CAAuC,EAAE,OAAA,EAAS,QAAA,EAAS,EAAU;AAC1E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,iBAAA,EAAkB;AAC1C,EAAA,MAAM,UAAA,GAAa3E,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,SAAA,GAAYA,OAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI/B,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,OAAA,IAAW,OAAA,CAAQ,WAAW,CAAA;AAE7C,EAAAO,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAA,EAAa;AAC7B,IAAA,MAAM,WAAA,GAAc,CAAO,CAAA,KAAsB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AA3ErD,MAAA,IAAA,EAAA;AA4EM,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,IAAA,CAAI,iCAAQ,OAAA,MAAY,OAAA,IAAA,CAAW,iCAAQ,OAAA,MAAY,UAAA,KAAc,iCAAQ,iBAAA,CAAA,EAAmB;AAChG,MAAA,MAAM,IAAA,GAAO,aAAA,CAAA,CAAc,EAAA,GAAA,CAAA,CAAE,aAAA,KAAF,mBAAiB,KAAK,CAAA;AACjD,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,IAAI,CAAA;AACvC,QAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,MAC3B,SAAQqG,EAAAA,EAAA;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAC5C,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,WAAW,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,MAAA,EAAQ,WAAW,CAAC,CAAA;AAExB,EAAA,IAAI,CAAC,QAAQ,uBAAO5H,QAAA,aAAA,CAAAA,OAAAA,CAAA,gBAAG,QAAS,CAAA;AAEhC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAuB;AAjG9C,IAAA,IAAA,EAAA,EAAA,EAAA;AAkGI,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,CAAA,CAAK,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,YAAA,KAAF,mBAAgB,KAAA,KAAhB,IAAA,GAAA,EAAA,GAAyB,EAAE,EAAE,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,EAAG;AAC7E,IAAA,SAAA,CAAU,OAAA,IAAW,CAAA;AACrB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,SAAA,CAAU,UAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,UAAU,CAAC,CAAA;AACrD,IAAA,IAAI,SAAA,CAAU,OAAA,KAAY,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA;AAAA,EAChD,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAuB;AA1G7C,IAAA,IAAA,EAAA,EAAA,EAAA;AA2GI,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,CAAA,CAAK,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,YAAA,KAAF,mBAAgB,KAAA,KAAhB,IAAA,GAAA,EAAA,GAAyB,EAAE,EAAE,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,EAAG;AAC7E,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,CAAA,CAAE,aAAa,UAAA,GAAa,MAAA;AAAA,EAC9B,CAAA;AACA,EAAA,MAAM,MAAA,GAAS,CAAO,CAAA,KAAuB,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AA/G/C,IAAA,IAAA,EAAA;AAgHI,IAAA,SAAA,CAAU,OAAA,GAAU,CAAA;AACpB,IAAA,WAAA,CAAY,KAAK,CAAA;AACjB,IAAA,MAAM,IAAA,GAAO,aAAA,CAAA,CAAc,EAAA,GAAA,CAAA,CAAE,YAAA,KAAF,mBAAgB,KAAK,CAAA;AAChD,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa;AAC3B,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,IAAI,CAAA;AACvC,MAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA,IAC3B,SAAQ4H,EAAAA,EAAA;AAAA,IAER,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,CAAA;AAEA,EAAA,uBACE5H,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,WAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,EAAA,EAAI,EAAE,QAAA,EAAU,UAAA;AAAW,KAAA;AAAA,IAE1B,QAAA;AAAA,IAAA,CACC,QAAA,IAAY,SAAA,qBACZlB,OAAAA,CAAA,aAAA;AAAA,MAACkB,GAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,CAAA;AAAA,UACP,eAAA,EAAiB,0BAAA;AAAA,UACjB,MAAA,EAAQ,YAAA;AAAA,UACR,WAAA,EAAa,cAAA;AAAA,UACb,YAAA,EAAc,CAAA;AAAA,UACd,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,YAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,UAAA,EAAY,EAAA;AAAA,UACZ,KAAA,EAAO,cAAA;AAAA,UACP,aAAA,EAAe,MAAA;AAAA,UACf,MAAA,EAAQ;AAAA;AACV,OAAA;AAAA,sBAEAlB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,CAAA,EAAG,YAAY,GAAA,EAAK,QAAA,EAAU,EAAA,EAAG,EAAA,kBACtFlB,OAAAA,CAAA,aAAA,CAACuI,mBAAAA,EAAA,IAAoB,CAAA,EACpB,SAAA,GAAY,iBAAA,GAAe,sBAC9B;AAAA;AACF,GAEJ;AAEJ;;;ACvHA,IAAM,eAAA,GAAkB,SAAA;AACxB,IAAM,sBAAA,GACJ,0EAAA;AAEa,SAARC,eAA+B,EAAE,aAAA,EAAe,MAAA,EAAQ,oBAAA,GAAuB,MAAK,EAAuB;AAChH,EAAA,MAAM7H,YAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,MAAM,qBAAqB,qBAAA,EAAsB;AACjD,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,EAAA,IAAI,SAAA,GAAqB;AAAA,IACvB,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,IAAI,uBAAuB,QAAA,EAAU;AACnC,IAAA,SAAA,GAAY,iCACP,SAAA,CAAA,EADO;AAAA,MAEV,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO,GAAA;AAAA,MACP,MAAA,EAAQ,GAAA;AAAA,MACR,SAAA,EACE,0EAAA;AAAA,MACF,YAAA,EAAc;AAAA,KAChB,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,CAAA,EAAY,KAAA,KAAmB;AAC7D,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,QAAA;AAAA,MACL,KAAK,SAAA;AACH,QAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,QAAA;AAAA,MACF;AACE,QAAA,qBAAA,CAAsB,SAAS,CAAA;AAAA;AACnC,EACF,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAlFhC,IAAA,IAAA,EAAA;AAmFI,IAAA,QAAQ,eAAA;AAAiB,MACvB,KAAK,QAAA;AACH,QAAA,uBACEX,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,SAAA,EAAA,kBACPlB,OAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAG,QAAO,CACzB,CAAA;AAAA,MAEJ,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,YAAYW,SAAAA,CAAS,IAAA;AAC3B,QAAA,MAAM,aACJ,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,aAAA,GAAiB,UAAU,IAAA,GAAe,MAAA;AAC5E,QAAA,MAAM,OAAA,GAAU,mBAAA;AAAA,UAAA,CACb,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAA,KAAZ,IAAA,GAAA,EAAA,GAAyB;AAAC,SAC7B;AACA,QAAA,MAAM,UAAA,GAAa,2BAAA,CAA4BA,SAAAA,EAAU,OAAO,CAAA;AAChE,QAAA,uBACEX,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,SAAA,EAAA,kBACPlB,OAAAA,CAAA,cAAC,MAAA,EAAA,EAAO,QAAA,EAAU,UAAA,EAAY,WAAA,EAAY,QAAO,CACnD,CAAA;AAAA,MAEJ;AAAA,MACA,KAAK,MAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAU,CAAA;AAAA,MACpB,KAAK,MAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAU,CAAA;AAAA,MACpB,KAAK,MAAA;AACH,QAAA,uBAAOA,OAAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAU,CAAA;AAAA;AACtB,EACF,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,kBAAA;AAExB,EAAA,uBACEA,OAAAA,CAAA,aAAA,CAAAA,OAAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,OAAAA,CAAA,aAAA;AAAA,IAACiB,KAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,MAAA,EAAQ,EAAA;AAAA,QACR,YAAA,EAAc,CAAA;AAAA,QACd,WAAA,EAAa,SAAA;AAAA,QACb,eAAA,EAAiB,OAAA;AAAA,QACjB,QAAA,EAAU,QAAA;AAAA,QACV,GAAA,EAAK,CAAA;AAAA,QACL,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI;AAAA,OACN;AAAA,MACA,SAAA,EAAU,KAAA;AAAA,MACV,cAAA,EAAe,eAAA;AAAA,MACf,UAAA,EAAW;AAAA,KAAA;AAAA,IAEV,oBAAA,oBAAwBjB,OAAAA,CAAA,aAAA,CAAC,wBAAA,EAAA,IAAyB,CAAA;AAAA,oBACnDA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,EAAA,EAAI,CAAA,EAAG,SAAA,EAAU,KAAA,EAAM,GAAA,EAAK,CAAA,EAAG,KAAA,EAAM,MAAA,EAAO,gBAAe,eAAA,EAAgB,UAAA,EAAW,QAAA,EAAA,kBAC3FjB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAA,kBAC9BjB,OAAAA,CAAA,cAAC,aAAA,EAAA,IAAc,CACjB,CAAA,kBACAA,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,SAAA,EAAU,KAAA,EAAM,OAAA,EAAS,CAAA,EAAG,UAAA,EAAW,QAAA,EAAA,EAC3C,oBAAoB,QAAA,oBAAYjB,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,IAAgB,CAAA,kBAClDA,OAAAA,CAAA,aAAA,CAAC+E,iBAAAA,EAAA,EAAkB,KAAA,EAAO,kBAAA,EAAoB,SAAA,EAAS,MAAC,IAAA,EAAK,OAAA,EAAQ,QAAA,EAAU,sBAAA,EAAA,kBAC7E/E,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,SAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAACmF,SAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,qBAAA,EAAuB,cAAc,CAAA,EAAA,kBACrDnF,OAAAA,CAAA,aAAA,CAAC,eAAA,EAAA,EAAgB,QAAA,EAAS,OAAA,EAAQ,CACpC,CACF,mBACAA,OAAAA,CAAA,aAAA,CAAC4B,YAAAA,EAAA,EAAa,KAAA,EAAM,QAAA,EAAA,kBAClB5B,OAAAA,CAAA,aAAA,CAACmF,OAAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,sBAAsB,aAAa,CAAA,EAAA,kBACnDnF,OAAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,OAAA,EAAQ,CACxC,CACF,CACF,CACF,CACF,CAAA;AAAA,oBACAA,OAAAA,CAAA,aAAA,CAAC,0BAAA,EAAA,IAA2B;AAAA,GAC9B,EACC,oBAAoB,QAAA,oBAAYA,QAAA,aAAA,CAAC,YAAA,EAAA,IAAa,CAAA,EAC9C,eAAA,KAAoB,SAAA,oBAAaA,QAAA,aAAA,CAAC,cAAA,EAAA,IAAe,CAAA,kBAClDA,OAAAA,CAAA,aAAA,CAAC,yBAAsB,OAAA,EAAS,eAAA,KAAoB,QAAA,EAAA,kBAClDA,OAAAA,CAAA,aAAA;AAAA,IAACkB,GAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,CAAA;AAAA,QACV,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,aAAA,EAAe,MAAA;AAAA,QACf,QAAA,EAAU,GAAA;AAAA;AAAA;AAAA;AAAA,QAIV,SAAA,EAAW,eAAA,KAAoB,QAAA,GAAW,oBAAA,GAAuB,MAAA;AAAA,QACjE,YACE,eAAA,KAAoB,QAAA,GAChB,mBAAA,KAAwB,cAAA,GACtB,yBACA,eAAA,GACF;AAAA;AACR,KAAA;AAAA,oBAEAlB,OAAAA,CAAA,aAAA,CAACkB,GAAAA,EAAA,EAAI,EAAA,EAAI,EAAE,QAAA,EAAU,CAAA,EAAE,EAAA,EAAI,eAAA,EAAkB,CAAA;AAAA,IAC5C,eAAA,IAAmB,oBAAoB,QAAA,oBACtClB,QAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,eAA8B,MAAA,EAAgB;AAAA,GAG7D,CACF,CAAA;AAEJ;;;AC7JA,SAAS,mBAAmBD,KAAAA,EAAoC;AAC9D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,aAAA,EAAe,SAAA;AAAA,QACf,WAAA,EAAa,SAAA;AAAA,QACb,SAAA,EAAW,SAAA;AAAA,QACX,UAAA,EAAY,aAAA;AAAA,QACZ,WAAA,EAAa,CAAC,mBAAmB;AAAA;AACnC,KACF;AAAA,IACA,mBAAA,EAAqB;AAAA,MACnB,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,EAAE,GAAA,EAAK,CAAA,EAAG,QAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,CAAA;AAAE,SAClD;AAAA,QACA,KAAA,EAAO;AAAA,UACL,QAAA,EAAUA;AAAA;AACZ;AACF;AACF,GACF;AACF;AAmJA,SAAS,mBAAA,CAAoB,aAA6C,IAAA,EAAe;AACvF,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,QAAA,EAAS;AACjC,EAAA,OAAO,WAAA,CAAY,OAAO,WAAA,EAAa;AAAA,IACrC,QAAQ,CAAC,IAAA,GAAO,YAAY,MAAA,CAAO,KAAA,GAAQ,YAAY,MAAA,CAAO,OAAA;AAAA,IAC9D,UAAU,CAAC,IAAA,GAAO,YAAY,QAAA,CAAS,aAAA,GAAgB,YAAY,QAAA,CAAS;AAAA,GAC7E,CAAA;AACH;AAGA,IAAM,mBAAA,GAAsB,UAAA,CAAsJ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChM,EAAA,MAAM;AAAA,IACJ,mBAAA,GAAsB,GAAA;AAAA,IACtB,kBAAA,GAAqB,GAAA;AAAA,IACrB,oBAAA,GAAuB,IAAA;AAAA,IACvB,SAAA,GAAY,OAAA;AAAA,IACZ,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,mBAAA,EAAqB,iBAAA,KAAsB,cAAA,EAAe;AAC9F,EAAA,MAAM,kBAAkB,WAAA,EAAY;AACpC,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AACnD,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAE/C,EAAA,MAAM,oBAAA,GAAuB,mBAAA,CAAoB,aAAA,EAAe,iBAAiB,CAAA;AACjF,EAAA,MAAM,qBAAA,GAAwB,mBAAA,CAAoB,cAAA,EAAgB,mBAAmB,CAAA;AAGrF,EAAA,MAAM,WAAA,GAAcgD,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,EAAA,MAAM,cAAA,GAAiBA,OAAe,EAAE,CAAA;AACxC,EAAAxB,UAAU,MAAM;AA5OlB,IAAA,IAAA,EAAA;AA6OI,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,eAAe,CAAA;AAC9C,IAAA,IAAI,OAAA,KAAY,eAAe,OAAA,EAAS;AACtC,MAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,MAAA,CAAA,EAAA,GAAA,WAAA,CAAY,YAAZ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,WAAA,EAAsB,eAAA,CAAA;AAAA,IACxB;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAGpB,EAAA,mBAAA,CAAoB,KAAK,OAAO;AAAA,IAC9B,cAAc,MAAM;AAClB,MAAA,OAAO,YAAA,EAAa;AAAA,IACtB,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,WAAA,KAAgB;AAC7B,MAAA,mBAAA,CAAoB,WAAW,CAAA;AAC/B,MAAA,aAAA,CAAc,WAAW,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,aAAa,MAAM;AACjB,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAAA,GACF,CAAE,CAAA;AAEF,EAAA,uBACEvB,OAAAA,CAAA,aAAA,CAACiB,KAAAA,EAAA,EAAM,QAAA,EAAS,UAAA,EAAW,EAAA,EAAG,kBAAA,EAAmB,EAAA,EAAI,EAAE,SAAA,EAAU,EAAA,kBAC/DjB,OAAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,mBAAA;AAAA,MACf,YAAA,EAAc,kBAAA;AAAA,MACd,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF,kBACAA,OAAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,mBAAA;AAAA,MACf,YAAA,EAAc,kBAAA;AAAA,MACd,OAAA,EAAS,oBAAA;AAAA,MACT,WAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA;AAAA,GACF,kBAEAA,OAAAA,CAAA,aAAA;AAAA,IAACiB,KAAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,WAAA,EAAa,mBAAA,GAAsB,CAAA,EAAG,sBAAsB,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,QACnE,UAAA,EAAY,iBAAA,IAAqB,oBAAA,GAAuB,CAAA,EAAG,oBAAoB,CAAA,EAAA,CAAA,GAAO,CAAA;AAAA,QACtF,YAAY,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,CAAE,KAAK,IAAI;AAAA;AACrE,KAAA;AAAA,oBAEAjB,OAAAA,CAAA,aAAA,CAACwI,gBAAA,EAAc,aAAA,EAA8B,QAAgB,oBAAA,EAA4C;AAAA,GAE7G,CAAA;AAEJ,CAAC,CAAA;AAGD,IAAM,WAAA,GAAc,UAAA,CAA6C,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC/E,EAAA,MAAM;AAAA,IACJ,eAAA,EAAiB,mBAAA;AAAA,IACjB,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA,GAAqB,KAAA;AAAA,IACrB,SAAA,GAAY,OAAA;AAAA,IACZ,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAIJ,EAAA,cAAA,CAAe,MAAM,CAAA;AAIrB,EAAA,MAAM,gBAAA,GAAmBjI,OAAAA;AAAA,IACvB,MAAM,OAAO,mBAAA,KAAwB,QAAA,GACjC,kBAAA,CAAmB,mBAAmB,CAAA,GACtC,mBAAA;AAAA,IACJ,CAAC,mBAAmB;AAAA,GACtB;AAKA,EAAA,MAAM,eAAA,GAAkBwC,OAAyC,MAAS,CAAA;AAC1E,EAAA,IAAI,gBAAA,IAAoB,gBAAA,KAAqB,eAAA,CAAgB,OAAA,EAAS;AACpE,IAAA,eAAA,CAAgB,OAAA,GAAU,gBAAA;AAC1B,IAAA,aAAA,CAAc,gBAAgB,CAAA;AAAA,EAChC;AAGA,EAAAxB,UAAU,MAAM;AACd,IAAA,qBAAA,CAAsB,kBAAkB,CAAA;AAAA,EAC1C,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAA,MAAM,cAAA,GAAiBhB,OAAAA;AAAA,IACrB,OAAO,EAAE,WAAA,EAAa,UAAA,EAAY,WAAA,EAAY,CAAA;AAAA,IAC9C,CAAC,WAAA,EAAa,UAAA,EAAY,WAAW;AAAA,GACvC;AAEA,EAAA,uBACEP,OAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAA,kBACdA,OAAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,SAAS,aAAA,EAAA,kBACvBA,QAAA,aAAA,CAAC,WAAA,EAAA,IAAY,mBACnBA,OAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,MAAA,EAAQ,QAAQ,QAAA,EAAU,MAAA,sBACtCA,OAAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,IAAA,kBACCA,OAAAA,CAAA,aAAA,CAAC,0BAAuB,SAAA,EAAW,cAAA,EAAA,kBACjCA,OAAAA,CAAA,aAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,gBAAA;AAAA,MACjB,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KAAA;AAAA,oBAEAA,OAAAA,CAAA,aAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,mBAAA;AAAA,QACA,kBAAA;AAAA,QACA,oBAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAA;AAAA,QACA,YAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA;AAAA;AACF,GAEJ,CACF,CACF,CACF,CACA,CAAA;AAEJ,CAAC;AAED,WAAA,CAAY,WAAA,GAAc,aAAA;AAC1B,mBAAA,CAAoB,WAAA,GAAc,qBAAA","file":"index.js","sourcesContent":["import DOMPurify from 'dompurify';\nimport { marked, Renderer } from 'marked';\nimport React, { CSSProperties, useMemo } from 'react';\nimport { z } from 'zod';\n\n// EmailMarkdown Component\nconst ALLOWED_TAGS = [\n 'a',\n 'article',\n 'b',\n 'blockquote',\n 'br',\n 'caption',\n 'code',\n 'del',\n 'details',\n 'div',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'ins',\n 'kbd',\n 'li',\n 'main',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'span',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'th',\n 'thead',\n 'tr',\n 'u',\n 'ul',\n];\nconst ALLOWED_ATTR = [\n 'style',\n 'title',\n 'src',\n 'srcset',\n 'alt',\n 'width',\n 'height',\n 'href',\n 'target',\n 'align',\n 'start',\n];\n\nfunction sanitizer(html: string): string {\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n });\n}\n\nclass CustomRenderer extends Renderer {\n table(header: string, body: string) {\n return `<table width=\"100%\">\n<thead>\n${header}</thead>\n<tbody>\n${body}</tbody>\n</table>`;\n }\n\n link(href: string, title: string | null, text: string) {\n if (!title) {\n return `<a href=\"${href}\" target=\"_blank\">${text}</a>`;\n }\n return `<a href=\"${href}\" title=\"${title}\" target=\"_blank\">${text}</a>`;\n }\n\n // Give paragraphs an explicit bottom margin that matches a blank line in the\n // raw source. Without this, click-to-edit swaps the rendered div (flattened\n // by ambient CSS) for a textarea whose blank lines take a full line-height,\n // causing a visible layout jump.\n paragraph(text: string) {\n return `<p style=\"margin:0 0 1em 0\">${text}</p>`;\n }\n}\n\nexport function renderMarkdownString(str: string): string {\n const html = marked.parse(str, {\n async: false,\n breaks: true,\n gfm: true,\n pedantic: false,\n silent: false,\n renderer: new CustomRenderer(),\n });\n if (typeof html !== 'string') {\n throw new Error('marked.parse did not return a string');\n }\n return sanitizer(html);\n}\n\nexport function renderInlineMarkdownString(str: string): string {\n const html = marked.parseInline(str, {\n async: false,\n breaks: true,\n gfm: true,\n pedantic: false,\n silent: false,\n renderer: new CustomRenderer(),\n });\n if (typeof html !== 'string') {\n throw new Error('marked.parseInline did not return a string');\n }\n return sanitizer(html);\n}\n\ntype EmailMarkdownProps = {\n style: CSSProperties;\n markdown: string;\n};\n\nfunction EmailMarkdown({ markdown, ...props }: EmailMarkdownProps) {\n const data = useMemo(() => renderMarkdownString(markdown), [markdown]);\n return <div {...props} dangerouslySetInnerHTML={{ __html: data }} />;\n}\n\n// Text Component\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const TextPropsSchema = z.object({\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontSize: z.number().gte(0).optional().nullable(),\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n markdown: z.boolean().optional().nullable(),\n text: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type TextProps = z.infer<typeof TextPropsSchema>;\n// Export for runtime usage\nexport const TextProps = TextPropsSchema;\n\nexport const TextPropsDefaults = {\n text: '',\n};\n\nexport function Text({ style, props }: TextProps) {\n const wStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? undefined,\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const text = props?.text ?? TextPropsDefaults.text;\n if (props?.markdown) {\n return <EmailMarkdown style={wStyle} markdown={text} />;\n }\n return <div style={wStyle}>{text}</div>;\n}\n\n// Export the Text component as default\nexport default Text;\n\n// Also export the EmailMarkdown component for direct use if needed\nexport { EmailMarkdown }; ","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const AvatarPropsSchema = z.object({\n style: z\n .object({\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n size: z.number().gt(0).optional().nullable(),\n shape: z.enum(['circle', 'square', 'rounded']).optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type AvatarProps = z.infer<typeof AvatarPropsSchema>;\nexport const AvatarProps = AvatarPropsSchema;\n\nfunction getBorderRadius(shape: 'circle' | 'square' | 'rounded', size: number): number | undefined {\n switch (shape) {\n case 'rounded':\n return size * 0.125;\n case 'circle':\n return size;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport const AvatarPropsDefaults = {\n size: 64,\n imageUrl: '',\n alt: '',\n shape: 'square',\n} as const;\n\nexport function Avatar({ style, props }: AvatarProps) {\n const size = props?.size ?? AvatarPropsDefaults.size;\n const imageUrl = props?.imageUrl ?? AvatarPropsDefaults.imageUrl;\n const alt = props?.alt ?? AvatarPropsDefaults.alt;\n const shape = props?.shape ?? AvatarPropsDefaults.shape;\n\n const sectionStyle: CSSProperties = {\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n return (\n <div style={sectionStyle}>\n <img\n alt={alt}\n src={imageUrl}\n height={size}\n width={size}\n style={{\n outline: 'none',\n border: 'none',\n textDecoration: 'none',\n objectFit: 'cover',\n height: size,\n width: size,\n maxWidth: '100%',\n display: 'inline-block',\n verticalAlign: 'middle',\n textAlign: 'center',\n borderRadius: getBorderRadius(shape, size),\n }}\n />\n </div>\n );\n}\n\n// Export the Avatar component as default\nexport default Avatar;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ButtonPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n fontSize: z.number().min(0).optional().nullable(),\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n buttonBackgroundColor: COLOR_SCHEMA,\n buttonStyle: z.enum(['rectangle', 'pill', 'rounded']).optional().nullable(),\n buttonTextColor: COLOR_SCHEMA,\n fullWidth: z.boolean().optional().nullable(),\n size: z.enum(['x-small', 'small', 'large', 'medium']).optional().nullable(),\n text: z.string().optional().nullable(),\n url: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ButtonProps = z.infer<typeof ButtonPropsSchema>;\n// Export for runtime usage\nexport const ButtonProps = ButtonPropsSchema;\n\nfunction getRoundedCorners(props: ButtonProps['props']) {\n const buttonStyle = props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n\n switch (buttonStyle) {\n case 'rectangle':\n return undefined;\n case 'pill':\n return 64;\n case 'rounded':\n default:\n return 4;\n }\n}\n\nfunction getButtonSizePadding(props: ButtonProps['props']) {\n const size = props?.size ?? ButtonPropsDefaults.size;\n switch (size) {\n case 'x-small':\n return [4, 8] as const;\n case 'small':\n return [8, 12] as const;\n case 'large':\n return [16, 32] as const;\n case 'medium':\n default:\n return [12, 20] as const;\n }\n}\n\nexport const ButtonPropsDefaults = {\n text: '',\n url: '',\n fullWidth: false,\n size: 'medium',\n buttonStyle: 'rounded',\n buttonTextColor: '#FFFFFF',\n buttonBackgroundColor: '#999999',\n} as const;\n\nexport function Button({ style, props }: ButtonProps) {\n const text = props?.text ?? ButtonPropsDefaults.text;\n const url = props?.url ?? ButtonPropsDefaults.url;\n const fullWidth = props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const buttonTextColor = props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n const padding = getButtonSizePadding(props);\n const textRaise = (padding[1] * 2 * 3) / 4;\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n const linkStyle: CSSProperties = {\n color: buttonTextColor,\n fontSize: style?.fontSize ?? 16,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n backgroundColor: buttonBackgroundColor,\n borderRadius: getRoundedCorners(props),\n display: fullWidth ? 'block' : 'inline-block',\n padding: `${padding[0]}px ${padding[1]}px`,\n textDecoration: 'none',\n };\n\n return (\n <div style={wrapperStyle}>\n <a href={url} style={linkStyle} target=\"_blank\">\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"letter-spacing: ${padding[1]}px;mso-font-width:-100%;mso-text-raise:${textRaise}\" hidden>&nbsp;</i><![endif]-->`,\n }}\n />\n <span>{text}</span>\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"letter-spacing: ${padding[1]}px;mso-font-width:-100%\" hidden>&nbsp;</i><![endif]-->`,\n }}\n />\n </a>\n </div>\n );\n}\n\nexport default Button;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst FIXED_WIDTHS_SCHEMA = z\n .tuple([z.number().nullish(), z.number().nullish(), z.number().nullish()])\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ColumnsContainerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n fixedWidths: FIXED_WIDTHS_SCHEMA,\n columnsCount: z\n .union([z.literal(2), z.literal(3)])\n .optional()\n .nullable(),\n columnsGap: z.number().optional().nullable(),\n contentAlignment: z.enum(['top', 'middle', 'bottom']).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\ntype TColumn = JSX.Element | JSX.Element[] | null;\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema> & {\n columns?: TColumn[];\n};\n\n// Export for runtime usage\nexport const ColumnsContainerProps = ColumnsContainerPropsSchema;\n\nconst ColumnsContainerPropsDefaults = {\n columnsCount: 2,\n columnsGap: 0,\n contentAlignment: 'middle',\n} as const;\n\nexport function ColumnsContainer({ style, columns, props }: ColumnsContainerProps) {\n const wStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const blockProps = {\n columnsCount: props?.columnsCount ?? ColumnsContainerPropsDefaults.columnsCount,\n columnsGap: props?.columnsGap ?? ColumnsContainerPropsDefaults.columnsGap,\n contentAlignment: props?.contentAlignment ?? ColumnsContainerPropsDefaults.contentAlignment,\n fixedWidths: props?.fixedWidths,\n };\n\n return (\n <div style={wStyle}>\n <table\n align=\"center\"\n width=\"100%\"\n cellPadding=\"0\"\n border={0}\n style={{ tableLayout: 'fixed', borderCollapse: 'collapse' }}\n >\n <tbody style={{ width: '100%' }}>\n <tr style={{ width: '100%' }}>\n <TableCell index={0} props={blockProps} columns={columns} />\n <TableCell index={1} props={blockProps} columns={columns} />\n <TableCell index={2} props={blockProps} columns={columns} />\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n\ntype Props = {\n props: {\n fixedWidths: z.infer<typeof FIXED_WIDTHS_SCHEMA>;\n columnsCount: 2 | 3;\n columnsGap: number;\n contentAlignment: 'top' | 'middle' | 'bottom';\n };\n index: number;\n columns?: TColumn[];\n};\nfunction TableCell({ index, props, columns }: Props) {\n const contentAlignment = props?.contentAlignment ?? ColumnsContainerPropsDefaults.contentAlignment;\n const columnsCount = props?.columnsCount ?? ColumnsContainerPropsDefaults.columnsCount;\n\n if (columnsCount === 2 && index === 2) {\n return null;\n }\n\n const style: CSSProperties = {\n boxSizing: 'content-box',\n verticalAlign: contentAlignment,\n paddingLeft: getPaddingBefore(index, props),\n paddingRight: getPaddingAfter(index, props),\n width: props.fixedWidths?.[index] ?? undefined,\n };\n const children = (columns && columns[index]) ?? null;\n return <td style={style}>{children}</td>;\n}\n\nfunction getPaddingBefore(index: number, { columnsGap, columnsCount }: Props['props']) {\n if (index === 0) {\n return 0;\n }\n if (columnsCount === 2) {\n return columnsGap / 2;\n }\n if (index === 1) {\n return columnsGap / 3;\n }\n return (2 * columnsGap) / 3;\n}\n\nfunction getPaddingAfter(index: number, { columnsGap, columnsCount }: Props['props']) {\n if (columnsCount === 2) {\n if (index === 0) {\n return columnsGap / 2;\n }\n return 0;\n }\n\n if (index === 0) {\n return (2 * columnsGap) / 3;\n }\n if (index === 1) {\n return columnsGap / 3;\n }\n return 0;\n}\n\nexport default ColumnsContainer;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ContainerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type ContainerProps = {\n style?: z.infer<typeof ContainerPropsSchema>['style'];\n children?: JSX.Element | JSX.Element[] | null;\n};\n\n// Export for runtime usage\nexport const ContainerProps = ContainerPropsSchema;\n\nfunction getBorder(style: ContainerProps['style']) {\n if (!style || !style.borderColor) {\n return undefined;\n }\n return `1px solid ${style.borderColor}`;\n}\n\nexport function Container({ style, children }: ContainerProps) {\n const wStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n border: getBorder(style),\n borderRadius: style?.borderRadius ?? undefined,\n padding: getPadding(style?.padding),\n };\n if (!children) {\n return <div style={wStyle} />;\n }\n return <div style={wStyle}>{children}</div>;\n}\n\nexport default Container;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const DividerPropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n lineColor: COLOR_SCHEMA,\n lineHeight: z.number().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type DividerProps = z.infer<typeof DividerPropsSchema>;\n\n// Export for runtime usage\nexport const DividerProps = DividerPropsSchema;\n\nexport const DividerPropsDefaults = {\n lineHeight: 1,\n lineColor: '#333333',\n};\n\nexport function Divider({ style, props }: DividerProps) {\n const st: CSSProperties = {\n padding: getPadding(style?.padding),\n backgroundColor: style?.backgroundColor ?? undefined,\n };\n const borderTopWidth = props?.lineHeight ?? DividerPropsDefaults.lineHeight;\n const borderTopColor = props?.lineColor ?? DividerPropsDefaults.lineColor;\n return (\n <div style={st}>\n <hr\n style={{\n width: '100%',\n border: 'none',\n borderTop: `${borderTopWidth}px solid ${borderTopColor}`,\n margin: 0,\n }}\n />\n </div>\n );\n}\n\nexport default Divider;\n","import React, { CSSProperties, useMemo } from 'react';\nimport { z } from 'zod';\n\nimport { renderInlineMarkdownString } from './text';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nexport const HeadingPropsSchema = z.object({\n props: z\n .object({\n text: z.string().optional().nullable(),\n level: z.enum(['h1', 'h2', 'h3']).optional().nullable(),\n markdown: z.boolean().optional().nullable(),\n })\n .optional()\n .nullable(),\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n fontWeight: z.enum(['bold', 'normal']).optional().nullable(),\n lineHeight: z.number().gte(0).optional().nullable(),\n letterSpacing: z.number().optional().nullable(),\n textAlign: z.enum(['left', 'center', 'right']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type HeadingProps = z.infer<typeof HeadingPropsSchema>;\n\n// Export for runtime usage\nexport const HeadingProps = HeadingPropsSchema;\n\nexport const HeadingPropsDefaults = {\n level: 'h2',\n text: '',\n} as const;\n\nexport function Heading({ props, style }: HeadingProps) {\n const level = props?.level ?? HeadingPropsDefaults.level;\n const text = props?.text ?? HeadingPropsDefaults.text;\n const isMarkdown = props?.markdown ?? false;\n const hStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n margin: 0,\n fontFamily: getFontFamily(style?.fontFamily),\n fontSize: getFontSize(level),\n padding: getPadding(style?.padding),\n };\n const html = useMemo(() => (isMarkdown ? renderInlineMarkdownString(text) : null), [isMarkdown, text]);\n const renderProps = isMarkdown\n ? { style: hStyle, dangerouslySetInnerHTML: { __html: html ?? '' } }\n : { style: hStyle, children: text };\n switch (level) {\n case 'h1':\n return <h1 {...renderProps} />;\n case 'h2':\n return <h2 {...renderProps} />;\n case 'h3':\n return <h3 {...renderProps} />;\n }\n}\n\nfunction getFontSize(level: 'h1' | 'h2' | 'h3') {\n switch (level) {\n case 'h1':\n return 32;\n case 'h2':\n return 24;\n case 'h3':\n return 20;\n }\n}\n\nexport default Heading;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const HtmlPropsSchema = z.object({\n style: z\n .object({\n color: COLOR_SCHEMA,\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n fontSize: z.number().min(0).optional().nullable(),\n textAlign: z.enum(['left', 'right', 'center']).optional().nullable(),\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n contents: z.string().optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type HtmlProps = z.infer<typeof HtmlPropsSchema>;\n// Export for runtime usage\nexport const HtmlProps = HtmlPropsSchema;\n\nexport function Html({ style, props }: HtmlProps) {\n const children = props?.contents;\n const cssStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n fontSize: style?.fontSize ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n if (!children) {\n return <div style={cssStyle} />;\n }\n return <div style={cssStyle} dangerouslySetInnerHTML={{ __html: children }} />;\n}\n\nexport default Html;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const ImagePropsSchema = z.object({\n style: z\n .object({\n padding: PADDING_SCHEMA,\n backgroundColor: z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .optional()\n .nullable(),\n textAlign: z.enum(['center', 'left', 'right']).optional().nullable(),\n })\n .optional()\n .nullable(),\n props: z\n .object({\n width: z.number().optional().nullable(),\n height: z.number().optional().nullable(),\n url: z.string().optional().nullable(),\n alt: z.string().optional().nullable(),\n linkHref: z.string().optional().nullable(),\n contentAlignment: z.enum(['top', 'middle', 'bottom']).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ImageProps = z.infer<typeof ImagePropsSchema>;\n// Export for runtime usage\nexport const ImageProps = ImagePropsSchema;\n\nexport function Image({ style, props }: ImageProps) {\n const sectionStyle: CSSProperties = {\n padding: getPadding(style?.padding),\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n };\n\n const linkHref = props?.linkHref ?? null;\n const width = props?.width ?? undefined;\n const height = props?.height ?? undefined;\n\n const imageElement = (\n <img\n alt={props?.alt ?? ''}\n src={props?.url ?? ''}\n width={width}\n height={height}\n style={{\n width,\n height,\n outline: 'none',\n border: 'none',\n textDecoration: 'none',\n verticalAlign: props?.contentAlignment ?? 'middle',\n display: 'inline-block',\n maxWidth: '100%',\n }}\n />\n );\n\n if (!linkHref) {\n return <div style={sectionStyle}>{imageElement}</div>;\n }\n\n return (\n <div style={sectionStyle}>\n <a href={linkHref} style={{ textDecoration: 'none' }} target=\"_blank\">\n {imageElement}\n </a>\n </div>\n );\n}\n\nexport default Image;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nfunction getFontFamily(fontFamily: z.infer<typeof FONT_FAMILY_SCHEMA>) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst PADDING_SCHEMA = z\n .object({\n top: z.number(),\n bottom: z.number(),\n right: z.number(),\n left: z.number(),\n })\n .optional()\n .nullable();\n\nconst getPadding = (padding: z.infer<typeof PADDING_SCHEMA>) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nexport const SignaturePropsSchema = z.object({\n style: z\n .object({\n backgroundColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n padding: PADDING_SCHEMA,\n })\n .optional()\n .nullable(),\n props: z\n .object({\n greeting: z.string().optional().nullable(),\n name: z.string().optional().nullable(),\n title: z.string().optional().nullable(),\n company: z.string().optional().nullable(),\n address: z.string().optional().nullable(),\n email: z.string().optional().nullable(),\n phone: z.string().optional().nullable(),\n website: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n imageSize: z.number().optional().nullable(),\n imageShape: z.enum(['circle', 'square', 'rounded']).optional().nullable(),\n layout: z.enum(['horizontal', 'vertical']).optional().nullable(),\n nameColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n linkColor: COLOR_SCHEMA,\n })\n .optional()\n .nullable(),\n});\n\nexport type SignatureProps = z.infer<typeof SignaturePropsSchema>;\nexport const SignatureProps = SignaturePropsSchema;\n\nexport const SignaturePropsDefaults = {\n greeting: '',\n name: '',\n title: '',\n company: '',\n address: '',\n email: '',\n phone: '',\n website: '',\n imageUrl: '',\n imageSize: 64,\n imageShape: 'circle',\n layout: 'horizontal',\n nameColor: '#262626',\n textColor: '#666666',\n linkColor: '#0079CC',\n} as const;\n\nfunction getImageBorderRadius(shape: string, size: number): number | undefined {\n switch (shape) {\n case 'circle':\n return size;\n case 'rounded':\n return size * 0.125;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport function Signature({ style, props }: SignatureProps) {\n const greeting = props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = props?.name ?? SignaturePropsDefaults.name;\n const title = props?.title ?? SignaturePropsDefaults.title;\n const company = props?.company ?? SignaturePropsDefaults.company;\n const address = props?.address ?? SignaturePropsDefaults.address;\n const email = props?.email ?? SignaturePropsDefaults.email;\n const phone = props?.phone ?? SignaturePropsDefaults.phone;\n const website = props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n fontFamily: getFontFamily(style?.fontFamily),\n padding: getPadding(style?.padding),\n };\n\n const greetingStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n marginBottom: 8,\n lineHeight: '1.4',\n fontStyle: 'italic',\n };\n\n const nameStyle: CSSProperties = {\n fontSize: 16,\n fontWeight: 'bold',\n color: nameColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const detailStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 14,\n color: linkColor,\n textDecoration: 'none',\n };\n\n const imageElement = imageUrl ? (\n <img\n src={imageUrl}\n alt={name || company}\n width={imageSize}\n height={imageSize}\n style={{\n width: imageSize,\n height: imageSize,\n objectFit: 'cover',\n borderRadius: getImageBorderRadius(imageShape, imageSize),\n display: 'block',\n outline: 'none',\n border: 'none',\n }}\n />\n ) : null;\n\n const contactParts: JSX.Element[] = [];\n if (email) contactParts.push(<a key=\"email\" href={`mailto:${email}`} style={linkStyle}>{email}</a>);\n if (phone) contactParts.push(<a key=\"phone\" href={`tel:${phone}`} style={linkStyle}>{phone}</a>);\n if (website) {\n const href = website.startsWith('http') ? website : `https://${website}`;\n contactParts.push(<a key=\"website\" href={href} style={linkStyle} target=\"_blank\">{website}</a>);\n }\n\n const textContent = (\n <div>\n {name && <p style={nameStyle}>{name}</p>}\n {title && <p style={detailStyle}>{title}</p>}\n {company && <p style={detailStyle}>{company}</p>}\n {address && <p style={detailStyle}>{address}</p>}\n {contactParts.length > 0 && (\n <p style={{ ...detailStyle, marginTop: 4 }}>\n {contactParts.map((part, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span style={detailStyle}> &middot; </span>}\n {part}\n </React.Fragment>\n ))}\n </p>\n )}\n </div>\n );\n\n const greetingElement = greeting ? <p style={greetingStyle}>{greeting}</p> : null;\n\n if (layout === 'vertical') {\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n {imageElement && <div style={{ marginBottom: 12 }}>{imageElement}</div>}\n {textContent}\n </div>\n );\n }\n\n // horizontal layout\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n <table cellPadding=\"0\" cellSpacing=\"0\" border={0} role=\"presentation\">\n <tbody>\n <tr>\n {imageElement && (\n <td style={{ verticalAlign: 'middle', paddingRight: 16 }}>\n {imageElement}\n </td>\n )}\n <td style={{ verticalAlign: 'middle' }}>\n {textContent}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n\nexport default Signature;\n","import React, { CSSProperties } from 'react';\nimport { z } from 'zod';\n\nexport const SpacerPropsSchema = z.object({\n props: z\n .object({\n height: z.number().gte(0).optional().nullish(),\n })\n .optional()\n .nullable(),\n});\n\nexport type SpacerProps = z.infer<typeof SpacerPropsSchema>;\n\n// Export for runtime usage\nexport const SpacerProps = SpacerPropsSchema;\n\nexport const SpacerPropsDefaults = {\n height: 16,\n};\n\nexport function Spacer({ props }: SpacerProps) {\n const style: CSSProperties = {\n height: props?.height ?? SpacerPropsDefaults.height,\n };\n return <div style={style} />;\n}\n\nexport default Spacer;\n","import React from 'react';\n\nimport type { BaseZodDictionary, BlockConfiguration, DocumentBlocksDictionary } from '../utils';\n\n/**\n * @param blocks Main DocumentBlocksDictionary\n * @returns React component that can render a BlockConfiguration that is compatible with blocks\n */\nexport default function buildBlockComponent<T extends BaseZodDictionary>(blocks: DocumentBlocksDictionary<T>) {\n return function BlockComponent({ type, data }: BlockConfiguration<T>) {\n const Component = blocks[type].Component;\n return <Component {...data} />;\n };\n}\n","import { z } from 'zod';\n\nimport type { BaseZodDictionary, BlockConfiguration, DocumentBlocksDictionary } from '../utils';\n\n/**\n *\n * @param blocks Main DocumentBlocksDictionary\n * @returns zod schema that can parse arbitary objects into a single BlockConfiguration\n */\nexport default function buildBlockConfigurationSchema<T extends BaseZodDictionary>(\n blocks: DocumentBlocksDictionary<T>\n) {\n const blockObjects = Object.keys(blocks).map((type: keyof T) =>\n z.object({\n type: z.literal(type),\n data: blocks[type].schema,\n })\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return z.discriminatedUnion('type', blockObjects as any).transform((v) => v as BlockConfiguration<T>);\n}\n","import type { BaseZodDictionary, DocumentBlocksDictionary } from '../utils';\n\n/**\n * Identity function to type a DocumentBlocksDictionary\n * @param blocks Main DocumentBlocksDictionary\n * @returns typed DocumentBlocksDictionary\n */\nexport default function buildBlockConfigurationDictionary<T extends BaseZodDictionary>(\n blocks: DocumentBlocksDictionary<T>\n) {\n return blocks;\n} ","import { z } from 'zod';\n\nexport type BaseZodDictionary = { [name: string]: z.AnyZodObject };\nexport type DocumentBlocksDictionary<T extends BaseZodDictionary> = {\n [K in keyof T]: {\n schema: T[K];\n Component: (props: z.infer<T[K]>) => JSX.Element;\n };\n};\n\n// Export as a runtime value\nexport const DocumentBlocksDictionary = 'DocumentBlocksDictionary';\n\nexport type BlockConfiguration<T extends BaseZodDictionary> = {\n [TType in keyof T]: {\n type: TType;\n data: z.infer<T[TType]>;\n };\n}[keyof T];\n\n// Export as a runtime value\nexport const BlockConfiguration = 'BlockConfiguration';\n\n// Export BaseZodDictionary as a runtime value\nexport const BaseZodDictionary = 'BaseZodDictionary';\n\nexport class BlockNotFoundError extends Error {\n blockId: string;\n constructor(blockId: string) {\n super('Could not find a block with the given blockId');\n this.blockId = blockId;\n }\n}\n","import Handlebars from 'handlebars';\n\n/**\n * A fresh Handlebars environment scoped to the editor. Pre-registered with\n * `formatDate` and `formatNumber` helpers. Kept isolated from the global\n * `Handlebars` default instance so registrations here don't leak into the\n * consumer's own environment (and vice versa).\n */\nexport const editorHandlebars = Handlebars.create();\n\neditorHandlebars.registerHelper('formatDate', function (value: unknown, format?: unknown) {\n if (value === null || value === undefined || value === '') return '';\n const date = value instanceof Date ? value : new Date(String(value));\n if (Number.isNaN(date.getTime())) return String(value);\n const spec = typeof format === 'string' ? format : undefined;\n if (!spec || spec === 'iso') return date.toISOString();\n if (spec === 'date') return date.toLocaleDateString();\n if (spec === 'time') return date.toLocaleTimeString();\n if (spec === 'datetime') return date.toLocaleString();\n return date.toLocaleDateString(undefined, { dateStyle: spec as any });\n});\n\neditorHandlebars.registerHelper('formatNumber', function (value: unknown, options?: unknown) {\n if (value === null || value === undefined || value === '') return '';\n const num = typeof value === 'number' ? value : Number(value);\n if (Number.isNaN(num)) return String(value);\n const hashOpts = (options && typeof options === 'object' && 'hash' in (options as any)\n ? (options as any).hash\n : {}) as {\n currency?: string;\n style?: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n };\n try {\n return new Intl.NumberFormat(undefined, {\n style: hashOpts.style as any,\n currency: hashOpts.currency,\n minimumFractionDigits: hashOpts.minimumFractionDigits,\n maximumFractionDigits: hashOpts.maximumFractionDigits,\n }).format(num);\n } catch {\n return String(num);\n }\n});\n\nexport type HandlebarsContext = Record<string, unknown>;\n\n/**\n * Compile `source` as a Handlebars template and render it with `context`.\n * Uses the scoped {@link editorHandlebars} instance.\n */\nexport function evaluateHandlebars(source: string, context: HandlebarsContext): string {\n const template = editorHandlebars.compile(source, { strict: false, noEscape: false });\n return template(context);\n}\n","import { z } from 'zod';\n\n// Import from our local blocks\nimport { ColumnsContainerPropsSchema as BaseColumnsContainerPropsSchema } from '@blocks';\n\n/**\n * Schema for ColumnsContainer props in the email editor\n * \n * Extends the base ColumnsContainer schema to add support for \n * childrenIds references that allow adding other blocks into columns\n */\nconst BasePropsShape = BaseColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;\n\nconst ColumnsContainerPropsSchema = z.object({\n style: BaseColumnsContainerPropsSchema.shape.style,\n props: z\n .object({\n ...BasePropsShape,\n columns: z.tuple([\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n ]),\n })\n .optional()\n .nullable(),\n});\n\nexport default ColumnsContainerPropsSchema;\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema>; ","import React from 'react';\n\n// Import from our local blocks\nimport { ColumnsContainer as BaseColumnsContainer } from '@blocks';\n\nimport { ReaderBlock } from '../../reader/core';\n\nimport { ColumnsContainerProps } from './columns-container-props-schema';\n\n/**\n * ColumnsContainer Reader component for email templates\n * \n * This component extends the base ColumnsContainer to support\n * referencing child blocks by ID rather than direct embedding,\n * allowing for a more flexible document structure.\n */\nexport default function ColumnsContainerReader({ style, props }: ColumnsContainerProps) {\n const { columns, ...restProps } = props ?? {};\n let cols = undefined;\n if (columns) {\n cols = columns.map((col) => col.childrenIds.map((childId) => <ReaderBlock key={childId} id={childId} />));\n }\n\n return <BaseColumnsContainer props={restProps} columns={cols} style={style} />;\n} ","import { z } from 'zod';\n\n// Import from our local blocks\nimport { ContainerPropsSchema as BaseContainerPropsSchema } from '@blocks';\n\n/**\n * Schema for Container props in the email editor\n * \n * Extends the base Container schema to add support for\n * childrenIds references that allow adding other blocks inside\n */\nexport const ContainerPropsSchema = z.object({\n style: BaseContainerPropsSchema.shape.style,\n props: z\n .object({\n childrenIds: z.array(z.string()).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport type ContainerProps = z.infer<typeof ContainerPropsSchema>; ","import React from 'react';\n\n// Import from our local blocks\nimport { Container as BaseContainer } from '@blocks';\n\nimport { ReaderBlock } from '@email-builder/reader/core';\n\nimport { ContainerProps } from './container-props-schema';\n\n/**\n * Container Reader component for email templates\n * \n * This component extends the base Container to support\n * referencing child blocks by ID rather than direct embedding,\n * allowing for a more flexible document structure.\n */\nexport default function ContainerReader({ style, props }: ContainerProps) {\n const childrenIds = props?.childrenIds ?? [];\n return (\n <BaseContainer style={style}>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </BaseContainer>\n );\n} ","import { z } from 'zod';\n\n/**\n * EmailLayout schema\n * \n * The EmailLayout is the top-level container for email templates.\n * It provides styling options for the entire email and contains\n * all other blocks.\n */\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nexport const TemplateVariableSchema = z.object({\n name: z.string(),\n description: z.string().optional().nullable(),\n sampleValue: z.string().optional().nullable(),\n});\n\nexport const EmailLayoutPropsSchema = z.object({\n backdropColor: COLOR_SCHEMA,\n backdropDisabled: z.boolean().optional().nullable(),\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n canvasColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n childrenIds: z.array(z.string()).optional().nullable(),\n subject: z.string().optional().nullable(),\n variables: z.array(TemplateVariableSchema).optional().nullable(),\n});\n\nexport type EmailLayoutProps = z.infer<typeof EmailLayoutPropsSchema>; ","import React from 'react';\n\nimport { ReaderBlock } from '@email-builder/reader/core';\n\nimport { EmailLayoutProps } from './email-layout-props-schema';\n\n/**\n * EmailLayout Reader component\n * \n * This is the top-level component for email templates.\n * It provides the overall structure and styling for emails,\n * including responsiveness and proper email client support.\n */\n\nfunction getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) {\n const f = fontFamily ?? 'MODERN_SANS';\n switch (f) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n}\n\nfunction getBorder({ borderColor }: EmailLayoutProps) {\n if (!borderColor) {\n return undefined;\n }\n return `1px solid ${borderColor}`;\n}\n\nexport default function EmailLayoutReader(props: EmailLayoutProps) {\n const childrenIds = props.childrenIds ?? [];\n const baseStyle = {\n color: props.textColor ?? '#262626',\n fontFamily: getFontFamily(props.fontFamily),\n fontSize: '16px',\n fontWeight: '400',\n letterSpacing: '0.15008px',\n lineHeight: '1.5',\n margin: '0',\n };\n\n if (props.backdropDisabled) {\n return (\n <div style={baseStyle}>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </div>\n );\n }\n\n return (\n <div\n style={{\n ...baseStyle,\n backgroundColor: props.backdropColor ?? '#F5F5F5',\n padding: '32px 0',\n minHeight: '100%',\n width: '100%',\n }}\n >\n <table\n align=\"center\"\n width=\"100%\"\n style={{\n margin: '0 auto',\n maxWidth: '600px',\n backgroundColor: props.canvasColor ?? '#FFFFFF',\n borderRadius: props.borderRadius ?? undefined,\n overflow: props.borderRadius ? 'hidden' : undefined,\n border: getBorder(props),\n }}\n role=\"presentation\"\n cellSpacing=\"0\"\n cellPadding=\"0\"\n border={0}\n >\n <tbody>\n <tr style={{ width: '100%' }}>\n <td>\n {childrenIds.map((childId) => (\n <ReaderBlock key={childId} id={childId} />\n ))}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n} ","import React, { createContext, useContext } from 'react';\nimport { z } from 'zod';\n\n// Import directly from our local blocks\nimport { \n Avatar, AvatarPropsSchema,\n Button, ButtonPropsSchema,\n Divider, DividerPropsSchema,\n Heading, HeadingPropsSchema,\n Html, HtmlPropsSchema,\n Image, ImagePropsSchema,\n Signature, SignaturePropsSchema,\n Spacer, SpacerPropsSchema,\n Text, TextPropsSchema\n} from '../../blocks';\n\n// Import from our local core\nimport {\n buildBlockComponent,\n buildBlockConfigurationDictionary,\n buildBlockConfigurationSchema,\n} from '../../core';\n\n// Import the local block components using the new index files\nimport {\n ColumnsContainerPropsSchema,\n ColumnsContainerReader,\n ContainerPropsSchema,\n ContainerReader,\n EmailLayoutPropsSchema,\n EmailLayoutReader\n} from '../blocks';\n\n/**\n * Reader component - responsible for rendering an email document\n * \n * This component provides a context for rendering a document composed of various blocks.\n * It uses a dictionary of block components and their schemas to validate and render\n * the document structure.\n */\n\n// Define the context and reader document type first to avoid circular references\nexport type TReaderDocument = Record<string, any>;\nconst ReaderContext = createContext<TReaderDocument>({});\n\nfunction useReaderDocument() {\n return useContext(ReaderContext);\n}\n\n// Create a temporary ReaderBlock component to define in the dictionary\nexport type TReaderBlockProps = { id: string };\nexport function ReaderBlock({ id }: TReaderBlockProps) {\n const document = useReaderDocument();\n return document[id] ? <BaseReaderBlock {...document[id]} /> : null;\n}\n\n// Now define the dictionary with all block components\nconst READER_DICTIONARY = buildBlockConfigurationDictionary({\n ColumnsContainer: {\n schema: ColumnsContainerPropsSchema,\n Component: ColumnsContainerReader,\n },\n Container: {\n schema: ContainerPropsSchema,\n Component: ContainerReader,\n },\n EmailLayout: {\n schema: EmailLayoutPropsSchema,\n Component: EmailLayoutReader,\n },\n //\n Avatar: {\n schema: AvatarPropsSchema,\n Component: Avatar,\n },\n Button: {\n schema: ButtonPropsSchema,\n Component: Button,\n },\n Divider: {\n schema: DividerPropsSchema,\n Component: Divider,\n },\n Heading: {\n schema: HeadingPropsSchema,\n Component: Heading,\n },\n Html: {\n schema: HtmlPropsSchema,\n Component: Html,\n },\n Image: {\n schema: ImagePropsSchema,\n Component: Image,\n },\n Spacer: {\n schema: SpacerPropsSchema,\n Component: Spacer,\n },\n Text: {\n schema: TextPropsSchema,\n Component: Text,\n },\n Signature: {\n schema: SignaturePropsSchema,\n Component: Signature,\n },\n});\n\nexport const ReaderBlockSchema = buildBlockConfigurationSchema(READER_DICTIONARY);\nexport type TReaderBlock = z.infer<typeof ReaderBlockSchema>;\n\nexport const ReaderDocumentSchema = z.record(z.string(), ReaderBlockSchema);\n\n// Now define the BaseReaderBlock using the dictionary\nconst BaseReaderBlock = buildBlockComponent(READER_DICTIONARY);\n\nexport type TReaderProps = {\n document: Record<string, z.infer<typeof ReaderBlockSchema>>;\n rootBlockId: string;\n};\nexport default function Reader({ document, rootBlockId }: TReaderProps) {\n return (\n <ReaderContext.Provider value={document}>\n <ReaderBlock id={rootBlockId} />\n </ReaderContext.Provider>\n );\n} ","import React from 'react';\nimport { renderToStaticMarkup as baseRenderToStaticMarkup } from 'react-dom/server';\n\nimport { evaluateHandlebars, type HandlebarsContext } from '../handlebars';\nimport { Reader, type TReaderDocument } from '../reader';\n\n/**\n * Renders an email document to static HTML markup\n *\n * This function takes a document structure and renders it to static HTML\n * suitable for sending as an email. It adds the DOCTYPE and wraps everything\n * in basic HTML/body tags.\n *\n * When `variables` is provided, the rendered HTML is evaluated as a\n * Handlebars template — conditionals, loops, subpath access, and the\n * built-in `formatDate` / `formatNumber` helpers all resolve against the\n * given context. Without `variables`, the output keeps raw `{{name}}`\n * placeholders in place (the save-time, send-later shape).\n *\n * @param document The email document structure to render\n * @param options Options including the rootBlockId to start rendering from, and optional Handlebars context\n * @returns A complete HTML string representation of the email\n */\ntype TOptions = {\n rootBlockId: string;\n variables?: HandlebarsContext;\n};\n\nexport default function renderToStaticMarkup(document: TReaderDocument, { rootBlockId, variables }: TOptions) {\n const html =\n '<!DOCTYPE html>' +\n baseRenderToStaticMarkup(\n <html>\n <body>\n <Reader document={document} rootBlockId={rootBlockId} />\n </body>\n </html>\n );\n if (!variables) return html;\n return evaluateHandlebars(html, variables);\n}\n","import { evaluateHandlebars, type HandlebarsContext } from '../handlebars';\nimport { type TReaderDocument } from '../reader';\n\ntype TOptions = {\n rootBlockId: string;\n variables?: HandlebarsContext;\n};\n\nexport default function renderToText(document: TReaderDocument, { rootBlockId, variables }: TOptions): string {\n const lines: string[] = [];\n renderBlock(document, rootBlockId, lines);\n // Collapse 3+ consecutive blank lines into 2, then trim\n const text = lines.join('\\n').replace(/\\n{3,}/g, '\\n\\n').trim() + '\\n';\n if (!variables) return text;\n return evaluateHandlebars(text, variables);\n}\n\nfunction renderBlock(document: TReaderDocument, blockId: string, lines: string[]): void {\n const block = document[blockId];\n if (!block) return;\n\n const { type, data } = block;\n\n switch (type) {\n case 'EmailLayout':\n renderChildren(document, data?.childrenIds, lines);\n break;\n\n case 'Container':\n renderChildren(document, data?.props?.childrenIds, lines);\n break;\n\n case 'ColumnsContainer':\n renderColumnsContainer(document, data, lines);\n break;\n\n case 'Text':\n renderText(data, lines);\n break;\n\n case 'Heading':\n renderHeading(data, lines);\n break;\n\n case 'Button':\n renderButton(data, lines);\n break;\n\n case 'Image':\n renderImage(data, lines);\n break;\n\n case 'Avatar':\n renderAvatar(data, lines);\n break;\n\n case 'Html':\n renderHtml(data, lines);\n break;\n\n case 'Divider':\n lines.push('');\n lines.push('---');\n lines.push('');\n break;\n\n case 'Spacer':\n lines.push('');\n break;\n }\n}\n\nfunction renderChildren(document: TReaderDocument, childrenIds: string[] | null | undefined, lines: string[]): void {\n if (!childrenIds) return;\n for (const childId of childrenIds) {\n renderBlock(document, childId, lines);\n }\n}\n\nfunction renderColumnsContainer(document: TReaderDocument, data: any, lines: string[]): void {\n const columns = data?.props?.columns;\n if (!columns) return;\n for (const col of columns) {\n if (col?.childrenIds?.length) {\n renderChildren(document, col.childrenIds, lines);\n }\n }\n}\n\nfunction renderText(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n if (!text) return;\n\n if (data?.props?.markdown) {\n // Strip HTML tags from rendered markdown - the source is markdown so just use it directly\n lines.push(text);\n } else {\n lines.push(text);\n }\n lines.push('');\n}\n\nfunction renderHeading(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n if (!text) return;\n\n const level = data?.props?.level ?? 'h2';\n const prefix = level === 'h1' ? '# ' : level === 'h2' ? '## ' : '### ';\n lines.push(prefix + text);\n lines.push('');\n}\n\nfunction renderButton(data: any, lines: string[]): void {\n const text = data?.props?.text ?? '';\n const url = data?.props?.url ?? '';\n\n if (text && url) {\n lines.push(`${text}: ${url}`);\n } else if (text) {\n lines.push(text);\n } else if (url) {\n lines.push(url);\n }\n lines.push('');\n}\n\nfunction renderImage(data: any, lines: string[]): void {\n const alt = data?.props?.alt ?? '';\n const url = data?.props?.url ?? '';\n const linkHref = data?.props?.linkHref ?? '';\n\n if (alt && linkHref) {\n lines.push(`[${alt}] ${linkHref}`);\n } else if (alt) {\n lines.push(`[${alt}]`);\n } else if (url) {\n lines.push(`[Image: ${url}]`);\n }\n lines.push('');\n}\n\nfunction renderAvatar(data: any, lines: string[]): void {\n const alt = data?.props?.alt ?? '';\n if (alt) {\n lines.push(`[${alt}]`);\n lines.push('');\n }\n}\n\nfunction renderHtml(data: any, lines: string[]): void {\n const contents = data?.props?.contents ?? '';\n if (!contents) return;\n\n // Strip HTML tags to get plain text\n const text = stripHtml(contents);\n if (text) {\n lines.push(text);\n lines.push('');\n }\n}\n\nfunction stripHtml(html: string): string {\n return html\n // Replace <br> and <br/> with newlines\n .replace(/<br\\s*\\/?>/gi, '\\n')\n // Replace block-level closing tags with newlines\n .replace(/<\\/(p|div|h[1-6]|li|tr|blockquote)>/gi, '\\n')\n // Replace <hr> with divider\n .replace(/<hr\\s*\\/?>/gi, '\\n---\\n')\n // Strip remaining tags\n .replace(/<[^>]+>/g, '')\n // Decode common HTML entities\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&nbsp;/g, ' ')\n // Clean up whitespace per line\n .split('\\n')\n .map(line => line.trim())\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n","import { alpha, createTheme, darken, lighten } from '@mui/material/styles';\n\nconst BRAND_NAVY = '#212443';\nconst BRAND_BLUE = '#0079CC';\nconst BRAND_GREEN = '#1F8466';\nconst BRAND_RED = '#E81212';\nconst BRAND_YELLOW = '#F6DC9F';\nconst BRAND_PURPLE = '#6C0E7C';\nconst BRAND_BROWN = '#CC996C';\nconst STANDARD_FONT_FAMILY =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\nconst MONOSPACE_FONT_FAMILY =\n 'ui-monospace, Menlo, Monaco, \"Cascadia Mono\", \"Segoe UI Mono\", \"Roboto Mono\", \"Oxygen Mono\", \"Ubuntu Monospace\", \"Source Code Pro\", \"Fira Mono\", \"Droid Sans Mono\", \"Courier New\", monospace';\n\nconst BASE_THEME = createTheme({\n palette: {\n background: {\n default: '#f2f5f7',\n },\n text: {\n primary: '#1F1F21',\n secondary: '#4F4F4F',\n },\n },\n typography: {\n fontFamily: STANDARD_FONT_FAMILY,\n },\n});\n\nconst THEME = createTheme(BASE_THEME, {\n palette: {\n brand: {\n navy: BRAND_NAVY,\n blue: BRAND_BLUE,\n red: BRAND_RED,\n green: BRAND_GREEN,\n yellow: BRAND_YELLOW,\n purple: BRAND_PURPLE,\n brown: BRAND_BROWN,\n },\n success: {\n main: BRAND_GREEN,\n light: lighten(BRAND_GREEN, 0.15),\n dark: darken(BRAND_GREEN, 0.15),\n },\n error: {\n main: BRAND_RED,\n light: lighten(BRAND_RED, 0.15),\n dark: darken(BRAND_RED, 0.15),\n },\n cadet: {\n 100: '#F9FAFB',\n 200: '#F2F5F7',\n 300: '#DCE4EA',\n 400: '#A8BBCA',\n 500: '#6A8BA4',\n },\n highlight: {\n 100: lighten(BRAND_YELLOW, 0.8),\n 200: lighten(BRAND_YELLOW, 0.6),\n 300: lighten(BRAND_YELLOW, 0.4),\n 400: lighten(BRAND_YELLOW, 0.2),\n 500: BRAND_YELLOW,\n },\n info: {\n main: BRAND_BLUE,\n },\n primary: {\n main: BRAND_BLUE,\n },\n },\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n address {\n font-style: normal;\n }\n fieldset {\n border: none;\n padding: 0;\n }\n pre {\n font-family: ${MONOSPACE_FONT_FAMILY}\n white-space: pre-wrap;\n font-size: 12px;\n }\n `,\n },\n MuiAlert: {\n styleOverrides: {\n root: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n action: {\n paddingTop: 0,\n marginRight: 0,\n },\n filledSuccess: {\n backgroundColor: BRAND_GREEN,\n },\n },\n },\n MuiStepLabel: {\n styleOverrides: {\n label: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n MuiDialog: {\n defaultProps: {\n fullWidth: true,\n },\n },\n MuiDialogContent: {\n styleOverrides: {\n root: {\n paddingTop: BASE_THEME.spacing(1),\n paddingBottom: BASE_THEME.spacing(2),\n },\n },\n },\n MuiDialogTitle: {\n defaultProps: {\n variant: 'h4',\n },\n styleOverrides: {\n root: {\n paddingTop: BASE_THEME.spacing(3),\n paddingBottom: BASE_THEME.spacing(1),\n },\n },\n },\n MuiDialogActions: {\n styleOverrides: {\n root: {\n borderTop: '1px solid',\n borderTopColor: BASE_THEME.palette.divider,\n marginTop: BASE_THEME.spacing(2.5),\n padding: `${BASE_THEME.spacing(1.5)} ${BASE_THEME.spacing(3)}`,\n },\n },\n },\n MuiTableCell: {\n styleOverrides: {\n root: {\n ...BASE_THEME.typography.body2,\n borderColor: BASE_THEME.palette.grey[200],\n },\n head: {\n ...BASE_THEME.typography.overline,\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n letterSpacing: '0.075em',\n color: BASE_THEME.palette.text.secondary,\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&:last-child td': {\n borderBottom: 0,\n },\n },\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n textTransform: 'uppercase',\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n '&.MuiChip-filledError, &.MuiChip-filledSuccess': {\n fill: BASE_THEME.palette.primary.contrastText,\n },\n },\n sizeSmall: {\n borderRadius: BASE_THEME.spacing(0.5),\n fontSize: 12,\n },\n iconSmall: {\n fontSize: 14,\n marginLeft: BASE_THEME.spacing(1),\n },\n colorSecondary: {\n borderColor: BASE_THEME.palette.grey[400],\n color: BASE_THEME.palette.text.secondary,\n },\n label: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n MuiDrawer: {\n defaultProps: {\n PaperProps: {\n elevation: 2,\n },\n },\n },\n MuiTooltip: {\n styleOverrides: {\n tooltip: {\n fontSize: BASE_THEME.typography.pxToRem(12),\n backgroundColor: alpha(BASE_THEME.palette.text.primary, 0.9),\n },\n },\n },\n MuiSlider: {\n styleOverrides: {\n root: {\n height: 1,\n },\n track: {\n height: 1,\n border: 'none',\n },\n rail: {\n height: 1,\n backgroundColor: BASE_THEME.palette.grey[500],\n },\n mark: {\n backgroundColor: BASE_THEME.palette.grey[500],\n },\n markActive: {\n height: 0,\n },\n thumb: {\n height: 16,\n width: 16,\n cursor: 'col-resize',\n '&:hover, &.Mui-active, &.Mui-focusVisible': {\n boxShadow: `0 0 0 4px ${alpha(BRAND_BLUE, 0.2)}`,\n },\n '&:before': {\n display: 'none',\n },\n },\n },\n },\n MuiPaper: {\n defaultProps: {\n elevation: 2,\n square: true,\n },\n },\n MuiButtonBase: {\n defaultProps: {\n disableTouchRipple: true,\n focusRipple: true,\n },\n styleOverrides: {\n root: {\n '&.MuiButton-containedSecondary.Mui-disabled': {\n backgroundColor: BASE_THEME.palette.grey[100],\n },\n },\n },\n },\n MuiButtonGroup: {\n defaultProps: {\n disableElevation: true,\n },\n },\n MuiIconButton: {\n styleOverrides: {\n edgeStart: {\n marginLeft: BASE_THEME.spacing(-1),\n },\n colorSecondary: {\n color: BASE_THEME.palette.grey[500],\n },\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n },\n styleOverrides: {\n textPrimary: {\n color: BASE_THEME.palette.text.primary,\n },\n textSecondary: {\n color: BASE_THEME.palette.text.secondary,\n },\n outlinedPrimary: {\n borderColor: BASE_THEME.palette.grey[300],\n color: BASE_THEME.palette.text.primary,\n '&:hover, &:active, &:focus': {\n borderColor: BASE_THEME.palette.grey[500],\n color: BASE_THEME.palette.text.primary,\n },\n },\n containedSecondary: {\n backgroundColor: BASE_THEME.palette.common.white,\n border: `1px solid ${BASE_THEME.palette.grey[300]}`,\n color: BASE_THEME.palette.text.primary,\n '&:hover, &:active, &:focus': {\n backgroundColor: BASE_THEME.palette.common.white,\n borderColor: BASE_THEME.palette.grey[500],\n color: BASE_THEME.palette.text.primary,\n },\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n paddingLeft: BASE_THEME.spacing(1.5),\n paddingRight: BASE_THEME.spacing(1.5),\n },\n },\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n '&:not(.Mui-disabled, .Mui-error):before': {\n borderBottom: `1px solid ${BASE_THEME.palette.grey[400]}`,\n },\n '&:hover:not(.Mui-disabled, .Mui-error):before': {\n borderBottom: `1px solid ${BASE_THEME.palette.grey[500]} !important`,\n },\n '&:after': {\n borderBottom: `1px solid ${BASE_THEME.palette.text.primary} !important`,\n },\n '&.MuiOutlinedInput-root:not(.Mui-error)': {\n '& fieldset': {\n borderColor: BASE_THEME.palette.grey[300],\n transition: 'border-color 0.2s',\n },\n },\n '&.MuiOutlinedInput-root:not(.Mui-disabled, .Mui-error)': {\n '&:hover fieldset': {\n borderColor: BASE_THEME.palette.grey[400],\n },\n '&.Mui-focused fieldset': {\n borderColor: BASE_THEME.palette.text.secondary,\n borderWidth: 1,\n },\n },\n },\n input: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n '&.Mui-disabled': {\n WebkitTextFillColor: 'inherit',\n color: BASE_THEME.palette.text.secondary,\n },\n },\n inputSizeSmall: {},\n },\n },\n MuiOutlinedInput: {\n styleOverrides: {\n notchedOutline: {\n '& legend': {\n fontSize: '0.85em',\n maxWidth: '100%',\n },\n },\n },\n },\n MuiInputAdornment: {\n styleOverrides: {\n root: {\n '& .MuiTypography-root': {\n fontSize: BASE_THEME.typography.pxToRem(14),\n color: BASE_THEME.palette.text.secondary,\n },\n },\n },\n },\n MuiInputLabel: {\n defaultProps: {\n shrink: true,\n },\n styleOverrides: {\n shrink: {\n transform: 'scale(0.85)',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n '&.Mui-focused': {\n color: BASE_THEME.palette.text.primary,\n },\n '&.MuiInputLabel-standard': {\n transform: 'translate(0, -4px) scale(0.85)',\n color: '#4F4F4F',\n },\n '&.MuiInputLabel-outlined': {\n transform: 'translate(15px, -8px) scale(0.85)',\n },\n },\n },\n },\n MuiTabs: {\n defaultProps: {\n variant: 'scrollable',\n },\n styleOverrides: {\n indicator: {\n height: 1,\n backgroundColor: BASE_THEME.palette.text.primary,\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n minWidth: BASE_THEME.spacing(2),\n paddingLeft: BASE_THEME.spacing(1.5),\n paddingRight: BASE_THEME.spacing(1.5),\n fontSize: BASE_THEME.typography.pxToRem(14),\n fontFamily: BASE_THEME.typography.fontFamily,\n lineHeight: 1.5,\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n transition: 'color 0.2s',\n '&.Mui-selected': {\n color: BASE_THEME.palette.text.primary,\n },\n '&:hover': {\n color: BASE_THEME.palette.text.primary,\n },\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n borderRadius: 0,\n },\n },\n },\n MuiCardHeader: {\n styleOverrides: {\n title: {\n fontSize: BASE_THEME.typography.pxToRem(18),\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n },\n },\n },\n typography: {\n fontFamily: BASE_THEME.typography.fontFamily,\n h1: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(40),\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h2: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(32),\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h3: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(24),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h4: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(20),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h5: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(18),\n lineHeight: 1.5,\n letterSpacing: '-0.01em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n h6: {\n fontFamily: BASE_THEME.typography.fontFamily,\n fontSize: BASE_THEME.typography.pxToRem(16),\n lineHeight: 1.5,\n letterSpacing: '-0.005em',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n },\n body1: {\n fontSize: BASE_THEME.typography.pxToRem(14),\n },\n body2: {\n fontSize: BASE_THEME.typography.pxToRem(12),\n },\n overline: {\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n letterSpacing: '0.05em',\n },\n button: {\n textTransform: 'none',\n fontWeight: BASE_THEME.typography.fontWeightMedium,\n lineHeight: 1.5,\n },\n caption: {\n letterSpacing: 0,\n lineHeight: 1.5,\n },\n },\n shadows: [\n 'none',\n '0px 4px 15px rgba(33, 36, 67, 0.04), 0px 0px 2px rgba(33, 36, 67, 0.04), 0px 0px 1px rgba(33, 36, 67, 0.04)',\n '0px 10px 20px rgba(33, 36, 67, 0.04), 0px 2px 6px rgba(33, 36, 67, 0.04), 0px 0px 1px rgba(33, 36, 67, 0.04)',\n '0px 16px 24px rgba(33, 36, 67, 0.05), 0px 2px 6px rgba(33, 36, 67, 0.05), 0px 0px 1px rgba(33, 36, 67, 0.05)',\n '0px 24px 32px rgba(33, 36, 67, 0.06), 0px 16px 24px rgba(33, 36, 67, 0.06), 0px 4px 8px rgba(33, 36, 67, 0.06)',\n ...Array(20).fill('none'),\n ],\n});\n\nexport default THEME;\n","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Shape\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Button\\\"],\\\"block-add.columns\\\":[\\\"Columns\\\"],\\\"block-add.company-signature\\\":[\\\"Company Signature\\\"],\\\"block-add.container\\\":[\\\"Container\\\"],\\\"block-add.divider\\\":[\\\"Divider\\\"],\\\"block-add.heading\\\":[\\\"Heading\\\"],\\\"block-add.html\\\":[\\\"Html\\\"],\\\"block-add.image\\\":[\\\"Image\\\"],\\\"block-add.personal-signature\\\":[\\\"Personal Signature\\\"],\\\"block-add.spacer\\\":[\\\"Spacer\\\"],\\\"block-add.text\\\":[\\\"Text\\\"],\\\"button.color\\\":[\\\"Button color\\\"],\\\"button.style.pill\\\":[\\\"Pill\\\"],\\\"button.style.rectangle\\\":[\\\"Rectangle\\\"],\\\"button.style.rounded\\\":[\\\"Rounded\\\"],\\\"button.width.auto\\\":[\\\"Auto\\\"],\\\"button.width.full\\\":[\\\"Full\\\"],\\\"canvas.desktop-view\\\":[\\\"Desktop view\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobile view\\\"],\\\"columns.count\\\":[\\\"Number of columns\\\"],\\\"columns.gap\\\":[\\\"Columns gap\\\"],\\\"common.add\\\":[\\\"Add\\\"],\\\"common.cancel\\\":[\\\"Cancel\\\"],\\\"common.save\\\":[\\\"Save\\\"],\\\"common.saving\\\":[\\\"Saving…\\\"],\\\"default.button\\\":[\\\"Button\\\"],\\\"default.company-address\\\":[\\\"123 Main Street, City, Country\\\"],\\\"default.heading\\\":[\\\"Hello friend\\\"],\\\"default.html\\\":[\\\"Hello world\\\"],\\\"default.image-alt\\\":[\\\"Sample product\\\"],\\\"default.personal-company\\\":[\\\"Acme Inc.\\\"],\\\"default.personal-greeting\\\":[\\\"Best regards,\\\"],\\\"default.personal-name\\\":[\\\"John Doe\\\"],\\\"default.personal-title\\\":[\\\"Software Engineer\\\"],\\\"default.text\\\":[\\\"My new text block\\\"],\\\"divider.color\\\":[\\\"Color\\\"],\\\"drawer.library\\\":[\\\"Library\\\"],\\\"drawer.new-sample\\\":[\\\"New sample\\\"],\\\"drawer.new-template\\\":[\\\"New template\\\"],\\\"drawer.no-samples\\\":[\\\"No samples available\\\"],\\\"drawer.no-samples-match\\\":[\\\"No samples match your filters\\\"],\\\"drawer.no-templates\\\":[\\\"No saved templates yet\\\"],\\\"drawer.no-templates-match\\\":[\\\"No templates match your filters\\\"],\\\"drawer.search-samples\\\":[\\\"Search samples\\\"],\\\"drawer.search-templates\\\":[\\\"Search templates\\\"],\\\"drawer.sort-by\\\":[\\\"Sort by\\\"],\\\"drawer.tab.outline\\\":[\\\"Outline\\\"],\\\"drawer.tab.samples\\\":[\\\"Samples\\\"],\\\"drawer.tab.templates\\\":[\\\"Templates\\\"],\\\"drawer.tag.all\\\":[\\\"All\\\"],\\\"empty.description\\\":[\\\"A blank email template to start from scratch\\\"],\\\"empty.slug\\\":[\\\"Empty email\\\"],\\\"field.content\\\":[\\\"Content\\\"],\\\"field.height\\\":[\\\"Height\\\"],\\\"field.level\\\":[\\\"Level\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Size\\\"],\\\"field.style\\\":[\\\"Style\\\"],\\\"field.text\\\":[\\\"Text\\\"],\\\"field.url\\\":[\\\"Url\\\"],\\\"field.width\\\":[\\\"Width\\\"],\\\"font-family.book_sans\\\":[\\\"Book sans\\\"],\\\"font-family.book_serif\\\":[\\\"Book serif\\\"],\\\"font-family.geometric_sans\\\":[\\\"Geometric sans\\\"],\\\"font-family.heavy_sans\\\":[\\\"Heavy sans\\\"],\\\"font-family.inherit\\\":[\\\"Match email settings\\\"],\\\"font-family.modern_sans\\\":[\\\"Modern sans\\\"],\\\"font-family.modern_serif\\\":[\\\"Modern serif\\\"],\\\"font-family.monospace\\\":[\\\"Monospace\\\"],\\\"font-family.organic_sans\\\":[\\\"Organic sans\\\"],\\\"font-family.rounded_sans\\\":[\\\"Rounded sans\\\"],\\\"font-weight.bold\\\":[\\\"Bold\\\"],\\\"font-weight.regular\\\":[\\\"Regular\\\"],\\\"global.backdrop-color\\\":[\\\"Backdrop color\\\"],\\\"global.canvas-border-color\\\":[\\\"Canvas border color\\\"],\\\"global.canvas-border-radius\\\":[\\\"Canvas border radius\\\"],\\\"global.canvas-color\\\":[\\\"Canvas color\\\"],\\\"global.disable-backdrop\\\":[\\\"Disable backdrop\\\"],\\\"image.alt-text\\\":[\\\"Alt text\\\"],\\\"image.http-warning\\\":[\\\"Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery.\\\"],\\\"image.library\\\":[\\\"Library\\\"],\\\"image.link-href\\\":[\\\"Click through URL\\\"],\\\"image.source-url\\\":[\\\"Source URL\\\"],\\\"image.upload\\\":[\\\"Upload\\\"],\\\"image.uploading\\\":[\\\"Uploading…\\\"],\\\"inspect.hint\\\":[\\\"Click on a block to inspect.\\\"],\\\"inspect.not-found\\\":[\\\"Block not found. Click on a block to reset.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Inspect\\\"],\\\"inspector.tab.settings\\\":[\\\"Settings\\\"],\\\"inspector.tab.styles\\\":[\\\"Styles\\\"],\\\"inspector.tab.variables\\\":[\\\"Variables\\\"],\\\"outline.canvas\\\":[\\\"Canvas\\\"],\\\"outline.hint\\\":[\\\"Click a row to select. Drag a row to reorder or move it into a container.\\\"],\\\"outline.title\\\":[\\\"Outline\\\"],\\\"panel.avatar-block\\\":[\\\"Avatar block\\\"],\\\"panel.button-block\\\":[\\\"Button block\\\"],\\\"panel.columns-block\\\":[\\\"Columns block\\\"],\\\"panel.container-block\\\":[\\\"Container block\\\"],\\\"panel.details\\\":[\\\"Details\\\"],\\\"panel.divider-block\\\":[\\\"Divider block\\\"],\\\"panel.editor-appearance\\\":[\\\"Editor appearance\\\"],\\\"panel.export\\\":[\\\"Export\\\"],\\\"panel.global\\\":[\\\"Global\\\"],\\\"panel.heading-block\\\":[\\\"Heading block\\\"],\\\"panel.html-block\\\":[\\\"HTML block\\\"],\\\"panel.image-block\\\":[\\\"Image block\\\"],\\\"panel.signature-block\\\":[\\\"Signature block\\\"],\\\"panel.spacer-block\\\":[\\\"Spacer block\\\"],\\\"panel.template\\\":[\\\"Template\\\"],\\\"panel.text-block\\\":[\\\"Text block\\\"],\\\"picker.blank-desc\\\":[\\\"Start from an empty email\\\"],\\\"picker.blank-title\\\":[\\\"Blank\\\"],\\\"picker.create-sample\\\":[\\\"Create sample\\\"],\\\"picker.create-template\\\":[\\\"Create template\\\"],\\\"picker.creating\\\":[\\\"Creating…\\\"],\\\"picker.error-name-required\\\":[\\\"Name is required\\\"],\\\"picker.error-sample-taken\\\":[\\\"A sample with this name already exists\\\"],\\\"picker.error-template-taken\\\":[\\\"A template with this name already exists\\\"],\\\"picker.start-from\\\":[\\\"Start from\\\"],\\\"picker.title-sample\\\":[\\\"New sample\\\"],\\\"picker.title-template\\\":[\\\"New template\\\"],\\\"redo.label\\\":[\\\"Redo\\\"],\\\"redo.tooltip\\\":[\\\"Redo\\\"],\\\"rename.add-tag\\\":[\\\"Add a tag\\\"],\\\"rename.error-empty\\\":[\\\"Please enter a name\\\"],\\\"rename.error-generic\\\":[\\\"Failed to update template details\\\"],\\\"rename.error-taken\\\":[\\\"A template with this name already exists\\\"],\\\"rename.name-label\\\":[\\\"Name\\\"],\\\"rename.no-tags\\\":[\\\"No tags yet.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Add a tag and press Enter\\\"],\\\"rename.tags\\\":[\\\"Tags\\\"],\\\"rename.title\\\":[\\\"Edit details\\\"],\\\"row.actions\\\":[\\\"Row actions\\\"],\\\"row.demote\\\":[\\\"Demote to template\\\"],\\\"row.duplicate\\\":[\\\"Duplicate\\\"],\\\"row.duplicate-as-template\\\":[\\\"Duplicate as template\\\"],\\\"row.edit-details\\\":[\\\"Edit name & tags…\\\"],\\\"row.more\\\":[\\\"More\\\"],\\\"row.promote\\\":[\\\"Promote to sample\\\"],\\\"save-dialog.create\\\":[\\\"Create\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Please enter a template name\\\"],\\\"save-dialog.name-label\\\":[\\\"Template Name\\\"],\\\"save-dialog.save\\\":[\\\"Save\\\"],\\\"save-dialog.saving\\\":[\\\"Saving...\\\"],\\\"save-dialog.title\\\":[\\\"Save as a new template\\\"],\\\"save-dialog.title-new\\\":[\\\"Create a new template\\\"],\\\"savebar.error-saving\\\":[\\\"Error saving\\\"],\\\"savebar.new\\\":[\\\"New\\\"],\\\"savebar.new-template-created\\\":[\\\"New template created\\\"],\\\"savebar.sample-prefix\\\":[\\\"Sample\\\"],\\\"savebar.sample-saved\\\":[\\\"Sample saved\\\"],\\\"savebar.save\\\":[\\\"Save\\\"],\\\"savebar.save-as\\\":[\\\"Save as…\\\"],\\\"savebar.save-as-new\\\":[\\\"Save as new…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Save as a new template\\\"],\\\"savebar.save-changes\\\":[\\\"Save changes\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Save changes to this sample\\\"],\\\"savebar.start-fresh\\\":[\\\"Start a fresh template\\\"],\\\"savebar.template-saved\\\":[\\\"Template saved\\\"],\\\"settings.checkerboard\\\":[\\\"Checkerboard\\\"],\\\"settings.copied\\\":[\\\"Template copied successfully!\\\"],\\\"settings.delete\\\":[\\\"Delete Template\\\"],\\\"settings.delete-confirm\\\":[\\\"Are you sure you want to delete this template?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Editor-only — never reaches the rendered email.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Wire a renameTemplate callback to enable editing from here\\\"],\\\"settings.no-template\\\":[\\\"No template selected\\\"],\\\"settings.save-as-sample\\\":[\\\"Save as Sample Template\\\"],\\\"settings.save-details\\\":[\\\"Save details\\\"],\\\"settings.save-disabled\\\":[\\\"Save functionality is disabled. To enable saving, provide the necessary callback functions.\\\"],\\\"settings.saved\\\":[\\\"Saved\\\"],\\\"settings.solid\\\":[\\\"Solid\\\"],\\\"settings.workspace-background\\\":[\\\"Workspace background\\\"],\\\"signature.address\\\":[\\\"Address\\\"],\\\"signature.company\\\":[\\\"Company\\\"],\\\"signature.email\\\":[\\\"Email\\\"],\\\"signature.greeting\\\":[\\\"Greeting\\\"],\\\"signature.image-shape\\\":[\\\"Image shape\\\"],\\\"signature.image-size\\\":[\\\"Image size\\\"],\\\"signature.image-url\\\":[\\\"Image URL\\\"],\\\"signature.layout\\\":[\\\"Layout\\\"],\\\"signature.layout.horizontal\\\":[\\\"Horizontal\\\"],\\\"signature.layout.vertical\\\":[\\\"Vertical\\\"],\\\"signature.link-color\\\":[\\\"Link color\\\"],\\\"signature.name\\\":[\\\"Name\\\"],\\\"signature.name-color\\\":[\\\"Name color\\\"],\\\"signature.phone\\\":[\\\"Phone\\\"],\\\"signature.shape.circle\\\":[\\\"Circle\\\"],\\\"signature.shape.rounded\\\":[\\\"Rounded\\\"],\\\"signature.shape.square\\\":[\\\"Square\\\"],\\\"signature.title\\\":[\\\"Title\\\"],\\\"signature.website\\\":[\\\"Website\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Last updated\\\"],\\\"sort.name\\\":[\\\"Name (A–Z)\\\"],\\\"sort.recently-created\\\":[\\\"Recently created\\\"],\\\"style.alignment\\\":[\\\"Alignment\\\"],\\\"style.background-color\\\":[\\\"Background color\\\"],\\\"style.border-color\\\":[\\\"Border color\\\"],\\\"style.border-radius\\\":[\\\"Border radius\\\"],\\\"style.font-family\\\":[\\\"Font family\\\"],\\\"style.font-size\\\":[\\\"Font size\\\"],\\\"style.font-weight\\\":[\\\"Font weight\\\"],\\\"style.letter-spacing\\\":[\\\"Letter spacing\\\"],\\\"style.line-height\\\":[\\\"Line height\\\"],\\\"style.padding\\\":[\\\"Padding\\\"],\\\"style.text-color\\\":[\\\"Text color\\\"],\\\"subject.label\\\":[\\\"Subject\\\"],\\\"subject.placeholder\\\":[\\\"Email subject — supports {\\\",[\\\"variables\\\"],\\\"}\\\"],\\\"tab.edit\\\":[\\\"Edit\\\"],\\\"tab.html-output\\\":[\\\"HTML output\\\"],\\\"tab.json-output\\\":[\\\"JSON output\\\"],\\\"tab.preview\\\":[\\\"Preview\\\"],\\\"tab.text-output\\\":[\\\"Plain text output\\\"],\\\"tag.marketing\\\":[\\\"marketing\\\"],\\\"tag.transactional\\\":[\\\"transactional\\\"],\\\"time.days-short\\\":[\\\"d ago\\\"],\\\"time.hours-short\\\":[\\\"h ago\\\"],\\\"time.just-now\\\":[\\\"just now\\\"],\\\"time.minutes-short\\\":[\\\"m ago\\\"],\\\"time.months-short\\\":[\\\"mo ago\\\"],\\\"time.years-short\\\":[\\\"y ago\\\"],\\\"toolbar.apply\\\":[\\\"Apply\\\"],\\\"toolbar.bold\\\":[\\\"Bold\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Bold (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Font family\\\"],\\\"toolbar.italic\\\":[\\\"Italic\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Italic (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Link\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Link (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Overline\\\"],\\\"toolbar.text-color\\\":[\\\"Text color\\\"],\\\"toolbar.underline\\\":[\\\"Underline\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Underline (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Copy block\\\"],\\\"tune.delete\\\":[\\\"Delete\\\"],\\\"tune.move-down\\\":[\\\"Move down\\\"],\\\"tune.move-up\\\":[\\\"Move up\\\"],\\\"undo.label\\\":[\\\"Undo\\\"],\\\"undo.tooltip\\\":[\\\"Undo\\\"],\\\"variables.add\\\":[\\\"Add variable\\\"],\\\"variables.click-to-declare\\\":[\\\"Click a token to declare it.\\\"],\\\"variables.confirm-delete\\\":[\\\"Variable is still referenced in the body. Delete anyway?\\\"],\\\"variables.copy-token\\\":[\\\"Copy {\\\",[\\\"name\\\"],\\\"} token\\\"],\\\"variables.description\\\":[\\\"Description\\\"],\\\"variables.focus-first\\\":[\\\"Focus a text field first\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Insert at cursor\\\"],\\\"variables.intro\\\":[\\\"Declared variables travel with the template. Reference them in subject and body as {\\\",[\\\"name\\\"],\\\"}. In Preview mode, tokens render with the sample values below.\\\"],\\\"variables.none\\\":[\\\"No variables declared. Click + to add one.\\\"],\\\"variables.open-template\\\":[\\\"Open a template to manage variables.\\\"],\\\"variables.optional\\\":[\\\"Optional\\\"],\\\"variables.ref-many\\\":[\\\"refs\\\"],\\\"variables.ref-one\\\":[\\\"ref\\\"],\\\"variables.remove\\\":[\\\"Remove\\\"],\\\"variables.sample-hint\\\":[\\\"Shown in Preview mode\\\"],\\\"variables.sample-value\\\":[\\\"Sample value\\\"],\\\"variables.title\\\":[\\\"Variables\\\"],\\\"variables.undeclared\\\":[\\\"Undeclared in body\\\"],\\\"variables.unused\\\":[\\\"Unused in body\\\"]}\")as Messages;","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Muoto\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Painike\\\"],\\\"block-add.columns\\\":[\\\"Sarakkeet\\\"],\\\"block-add.company-signature\\\":[\\\"Yritysallekirjoitus\\\"],\\\"block-add.container\\\":[\\\"Säiliö\\\"],\\\"block-add.divider\\\":[\\\"Erotin\\\"],\\\"block-add.heading\\\":[\\\"Otsikko\\\"],\\\"block-add.html\\\":[\\\"HTML\\\"],\\\"block-add.image\\\":[\\\"Kuva\\\"],\\\"block-add.personal-signature\\\":[\\\"Henkilökohtainen allekirjoitus\\\"],\\\"block-add.spacer\\\":[\\\"Väli\\\"],\\\"block-add.text\\\":[\\\"Teksti\\\"],\\\"button.color\\\":[\\\"Painikkeen väri\\\"],\\\"button.style.pill\\\":[\\\"Pilleri\\\"],\\\"button.style.rectangle\\\":[\\\"Suorakaide\\\"],\\\"button.style.rounded\\\":[\\\"Pyöristetty\\\"],\\\"button.width.auto\\\":[\\\"Automaattinen\\\"],\\\"button.width.full\\\":[\\\"Täysi\\\"],\\\"canvas.desktop-view\\\":[\\\"Työpöytänäkymä\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobiilinäkymä\\\"],\\\"columns.count\\\":[\\\"Sarakkeiden määrä\\\"],\\\"columns.gap\\\":[\\\"Sarakeväli\\\"],\\\"common.add\\\":[\\\"Lisää\\\"],\\\"common.cancel\\\":[\\\"Peruuta\\\"],\\\"common.save\\\":[\\\"Tallenna\\\"],\\\"common.saving\\\":[\\\"Tallennetaan…\\\"],\\\"default.button\\\":[\\\"Painike\\\"],\\\"default.company-address\\\":[\\\"Pääkatu 1, Kaupunki, Suomi\\\"],\\\"default.heading\\\":[\\\"Hei ystävä\\\"],\\\"default.html\\\":[\\\"Hei maailma\\\"],\\\"default.image-alt\\\":[\\\"Esimerkkikuva\\\"],\\\"default.personal-company\\\":[\\\"Acme Oy\\\"],\\\"default.personal-greeting\\\":[\\\"Ystävällisin terveisin,\\\"],\\\"default.personal-name\\\":[\\\"Matti Meikäläinen\\\"],\\\"default.personal-title\\\":[\\\"Ohjelmistokehittäjä\\\"],\\\"default.text\\\":[\\\"Uusi tekstilohko\\\"],\\\"divider.color\\\":[\\\"Väri\\\"],\\\"drawer.library\\\":[\\\"Kirjasto\\\"],\\\"drawer.new-sample\\\":[\\\"Uusi malli\\\"],\\\"drawer.new-template\\\":[\\\"Uusi pohja\\\"],\\\"drawer.no-samples\\\":[\\\"Ei malleja saatavilla\\\"],\\\"drawer.no-samples-match\\\":[\\\"Mikään malli ei vastaa hakua\\\"],\\\"drawer.no-templates\\\":[\\\"Ei tallennettuja pohjia\\\"],\\\"drawer.no-templates-match\\\":[\\\"Mikään pohja ei vastaa hakua\\\"],\\\"drawer.search-samples\\\":[\\\"Etsi malleja\\\"],\\\"drawer.search-templates\\\":[\\\"Etsi pohjia\\\"],\\\"drawer.sort-by\\\":[\\\"Järjestys\\\"],\\\"drawer.tab.outline\\\":[\\\"Rakenne\\\"],\\\"drawer.tab.samples\\\":[\\\"Mallit\\\"],\\\"drawer.tab.templates\\\":[\\\"Pohjat\\\"],\\\"drawer.tag.all\\\":[\\\"Kaikki\\\"],\\\"empty.description\\\":[\\\"Tyhjä sähköpostipohja, aloita tyhjältä pöydältä\\\"],\\\"empty.slug\\\":[\\\"Tyhjä sähköposti\\\"],\\\"field.content\\\":[\\\"Sisältö\\\"],\\\"field.height\\\":[\\\"Korkeus\\\"],\\\"field.level\\\":[\\\"Taso\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Koko\\\"],\\\"field.style\\\":[\\\"Tyyli\\\"],\\\"field.text\\\":[\\\"Teksti\\\"],\\\"field.url\\\":[\\\"Osoite\\\"],\\\"field.width\\\":[\\\"Leveys\\\"],\\\"font-family.book_sans\\\":[\\\"Kirjagroteski\\\"],\\\"font-family.book_serif\\\":[\\\"Kirja-antiikva\\\"],\\\"font-family.geometric_sans\\\":[\\\"Geometrinen groteski\\\"],\\\"font-family.heavy_sans\\\":[\\\"Paksu groteski\\\"],\\\"font-family.inherit\\\":[\\\"Käytä viestin asetuksia\\\"],\\\"font-family.modern_sans\\\":[\\\"Moderni groteski\\\"],\\\"font-family.modern_serif\\\":[\\\"Moderni antiikva\\\"],\\\"font-family.monospace\\\":[\\\"Tasalevyinen\\\"],\\\"font-family.organic_sans\\\":[\\\"Orgaaninen groteski\\\"],\\\"font-family.rounded_sans\\\":[\\\"Pyöristetty groteski\\\"],\\\"font-weight.bold\\\":[\\\"Lihavoitu\\\"],\\\"font-weight.regular\\\":[\\\"Normaali\\\"],\\\"global.backdrop-color\\\":[\\\"Taustaväri\\\"],\\\"global.canvas-border-color\\\":[\\\"Kankaan reunan väri\\\"],\\\"global.canvas-border-radius\\\":[\\\"Kankaan reunan pyöristys\\\"],\\\"global.canvas-color\\\":[\\\"Kankaan väri\\\"],\\\"global.disable-backdrop\\\":[\\\"Piilota taustaväri\\\"],\\\"image.alt-text\\\":[\\\"Vaihtoehtoinen teksti\\\"],\\\"image.http-warning\\\":[\\\"Ei-HTTPS-osoite: Gmail ja muut asiakasohjelmat poistavat sekoitetun sisällön. Käytä https:// varmaa toimitusta varten.\\\"],\\\"image.library\\\":[\\\"Kirjasto\\\"],\\\"image.link-href\\\":[\\\"Linkin osoite\\\"],\\\"image.source-url\\\":[\\\"Lähdeosoite\\\"],\\\"image.upload\\\":[\\\"Lataa\\\"],\\\"image.uploading\\\":[\\\"Ladataan…\\\"],\\\"inspect.hint\\\":[\\\"Valitse lohko napsauttamalla.\\\"],\\\"inspect.not-found\\\":[\\\"Lohkoa ei löytynyt. Palaa napsauttamalla toista lohkoa.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Tarkastele\\\"],\\\"inspector.tab.settings\\\":[\\\"Asetukset\\\"],\\\"inspector.tab.styles\\\":[\\\"Tyylit\\\"],\\\"inspector.tab.variables\\\":[\\\"Muuttujat\\\"],\\\"outline.canvas\\\":[\\\"Kangas\\\"],\\\"outline.hint\\\":[\\\"Valitse rivi napsauttamalla. Raahaa riviä järjestyksen muuttamiseksi tai siirrä se säiliöön.\\\"],\\\"outline.title\\\":[\\\"Rakenne\\\"],\\\"panel.avatar-block\\\":[\\\"Avatarlohko\\\"],\\\"panel.button-block\\\":[\\\"Painikelohko\\\"],\\\"panel.columns-block\\\":[\\\"Sarakkeet\\\"],\\\"panel.container-block\\\":[\\\"Säiliölohko\\\"],\\\"panel.details\\\":[\\\"Tiedot\\\"],\\\"panel.divider-block\\\":[\\\"Erotin\\\"],\\\"panel.editor-appearance\\\":[\\\"Editorin ulkoasu\\\"],\\\"panel.export\\\":[\\\"Vienti\\\"],\\\"panel.global\\\":[\\\"Yleiset\\\"],\\\"panel.heading-block\\\":[\\\"Otsikkolohko\\\"],\\\"panel.html-block\\\":[\\\"HTML-lohko\\\"],\\\"panel.image-block\\\":[\\\"Kuvalohko\\\"],\\\"panel.signature-block\\\":[\\\"Allekirjoituslohko\\\"],\\\"panel.spacer-block\\\":[\\\"Välilohko\\\"],\\\"panel.template\\\":[\\\"Pohja\\\"],\\\"panel.text-block\\\":[\\\"Tekstilohko\\\"],\\\"picker.blank-desc\\\":[\\\"Aloita tyhjästä sähköpostista\\\"],\\\"picker.blank-title\\\":[\\\"Tyhjä\\\"],\\\"picker.create-sample\\\":[\\\"Luo malli\\\"],\\\"picker.create-template\\\":[\\\"Luo pohja\\\"],\\\"picker.creating\\\":[\\\"Luodaan…\\\"],\\\"picker.error-name-required\\\":[\\\"Nimi vaaditaan\\\"],\\\"picker.error-sample-taken\\\":[\\\"Samanniminen malli on jo olemassa\\\"],\\\"picker.error-template-taken\\\":[\\\"Samanniminen pohja on jo olemassa\\\"],\\\"picker.start-from\\\":[\\\"Aloitetaan pohjasta\\\"],\\\"picker.title-sample\\\":[\\\"Uusi malli\\\"],\\\"picker.title-template\\\":[\\\"Uusi pohja\\\"],\\\"redo.label\\\":[\\\"Tee uudelleen\\\"],\\\"redo.tooltip\\\":[\\\"Tee uudelleen\\\"],\\\"rename.add-tag\\\":[\\\"Lisää tunniste\\\"],\\\"rename.error-empty\\\":[\\\"Anna nimi\\\"],\\\"rename.error-generic\\\":[\\\"Tietojen päivitys epäonnistui\\\"],\\\"rename.error-taken\\\":[\\\"Samanniminen pohja on jo olemassa\\\"],\\\"rename.name-label\\\":[\\\"Nimi\\\"],\\\"rename.no-tags\\\":[\\\"Ei tunnisteita.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Lisää tunniste ja paina Enter\\\"],\\\"rename.tags\\\":[\\\"Tunnisteet\\\"],\\\"rename.title\\\":[\\\"Muokkaa tietoja\\\"],\\\"row.actions\\\":[\\\"Rivin toiminnot\\\"],\\\"row.demote\\\":[\\\"Alenna pohjaksi\\\"],\\\"row.duplicate\\\":[\\\"Monista\\\"],\\\"row.duplicate-as-template\\\":[\\\"Monista pohjaksi\\\"],\\\"row.edit-details\\\":[\\\"Muokkaa nimeä ja tunnisteita…\\\"],\\\"row.more\\\":[\\\"Lisää\\\"],\\\"row.promote\\\":[\\\"Ylennä malliksi\\\"],\\\"save-dialog.create\\\":[\\\"Luo\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Anna pohjalle nimi\\\"],\\\"save-dialog.name-label\\\":[\\\"Pohjan nimi\\\"],\\\"save-dialog.save\\\":[\\\"Tallenna\\\"],\\\"save-dialog.saving\\\":[\\\"Tallennetaan...\\\"],\\\"save-dialog.title\\\":[\\\"Tallenna uutena pohjana\\\"],\\\"save-dialog.title-new\\\":[\\\"Luo uusi pohja\\\"],\\\"savebar.error-saving\\\":[\\\"Tallennus epäonnistui\\\"],\\\"savebar.new\\\":[\\\"Uusi\\\"],\\\"savebar.new-template-created\\\":[\\\"Uusi pohja luotu\\\"],\\\"savebar.sample-prefix\\\":[\\\"Malli\\\"],\\\"savebar.sample-saved\\\":[\\\"Malli tallennettu\\\"],\\\"savebar.save\\\":[\\\"Tallenna\\\"],\\\"savebar.save-as\\\":[\\\"Tallenna nimellä…\\\"],\\\"savebar.save-as-new\\\":[\\\"Tallenna uutena…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Tallenna uutena pohjana\\\"],\\\"savebar.save-changes\\\":[\\\"Tallenna muutokset\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Tallenna muutokset tähän malliin\\\"],\\\"savebar.start-fresh\\\":[\\\"Aloita tyhjästä pohjasta\\\"],\\\"savebar.template-saved\\\":[\\\"Pohja tallennettu\\\"],\\\"settings.checkerboard\\\":[\\\"Shakkikuvio\\\"],\\\"settings.copied\\\":[\\\"Pohja kopioitu!\\\"],\\\"settings.delete\\\":[\\\"Poista pohja\\\"],\\\"settings.delete-confirm\\\":[\\\"Haluatko varmasti poistaa tämän pohjan?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Näkyy vain editorissa — ei päädy lähetettävään viestiin.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Anna renameTemplate-callback käyttöön, niin voit muokata tästä\\\"],\\\"settings.no-template\\\":[\\\"Pohjaa ei ole valittu\\\"],\\\"settings.save-as-sample\\\":[\\\"Tallenna mallipohjaksi\\\"],\\\"settings.save-details\\\":[\\\"Tallenna tiedot\\\"],\\\"settings.save-disabled\\\":[\\\"Tallennus on poistettu käytöstä. Ota käyttöön antamalla tarvittavat callback-funktiot.\\\"],\\\"settings.saved\\\":[\\\"Tallennettu\\\"],\\\"settings.solid\\\":[\\\"Yksivärinen\\\"],\\\"settings.workspace-background\\\":[\\\"Työtilan tausta\\\"],\\\"signature.address\\\":[\\\"Osoite\\\"],\\\"signature.company\\\":[\\\"Yritys\\\"],\\\"signature.email\\\":[\\\"Sähköposti\\\"],\\\"signature.greeting\\\":[\\\"Tervehdys\\\"],\\\"signature.image-shape\\\":[\\\"Kuvan muoto\\\"],\\\"signature.image-size\\\":[\\\"Kuvan koko\\\"],\\\"signature.image-url\\\":[\\\"Kuvan osoite\\\"],\\\"signature.layout\\\":[\\\"Asettelu\\\"],\\\"signature.layout.horizontal\\\":[\\\"Vaakasuora\\\"],\\\"signature.layout.vertical\\\":[\\\"Pystysuora\\\"],\\\"signature.link-color\\\":[\\\"Linkin väri\\\"],\\\"signature.name\\\":[\\\"Nimi\\\"],\\\"signature.name-color\\\":[\\\"Nimen väri\\\"],\\\"signature.phone\\\":[\\\"Puhelin\\\"],\\\"signature.shape.circle\\\":[\\\"Ympyrä\\\"],\\\"signature.shape.rounded\\\":[\\\"Pyöristetty\\\"],\\\"signature.shape.square\\\":[\\\"Neliö\\\"],\\\"signature.title\\\":[\\\"Titteli\\\"],\\\"signature.website\\\":[\\\"Verkkosivusto\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Viimeksi päivitetty\\\"],\\\"sort.name\\\":[\\\"Nimi (A–Ö)\\\"],\\\"sort.recently-created\\\":[\\\"Äskettäin luotu\\\"],\\\"style.alignment\\\":[\\\"Tasaus\\\"],\\\"style.background-color\\\":[\\\"Taustaväri\\\"],\\\"style.border-color\\\":[\\\"Reunan väri\\\"],\\\"style.border-radius\\\":[\\\"Reunan pyöristys\\\"],\\\"style.font-family\\\":[\\\"Fontti\\\"],\\\"style.font-size\\\":[\\\"Fonttikoko\\\"],\\\"style.font-weight\\\":[\\\"Fontin paksuus\\\"],\\\"style.letter-spacing\\\":[\\\"Kirjainväli\\\"],\\\"style.line-height\\\":[\\\"Rivikorkeus\\\"],\\\"style.padding\\\":[\\\"Täyte\\\"],\\\"style.text-color\\\":[\\\"Tekstin väri\\\"],\\\"subject.label\\\":[\\\"Aihe\\\"],\\\"subject.placeholder\\\":[\\\"Sähköpostin aihe — tukee {\\\",[\\\"muuttujia\\\"],\\\"}\\\"],\\\"tab.edit\\\":[\\\"Muokkaa\\\"],\\\"tab.html-output\\\":[\\\"HTML-tuloste\\\"],\\\"tab.json-output\\\":[\\\"JSON-tuloste\\\"],\\\"tab.preview\\\":[\\\"Esikatselu\\\"],\\\"tab.text-output\\\":[\\\"Tekstituloste\\\"],\\\"tag.marketing\\\":[\\\"markkinointi\\\"],\\\"tag.transactional\\\":[\\\"tapahtumaviestit\\\"],\\\"time.days-short\\\":[\\\" pv sitten\\\"],\\\"time.hours-short\\\":[\\\" h sitten\\\"],\\\"time.just-now\\\":[\\\"juuri nyt\\\"],\\\"time.minutes-short\\\":[\\\" min sitten\\\"],\\\"time.months-short\\\":[\\\" kk sitten\\\"],\\\"time.years-short\\\":[\\\" v sitten\\\"],\\\"toolbar.apply\\\":[\\\"Käytä\\\"],\\\"toolbar.bold\\\":[\\\"Lihavointi\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Lihavointi (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Fontti\\\"],\\\"toolbar.italic\\\":[\\\"Kursivointi\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Kursivointi (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Linkki\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Linkki (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Yliviivaus\\\"],\\\"toolbar.text-color\\\":[\\\"Tekstin väri\\\"],\\\"toolbar.underline\\\":[\\\"Alleviivaus\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Alleviivaus (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Kopioi lohko\\\"],\\\"tune.delete\\\":[\\\"Poista\\\"],\\\"tune.move-down\\\":[\\\"Siirrä alas\\\"],\\\"tune.move-up\\\":[\\\"Siirrä ylös\\\"],\\\"undo.label\\\":[\\\"Kumoa\\\"],\\\"undo.tooltip\\\":[\\\"Kumoa\\\"],\\\"variables.add\\\":[\\\"Lisää muuttuja\\\"],\\\"variables.click-to-declare\\\":[\\\"Määrittele muuttuja napsauttamalla tunnistetta.\\\"],\\\"variables.confirm-delete\\\":[\\\"Muuttujaan viitataan edelleen viestissä. Poistetaanko silti?\\\"],\\\"variables.copy-token\\\":[\\\"Kopioi {\\\",[\\\"nimi\\\"],\\\"}-tunniste\\\"],\\\"variables.description\\\":[\\\"Kuvaus\\\"],\\\"variables.focus-first\\\":[\\\"Kohdista ensin tekstikenttään\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Lisää kohdistimeen\\\"],\\\"variables.intro\\\":[\\\"Määritellyt muuttujat kulkevat pohjan mukana. Viittaa niihin aiherivillä ja viestissä muodossa {\\\",[\\\"nimi\\\"],\\\"}. Esikatselussa merkit korvautuvat alla olevilla esimerkkiarvoilla.\\\"],\\\"variables.none\\\":[\\\"Ei määriteltyjä muuttujia. Lisää napsauttamalla +.\\\"],\\\"variables.open-template\\\":[\\\"Avaa pohja hallitaksesi muuttujia.\\\"],\\\"variables.optional\\\":[\\\"Valinnainen\\\"],\\\"variables.ref-many\\\":[\\\"viittausta\\\"],\\\"variables.ref-one\\\":[\\\"viittaus\\\"],\\\"variables.remove\\\":[\\\"Poista\\\"],\\\"variables.sample-hint\\\":[\\\"Näytetään esikatselussa\\\"],\\\"variables.sample-value\\\":[\\\"Esimerkkiarvo\\\"],\\\"variables.title\\\":[\\\"Muuttujat\\\"],\\\"variables.undeclared\\\":[\\\"Määrittelemätön viestissä\\\"],\\\"variables.unused\\\":[\\\"Ei käytössä viestissä\\\"]}\")as Messages;","/*eslint-disable*/import type{Messages}from\"@lingui/core\";export const messages=JSON.parse(\"{\\\"avatar.shape\\\":[\\\"Form\\\"],\\\"block-add.avatar\\\":[\\\"Avatar\\\"],\\\"block-add.button\\\":[\\\"Knapp\\\"],\\\"block-add.columns\\\":[\\\"Kolumner\\\"],\\\"block-add.company-signature\\\":[\\\"Företagssignatur\\\"],\\\"block-add.container\\\":[\\\"Behållare\\\"],\\\"block-add.divider\\\":[\\\"Avgränsare\\\"],\\\"block-add.heading\\\":[\\\"Rubrik\\\"],\\\"block-add.html\\\":[\\\"HTML\\\"],\\\"block-add.image\\\":[\\\"Bild\\\"],\\\"block-add.personal-signature\\\":[\\\"Personlig signatur\\\"],\\\"block-add.spacer\\\":[\\\"Mellanrum\\\"],\\\"block-add.text\\\":[\\\"Text\\\"],\\\"button.color\\\":[\\\"Knappfärg\\\"],\\\"button.style.pill\\\":[\\\"Piller\\\"],\\\"button.style.rectangle\\\":[\\\"Rektangel\\\"],\\\"button.style.rounded\\\":[\\\"Rundad\\\"],\\\"button.width.auto\\\":[\\\"Auto\\\"],\\\"button.width.full\\\":[\\\"Full\\\"],\\\"canvas.desktop-view\\\":[\\\"Skrivbordsvy\\\"],\\\"canvas.mobile-view\\\":[\\\"Mobilvy\\\"],\\\"columns.count\\\":[\\\"Antal kolumner\\\"],\\\"columns.gap\\\":[\\\"Kolumnmellanrum\\\"],\\\"common.add\\\":[\\\"Lägg till\\\"],\\\"common.cancel\\\":[\\\"Avbryt\\\"],\\\"common.save\\\":[\\\"Spara\\\"],\\\"common.saving\\\":[\\\"Sparar…\\\"],\\\"default.button\\\":[\\\"Knapp\\\"],\\\"default.company-address\\\":[\\\"Storgatan 1, Stad, Sverige\\\"],\\\"default.heading\\\":[\\\"Hej vän\\\"],\\\"default.html\\\":[\\\"Hej världen\\\"],\\\"default.image-alt\\\":[\\\"Exempelbild\\\"],\\\"default.personal-company\\\":[\\\"Acme AB\\\"],\\\"default.personal-greeting\\\":[\\\"Vänliga hälsningar,\\\"],\\\"default.personal-name\\\":[\\\"Anna Andersson\\\"],\\\"default.personal-title\\\":[\\\"Programvaruutvecklare\\\"],\\\"default.text\\\":[\\\"Nytt textblock\\\"],\\\"divider.color\\\":[\\\"Färg\\\"],\\\"drawer.library\\\":[\\\"Bibliotek\\\"],\\\"drawer.new-sample\\\":[\\\"Ny mall\\\"],\\\"drawer.new-template\\\":[\\\"Ny e-postmall\\\"],\\\"drawer.no-samples\\\":[\\\"Inga exempel tillgängliga\\\"],\\\"drawer.no-samples-match\\\":[\\\"Inga exempel matchar dina filter\\\"],\\\"drawer.no-templates\\\":[\\\"Inga sparade mallar ännu\\\"],\\\"drawer.no-templates-match\\\":[\\\"Inga mallar matchar dina filter\\\"],\\\"drawer.search-samples\\\":[\\\"Sök exempel\\\"],\\\"drawer.search-templates\\\":[\\\"Sök mallar\\\"],\\\"drawer.sort-by\\\":[\\\"Sortera efter\\\"],\\\"drawer.tab.outline\\\":[\\\"Struktur\\\"],\\\"drawer.tab.samples\\\":[\\\"Exempel\\\"],\\\"drawer.tab.templates\\\":[\\\"Mallar\\\"],\\\"drawer.tag.all\\\":[\\\"Alla\\\"],\\\"empty.description\\\":[\\\"En tom e-postmall att utgå från\\\"],\\\"empty.slug\\\":[\\\"Tomt e-postmeddelande\\\"],\\\"field.content\\\":[\\\"Innehåll\\\"],\\\"field.height\\\":[\\\"Höjd\\\"],\\\"field.level\\\":[\\\"Nivå\\\"],\\\"field.markdown\\\":[\\\"Markdown\\\"],\\\"field.size\\\":[\\\"Storlek\\\"],\\\"field.style\\\":[\\\"Stil\\\"],\\\"field.text\\\":[\\\"Text\\\"],\\\"field.url\\\":[\\\"Adress\\\"],\\\"field.width\\\":[\\\"Bredd\\\"],\\\"font-family.book_sans\\\":[\\\"Bok sans\\\"],\\\"font-family.book_serif\\\":[\\\"Bok serif\\\"],\\\"font-family.geometric_sans\\\":[\\\"Geometrisk sans\\\"],\\\"font-family.heavy_sans\\\":[\\\"Tjock sans\\\"],\\\"font-family.inherit\\\":[\\\"Följ mejlets inställningar\\\"],\\\"font-family.modern_sans\\\":[\\\"Modern sans\\\"],\\\"font-family.modern_serif\\\":[\\\"Modern serif\\\"],\\\"font-family.monospace\\\":[\\\"Monospace\\\"],\\\"font-family.organic_sans\\\":[\\\"Organisk sans\\\"],\\\"font-family.rounded_sans\\\":[\\\"Rundad sans\\\"],\\\"font-weight.bold\\\":[\\\"Fet\\\"],\\\"font-weight.regular\\\":[\\\"Normal\\\"],\\\"global.backdrop-color\\\":[\\\"Bakgrundsfärg\\\"],\\\"global.canvas-border-color\\\":[\\\"Canvaskantfärg\\\"],\\\"global.canvas-border-radius\\\":[\\\"Canvaskantradie\\\"],\\\"global.canvas-color\\\":[\\\"Canvasfärg\\\"],\\\"global.disable-backdrop\\\":[\\\"Dölj bakgrund\\\"],\\\"image.alt-text\\\":[\\\"Alternativ text\\\"],\\\"image.http-warning\\\":[\\\"Icke-HTTPS-URL: Gmail och andra klienter tar bort blandat innehåll. Använd https:// för pålitlig leverans.\\\"],\\\"image.library\\\":[\\\"Bibliotek\\\"],\\\"image.link-href\\\":[\\\"Klicklänk\\\"],\\\"image.source-url\\\":[\\\"Källadress\\\"],\\\"image.upload\\\":[\\\"Ladda upp\\\"],\\\"image.uploading\\\":[\\\"Laddar upp…\\\"],\\\"inspect.hint\\\":[\\\"Klicka på ett block för att inspektera.\\\"],\\\"inspect.not-found\\\":[\\\"Blocket hittades inte. Klicka på ett block för att återställa.\\\"],\\\"inspector.tab.inspect\\\":[\\\"Inspektera\\\"],\\\"inspector.tab.settings\\\":[\\\"Inställningar\\\"],\\\"inspector.tab.styles\\\":[\\\"Stilar\\\"],\\\"inspector.tab.variables\\\":[\\\"Variabler\\\"],\\\"outline.canvas\\\":[\\\"Canvas\\\"],\\\"outline.hint\\\":[\\\"Klicka på en rad för att välja. Dra en rad för att ändra ordning eller flytta till en behållare.\\\"],\\\"outline.title\\\":[\\\"Struktur\\\"],\\\"panel.avatar-block\\\":[\\\"Avatarblock\\\"],\\\"panel.button-block\\\":[\\\"Knappblock\\\"],\\\"panel.columns-block\\\":[\\\"Kolumner\\\"],\\\"panel.container-block\\\":[\\\"Behållarblock\\\"],\\\"panel.details\\\":[\\\"Detaljer\\\"],\\\"panel.divider-block\\\":[\\\"Avgränsare\\\"],\\\"panel.editor-appearance\\\":[\\\"Editorns utseende\\\"],\\\"panel.export\\\":[\\\"Exportera\\\"],\\\"panel.global\\\":[\\\"Allmänt\\\"],\\\"panel.heading-block\\\":[\\\"Rubrikblock\\\"],\\\"panel.html-block\\\":[\\\"HTML-block\\\"],\\\"panel.image-block\\\":[\\\"Bildblock\\\"],\\\"panel.signature-block\\\":[\\\"Signaturblock\\\"],\\\"panel.spacer-block\\\":[\\\"Mellanrumsblock\\\"],\\\"panel.template\\\":[\\\"Mall\\\"],\\\"panel.text-block\\\":[\\\"Textblock\\\"],\\\"picker.blank-desc\\\":[\\\"Starta från ett tomt e-postmeddelande\\\"],\\\"picker.blank-title\\\":[\\\"Tomt\\\"],\\\"picker.create-sample\\\":[\\\"Skapa exempel\\\"],\\\"picker.create-template\\\":[\\\"Skapa mall\\\"],\\\"picker.creating\\\":[\\\"Skapar…\\\"],\\\"picker.error-name-required\\\":[\\\"Namn krävs\\\"],\\\"picker.error-sample-taken\\\":[\\\"Ett exempel med detta namn finns redan\\\"],\\\"picker.error-template-taken\\\":[\\\"En mall med detta namn finns redan\\\"],\\\"picker.start-from\\\":[\\\"Utgå från\\\"],\\\"picker.title-sample\\\":[\\\"Nytt exempel\\\"],\\\"picker.title-template\\\":[\\\"Ny mall\\\"],\\\"redo.label\\\":[\\\"Gör om\\\"],\\\"redo.tooltip\\\":[\\\"Gör om\\\"],\\\"rename.add-tag\\\":[\\\"Lägg till en etikett\\\"],\\\"rename.error-empty\\\":[\\\"Ange ett namn\\\"],\\\"rename.error-generic\\\":[\\\"Kunde inte uppdatera malldetaljer\\\"],\\\"rename.error-taken\\\":[\\\"En mall med detta namn finns redan\\\"],\\\"rename.name-label\\\":[\\\"Namn\\\"],\\\"rename.no-tags\\\":[\\\"Inga etiketter ännu.\\\"],\\\"rename.tag-placeholder\\\":[\\\"Lägg till en etikett och tryck Enter\\\"],\\\"rename.tags\\\":[\\\"Etiketter\\\"],\\\"rename.title\\\":[\\\"Redigera detaljer\\\"],\\\"row.actions\\\":[\\\"Radåtgärder\\\"],\\\"row.demote\\\":[\\\"Degradera till mall\\\"],\\\"row.duplicate\\\":[\\\"Duplicera\\\"],\\\"row.duplicate-as-template\\\":[\\\"Duplicera som mall\\\"],\\\"row.edit-details\\\":[\\\"Redigera namn och etiketter…\\\"],\\\"row.more\\\":[\\\"Mer\\\"],\\\"row.promote\\\":[\\\"Befordra till exempel\\\"],\\\"save-dialog.create\\\":[\\\"Skapa\\\"],\\\"save-dialog.error-empty-name\\\":[\\\"Ange ett mallnamn\\\"],\\\"save-dialog.name-label\\\":[\\\"Mallnamn\\\"],\\\"save-dialog.save\\\":[\\\"Spara\\\"],\\\"save-dialog.saving\\\":[\\\"Sparar...\\\"],\\\"save-dialog.title\\\":[\\\"Spara som en ny mall\\\"],\\\"save-dialog.title-new\\\":[\\\"Skapa en ny mall\\\"],\\\"savebar.error-saving\\\":[\\\"Fel vid sparande\\\"],\\\"savebar.new\\\":[\\\"Ny\\\"],\\\"savebar.new-template-created\\\":[\\\"Ny mall skapad\\\"],\\\"savebar.sample-prefix\\\":[\\\"Exempel\\\"],\\\"savebar.sample-saved\\\":[\\\"Exempel sparat\\\"],\\\"savebar.save\\\":[\\\"Spara\\\"],\\\"savebar.save-as\\\":[\\\"Spara som…\\\"],\\\"savebar.save-as-new\\\":[\\\"Spara som ny…\\\"],\\\"savebar.save-as-new-template\\\":[\\\"Spara som en ny mall\\\"],\\\"savebar.save-changes\\\":[\\\"Spara ändringar\\\"],\\\"savebar.save-changes-to-sample\\\":[\\\"Spara ändringar till detta exempel\\\"],\\\"savebar.start-fresh\\\":[\\\"Starta en ny mall\\\"],\\\"savebar.template-saved\\\":[\\\"Mall sparad\\\"],\\\"settings.checkerboard\\\":[\\\"Rutmönster\\\"],\\\"settings.copied\\\":[\\\"Mall kopierad!\\\"],\\\"settings.delete\\\":[\\\"Ta bort mall\\\"],\\\"settings.delete-confirm\\\":[\\\"Är du säker på att du vill ta bort denna mall?\\\"],\\\"settings.editor-only-hint\\\":[\\\"Syns bara i editorn — når aldrig det renderade mejlet.\\\"],\\\"settings.no-rename-cb\\\":[\\\"Koppla renameTemplate-callback för att kunna redigera härifrån\\\"],\\\"settings.no-template\\\":[\\\"Ingen mall vald\\\"],\\\"settings.save-as-sample\\\":[\\\"Spara som exempelmall\\\"],\\\"settings.save-details\\\":[\\\"Spara detaljer\\\"],\\\"settings.save-disabled\\\":[\\\"Sparfunktionen är inaktiverad. Aktivera genom att ange nödvändiga callback-funktioner.\\\"],\\\"settings.saved\\\":[\\\"Sparad\\\"],\\\"settings.solid\\\":[\\\"Enfärgad\\\"],\\\"settings.workspace-background\\\":[\\\"Arbetsytans bakgrund\\\"],\\\"signature.address\\\":[\\\"Adress\\\"],\\\"signature.company\\\":[\\\"Företag\\\"],\\\"signature.email\\\":[\\\"E-post\\\"],\\\"signature.greeting\\\":[\\\"Hälsning\\\"],\\\"signature.image-shape\\\":[\\\"Bildform\\\"],\\\"signature.image-size\\\":[\\\"Bildstorlek\\\"],\\\"signature.image-url\\\":[\\\"Bildadress\\\"],\\\"signature.layout\\\":[\\\"Layout\\\"],\\\"signature.layout.horizontal\\\":[\\\"Horisontell\\\"],\\\"signature.layout.vertical\\\":[\\\"Vertikal\\\"],\\\"signature.link-color\\\":[\\\"Länkfärg\\\"],\\\"signature.name\\\":[\\\"Namn\\\"],\\\"signature.name-color\\\":[\\\"Namnfärg\\\"],\\\"signature.phone\\\":[\\\"Telefon\\\"],\\\"signature.shape.circle\\\":[\\\"Cirkel\\\"],\\\"signature.shape.rounded\\\":[\\\"Rundad\\\"],\\\"signature.shape.square\\\":[\\\"Kvadrat\\\"],\\\"signature.title\\\":[\\\"Titel\\\"],\\\"signature.website\\\":[\\\"Webbplats\\\"],\\\"size.lg\\\":[\\\"Lg\\\"],\\\"size.md\\\":[\\\"Md\\\"],\\\"size.sm\\\":[\\\"Sm\\\"],\\\"size.xs\\\":[\\\"Xs\\\"],\\\"sort.last-updated\\\":[\\\"Senast uppdaterad\\\"],\\\"sort.name\\\":[\\\"Namn (A–Ö)\\\"],\\\"sort.recently-created\\\":[\\\"Nyligen skapad\\\"],\\\"style.alignment\\\":[\\\"Justering\\\"],\\\"style.background-color\\\":[\\\"Bakgrundsfärg\\\"],\\\"style.border-color\\\":[\\\"Kantfärg\\\"],\\\"style.border-radius\\\":[\\\"Kantradie\\\"],\\\"style.font-family\\\":[\\\"Typsnitt\\\"],\\\"style.font-size\\\":[\\\"Typsnittsstorlek\\\"],\\\"style.font-weight\\\":[\\\"Typsnittsvikt\\\"],\\\"style.letter-spacing\\\":[\\\"Teckenavstånd\\\"],\\\"style.line-height\\\":[\\\"Radhöjd\\\"],\\\"style.padding\\\":[\\\"Utrymme\\\"],\\\"style.text-color\\\":[\\\"Textfärg\\\"],\\\"subject.label\\\":[\\\"Ämne\\\"],\\\"subject.placeholder\\\":[\\\"E-postens ämne — stöder {\\\",[\\\"variabler\\\"],\\\"}\\\"],\\\"tab.edit\\\":[\\\"Redigera\\\"],\\\"tab.html-output\\\":[\\\"HTML-utdata\\\"],\\\"tab.json-output\\\":[\\\"JSON-utdata\\\"],\\\"tab.preview\\\":[\\\"Förhandsgranska\\\"],\\\"tab.text-output\\\":[\\\"Textutdata\\\"],\\\"tag.marketing\\\":[\\\"marknadsföring\\\"],\\\"tag.transactional\\\":[\\\"transaktionella\\\"],\\\"time.days-short\\\":[\\\" d sedan\\\"],\\\"time.hours-short\\\":[\\\" tim sedan\\\"],\\\"time.just-now\\\":[\\\"just nu\\\"],\\\"time.minutes-short\\\":[\\\" min sedan\\\"],\\\"time.months-short\\\":[\\\" mån sedan\\\"],\\\"time.years-short\\\":[\\\" år sedan\\\"],\\\"toolbar.apply\\\":[\\\"Använd\\\"],\\\"toolbar.bold\\\":[\\\"Fet\\\"],\\\"toolbar.bold-shortcut\\\":[\\\"Fet (Cmd+B)\\\"],\\\"toolbar.font-family\\\":[\\\"Typsnitt\\\"],\\\"toolbar.italic\\\":[\\\"Kursiv\\\"],\\\"toolbar.italic-shortcut\\\":[\\\"Kursiv (Cmd+I)\\\"],\\\"toolbar.link\\\":[\\\"Länk\\\"],\\\"toolbar.link-shortcut\\\":[\\\"Länk (Cmd+K)\\\"],\\\"toolbar.overline\\\":[\\\"Överstruken\\\"],\\\"toolbar.text-color\\\":[\\\"Textfärg\\\"],\\\"toolbar.underline\\\":[\\\"Understruken\\\"],\\\"toolbar.underline-shortcut\\\":[\\\"Understruken (Cmd+U)\\\"],\\\"tune.copy\\\":[\\\"Kopiera block\\\"],\\\"tune.delete\\\":[\\\"Ta bort\\\"],\\\"tune.move-down\\\":[\\\"Flytta ner\\\"],\\\"tune.move-up\\\":[\\\"Flytta upp\\\"],\\\"undo.label\\\":[\\\"Ångra\\\"],\\\"undo.tooltip\\\":[\\\"Ångra\\\"],\\\"variables.add\\\":[\\\"Lägg till variabel\\\"],\\\"variables.click-to-declare\\\":[\\\"Klicka på en token för att deklarera den.\\\"],\\\"variables.confirm-delete\\\":[\\\"Variabeln refereras fortfarande i brödtexten. Ta bort ändå?\\\"],\\\"variables.copy-token\\\":[\\\"Kopiera {\\\",[\\\"namn\\\"],\\\"}-token\\\"],\\\"variables.description\\\":[\\\"Beskrivning\\\"],\\\"variables.focus-first\\\":[\\\"Fokusera ett textfält först\\\"],\\\"variables.insert-at-cursor\\\":[\\\"Infoga vid markören\\\"],\\\"variables.intro\\\":[\\\"Deklarerade variabler följer med mallen. Hänvisa till dem i ämnesrad och brödtext som {\\\",[\\\"namn\\\"],\\\"}. I förhandsgranskningen renderas tokens med exempelvärdena nedan.\\\"],\\\"variables.none\\\":[\\\"Inga variabler deklarerade. Klicka på + för att lägga till en.\\\"],\\\"variables.open-template\\\":[\\\"Öppna en mall för att hantera variabler.\\\"],\\\"variables.optional\\\":[\\\"Valfritt\\\"],\\\"variables.ref-many\\\":[\\\"referenser\\\"],\\\"variables.ref-one\\\":[\\\"referens\\\"],\\\"variables.remove\\\":[\\\"Ta bort\\\"],\\\"variables.sample-hint\\\":[\\\"Visas i förhandsgranskning\\\"],\\\"variables.sample-value\\\":[\\\"Exempelvärde\\\"],\\\"variables.title\\\":[\\\"Variabler\\\"],\\\"variables.undeclared\\\":[\\\"Odeklarerad i brödtexten\\\"],\\\"variables.unused\\\":[\\\"Oanvänd i brödtexten\\\"]}\")as Messages;","import { i18n, type Messages } from '@lingui/core';\n\nimport { messages as en } from '../locales/en/messages';\nimport { messages as fi } from '../locales/fi/messages';\nimport { messages as sv } from '../locales/sv/messages';\n\nexport const SUPPORTED_LOCALES = ['en', 'sv', 'fi'] as const;\nexport type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];\n\nconst CATALOGS: Record<SupportedLocale, Messages> = {\n en,\n sv,\n fi,\n};\n\nlet loaded = false;\n\nexport function activateLocale(locale: string | undefined): SupportedLocale {\n const resolved: SupportedLocale = (SUPPORTED_LOCALES as readonly string[]).includes(locale ?? '')\n ? (locale as SupportedLocale)\n : 'en';\n if (locale && resolved !== locale) {\n // eslint-disable-next-line no-console\n console.warn(`[email-template-editor] Unsupported locale \"${locale}\", falling back to \"en\".`);\n }\n if (!loaded) {\n i18n.load({ en: CATALOGS.en, sv: CATALOGS.sv, fi: CATALOGS.fi });\n loaded = true;\n }\n i18n.activate(resolved);\n return resolved;\n}\n\n// Imperative translation helper — looks up `id` in the active catalog and\n// falls back to `fallback` (or `id` itself) when the message is missing.\nexport function t(id: string, fallback?: string): string {\n return i18n._(id, {}, { message: fallback ?? id });\n}\n\nexport { i18n };\nexport { Trans } from '@lingui/react';\n","import { create, useStore } from 'zustand';\nimport { temporal } from 'zundo';\n\nimport { TEditorConfiguration } from './core';\nimport type { ParentRef } from './blocks/helpers/move-block';\n\nexport type TFocusedEditable = {\n blockId: string; // 'subject' for the EmailLayout subject input\n field: 'text' | 'contents' | 'subject';\n selectionStart: number;\n selectionEnd: number;\n};\n\nexport type TDraggingBlock = {\n sourceId: string;\n sourceParent: ParentRef;\n};\n\ntype TValue = {\n document: TEditorConfiguration;\n selectedBlockId: string | null;\n selectedSidebarTab: 'block-configuration' | 'styles' | 'template-settings' | 'variables';\n selectedMainTab: 'editor' | 'preview' | 'json' | 'html' | 'text';\n selectedScreenSize: 'desktop' | 'mobile';\n inspectorDrawerOpen: boolean;\n samplesDrawerOpen: boolean;\n persistenceEnabled: boolean;\n lastFocusedEditable: TFocusedEditable | null;\n hoveredBlockId: string | null;\n draggingBlock: TDraggingBlock | null;\n workspaceBackground: 'checkerboard' | 'solid';\n};\n\n// Initialize with an empty document\nconst EMPTY_DOCUMENT: TEditorConfiguration = {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: [],\n },\n },\n};\n\n// Leading-edge throttle so rapid consecutive document mutations (dragging a\n// slider, typing) collapse into a single history entry: only the pre-burst\n// state is pushed, subsequent changes inside the window are dropped from the\n// undo stack (they remain in the document, just not as separate entries).\nconst COALESCE_MS = 300;\nfunction leadingThrottle<Args extends unknown[]>(\n fn: (...args: Args) => void,\n wait: number,\n): (...args: Args) => void {\n let last = Number.NEGATIVE_INFINITY;\n return (...args: Args) => {\n const now = Date.now();\n if (now - last >= wait) {\n last = now;\n fn(...args);\n }\n };\n}\n\nconst editorStateStore = create<TValue>()(\n temporal(\n () => ({\n document: EMPTY_DOCUMENT,\n selectedBlockId: null,\n selectedSidebarTab: 'styles',\n selectedMainTab: 'editor',\n selectedScreenSize: 'desktop',\n inspectorDrawerOpen: true,\n samplesDrawerOpen: true,\n persistenceEnabled: false,\n lastFocusedEditable: null,\n hoveredBlockId: null,\n draggingBlock: null,\n workspaceBackground: 'checkerboard',\n }),\n {\n limit: 100,\n // Only the document participates in history — selection, drawers, tabs\n // and other UI state are intentionally excluded.\n partialize: (state) => ({ document: state.document }),\n // Skip UI-only state changes: if the document reference is unchanged,\n // no history entry is recorded.\n equality: (a, b) => a.document === b.document,\n handleSet: (handleSet) =>\n leadingThrottle<Parameters<typeof handleSet>>(\n (pastState, replace, currentState) => handleSet(pastState, replace, currentState),\n COALESCE_MS,\n ),\n },\n ),\n);\n\nexport function useDocument() {\n return editorStateStore((s) => s.document);\n}\n\nexport function useSelectedBlockId() {\n return editorStateStore((s) => s.selectedBlockId);\n}\n\nexport function useSelectedScreenSize() {\n return editorStateStore((s) => s.selectedScreenSize);\n}\n\nexport function useSelectedMainTab() {\n return editorStateStore((s) => s.selectedMainTab);\n}\n\nexport function setSelectedMainTab(selectedMainTab: TValue['selectedMainTab']) {\n return editorStateStore.setState({ selectedMainTab });\n}\n\nexport function useSelectedSidebarTab() {\n return editorStateStore((s) => s.selectedSidebarTab);\n}\n\nexport function useInspectorDrawerOpen() {\n return editorStateStore((s) => s.inspectorDrawerOpen);\n}\n\nexport function useSamplesDrawerOpen() {\n return editorStateStore((s) => s.samplesDrawerOpen);\n}\n\nexport function usePersistenceEnabled() {\n return editorStateStore((s) => s.persistenceEnabled);\n}\n\nexport function setSelectedBlockId(selectedBlockId: TValue['selectedBlockId']) {\n const selectedSidebarTab = selectedBlockId === null ? 'styles' : 'block-configuration';\n const options: Partial<TValue> = {};\n if (selectedBlockId !== null) {\n options.inspectorDrawerOpen = true;\n }\n return editorStateStore.setState({\n selectedBlockId,\n selectedSidebarTab,\n ...options,\n });\n}\n\nexport function setSidebarTab(selectedSidebarTab: TValue['selectedSidebarTab']) {\n return editorStateStore.setState({ selectedSidebarTab });\n}\n\nexport function resetDocument(document: TValue['document']) {\n // Loading a fresh template should not itself appear as an undoable step,\n // and any prior history no longer applies to the new document.\n const temporalApi = editorStateStore.temporal.getState();\n temporalApi.pause();\n editorStateStore.setState({\n document,\n selectedSidebarTab: 'styles',\n selectedBlockId: null,\n });\n temporalApi.clear();\n temporalApi.resume();\n}\n\nexport function getDocument() {\n return editorStateStore.getState().document;\n}\n\nexport function setDocument(document: TValue['document']) {\n const originalDocument = editorStateStore.getState().document;\n\n editorStateStore.setState({\n document: {\n ...originalDocument,\n ...document,\n },\n });\n}\n\n// Replace the full document (unlike setDocument, does not merge with the\n// current one). Preserves undo history — use this for document-wide edits\n// such as block deletions that need to drop keys from the map. Distinct from\n// resetDocument, which clears history because it implies a fresh template.\nexport function replaceDocument(document: TValue['document']) {\n editorStateStore.setState({ document });\n}\n\nexport function toggleInspectorDrawerOpen() {\n const inspectorDrawerOpen = !editorStateStore.getState().inspectorDrawerOpen;\n return editorStateStore.setState({ inspectorDrawerOpen });\n}\n\nexport function toggleSamplesDrawerOpen() {\n const samplesDrawerOpen = !editorStateStore.getState().samplesDrawerOpen;\n return editorStateStore.setState({ samplesDrawerOpen });\n}\n\nexport function setSelectedScreenSize(selectedScreenSize: TValue['selectedScreenSize']) {\n return editorStateStore.setState({ selectedScreenSize });\n}\n\nexport function setPersistenceEnabled(persistenceEnabled: boolean) {\n return editorStateStore.setState({ persistenceEnabled });\n}\n\nexport function useLastFocusedEditable() {\n return editorStateStore((s) => s.lastFocusedEditable);\n}\n\nexport function getLastFocusedEditable() {\n return editorStateStore.getState().lastFocusedEditable;\n}\n\nexport function useHoveredBlockId() {\n return editorStateStore((s) => s.hoveredBlockId);\n}\n\nexport function setHoveredBlockId(hoveredBlockId: TValue['hoveredBlockId']) {\n return editorStateStore.setState({ hoveredBlockId });\n}\n\nexport function useDraggingBlock() {\n return editorStateStore((s) => s.draggingBlock);\n}\n\nexport function getDraggingBlock() {\n return editorStateStore.getState().draggingBlock;\n}\n\nexport function setDraggingBlock(draggingBlock: TValue['draggingBlock']) {\n return editorStateStore.setState({ draggingBlock });\n}\n\nexport function useWorkspaceBackground() {\n return editorStateStore((s) => s.workspaceBackground);\n}\n\nexport function setWorkspaceBackground(workspaceBackground: TValue['workspaceBackground']) {\n return editorStateStore.setState({ workspaceBackground });\n}\n\nexport function setLastFocusedEditable(lastFocusedEditable: TFocusedEditable | null) {\n return editorStateStore.setState({ lastFocusedEditable });\n}\n\n// ---------------------------------------------------------------------------\n// Undo / redo\n// ---------------------------------------------------------------------------\n\nexport function undo() {\n editorStateStore.temporal.getState().undo();\n}\n\nexport function redo() {\n editorStateStore.temporal.getState().redo();\n}\n\nexport function clearHistory() {\n editorStateStore.temporal.getState().clear();\n}\n\nexport function useCanUndo() {\n return useStore(editorStateStore.temporal, (s) => s.pastStates.length > 0);\n}\n\nexport function useCanRedo() {\n return useStore(editorStateStore.temporal, (s) => s.futureStates.length > 0);\n}\n","import { TEditorConfiguration } from '@editor/core';\nimport { renderToStaticMarkup, renderToText } from '@email-builder';\n\nexport type TemplateVariable = {\n name: string;\n description?: string;\n /** Optional sample value used by the editor's Preview mode to substitute `{{name}}` tokens. */\n sampleValue?: string;\n};\n\n/**\n * Payload passed to `onSave` / `saveAs`. The editor renders body HTML and\n * plain text on every save so consumers don't have to call the renderers\n * themselves — keeps the consumer's bundle decoupled from a specific\n * renderer version.\n */\nexport type SavePayload = {\n editorConfig: TEditorConfiguration;\n subject?: string;\n variables?: TemplateVariable[];\n bodyHtml: string;\n bodyText: string;\n};\n\nconst ROOT_BLOCK_ID = 'root';\n\nexport function buildSavePayload(doc: TEditorConfiguration): SavePayload {\n const root = doc.root;\n const layoutData = (root && root.type === 'EmailLayout' ? root.data : undefined) as\n | { subject?: string | null; variables?: TemplateVariable[] | null }\n | undefined;\n\n return {\n editorConfig: doc,\n subject: layoutData?.subject ?? undefined,\n variables: layoutData?.variables ?? undefined,\n bodyHtml: renderToStaticMarkup(doc, { rootBlockId: ROOT_BLOCK_ID }),\n bodyText: renderToText(doc, { rootBlockId: ROOT_BLOCK_ID }),\n };\n}\n","import React, { createContext, useContext, useState, useCallback, useMemo, useRef } from 'react';\nimport { TEditorConfiguration } from '@editor/core';\nimport { getDocument } from '@editor/editor-context';\nimport { buildSavePayload, type SavePayload } from './save-payload';\n\nexport type TemplateKind = 'template' | 'sample';\n\n// Type for stored template\nexport interface StoredTemplate {\n id: string;\n name: string;\n content: TEditorConfiguration;\n createdAt: string;\n updatedAt: string;\n description?: string;\n subject?: string;\n tags?: string[];\n kind?: TemplateKind;\n}\n\nexport interface EmailEditorContextType {\n currentTemplateId: string | null;\n currentTemplateName: string | null;\n currentTemplateKind: TemplateKind | null;\n currentTemplateTags: string[];\n saveTemplate: () => TEditorConfiguration;\n loadTemplate: (\n template: TEditorConfiguration,\n templateId?: string,\n templateName?: string,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => void;\n registerSaveListener: (callback: (template: TEditorConfiguration) => void) => () => void;\n setCurrentTemplate: (\n templateId: string | null,\n templateName: string | null,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => void;\n setCurrentTemplateTags: (tags: string[]) => void;\n}\n\nconst EmailEditorContext = createContext<EmailEditorContextType | null>(null);\n\nexport interface EmailEditorProviderProps {\n children: React.ReactNode;\n initialTemplate?: TEditorConfiguration;\n initialTemplateId?: string;\n initialTemplateName?: string;\n onSave?: (payload: SavePayload) => void | Promise<void>;\n onChange?: (template: TEditorConfiguration) => void;\n}\n\nexport const EmailEditorProvider: React.FC<EmailEditorProviderProps> = ({\n children,\n initialTemplateId = null,\n initialTemplateName = null,\n onSave,\n}) => {\n const [currentTemplateId, setCurrentTemplateId] = useState<string | null>(initialTemplateId);\n const [currentTemplateName, setCurrentTemplateName] = useState<string | null>(initialTemplateName);\n const [currentTemplateKind, setCurrentTemplateKind] = useState<TemplateKind | null>(null);\n const [currentTemplateTags, setCurrentTemplateTagsState] = useState<string[]>([]);\n const saveListenersRef = useRef<((template: TEditorConfiguration) => void)[]>([]);\n\n // Use ref for onSave callback to keep context value stable\n const onSaveRef = useRef(onSave);\n onSaveRef.current = onSave;\n\n const saveTemplate = useCallback(() => {\n const currentDoc = getDocument();\n saveListenersRef.current.forEach(listener => listener(currentDoc));\n if (onSaveRef.current) {\n onSaveRef.current(buildSavePayload(currentDoc));\n }\n return currentDoc;\n }, []);\n\n const loadTemplate = useCallback(\n (\n _newTemplate: TEditorConfiguration,\n templateId?: string,\n templateName?: string,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => {\n if (templateId !== undefined) setCurrentTemplateId(templateId);\n if (templateName !== undefined) setCurrentTemplateName(templateName);\n if (kind !== undefined) setCurrentTemplateKind(kind);\n if (tags !== undefined) setCurrentTemplateTagsState(tags ?? []);\n },\n []\n );\n\n const setCurrentTemplate = useCallback(\n (\n templateId: string | null,\n templateName: string | null,\n kind?: TemplateKind | null,\n tags?: string[] | null,\n ) => {\n setCurrentTemplateId(templateId);\n setCurrentTemplateName(templateName);\n if (kind !== undefined) setCurrentTemplateKind(kind);\n if (tags !== undefined) setCurrentTemplateTagsState(tags ?? []);\n },\n []\n );\n\n const setCurrentTemplateTags = useCallback((tags: string[]) => {\n setCurrentTemplateTagsState(tags);\n }, []);\n\n const registerSaveListener = useCallback((callback: (template: TEditorConfiguration) => void) => {\n saveListenersRef.current = [...saveListenersRef.current, callback];\n return () => {\n saveListenersRef.current = saveListenersRef.current.filter(listener => listener !== callback);\n };\n }, []);\n\n const value = useMemo(\n () => ({\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n currentTemplateTags,\n saveTemplate,\n loadTemplate,\n registerSaveListener,\n setCurrentTemplate,\n setCurrentTemplateTags,\n }),\n [\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n currentTemplateTags,\n saveTemplate,\n loadTemplate,\n registerSaveListener,\n setCurrentTemplate,\n setCurrentTemplateTags,\n ]\n );\n\n return (\n <EmailEditorContext.Provider value={value}>\n {children}\n </EmailEditorContext.Provider>\n );\n};\n\nexport const useEmailEditor = () => {\n const context = useContext(EmailEditorContext);\n if (!context) {\n throw new Error('useEmailEditor must be used within an EmailEditorProvider');\n }\n return context;\n};\n","import React, { createContext, useContext } from 'react';\n\nexport type UploadedImage = {\n url: string;\n width?: number;\n height?: number;\n alt?: string;\n};\n\nexport type LibraryImage = {\n url: string;\n thumbnailUrl?: string;\n width?: number;\n height?: number;\n alt?: string;\n uploadedAt?: string;\n};\n\nexport type ImageCallbacks = {\n uploadImage?: (file: File) => Promise<UploadedImage>;\n loadImages?: () => Promise<LibraryImage[]>;\n deleteImage?: (url: string) => Promise<void>;\n};\n\nconst ImageCallbacksContext = createContext<ImageCallbacks>({});\n\nexport function ImageCallbacksProvider({\n callbacks,\n children,\n}: {\n callbacks: ImageCallbacks;\n children: React.ReactNode;\n}) {\n return <ImageCallbacksContext.Provider value={callbacks}>{children}</ImageCallbacksContext.Provider>;\n}\n\nexport function useImageCallbacks(): ImageCallbacks {\n return useContext(ImageCallbacksContext);\n}\n","import React from 'react';\n\nimport { Box, Stack, Typography } from '@mui/material';\n\nimport { t } from '@i18n';\n\n// Known panel titles — translated by looking up a derived i18n key so each\n// panel file doesn't have to import the i18n helper itself.\nconst TITLE_KEYS: Record<string, string> = {\n 'Editor appearance': 'panel.editor-appearance',\n Template: 'panel.template',\n Export: 'panel.export',\n Global: 'panel.global',\n 'Text block': 'panel.text-block',\n 'Heading block': 'panel.heading-block',\n 'Button block': 'panel.button-block',\n 'Image block': 'panel.image-block',\n 'Avatar block': 'panel.avatar-block',\n 'Signature block': 'panel.signature-block',\n 'Spacer block': 'panel.spacer-block',\n 'Divider block': 'panel.divider-block',\n 'Columns block': 'panel.columns-block',\n 'Container block': 'panel.container-block',\n 'Html block': 'panel.html-block',\n Details: 'panel.details',\n};\n\ntype SidebarPanelProps = {\n title: string;\n children: React.ReactNode;\n};\nexport default function BaseSidebarPanel({ title, children }: SidebarPanelProps) {\n const key = TITLE_KEYS[title];\n const displayTitle = key ? t(key, title) : title;\n return (\n <Box p={2}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ display: 'block', mb: 2 }}>\n {displayTitle}\n </Typography>\n <Stack spacing={5} mb={3}>\n {children}\n </Stack>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { InputLabel, Stack, ToggleButtonGroup } from '@mui/material';\n\ntype Props = {\n label: string | JSX.Element;\n children: JSX.Element | JSX.Element[];\n defaultValue: string;\n onChange: (v: string) => void;\n};\nexport default function RadioGroupInput({ label, children, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <Stack alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <ToggleButtonGroup\n exclusive\n fullWidth\n value={value}\n size=\"small\"\n onChange={(_, v: unknown) => {\n if (typeof v !== 'string') {\n throw new Error('RadioGroupInput can only receive string values');\n }\n setValue(v);\n onChange(v);\n }}\n >\n {children}\n </ToggleButtonGroup>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport { Box, Slider, Stack, Typography } from '@mui/material';\n\ntype SliderInputProps = {\n iconLabel: JSX.Element;\n\n step?: number;\n marks?: boolean;\n units: string;\n min?: number;\n max?: number;\n\n value: number;\n setValue: (v: number) => void;\n};\n\nexport default function RawSliderInput({ iconLabel, value, setValue, units, ...props }: SliderInputProps) {\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} justifyContent=\"space-between\" width=\"100%\">\n <Box sx={{ minWidth: 24, lineHeight: 1, flexShrink: 0 }}>{iconLabel}</Box>\n <Slider\n {...props}\n value={value}\n onChange={(_, value: unknown) => {\n if (typeof value !== 'number') {\n throw new Error('RawSliderInput values can only receive numeric values');\n }\n setValue(value);\n }}\n />\n <Box sx={{ minWidth: 32, textAlign: 'right', flexShrink: 0 }}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ lineHeight: 1 }}>\n {value}\n {units}\n </Typography>\n </Box>\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype SliderInputProps = {\n label: string;\n iconLabel: JSX.Element;\n\n step?: number;\n marks?: boolean;\n units: string;\n min?: number;\n max?: number;\n\n defaultValue: number;\n onChange: (v: number) => void;\n};\n\nexport default function SliderInput({ label, defaultValue, onChange, ...props }: SliderInputProps) {\n const [value, setValue] = useState(defaultValue);\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n value={value}\n setValue={(value: number) => {\n setValue(value);\n onChange(value);\n }}\n {...props}\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { InputProps, TextField } from '@mui/material';\n\ntype Props = {\n label: string;\n rows?: number;\n placeholder?: string;\n helperText?: string | JSX.Element;\n InputProps?: InputProps;\n defaultValue: string;\n onChange: (v: string) => void;\n};\nexport default function TextInput({ helperText, label, placeholder, rows, InputProps, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n const isMultiline = typeof rows === 'number' && rows > 1;\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <TextField\n fullWidth\n multiline={isMultiline}\n minRows={rows}\n variant={isMultiline ? 'outlined' : 'standard'}\n label={label}\n placeholder={placeholder}\n helperText={helperText}\n InputProps={InputProps}\n value={value}\n onChange={(ev) => {\n const v = ev.target.value;\n setValue(v);\n onChange(v);\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { Box, Button, SxProps } from '@mui/material';\n\ntype Props = {\n paletteColors: string[];\n value: string;\n onChange: (value: string) => void;\n};\n\nconst TILE_BUTTON: SxProps = {\n width: 24,\n height: 24,\n};\nexport default function Swatch({ paletteColors, value, onChange }: Props) {\n const renderButton = (colorValue: string) => {\n return (\n <Button\n key={colorValue}\n onClick={() => onChange(colorValue)}\n sx={{\n ...TILE_BUTTON,\n backgroundColor: colorValue,\n border: '1px solid',\n borderColor: value === colorValue ? 'black' : 'grey.200',\n minWidth: 24,\n display: 'inline-flex',\n '&:hover': {\n backgroundColor: colorValue,\n borderColor: 'grey.500',\n },\n }}\n />\n );\n };\n return (\n <Box width=\"100%\" sx={{ display: 'grid', gap: 1, gridTemplateColumns: '1fr 1fr 1fr 1fr 1fr 1fr' }}>\n {paletteColors.map((c) => renderButton(c))}\n </Box>\n );\n}\n","import React from 'react';\nimport { HexColorInput, HexColorPicker } from 'react-colorful';\n\nimport { Box, Stack, SxProps } from '@mui/material';\n\nimport Swatch from './swatch';\n\nconst DEFAULT_PRESET_COLORS = [\n '#E11D48',\n '#DB2777',\n '#C026D3',\n '#9333EA',\n '#7C3AED',\n '#4F46E5',\n '#2563EB',\n '#0284C7',\n '#0891B2',\n '#0D9488',\n '#059669',\n '#16A34A',\n '#65A30D',\n '#CA8A04',\n '#D97706',\n '#EA580C',\n '#DC2626',\n '#FFFFFF',\n '#FAFAFA',\n '#F5F5F5',\n '#E5E5E5',\n '#D4D4D4',\n '#A3A3A3',\n '#737373',\n '#525252',\n '#404040',\n '#262626',\n '#171717',\n '#0A0A0A',\n '#000000',\n];\n\nconst SX: SxProps = {\n p: 1,\n '.react-colorful__pointer ': {\n width: 16,\n height: 16,\n },\n '.react-colorful__saturation': {\n mb: 1,\n borderRadius: '4px',\n },\n '.react-colorful__last-control': {\n borderRadius: '4px',\n },\n '.react-colorful__hue-pointer': {\n width: '4px',\n borderRadius: '4px',\n height: 24,\n cursor: 'col-resize',\n },\n '.react-colorful__saturation-pointer': {\n cursor: 'all-scroll',\n },\n input: {\n padding: 1,\n border: '1px solid',\n borderColor: 'grey.300',\n borderRadius: '4px',\n width: '100%',\n },\n};\n\ntype Props = {\n value: string;\n onChange: (v: string) => void;\n};\nexport default function Picker({ value, onChange }: Props) {\n return (\n <Stack spacing={1} sx={SX}>\n <HexColorPicker color={value} onChange={onChange} />\n <Swatch paletteColors={DEFAULT_PRESET_COLORS} value={value} onChange={onChange} />\n <Box pt={1}>\n <HexColorInput prefixed color={value} onChange={onChange} />\n </Box>\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AddOutlined, CloseOutlined } from '@mui/icons-material';\nimport { ButtonBase, InputLabel, Menu, Stack } from '@mui/material';\n\nimport Picker from './picker';\n\nconst BUTTON_SX = {\n border: '1px solid',\n borderColor: 'cadet.400',\n width: 32,\n height: 32,\n borderRadius: '4px',\n bgcolor: '#FFFFFF',\n};\n\ntype Props =\n | {\n nullable: true;\n label: string;\n onChange: (value: string | null) => void;\n defaultValue: string | null;\n }\n | {\n nullable: false;\n label: string;\n onChange: (value: string) => void;\n defaultValue: string;\n };\nexport default function ColorInput({ label, defaultValue, onChange, nullable }: Props) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const [value, setValue] = useState(defaultValue);\n const handleClickOpen = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const renderResetButton = () => {\n if (!nullable) {\n return null;\n }\n if (typeof value !== 'string' || value.trim().length === 0) {\n return null;\n }\n return (\n <ButtonBase\n onClick={() => {\n setValue(null);\n onChange(null);\n }}\n >\n <CloseOutlined fontSize=\"small\" sx={{ color: 'grey.600' }} />\n </ButtonBase>\n );\n };\n\n const renderOpenButton = () => {\n if (value) {\n return <ButtonBase onClick={handleClickOpen} sx={{ ...BUTTON_SX, bgcolor: value }} />;\n }\n return (\n <ButtonBase onClick={handleClickOpen} sx={{ ...BUTTON_SX }}>\n <AddOutlined fontSize=\"small\" />\n </ButtonBase>\n );\n };\n\n return (\n <Stack alignItems=\"flex-start\">\n <InputLabel sx={{ mb: 0.5 }}>{label}</InputLabel>\n <Stack direction=\"row\" spacing={1}>\n {renderOpenButton()}\n {renderResetButton()}\n </Stack>\n <Menu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={() => setAnchorEl(null)}\n MenuListProps={{\n sx: { height: 'auto', padding: 0 },\n }}\n >\n <Picker\n value={value || ''}\n onChange={(v) => {\n setValue(v);\n onChange(v);\n }}\n />\n </Menu>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport BaseColorInput from './base-color-input';\n\ntype Props = {\n label: string;\n onChange: (value: string) => void;\n defaultValue: string;\n};\nexport default function ColorInput(props: Props) {\n return <BaseColorInput {...props} nullable={false} />;\n}\n\ntype NullableProps = {\n label: string;\n onChange: (value: null | string) => void;\n defaultValue: null | string;\n};\nexport function NullableColorInput(props: NullableProps) {\n return <BaseColorInput {...props} nullable />;\n}\n","export const FONT_FAMILIES = [\n {\n key: 'MODERN_SANS',\n label: 'Modern sans',\n value: '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif',\n },\n {\n key: 'BOOK_SANS',\n label: 'Book sans',\n value: 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif',\n },\n {\n key: 'ORGANIC_SANS',\n label: 'Organic sans',\n value: 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif',\n },\n {\n key: 'GEOMETRIC_SANS',\n label: 'Geometric sans',\n value: 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif',\n },\n {\n key: 'HEAVY_SANS',\n label: 'Heavy sans',\n value:\n 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif',\n },\n {\n key: 'ROUNDED_SANS',\n label: 'Rounded sans',\n value:\n 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif',\n },\n {\n key: 'MODERN_SERIF',\n label: 'Modern serif',\n value: 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif',\n },\n {\n key: 'BOOK_SERIF',\n label: 'Book serif',\n value: '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif',\n },\n {\n key: 'MONOSPACE',\n label: 'Monospace',\n value: '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace',\n },\n];\n\nexport const FONT_FAMILY_NAMES = [\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n] as const;\n","import React, { useState, useEffect } from 'react';\n\nimport { MenuItem, TextField } from '@mui/material';\n\nimport { FONT_FAMILIES } from '@editor/blocks/helpers/font-family';\nimport { t } from '@i18n';\n\ntype NullableProps = {\n label: string;\n onChange: (value: null | string) => void;\n defaultValue: null | string;\n};\nexport function NullableFontFamily({ label, onChange, defaultValue }: NullableProps) {\n const [value, setValue] = useState(defaultValue ?? 'inherit');\n\n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue ?? 'inherit');\n }, [defaultValue]);\n\n return (\n <TextField\n select\n variant=\"standard\"\n label={label}\n value={value}\n onChange={(ev) => {\n const v = ev.target.value;\n setValue(v);\n onChange(v === null ? null : v);\n }}\n >\n <MenuItem value=\"inherit\">{t('font-family.inherit', 'Match email settings')}</MenuItem>\n {FONT_FAMILIES.map((option) => (\n <MenuItem key={option.key} value={option.key} sx={{ fontFamily: option.value }}>\n {t(`font-family.${option.key.toLowerCase()}`, option.label)}\n </MenuItem>\n ))}\n </TextField>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { TextFieldsOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number;\n onChange: (v: number) => void;\n};\nexport default function FontSizeInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n const handleChange = (value: number) => {\n setValue(value);\n onChange(value);\n };\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<TextFieldsOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"px\"\n step={1}\n min={10}\n max={48}\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { ToggleButton } from '@mui/material';\n\nimport { t } from '@i18n';\n\nimport RadioGroupInput from './radio-group-input';\n\ntype Props = {\n label: string;\n defaultValue: string;\n onChange: (value: string) => void;\n};\nexport default function FontWeightInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <RadioGroupInput\n label={label}\n defaultValue={value}\n onChange={(fontWeight) => {\n setValue(fontWeight);\n onChange(fontWeight);\n }}\n >\n <ToggleButton value=\"normal\">{t('font-weight.regular', 'Regular')}</ToggleButton>\n <ToggleButton value=\"bold\">{t('font-weight.bold', 'Bold')}</ToggleButton>\n </RadioGroupInput>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { SpaceBarOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function LetterSpacingInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState<number>(defaultValue ?? 0);\n\n useEffect(() => {\n setValue(defaultValue ?? 0);\n }, [defaultValue]);\n\n const handleChange = (v: number) => {\n setValue(v);\n onChange(v === 0 ? null : v);\n };\n\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<SpaceBarOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"px\"\n step={0.1}\n min={0}\n max={2}\n />\n </Stack>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { FormatLineSpacingOutlined } from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype Props = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function LineHeightInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState<number>(defaultValue ?? 0);\n\n useEffect(() => {\n setValue(defaultValue ?? 0);\n }, [defaultValue]);\n\n const handleChange = (v: number) => {\n setValue(v);\n onChange(v === 0 ? null : v);\n };\n\n return (\n <Stack spacing={1} alignItems=\"flex-start\">\n <InputLabel shrink>{label}</InputLabel>\n <RawSliderInput\n iconLabel={<FormatLineSpacingOutlined sx={{ fontSize: 16 }} />}\n value={value}\n setValue={handleChange}\n units=\"\"\n step={0.1}\n min={0}\n max={2}\n />\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport {\n AlignHorizontalLeftOutlined,\n AlignHorizontalRightOutlined,\n AlignVerticalBottomOutlined,\n AlignVerticalTopOutlined,\n} from '@mui/icons-material';\nimport { InputLabel, Stack } from '@mui/material';\n\nimport RawSliderInput from './raw/raw-slider-input';\n\ntype TPaddingValue = {\n top: number;\n bottom: number;\n right: number;\n left: number;\n};\ntype Props = {\n label: string;\n defaultValue: TPaddingValue | null;\n onChange: (value: TPaddingValue) => void;\n};\nexport default function PaddingInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(() => {\n if (defaultValue) {\n return defaultValue;\n }\n return {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n });\n\n function handleChange(internalName: keyof TPaddingValue, nValue: number) {\n const v = {\n ...value,\n [internalName]: nValue,\n };\n setValue(v);\n onChange(v);\n }\n\n return (\n <Stack spacing={2} alignItems=\"flex-start\" pb={1}>\n <InputLabel shrink>{label}</InputLabel>\n\n <RawSliderInput\n iconLabel={<AlignVerticalTopOutlined sx={{ fontSize: 16 }} />}\n value={value.top}\n setValue={(num) => handleChange('top', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignVerticalBottomOutlined sx={{ fontSize: 16 }} />}\n value={value.bottom}\n setValue={(num) => handleChange('bottom', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignHorizontalLeftOutlined sx={{ fontSize: 16 }} />}\n value={value.left}\n setValue={(num) => handleChange('left', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n\n <RawSliderInput\n iconLabel={<AlignHorizontalRightOutlined sx={{ fontSize: 16 }} />}\n value={value.right}\n setValue={(num) => handleChange('right', num)}\n units=\"px\"\n step={4}\n min={0}\n max={80}\n marks\n />\n </Stack>\n );\n}\n","import React, { useState, useEffect } from 'react';\n\nimport { FormatAlignCenterOutlined, FormatAlignLeftOutlined, FormatAlignRightOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\n\nimport RadioGroupInput from './radio-group-input';\n\ntype Props = {\n label: string;\n defaultValue: string | null;\n onChange: (value: string | null) => void;\n};\nexport default function TextAlignInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue ?? 'left');\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue ?? 'left');\n }, [defaultValue]);\n\n return (\n <RadioGroupInput\n label={label}\n defaultValue={value}\n onChange={(value) => {\n setValue(value);\n onChange(value);\n }}\n >\n <ToggleButton value=\"left\">\n <FormatAlignLeftOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"center\">\n <FormatAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <FormatAlignRightOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n );\n}\n","import React from 'react';\n\nimport { RoundedCornerOutlined } from '@mui/icons-material';\n\nimport { TStyle } from '@editor/blocks/helpers/tstyle';\nimport { t } from '@i18n';\nimport { NullableColorInput } from '../inputs/color-input/index';\nimport { NullableFontFamily } from '../inputs/font-family';\nimport FontSizeInput from '../inputs/font-size-input';\nimport FontWeightInput from '../inputs/font-weight-input';\nimport LetterSpacingInput from '../inputs/letter-spacing-input';\nimport LineHeightInput from '../inputs/line-height-input';\nimport PaddingInput from '../inputs/padding-input';\nimport SliderInput from '../inputs/slider-input';\nimport TextAlignInput from '../inputs/text-align-input';\n\ntype StylePropertyPanelProps = {\n name: keyof TStyle;\n value: TStyle;\n onChange: (style: TStyle) => void;\n};\nexport default function SingleStylePropertyPanel({ name, value, onChange }: StylePropertyPanelProps) {\n const defaultValue = value[name] ?? null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = (v: any) => {\n onChange({ ...value, [name]: v });\n };\n\n switch (name) {\n case 'backgroundColor':\n return <NullableColorInput label={t('style.background-color', 'Background color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'borderColor':\n return <NullableColorInput label={t('style.border-color', 'Border color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'borderRadius':\n return (\n <SliderInput\n iconLabel={<RoundedCornerOutlined />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={48}\n label={t('style.border-radius', 'Border radius')}\n defaultValue={defaultValue}\n onChange={handleChange}\n />\n );\n case 'color':\n return <NullableColorInput label={t('style.text-color', 'Text color')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontFamily':\n return <NullableFontFamily label={t('style.font-family', 'Font family')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontSize':\n return <FontSizeInput label={t('style.font-size', 'Font size')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'fontWeight':\n return <FontWeightInput label={t('style.font-weight', 'Font weight')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'lineHeight':\n return <LineHeightInput label={t('style.line-height', 'Line height')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'letterSpacing':\n return <LetterSpacingInput label={t('style.letter-spacing', 'Letter spacing')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'textAlign':\n return <TextAlignInput label={t('style.alignment', 'Alignment')} defaultValue={defaultValue} onChange={handleChange} />;\n case 'padding':\n return <PaddingInput label={t('style.padding', 'Padding')} defaultValue={defaultValue} onChange={handleChange} />;\n }\n}\n","import React from 'react';\n\nimport { TStyle } from '@editor/blocks/helpers/tstyle';\n\nimport SingleStylePropertyPanel from './single-style-property-panel';\n\ntype MultiStylePropertyPanelProps = {\n names: (keyof TStyle)[];\n value: TStyle | undefined | null;\n onChange: (style: TStyle) => void;\n};\nexport default function MultiStylePropertyPanel({ names, value, onChange }: MultiStylePropertyPanelProps) {\n return (\n <>\n {names.map((name) => (\n <SingleStylePropertyPanel key={name} name={name} value={value || {}} onChange={onChange} />\n ))}\n </>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AspectRatioOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\nimport { AvatarPropsDefaults, AvatarPropsSchema } from '@blocks';\nimport type { AvatarProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype AvatarSidebarPanelProps = {\n data: AvatarProps;\n setData: (v: AvatarProps) => void;\n};\nexport default function AvatarSidebarPanel({ data, setData }: AvatarSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = AvatarPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const size = data.props?.size ?? AvatarPropsDefaults.size;\n const imageUrl = data.props?.imageUrl ?? AvatarPropsDefaults.imageUrl;\n const alt = data.props?.alt ?? AvatarPropsDefaults.alt;\n const shape = data.props?.shape ?? AvatarPropsDefaults.shape;\n\n return (\n <BaseSidebarPanel title=\"Avatar block\">\n <SliderInput\n label={t('field.size', 'Size')}\n iconLabel={<AspectRatioOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={3}\n min={32}\n max={256}\n defaultValue={size}\n onChange={(size) => {\n updateData({ ...data, props: { ...data.props, size } });\n }}\n />\n <RadioGroupInput\n label={t('avatar.shape', 'Shape')}\n defaultValue={shape}\n onChange={(shape) => {\n updateData({ ...data, props: { ...data.props, shape } });\n }}\n >\n <ToggleButton value=\"circle\">{t('signature.shape.circle', 'Circle')}</ToggleButton>\n <ToggleButton value=\"square\">{t('signature.shape.square', 'Square')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('signature.shape.rounded', 'Rounded')}</ToggleButton>\n </RadioGroupInput>\n <TextInput\n label={t('signature.image-url', 'Image URL')}\n defaultValue={imageUrl}\n onChange={(imageUrl) => {\n updateData({ ...data, props: { ...data.props, imageUrl } });\n }}\n />\n <TextInput\n label={t('image.alt-text', 'Alt text')}\n defaultValue={alt}\n onChange={(alt) => {\n updateData({ ...data, props: { ...data.props, alt } });\n }}\n />\n\n <MultiStylePropertyPanel\n names={['textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { ToggleButton } from '@mui/material';\nimport { ButtonPropsDefaults, ButtonPropsSchema } from '@blocks';\nimport type { ButtonProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ButtonSidebarPanelProps = {\n data: ButtonProps;\n setData: (v: ButtonProps) => void;\n};\nexport default function ButtonSidebarPanel({ data, setData }: ButtonSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = ButtonPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const text = data.props?.text ?? ButtonPropsDefaults.text;\n const url = data.props?.url ?? ButtonPropsDefaults.url;\n const fullWidth = data.props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const size = data.props?.size ?? ButtonPropsDefaults.size;\n const buttonStyle = data.props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n const buttonTextColor = data.props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = data.props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n return (\n <BaseSidebarPanel title=\"Button block\">\n <TextInput\n label={t('field.text', 'Text')}\n defaultValue={text}\n onChange={(text) => updateData({ ...data, props: { ...data.props, text } })}\n />\n <TextInput\n label={t('field.url', 'Url')}\n defaultValue={url}\n onChange={(url) => updateData({ ...data, props: { ...data.props, url } })}\n />\n <RadioGroupInput\n label={t('field.width', 'Width')}\n defaultValue={fullWidth ? 'FULL_WIDTH' : 'AUTO'}\n onChange={(v) => updateData({ ...data, props: { ...data.props, fullWidth: v === 'FULL_WIDTH' } })}\n >\n <ToggleButton value=\"FULL_WIDTH\">{t('button.width.full', 'Full')}</ToggleButton>\n <ToggleButton value=\"AUTO\">{t('button.width.auto', 'Auto')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('field.size', 'Size')}\n defaultValue={size}\n onChange={(size) => updateData({ ...data, props: { ...data.props, size } })}\n >\n <ToggleButton value=\"x-small\">{t('size.xs', 'Xs')}</ToggleButton>\n <ToggleButton value=\"small\">{t('size.sm', 'Sm')}</ToggleButton>\n <ToggleButton value=\"medium\">{t('size.md', 'Md')}</ToggleButton>\n <ToggleButton value=\"large\">{t('size.lg', 'Lg')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('field.style', 'Style')}\n defaultValue={buttonStyle}\n onChange={(buttonStyle) => updateData({ ...data, props: { ...data.props, buttonStyle } })}\n >\n <ToggleButton value=\"rectangle\">{t('button.style.rectangle', 'Rectangle')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('button.style.rounded', 'Rounded')}</ToggleButton>\n <ToggleButton value=\"pill\">{t('button.style.pill', 'Pill')}</ToggleButton>\n </RadioGroupInput>\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={buttonTextColor}\n onChange={(buttonTextColor) => updateData({ ...data, props: { ...data.props, buttonTextColor } })}\n />\n <ColorInput\n label={t('button.color', 'Button color')}\n defaultValue={buttonBackgroundColor}\n onChange={(buttonBackgroundColor) => updateData({ ...data, props: { ...data.props, buttonBackgroundColor } })}\n />\n <MultiStylePropertyPanel\n names={[\n 'backgroundColor',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nimport { ColumnsContainerPropsSchema as BaseColumnsContainerPropsSchema } from '@blocks';\n\nconst BasePropsShape = BaseColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;\n\nconst ColumnsContainerPropsSchema = z.object({\n style: BaseColumnsContainerPropsSchema.shape.style,\n props: z\n .object({\n ...BasePropsShape,\n columns: z.tuple([\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n z.object({ childrenIds: z.array(z.string()) }),\n ]),\n })\n .optional()\n .nullable(),\n});\n\nexport type ColumnsContainerProps = z.infer<typeof ColumnsContainerPropsSchema>;\nexport default ColumnsContainerPropsSchema;\n","import React from 'react';\n\nimport { TextField, Typography } from '@mui/material';\n\ntype TextDimensionInputProps = {\n label: string;\n defaultValue: number | null | undefined;\n onChange: (v: number | null) => void;\n};\nexport default function TextDimensionInput({ label, defaultValue, onChange }: TextDimensionInputProps) {\n const handleChange: React.ChangeEventHandler<HTMLInputElement> = (ev) => {\n const value = parseInt(ev.target.value);\n onChange(isNaN(value) ? null : value);\n };\n return (\n <TextField\n fullWidth\n onChange={handleChange}\n defaultValue={defaultValue}\n label={label}\n variant=\"standard\"\n placeholder=\"auto\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <Typography variant=\"body2\" color=\"text.secondary\">\n px\n </Typography>\n ),\n }}\n />\n );\n}\n","import React, { useState } from 'react';\n\nimport { Stack } from '@mui/material';\n\nimport TextDimensionInput from './text-dimension-input';\n\nexport const DEFAULT_2_COLUMNS = [6] as [number];\nexport const DEFAULT_3_COLUMNS = [4, 8] as [number, number];\n\ntype TWidthValue = number | null | undefined;\ntype FixedWidths = [\n //\n number | null | undefined,\n number | null | undefined,\n number | null | undefined,\n];\ntype ColumnsLayoutInputProps = {\n defaultValue: FixedWidths | null | undefined;\n onChange: (v: FixedWidths | null | undefined) => void;\n};\nexport default function ColumnWidthsInput({ defaultValue, onChange }: ColumnsLayoutInputProps) {\n const [currentValue, setCurrentValue] = useState<[TWidthValue, TWidthValue, TWidthValue]>(() => {\n if (defaultValue) {\n return defaultValue;\n }\n return [null, null, null];\n });\n\n const setIndexValue = (index: 0 | 1 | 2, value: number | null | undefined) => {\n const nValue: FixedWidths = [...currentValue];\n nValue[index] = value;\n setCurrentValue(nValue);\n onChange(nValue);\n };\n\n const columnsCountValue = 3;\n let column3 = null;\n if (columnsCountValue === 3) {\n column3 = (\n <TextDimensionInput\n label=\"Column 3\"\n defaultValue={currentValue?.[2]}\n onChange={(v) => {\n setIndexValue(2, v);\n }}\n />\n );\n }\n return (\n <Stack direction=\"row\" spacing={1}>\n <TextDimensionInput\n label=\"Column 1\"\n defaultValue={currentValue?.[0]}\n onChange={(v) => {\n setIndexValue(0, v);\n }}\n />\n <TextDimensionInput\n label=\"Column 2\"\n defaultValue={currentValue?.[1]}\n onChange={(v) => {\n setIndexValue(1, v);\n }}\n />\n {column3}\n </Stack>\n );\n}\n","import React, { useState } from 'react';\n\nimport {\n SpaceBarOutlined,\n VerticalAlignBottomOutlined,\n VerticalAlignCenterOutlined,\n VerticalAlignTopOutlined,\n} from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\n\nimport ColumnsContainerPropsSchema, {\n ColumnsContainerProps,\n} from '@editor/blocks/columns-container/columns-container-props-schema';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColumnWidthsInput from './helpers/inputs/column-widths-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ColumnsContainerPanelProps = {\n data: ColumnsContainerProps;\n setData: (v: ColumnsContainerProps) => void;\n};\nexport default function ColumnsContainerPanel({ data, setData }: ColumnsContainerPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = ColumnsContainerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Columns block\">\n <RadioGroupInput\n label={t('columns.count', 'Number of columns')}\n defaultValue={data.props?.columnsCount === 2 ? '2' : '3'}\n onChange={(v) => {\n updateData({ ...data, props: { ...data.props, columnsCount: v === '2' ? 2 : 3 } });\n }}\n >\n <ToggleButton value=\"2\">2</ToggleButton>\n <ToggleButton value=\"3\">3</ToggleButton>\n </RadioGroupInput>\n <ColumnWidthsInput\n defaultValue={data.props?.fixedWidths}\n onChange={(fixedWidths) => {\n updateData({ ...data, props: { ...data.props, fixedWidths } });\n }}\n />\n <SliderInput\n label={t('columns.gap', 'Columns gap')}\n iconLabel={<SpaceBarOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={80}\n defaultValue={data.props?.columnsGap ?? 0}\n onChange={(columnsGap) => updateData({ ...data, props: { ...data.props, columnsGap } })}\n />\n <RadioGroupInput\n label={t('style.alignment', 'Alignment')}\n defaultValue={data.props?.contentAlignment ?? 'middle'}\n onChange={(contentAlignment) => {\n updateData({ ...data, props: { ...data.props, contentAlignment } });\n }}\n >\n <ToggleButton value=\"top\">\n <VerticalAlignTopOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"middle\">\n <VerticalAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"bottom\">\n <VerticalAlignBottomOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n\n <MultiStylePropertyPanel\n names={['backgroundColor', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nimport { ContainerPropsSchema as BaseContainerPropsSchema } from '@blocks';\n\nconst ContainerPropsSchema = z.object({\n style: BaseContainerPropsSchema.shape.style,\n props: z\n .object({\n childrenIds: z.array(z.string()).optional().nullable(),\n })\n .optional()\n .nullable(),\n});\n\nexport default ContainerPropsSchema;\n\nexport type ContainerProps = z.infer<typeof ContainerPropsSchema>;\n","import React, { useState } from 'react';\n\nimport ContainerPropsSchema, { ContainerProps } from '@editor/blocks/container/container-props-schema';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype ContainerSidebarPanelProps = {\n data: ContainerProps;\n setData: (v: ContainerProps) => void;\n};\n\nexport default function ContainerSidebarPanel({ data, setData }: ContainerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = ContainerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n return (\n <BaseSidebarPanel title=\"Container block\">\n <MultiStylePropertyPanel\n names={['backgroundColor', 'borderColor', 'borderRadius', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { HeightOutlined } from '@mui/icons-material';\nimport { DividerPropsDefaults, DividerPropsSchema } from '@blocks/divider';\nimport type { DividerProps } from '@blocks/divider';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype DividerSidebarPanelProps = {\n data: DividerProps;\n setData: (v: DividerProps) => void;\n};\nexport default function DividerSidebarPanel({ data, setData }: DividerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = DividerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const lineColor = data.props?.lineColor ?? DividerPropsDefaults.lineColor;\n const lineHeight = data.props?.lineHeight ?? DividerPropsDefaults.lineHeight;\n\n return (\n <BaseSidebarPanel title=\"Divider block\">\n <ColorInput\n label={t('divider.color', 'Color')}\n defaultValue={lineColor}\n onChange={(lineColor) => updateData({ ...data, props: { ...data.props, lineColor } })}\n />\n <SliderInput\n label={t('field.height', 'Height')}\n iconLabel={<HeightOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={1}\n min={1}\n max={24}\n defaultValue={lineHeight}\n onChange={(lineHeight) => updateData({ ...data, props: { ...data.props, lineHeight } })}\n />\n <MultiStylePropertyPanel\n names={['backgroundColor', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import { z } from 'zod';\n\nconst COLOR_SCHEMA = z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .nullable()\n .optional();\n\nconst FONT_FAMILY_SCHEMA = z\n .enum([\n 'MODERN_SANS',\n 'BOOK_SANS',\n 'ORGANIC_SANS',\n 'GEOMETRIC_SANS',\n 'HEAVY_SANS',\n 'ROUNDED_SANS',\n 'MODERN_SERIF',\n 'BOOK_SERIF',\n 'MONOSPACE',\n ])\n .nullable()\n .optional();\n\nexport const TemplateVariableSchema = z.object({\n name: z.string(),\n description: z.string().optional().nullable(),\n sampleValue: z.string().optional().nullable(),\n});\n\nconst EmailLayoutPropsSchema = z.object({\n backdropColor: COLOR_SCHEMA,\n backdropDisabled: z.boolean().optional().nullable(),\n borderColor: COLOR_SCHEMA,\n borderRadius: z.number().optional().nullable(),\n canvasColor: COLOR_SCHEMA,\n textColor: COLOR_SCHEMA,\n fontFamily: FONT_FAMILY_SCHEMA,\n childrenIds: z.array(z.string()).optional().nullable(),\n subject: z.string().optional().nullable(),\n variables: z.array(TemplateVariableSchema).optional().nullable(),\n});\n\nexport default EmailLayoutPropsSchema;\n\nexport type EmailLayoutProps = z.infer<typeof EmailLayoutPropsSchema>;\n","import React, { useState, useEffect } from 'react';\n\nimport { FormControlLabel, Switch } from '@mui/material';\n\ntype Props = {\n label: string;\n defaultValue: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport default function BooleanInput({ label, defaultValue, onChange }: Props) {\n const [value, setValue] = useState(defaultValue);\n \n // Synchronize with external changes to defaultValue\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n \n return (\n <FormControlLabel\n label={label}\n control={\n <Switch\n checked={value}\n onChange={(_, checked: boolean) => {\n setValue(checked);\n onChange(checked);\n }}\n />\n }\n />\n );\n}\n","import React, { useState } from 'react';\n\nimport { RoundedCornerOutlined } from '@mui/icons-material';\n\nimport EmailLayoutPropsSchema, {\n EmailLayoutProps,\n} from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport BooleanInput from './helpers/inputs/boolean-input';\nimport ColorInput, { NullableColorInput } from './helpers/inputs/color-input';\nimport { NullableFontFamily } from './helpers/inputs/font-family';\nimport SliderInput from './helpers/inputs/slider-input';\n\ntype EmailLayoutSidebarFieldsProps = {\n data: EmailLayoutProps;\n setData: (v: EmailLayoutProps) => void;\n};\nexport default function EmailLayoutSidebarFields({ data, setData }: EmailLayoutSidebarFieldsProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = EmailLayoutPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const backdropDisabled = data.backdropDisabled ?? false;\n\n return (\n <BaseSidebarPanel title=\"Global\">\n <BooleanInput\n label={t('global.disable-backdrop', 'Disable backdrop')}\n defaultValue={backdropDisabled}\n onChange={(backdropDisabled) => updateData({ ...data, backdropDisabled })}\n />\n {!backdropDisabled && (\n <>\n <ColorInput\n label={t('global.backdrop-color', 'Backdrop color')}\n defaultValue={data.backdropColor ?? '#F5F5F5'}\n onChange={(backdropColor) => updateData({ ...data, backdropColor })}\n />\n <ColorInput\n label={t('global.canvas-color', 'Canvas color')}\n defaultValue={data.canvasColor ?? '#FFFFFF'}\n onChange={(canvasColor) => updateData({ ...data, canvasColor })}\n />\n <NullableColorInput\n label={t('global.canvas-border-color', 'Canvas border color')}\n defaultValue={data.borderColor ?? null}\n onChange={(borderColor) => updateData({ ...data, borderColor })}\n />\n <SliderInput\n iconLabel={<RoundedCornerOutlined />}\n units=\"px\"\n step={4}\n marks\n min={0}\n max={48}\n label={t('global.canvas-border-radius', 'Canvas border radius')}\n defaultValue={data.borderRadius ?? 0}\n onChange={(borderRadius) => updateData({ ...data, borderRadius })}\n />\n </>\n )}\n <NullableFontFamily\n label={t('style.font-family', 'Font family')}\n defaultValue=\"MODERN_SANS\"\n onChange={(fontFamily) => updateData({ ...data, fontFamily })}\n />\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={data.textColor ?? '#262626'}\n onChange={(textColor) => updateData({ ...data, textColor })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { ToggleButton } from '@mui/material';\nimport { HeadingProps, HeadingPropsDefaults, HeadingPropsSchema } from '@blocks/heading';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype HeadingSidebarPanelProps = {\n data: HeadingProps;\n setData: (v: HeadingProps) => void;\n};\nexport default function HeadingSidebarPanel({ data, setData }: HeadingSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = HeadingPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Heading block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={3}\n defaultValue={data.props?.text ?? HeadingPropsDefaults.text}\n onChange={(text) => {\n updateData({ ...data, props: { ...data.props, text } });\n }}\n />\n <RadioGroupInput\n label={t('field.level', 'Level')}\n defaultValue={data.props?.level ?? HeadingPropsDefaults.level}\n onChange={(level) => {\n updateData({ ...data, props: { ...data.props, level } });\n }}\n >\n <ToggleButton value=\"h1\">H1</ToggleButton>\n <ToggleButton value=\"h2\">H2</ToggleButton>\n <ToggleButton value=\"h3\">H3</ToggleButton>\n </RadioGroupInput>\n <MultiStylePropertyPanel\n names={[\n 'color',\n 'backgroundColor',\n 'fontFamily',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\nimport { HtmlPropsSchema } from '@blocks';\nimport type { HtmlProps } from '@blocks';\n\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype HtmlSidebarPanelProps = {\n data: HtmlProps;\n setData: (v: HtmlProps) => void;\n};\nexport default function HtmlSidebarPanel({ data, setData }: HtmlSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = HtmlPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Html block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={5}\n defaultValue={data.props?.contents ?? ''}\n onChange={(contents) => updateData({ ...data, props: { ...data.props, contents } })}\n />\n <MultiStylePropertyPanel\n names={['color', 'backgroundColor', 'fontFamily', 'fontSize', 'textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n InputAdornment,\n Stack,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport { DeleteOutline, SearchOutlined } from '@mui/icons-material';\nimport { useImageCallbacks, type LibraryImage } from '../../../image-context';\n\ntype ImageLibraryDialogProps = {\n open: boolean;\n onClose: () => void;\n onPick: (image: LibraryImage) => void;\n};\n\nexport default function ImageLibraryDialog({ open, onClose, onPick }: ImageLibraryDialogProps) {\n const { loadImages, deleteImage } = useImageCallbacks();\n const [images, setImages] = useState<LibraryImage[] | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n\n const refresh = async () => {\n if (!loadImages) return;\n setBusy(true);\n setError(null);\n try {\n const list = await loadImages();\n setImages(list);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load images');\n } finally {\n setBusy(false);\n }\n };\n\n useEffect(() => {\n if (open) {\n setQuery('');\n void refresh();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const filtered = useMemo(() => {\n if (!images) return null;\n const q = query.trim().toLowerCase();\n if (!q) return images;\n return images.filter((img) => {\n const haystack = `${img.alt ?? ''} ${img.url}`.toLowerCase();\n return haystack.includes(q);\n });\n }, [images, query]);\n\n const handleDelete = async (url: string) => {\n if (!deleteImage) return;\n const ok = window.confirm('Delete this image from the library?');\n if (!ok) return;\n setBusy(true);\n try {\n await deleteImage(url);\n await refresh();\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to delete image');\n setBusy(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Image library</DialogTitle>\n <DialogContent dividers>\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search by alt text or URL\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n autoFocus\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchOutlined fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n sx={{ mb: 2 }}\n />\n\n {error && (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {error}\n </Alert>\n )}\n\n {busy && !images && (\n <Stack alignItems=\"center\" sx={{ py: 4 }}>\n <CircularProgress size={28} />\n </Stack>\n )}\n\n {filtered && filtered.length === 0 && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', textAlign: 'center', py: 4 }}>\n {query ? 'No images match your search.' : 'No images in the library yet.'}\n </Typography>\n )}\n\n {filtered && filtered.length > 0 && (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n gap: 1.5,\n }}\n >\n {filtered.map((img) => (\n <ImageTile\n key={img.url}\n image={img}\n onPick={() => onPick(img)}\n onDelete={deleteImage ? () => handleDelete(img.url) : undefined}\n />\n ))}\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Close</Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nfunction ImageTile({\n image,\n onPick,\n onDelete,\n}: {\n image: LibraryImage;\n onPick: () => void;\n onDelete?: () => void;\n}) {\n const src = image.thumbnailUrl ?? image.url;\n const label = image.alt || image.url.split('/').pop() || 'image';\n return (\n <Box\n sx={{\n position: 'relative',\n borderRadius: 1,\n border: 1,\n borderColor: 'divider',\n overflow: 'hidden',\n cursor: 'pointer',\n transition: 'border-color 120ms',\n '&:hover': { borderColor: 'primary.main' },\n '&:hover .delete-btn': { opacity: 1 },\n }}\n onClick={onPick}\n >\n <Box\n component=\"img\"\n src={src}\n alt={image.alt ?? ''}\n sx={{ display: 'block', width: '100%', aspectRatio: '1 / 1', objectFit: 'cover', backgroundColor: '#f5f5f5' }}\n />\n <Box sx={{ p: 0.75, fontSize: 11, color: 'text.secondary', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n </Box>\n {onDelete && (\n <Tooltip title=\"Delete from library\">\n <IconButton\n size=\"small\"\n className=\"delete-btn\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete();\n }}\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n opacity: 0,\n backgroundColor: 'rgba(255,255,255,0.85)',\n transition: 'opacity 120ms',\n '&:hover': { backgroundColor: 'rgba(255,255,255,0.95)' },\n }}\n aria-label=\"Delete image\"\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n );\n}\n","import React, { useRef, useState } from 'react';\n\nimport {\n CloudUploadOutlined,\n CollectionsOutlined,\n ErrorOutlineOutlined,\n VerticalAlignBottomOutlined,\n VerticalAlignCenterOutlined,\n VerticalAlignTopOutlined,\n} from '@mui/icons-material';\nimport { Alert, Box, Button, CircularProgress, Stack, ToggleButton, Tooltip } from '@mui/material';\nimport { ImageProps, ImagePropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport TextDimensionInput from './helpers/inputs/text-dimension-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\nimport ImageLibraryDialog from './image-library-dialog';\nimport { useImageCallbacks, type LibraryImage, type UploadedImage } from '../../../image-context';\n\ntype ImageSidebarPanelProps = {\n data: ImageProps;\n setData: (v: ImageProps) => void;\n};\n\nfunction isHttpUrl(value: string | null | undefined): boolean {\n if (!value) return false;\n return /^http:\\/\\//i.test(value.trim());\n}\n\nexport default function ImageSidebarPanel({ data, setData }: ImageSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const { uploadImage, loadImages } = useImageCallbacks();\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [libraryOpen, setLibraryOpen] = useState(false);\n\n const updateData = (d: unknown) => {\n const res = ImagePropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const applyUploadedImage = (uploaded: UploadedImage | LibraryImage) => {\n updateData({\n ...data,\n props: {\n ...data.props,\n url: uploaded.url,\n width: uploaded.width ?? data.props?.width ?? null,\n height: uploaded.height ?? data.props?.height ?? null,\n alt: uploaded.alt ?? data.props?.alt ?? '',\n },\n });\n };\n\n const handleFile = async (file: File) => {\n if (!uploadImage) return;\n setUploading(true);\n setUploadError(null);\n try {\n const uploaded = await uploadImage(file);\n applyUploadedImage(uploaded);\n } catch (e) {\n setUploadError(e instanceof Error ? e.message : 'Upload failed');\n } finally {\n setUploading(false);\n }\n };\n\n const url = data.props?.url ?? '';\n const showHttpWarning = isHttpUrl(url);\n\n return (\n <BaseSidebarPanel title=\"Image block\">\n {(uploadImage || loadImages) && (\n <Stack direction=\"row\" spacing={1}>\n {uploadImage && (\n <>\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n startIcon={uploading ? <CircularProgress size={14} /> : <CloudUploadOutlined fontSize=\"small\" />}\n disabled={uploading}\n onClick={() => fileInputRef.current?.click()}\n >\n {uploading ? t('image.uploading', 'Uploading…') : t('image.upload', 'Upload')}\n </Button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n hidden\n onChange={async (e) => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (file) await handleFile(file);\n }}\n />\n </>\n )}\n {loadImages && (\n <Button\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n startIcon={<CollectionsOutlined fontSize=\"small\" />}\n onClick={() => setLibraryOpen(true)}\n >\n {t('image.library', 'Library')}\n </Button>\n )}\n </Stack>\n )}\n\n {uploadError && (\n <Alert severity=\"error\" onClose={() => setUploadError(null)} sx={{ mt: 1 }}>\n {uploadError}\n </Alert>\n )}\n\n <TextInput\n label={t('image.source-url', 'Source URL')}\n defaultValue={url}\n onChange={(v) => {\n const next = v.trim().length === 0 ? null : v.trim();\n updateData({ ...data, props: { ...data.props, url: next } });\n }}\n />\n {showHttpWarning && (\n <Box sx={{ mt: -1, mb: 1, display: 'flex', alignItems: 'flex-start', gap: 0.75 }}>\n <ErrorOutlineOutlined fontSize=\"small\" sx={{ color: 'warning.main', mt: '2px' }} />\n <Box sx={{ fontSize: 12, color: 'warning.dark' }}>\n {t('image.http-warning', 'Non-HTTPS URL: Gmail and other clients strip mixed content. Use https:// for reliable delivery.')}\n </Box>\n </Box>\n )}\n\n <TextInput\n label={t('image.alt-text', 'Alt text')}\n defaultValue={data.props?.alt ?? ''}\n onChange={(alt) => updateData({ ...data, props: { ...data.props, alt } })}\n />\n <TextInput\n label={t('image.link-href', 'Click through URL')}\n defaultValue={data.props?.linkHref ?? ''}\n onChange={(v) => {\n const linkHref = v.trim().length === 0 ? null : v.trim();\n updateData({ ...data, props: { ...data.props, linkHref } });\n }}\n />\n <Stack direction=\"row\" spacing={2}>\n <TextDimensionInput\n label={t('field.width', 'Width')}\n defaultValue={data.props?.width}\n onChange={(width) => updateData({ ...data, props: { ...data.props, width } })}\n />\n <TextDimensionInput\n label={t('field.height', 'Height')}\n defaultValue={data.props?.height}\n onChange={(height) => updateData({ ...data, props: { ...data.props, height } })}\n />\n </Stack>\n\n <RadioGroupInput\n label={t('style.alignment', 'Alignment')}\n defaultValue={data.props?.contentAlignment ?? 'middle'}\n onChange={(contentAlignment) => updateData({ ...data, props: { ...data.props, contentAlignment } })}\n >\n <ToggleButton value=\"top\">\n <VerticalAlignTopOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"middle\">\n <VerticalAlignCenterOutlined fontSize=\"small\" />\n </ToggleButton>\n <ToggleButton value=\"bottom\">\n <VerticalAlignBottomOutlined fontSize=\"small\" />\n </ToggleButton>\n </RadioGroupInput>\n\n <MultiStylePropertyPanel\n names={['backgroundColor', 'textAlign', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n\n {loadImages && (\n <ImageLibraryDialog\n open={libraryOpen}\n onClose={() => setLibraryOpen(false)}\n onPick={(image) => {\n applyUploadedImage(image);\n setLibraryOpen(false);\n }}\n />\n )}\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { AspectRatioOutlined } from '@mui/icons-material';\nimport { ToggleButton } from '@mui/material';\nimport { SignaturePropsDefaults, SignaturePropsSchema } from '@blocks';\nimport type { SignatureProps } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport ColorInput from './helpers/inputs/color-input';\nimport RadioGroupInput from './helpers/inputs/radio-group-input';\nimport SliderInput from './helpers/inputs/slider-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype SignatureSidebarPanelProps = {\n data: SignatureProps;\n setData: (v: SignatureProps) => void;\n};\nexport default function SignatureSidebarPanel({ data, setData }: SignatureSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n const updateData = (d: unknown) => {\n const res = SignaturePropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n const greeting = data.props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = data.props?.name ?? SignaturePropsDefaults.name;\n const title = data.props?.title ?? SignaturePropsDefaults.title;\n const company = data.props?.company ?? SignaturePropsDefaults.company;\n const address = data.props?.address ?? SignaturePropsDefaults.address;\n const email = data.props?.email ?? SignaturePropsDefaults.email;\n const phone = data.props?.phone ?? SignaturePropsDefaults.phone;\n const website = data.props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = data.props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = data.props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = data.props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = data.props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = data.props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = data.props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = data.props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n return (\n <BaseSidebarPanel title=\"Signature block\">\n <TextInput\n label={t('signature.greeting', 'Greeting')}\n defaultValue={greeting}\n onChange={(greeting) => updateData({ ...data, props: { ...data.props, greeting } })}\n />\n <TextInput\n label={t('signature.name', 'Name')}\n defaultValue={name}\n onChange={(name) => updateData({ ...data, props: { ...data.props, name } })}\n />\n <TextInput\n label={t('signature.title', 'Title')}\n defaultValue={title}\n onChange={(title) => updateData({ ...data, props: { ...data.props, title } })}\n />\n <TextInput\n label={t('signature.company', 'Company')}\n defaultValue={company}\n onChange={(company) => updateData({ ...data, props: { ...data.props, company } })}\n />\n <TextInput\n label={t('signature.address', 'Address')}\n defaultValue={address}\n onChange={(address) => updateData({ ...data, props: { ...data.props, address } })}\n />\n <TextInput\n label={t('signature.email', 'Email')}\n defaultValue={email}\n onChange={(email) => updateData({ ...data, props: { ...data.props, email } })}\n />\n <TextInput\n label={t('signature.phone', 'Phone')}\n defaultValue={phone}\n onChange={(phone) => updateData({ ...data, props: { ...data.props, phone } })}\n />\n <TextInput\n label={t('signature.website', 'Website')}\n defaultValue={website}\n onChange={(website) => updateData({ ...data, props: { ...data.props, website } })}\n />\n <TextInput\n label={t('signature.image-url', 'Image URL')}\n defaultValue={imageUrl}\n onChange={(imageUrl) => updateData({ ...data, props: { ...data.props, imageUrl } })}\n />\n <SliderInput\n label={t('signature.image-size', 'Image size')}\n iconLabel={<AspectRatioOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n min={32}\n max={128}\n defaultValue={imageSize}\n onChange={(imageSize) => updateData({ ...data, props: { ...data.props, imageSize } })}\n />\n <RadioGroupInput\n label={t('signature.image-shape', 'Image shape')}\n defaultValue={imageShape}\n onChange={(imageShape) => updateData({ ...data, props: { ...data.props, imageShape } })}\n >\n <ToggleButton value=\"circle\">{t('signature.shape.circle', 'Circle')}</ToggleButton>\n <ToggleButton value=\"square\">{t('signature.shape.square', 'Square')}</ToggleButton>\n <ToggleButton value=\"rounded\">{t('signature.shape.rounded', 'Rounded')}</ToggleButton>\n </RadioGroupInput>\n <RadioGroupInput\n label={t('signature.layout', 'Layout')}\n defaultValue={layout}\n onChange={(layout) => updateData({ ...data, props: { ...data.props, layout } })}\n >\n <ToggleButton value=\"horizontal\">{t('signature.layout.horizontal', 'Horizontal')}</ToggleButton>\n <ToggleButton value=\"vertical\">{t('signature.layout.vertical', 'Vertical')}</ToggleButton>\n </RadioGroupInput>\n <ColorInput\n label={t('signature.name-color', 'Name color')}\n defaultValue={nameColor}\n onChange={(nameColor) => updateData({ ...data, props: { ...data.props, nameColor } })}\n />\n <ColorInput\n label={t('style.text-color', 'Text color')}\n defaultValue={textColor}\n onChange={(textColor) => updateData({ ...data, props: { ...data.props, textColor } })}\n />\n <ColorInput\n label={t('signature.link-color', 'Link color')}\n defaultValue={linkColor}\n onChange={(linkColor) => updateData({ ...data, props: { ...data.props, linkColor } })}\n />\n <MultiStylePropertyPanel\n names={['backgroundColor', 'fontFamily', 'padding']}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { HeightOutlined } from '@mui/icons-material';\nimport { SpacerProps, SpacerPropsDefaults, SpacerPropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport SliderInput from './helpers/inputs/slider-input';\n\ntype SpacerSidebarPanelProps = {\n data: SpacerProps;\n setData: (v: SpacerProps) => void;\n};\nexport default function SpacerSidebarPanel({ data, setData }: SpacerSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = SpacerPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Spacer block\">\n <SliderInput\n label={t('field.height', 'Height')}\n iconLabel={<HeightOutlined sx={{ color: 'text.secondary' }} />}\n units=\"px\"\n step={4}\n min={4}\n max={128}\n defaultValue={data.props?.height ?? SpacerPropsDefaults.height}\n onChange={(height) => updateData({ ...data, props: { ...data.props, height } })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React, { useState } from 'react';\n\nimport { TextProps, TextPropsSchema } from '@blocks';\nimport { t } from '@i18n';\n\nimport BaseSidebarPanel from './helpers/base-sidebar-panel';\nimport BooleanInput from './helpers/inputs/boolean-input';\nimport TextInput from './helpers/inputs/text-input';\nimport MultiStylePropertyPanel from './helpers/style-inputs/multi-style-property-panel';\n\ntype TextSidebarPanelProps = {\n data: TextProps;\n setData: (v: TextProps) => void;\n};\nexport default function TextSidebarPanel({ data, setData }: TextSidebarPanelProps) {\n const [, setErrors] = useState<Zod.ZodError | null>(null);\n\n const updateData = (d: unknown) => {\n const res = TextPropsSchema.safeParse(d);\n if (res.success) {\n setData(res.data);\n setErrors(null);\n } else {\n setErrors(res.error);\n }\n };\n\n return (\n <BaseSidebarPanel title=\"Text block\">\n <TextInput\n label={t('field.content', 'Content')}\n rows={5}\n defaultValue={data.props?.text ?? ''}\n onChange={(text) => updateData({ ...data, props: { ...data.props, text } })}\n />\n <BooleanInput\n label={t('field.markdown', 'Markdown')}\n defaultValue={data.props?.markdown ?? false}\n onChange={(markdown) => updateData({ ...data, props: { ...data.props, markdown } })}\n />\n\n <MultiStylePropertyPanel\n names={[\n 'color',\n 'backgroundColor',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'padding',\n ]}\n value={data.style}\n onChange={(style) => updateData({ ...data, style })}\n />\n </BaseSidebarPanel>\n );\n}\n","import React from 'react';\n\nimport { Box, Typography } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { setDocument, useDocument, useSelectedBlockId } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nimport AvatarSidebarPanel from './input-panels/avatar-sidebar-panel';\nimport ButtonSidebarPanel from './input-panels/button-sidebar-panel';\nimport ColumnsContainerSidebarPanel from './input-panels/columns-container-sidebar-panel';\nimport ContainerSidebarPanel from './input-panels/container-sidebar-panel';\nimport DividerSidebarPanel from './input-panels/divider-sidebar-panel';\nimport EmailLayoutSidebarPanel from './input-panels/email-layout-sidebar-panel';\nimport HeadingSidebarPanel from './input-panels/heading-sidebar-panel';\nimport HtmlSidebarPanel from './input-panels/html-sidebar-panel';\nimport ImageSidebarPanel from './input-panels/image-sidebar-panel';\nimport SignatureSidebarPanel from './input-panels/signature-sidebar-panel';\nimport SpacerSidebarPanel from './input-panels/spacer-sidebar-panel';\nimport TextSidebarPanel from './input-panels/text-sidebar-panel';\n\nfunction renderMessage(val: string) {\n return (\n <Box sx={{ m: 3, p: 1, border: '1px dashed', borderColor: 'divider' }}>\n <Typography color=\"text.secondary\">{val}</Typography>\n </Box>\n );\n}\n\nexport default function ConfigurationPanel() {\n const document = useDocument();\n const selectedBlockId = useSelectedBlockId();\n\n if (!selectedBlockId) {\n return renderMessage(t('inspect.hint', 'Click on a block to inspect.'));\n }\n const block = document[selectedBlockId];\n if (!block) {\n return renderMessage(t('inspect.not-found', 'Block not found. Click on a block to reset.'));\n }\n\n const setBlock = (conf: TEditorBlock) => setDocument({ [selectedBlockId]: conf });\n const { data, type } = block;\n switch (type) {\n case 'Avatar':\n return <AvatarSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Button':\n return <ButtonSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'ColumnsContainer':\n return (\n <ColumnsContainerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />\n );\n case 'Container':\n return <ContainerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Divider':\n return <DividerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Heading':\n return <HeadingSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Html':\n return <HtmlSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Image':\n return <ImageSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'EmailLayout':\n return <EmailLayoutSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Spacer':\n return <SpacerSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Signature':\n return <SignatureSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n case 'Text':\n return <TextSidebarPanel key={selectedBlockId} data={data} setData={(data) => setBlock({ type, data })} />;\n default:\n return <pre>{JSON.stringify(block, null, ' ')}</pre>;\n }\n}\n","import React from 'react';\n\nimport { setDocument, useDocument } from '@editor/editor-context';\n\nimport EmailLayoutSidebarPanel from './configuration-panel/input-panels/email-layout-sidebar-panel';\n\nexport default function StylesPanel() {\n const block = useDocument().root;\n if (!block) {\n return <p>Block not found</p>;\n }\n\n const { data, type } = block;\n if (type !== 'EmailLayout') {\n throw new Error('Expected \"root\" element to be of type EmailLayout');\n }\n\n return <EmailLayoutSidebarPanel key=\"root\" data={data} setData={(data) => setDocument({ root: { type, data } })} />;\n}\n","import React, { useMemo } from 'react';\nimport { FileDownloadOutlined } from '@mui/icons-material';\nimport { Button } from '@mui/material';\nimport { useDocument } from '@editor/editor-context';\n\nexport default function TemplateDownloadButton() {\n const doc = useDocument();\n const href = useMemo(() => {\n return `data:text/plain,${encodeURIComponent(JSON.stringify(doc, null, ' '))}`;\n }, [doc]);\n\n return (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n startIcon={<FileDownloadOutlined />}\n href={href}\n download=\"emailTemplate.json\"\n fullWidth\n >\n Download JSON\n </Button>\n );\n} ","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Chip,\n InputAdornment,\n Stack,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n CheckOutlined,\n ContentCopyOutlined,\n DeleteOutlined,\n GridOnOutlined,\n SquareOutlined,\n} from '@mui/icons-material';\n\nimport { useEmailEditor } from '../context';\nimport {\n setWorkspaceBackground,\n useDocument,\n usePersistenceEnabled,\n useWorkspaceBackground,\n} from '@editor/editor-context';\nimport { t } from '@i18n';\nimport BaseSidebarPanel from './configuration-panel/input-panels/helpers/base-sidebar-panel';\nimport TemplateDownloadButton from './template-panel-download-button';\n\nexport interface TemplatePanelProps {\n loadTemplates?: () => Promise<any[]>;\n deleteTemplate?: (templateId: string) => void;\n copyTemplate?: (templateName: string, content: any) => void;\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n}\n\nexport default function TemplatePanel({\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n}: TemplatePanelProps) {\n const {\n currentTemplateId,\n currentTemplateName,\n currentTemplateTags,\n setCurrentTemplate,\n setCurrentTemplateTags,\n } = useEmailEditor();\n const document = useDocument();\n const persistenceEnabled = usePersistenceEnabled();\n const workspaceBackground = useWorkspaceBackground();\n\n const handleDelete = () => {\n if (!currentTemplateId || !window.confirm(t('settings.delete-confirm', 'Are you sure you want to delete this template?'))) {\n return;\n }\n\n if (deleteTemplate) {\n // Use the provided deleteTemplate function\n deleteTemplate(currentTemplateId);\n\n // Refresh the page to load a new template\n window.location.hash = '';\n window.location.reload();\n }\n };\n\n const handleCopyToSamples = () => {\n if (!currentTemplateName || !document) return;\n\n if (copyTemplate) {\n // Use the provided copyTemplate function\n copyTemplate(`${currentTemplateName} (Copy)`, document);\n\n // Show confirmation\n window.alert(t('settings.copied', 'Template copied successfully!'));\n }\n };\n\n const workspaceToggle = (\n <BaseSidebarPanel title=\"Editor appearance\">\n <Stack spacing={1}>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary' }}>\n {t('settings.workspace-background', 'Workspace background')}\n </Typography>\n <ToggleButtonGroup\n value={workspaceBackground}\n exclusive\n size=\"small\"\n onChange={(_, v) => v && setWorkspaceBackground(v)}\n >\n <ToggleButton value=\"checkerboard\" sx={{ textTransform: 'none', gap: 0.75 }}>\n <GridOnOutlined fontSize=\"small\" />\n {t('settings.checkerboard', 'Checkerboard')}\n </ToggleButton>\n <ToggleButton value=\"solid\" sx={{ textTransform: 'none', gap: 0.75 }}>\n <SquareOutlined fontSize=\"small\" />\n {t('settings.solid', 'Solid')}\n </ToggleButton>\n </ToggleButtonGroup>\n <Typography variant=\"caption\" sx={{ color: 'text.disabled' }}>\n {t('settings.editor-only-hint', 'Editor-only — never reaches the rendered email.')}\n </Typography>\n </Stack>\n </BaseSidebarPanel>\n );\n\n if (!currentTemplateId) {\n return (\n <>\n <BaseSidebarPanel title=\"Template\">{t('settings.no-template', 'No template selected')}</BaseSidebarPanel>\n {workspaceToggle}\n </>\n );\n }\n\n return (\n <>\n <BaseSidebarPanel title=\"Details\">\n <DetailsEditor\n templateId={currentTemplateId}\n currentName={currentTemplateName ?? ''}\n currentTags={currentTemplateTags}\n canEdit={Boolean(renameTemplate)}\n onSave={async (name, tags) => {\n if (!renameTemplate) return;\n await renameTemplate(currentTemplateId, name, { tags });\n setCurrentTemplate(currentTemplateId, name);\n setCurrentTemplateTags(tags);\n }}\n />\n </BaseSidebarPanel>\n\n <BaseSidebarPanel title=\"Template\">\n <Stack spacing={2}>\n {!persistenceEnabled && (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{\n padding: 1,\n bgcolor: 'rgba(0,0,0,0.04)',\n borderRadius: 1,\n fontSize: '0.8rem',\n }}\n >\n {t('settings.save-disabled', 'Save functionality is disabled. To enable saving, provide the necessary callback functions.')}\n </Typography>\n )}\n {persistenceEnabled && (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n startIcon={<ContentCopyOutlined />}\n onClick={handleCopyToSamples}\n fullWidth\n disabled={!copyTemplate}\n >\n {t('settings.save-as-sample', 'Save as Sample Template')}\n </Button>\n <Button\n variant=\"outlined\"\n color=\"error\"\n startIcon={<DeleteOutlined />}\n onClick={handleDelete}\n fullWidth\n disabled={!deleteTemplate}\n >\n {t('settings.delete', 'Delete Template')}\n </Button>\n </>\n )}\n </Stack>\n </BaseSidebarPanel>\n\n {persistenceEnabled && (\n <BaseSidebarPanel title=\"Export\">\n <Stack spacing={2}>\n <TemplateDownloadButton />\n </Stack>\n </BaseSidebarPanel>\n )}\n {workspaceToggle}\n </>\n );\n}\n\ntype DetailsEditorProps = {\n templateId: string;\n currentName: string;\n currentTags: string[];\n canEdit: boolean;\n onSave: (name: string, tags: string[]) => Promise<void> | void;\n};\n\nfunction DetailsEditor({ templateId, currentName, currentTags, canEdit, onSave }: DetailsEditorProps) {\n const [name, setName] = useState(currentName);\n const [tags, setTags] = useState<string[]>(currentTags);\n const [tagInput, setTagInput] = useState('');\n const [saving, setSaving] = useState(false);\n const [justSaved, setJustSaved] = useState(false);\n\n // Re-sync when the loaded template changes.\n useEffect(() => {\n setName(currentName);\n }, [templateId, currentName]);\n useEffect(() => {\n setTags(currentTags);\n }, [templateId, currentTags.join('\u0001')]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const addTag = () => {\n const trimmed = tagInput.trim();\n if (!trimmed) return;\n if (tags.some((t) => t.toLowerCase() === trimmed.toLowerCase())) {\n setTagInput('');\n return;\n }\n setTags([...tags, trimmed]);\n setTagInput('');\n };\n\n const removeTag = (tag: string) => setTags(tags.filter((t) => t !== tag));\n\n const dirty =\n name !== currentName ||\n tags.length !== currentTags.length ||\n tags.some((t, i) => t !== currentTags[i]);\n\n const handleSave = async () => {\n if (!canEdit || !dirty || !name.trim()) return;\n setSaving(true);\n try {\n await onSave(name.trim(), tags);\n setJustSaved(true);\n window.setTimeout(() => setJustSaved(false), 1600);\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <Stack spacing={1.5}>\n <TextField\n size=\"small\"\n label={t('rename.name-label', 'Name')}\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={!canEdit || saving}\n fullWidth\n />\n <Box>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mb: 0.5 }}>\n {t('rename.tags', 'Tags')}\n </Typography>\n {tags.length > 0 ? (\n <Stack direction=\"row\" spacing={0.5} sx={{ flexWrap: 'wrap', gap: 0.5, mb: 1 }}>\n {tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n onDelete={canEdit && !saving ? () => removeTag(tag) : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"caption\" sx={{ color: 'text.disabled', display: 'block', mb: 1 }}>\n {t('rename.no-tags', 'No tags yet.')}\n </Typography>\n )}\n <TextField\n size=\"small\"\n fullWidth\n placeholder={t('rename.add-tag', 'Add a tag')}\n value={tagInput}\n onChange={(e) => setTagInput(e.target.value)}\n disabled={!canEdit || saving}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag();\n } else if (e.key === 'Backspace' && !tagInput && tags.length > 0) {\n e.preventDefault();\n removeTag(tags[tags.length - 1]);\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <Button\n size=\"small\"\n onClick={addTag}\n disabled={!canEdit || saving || !tagInput.trim()}\n startIcon={<AddOutlined fontSize=\"small\" />}\n sx={{ textTransform: 'none' }}\n >\n {t('common.add', 'Add')}\n </Button>\n </InputAdornment>\n ),\n }}\n />\n </Box>\n <Tooltip title={canEdit ? '' : t('settings.no-rename-cb', 'Wire a renameTemplate callback to enable editing from here')} placement=\"top\">\n <span>\n <Button\n variant=\"contained\"\n size=\"small\"\n fullWidth\n onClick={handleSave}\n disabled={!canEdit || saving || !dirty || !name.trim()}\n startIcon={justSaved ? <CheckOutlined fontSize=\"small\" /> : null}\n >\n {saving ? t('common.saving', 'Saving…') : justSaved ? t('settings.saved', 'Saved') : t('settings.save-details', 'Save details')}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n );\n}\n","import { TEditorConfiguration } from '@editor/core';\n\nexport const VARIABLE_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\nexport const MAX_VARIABLE_NAME_LENGTH = 64;\nexport const RESERVED_VARIABLE_NAMES = new Set(['this', 'true', 'false', 'null', 'undefined']);\nconst HANDLEBARS_KEYWORDS = new Set(['if', 'each', 'unless', 'else', 'with']);\n\nexport type TemplateVariable = {\n name: string;\n description?: string | null;\n sampleValue?: string | null;\n};\n\nexport function validateVariableName(\n name: string,\n siblings: TemplateVariable[],\n indexBeingEdited?: number\n): string | null {\n const trimmed = name.trim();\n if (!trimmed) return 'Name is required';\n if (trimmed.length > MAX_VARIABLE_NAME_LENGTH) return `Max ${MAX_VARIABLE_NAME_LENGTH} characters`;\n if (!VARIABLE_NAME_RE.test(trimmed)) return 'Use letters, digits, underscore; start with a letter or underscore';\n if (RESERVED_VARIABLE_NAMES.has(trimmed)) return 'Reserved word; pick another name';\n const duplicate = siblings.some((v, i) => i !== indexBeingEdited && v.name === trimmed);\n if (duplicate) return 'Already declared';\n return null;\n}\n\n// Matches Handlebars expressions: simple `{{foo}}`, subpath `{{foo.bar}}`, and\n// block helpers `{{#if foo}}`/`{{#each foo}}`/`{{#unless foo}}` (and their\n// subpaths). Captures the root identifier in group 1.\nconst TOKEN_ROOT_RE = /\\{\\{\\s*(?:#(?:if|each|unless|with)\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.[\\w.]+)?\\s*\\}\\}/g;\n\nexport function extractTokenRoots(text: string | null | undefined): string[] {\n if (!text) return [];\n const roots = new Set<string>();\n for (const m of text.matchAll(TOKEN_ROOT_RE)) {\n const name = m[1];\n if (RESERVED_VARIABLE_NAMES.has(name) || HANDLEBARS_KEYWORDS.has(name)) continue;\n roots.add(name);\n }\n return [...roots];\n}\n\nfunction forEachTextFieldInDocument(\n doc: TEditorConfiguration,\n visit: (value: string) => void\n) {\n const root = doc.root;\n if (root && root.type === 'EmailLayout' && typeof (root.data as any)?.subject === 'string') {\n visit((root.data as any).subject);\n }\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const props = (block as any).data?.props;\n if (!props) continue;\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n visit(props.text);\n } else if (type === 'Html' && typeof props.contents === 'string') {\n visit(props.contents);\n }\n }\n}\n\nexport function collectTokenUsage(doc: TEditorConfiguration): Map<string, number> {\n const usage = new Map<string, number>();\n forEachTextFieldInDocument(doc, (value) => {\n for (const root of extractTokenRoots(value)) {\n usage.set(root, (usage.get(root) ?? 0) + 1);\n }\n });\n return usage;\n}\n\nfunction escapeRegex(name: string) {\n return name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction buildRenameReplacers(oldName: string, newName: string) {\n const esc = escapeRegex(oldName);\n const simple = new RegExp(`\\\\{\\\\{\\\\s*${esc}(\\\\.[\\\\w.]+)?\\\\s*\\\\}\\\\}`, 'g');\n const helper = new RegExp(`(\\\\{\\\\{\\\\s*#(?:if|each|unless|with)\\\\s+)${esc}(\\\\.[\\\\w.]+)?(\\\\s*\\\\}\\\\})`, 'g');\n return (text: string) => text.replace(helper, `$1${newName}$2$3`).replace(simple, `{{${newName}$1}}`);\n}\n\n/**\n * Returns a partial-document patch (object suitable for `setDocument`) that\n * rewrites `{{oldName}}` and `{{oldName.*}}` to `{{newName}}`/`{{newName.*}}`\n * across text/heading/button/html blocks and the EmailLayout subject. Blocks\n * with no change are not included in the patch.\n */\nexport function buildRenamePatch(\n doc: TEditorConfiguration,\n oldName: string,\n newName: string\n): Partial<TEditorConfiguration> {\n if (oldName === newName) return {};\n const rewrite = buildRenameReplacers(oldName, newName);\n const patch: Partial<TEditorConfiguration> = {};\n\n const root = doc.root;\n if (root && root.type === 'EmailLayout') {\n const layoutData = root.data as any;\n const oldSubject: string = layoutData.subject ?? '';\n const newSubject = rewrite(oldSubject);\n if (newSubject !== oldSubject) {\n patch.root = { ...root, data: { ...layoutData, subject: newSubject } } as any;\n }\n }\n\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const data = (block as any).data;\n const props = data?.props;\n if (!props) continue;\n\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n const nextText = rewrite(props.text);\n if (nextText !== props.text) {\n (patch as any)[id] = { ...block, data: { ...data, props: { ...props, text: nextText } } };\n }\n } else if (type === 'Html' && typeof props.contents === 'string') {\n const nextContents = rewrite(props.contents);\n if (nextContents !== props.contents) {\n (patch as any)[id] = { ...block, data: { ...data, props: { ...props, contents: nextContents } } };\n }\n }\n }\n\n return patch;\n}\n\n/**\n * Substitutes declared variables' sample values into a text string. Subpath\n * access (e.g. `{{user.name}}`) resolves to the root's sample value — matches\n * the top-level declaration model. Block helpers (`{{#if}}`, `{{#each}}`,\n * `{{#unless}}`, `{{#with}}`) and their closers are stripped so their content\n * renders inline; the block body is not interpreted.\n */\nexport function substituteSampleValues(text: string, samples: Map<string, string>): string {\n if (!text) return text;\n let out = text;\n out = out.replace(\n /\\{\\{\\s*#(?:if|each|unless|with)\\s+[^}]*\\}\\}/g,\n ''\n );\n out = out.replace(/\\{\\{\\s*\\/(?:if|each|unless|with)\\s*\\}\\}/g, '');\n out = out.replace(/\\{\\{\\s*else\\s*\\}\\}/g, '');\n out = out.replace(TOKEN_ROOT_RE, (match, root: string) => {\n if (!samples.has(root)) return match;\n return samples.get(root) ?? '';\n });\n return out;\n}\n\nexport function buildSampleValueMap(variables: TemplateVariable[] | null | undefined): Map<string, string> {\n const m = new Map<string, string>();\n if (!variables) return m;\n for (const v of variables) {\n if (v.name && typeof v.sampleValue === 'string' && v.sampleValue.length > 0) {\n m.set(v.name, v.sampleValue);\n }\n }\n return m;\n}\n\n/**\n * Returns a shallow-cloned document with sample values substituted into\n * text/heading/button/html blocks and the EmailLayout subject. Used as a\n * preview transform — does not mutate the source document.\n */\nexport function applySampleValuesToDocument(\n doc: TEditorConfiguration,\n samples: Map<string, string>\n): TEditorConfiguration {\n if (samples.size === 0) return doc;\n const next: TEditorConfiguration = { ...doc };\n\n const root = doc.root;\n if (root && root.type === 'EmailLayout') {\n const layoutData = root.data as any;\n if (typeof layoutData.subject === 'string') {\n const newSubject = substituteSampleValues(layoutData.subject, samples);\n if (newSubject !== layoutData.subject) {\n next.root = { ...root, data: { ...layoutData, subject: newSubject } } as any;\n }\n }\n }\n\n for (const [id, block] of Object.entries(doc)) {\n if (id === 'root' || !block || typeof block !== 'object') continue;\n const type = (block as any).type;\n const data = (block as any).data;\n const props = data?.props;\n if (!props) continue;\n\n if ((type === 'Text' || type === 'Heading' || type === 'Button') && typeof props.text === 'string') {\n const newText = substituteSampleValues(props.text, samples);\n if (newText !== props.text) {\n (next as any)[id] = { ...block, data: { ...data, props: { ...props, text: newText } } };\n }\n } else if (type === 'Html' && typeof props.contents === 'string') {\n const newContents = substituteSampleValues(props.contents, samples);\n if (newContents !== props.contents) {\n (next as any)[id] = { ...block, data: { ...data, props: { ...props, contents: newContents } } };\n }\n }\n }\n\n return next;\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n AlertTitle,\n Box,\n Chip,\n IconButton,\n Stack,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n ContentCopyOutlined,\n DataObjectOutlined,\n DeleteOutline,\n InputOutlined,\n} from '@mui/icons-material';\nimport {\n getLastFocusedEditable,\n setDocument,\n useDocument,\n useLastFocusedEditable,\n} from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\nimport {\n buildRenamePatch,\n collectTokenUsage,\n TemplateVariable,\n validateVariableName,\n} from '../variables/variable-utils';\n\ntype DocVariable = {\n name: string;\n description?: string | null;\n sampleValue?: string | null;\n};\n\nfunction toPersistShape(v: TemplateVariable): DocVariable {\n return {\n name: v.name,\n description: v.description ? v.description : undefined,\n sampleValue: v.sampleValue ? v.sampleValue : undefined,\n };\n}\n\nexport default function VariablesPanel() {\n const document = useDocument();\n const lastFocused = useLastFocusedEditable();\n const root = document.root;\n\n if (!root || root.type !== 'EmailLayout') {\n return (\n <Box p={2}>\n <Alert severity=\"info\">{t('variables.open-template', 'Open a template to manage variables.')}</Alert>\n </Box>\n );\n }\n\n const data = root.data as EmailLayoutProps;\n const variables: TemplateVariable[] = (data.variables ?? []).map((v) => ({\n name: v.name,\n description: v.description ?? '',\n sampleValue: (v as DocVariable).sampleValue ?? '',\n }));\n\n const usage = useMemo(() => collectTokenUsage(document), [document]);\n const declaredNames = useMemo(() => new Set(variables.map((v) => v.name)), [variables]);\n const undeclared = useMemo(\n () => [...usage.keys()].filter((n) => n && !declaredNames.has(n)),\n [usage, declaredNames]\n );\n\n const writeVariables = (next: TemplateVariable[], extraPatch: Partial<TEditorConfiguration> = {}) => {\n const baseRoot: any = (extraPatch as any).root ?? root;\n const newRoot = {\n ...baseRoot,\n data: {\n ...baseRoot.data,\n variables: next.map(toPersistShape),\n },\n };\n setDocument({ ...(extraPatch as any), root: newRoot } as any);\n };\n\n const updateAt = (index: number, patch: Partial<TemplateVariable>) => {\n const next = variables.map((v, i) => (i === index ? { ...v, ...patch } : v));\n writeVariables(next);\n };\n\n const add = () => {\n writeVariables([...variables, { name: '', description: '', sampleValue: '' }]);\n };\n\n const addFromToken = (name: string) => {\n writeVariables([...variables, { name, description: '', sampleValue: '' }]);\n };\n\n const removeAt = (index: number) => {\n const v = variables[index];\n const usageCount = v.name ? usage.get(v.name) ?? 0 : 0;\n if (usageCount > 0) {\n const ok = window.confirm(\n t('variables.confirm-delete', 'Variable is still referenced in the body. Delete anyway?') +\n ` (${v.name}, ${usageCount})`\n );\n if (!ok) return;\n }\n writeVariables(variables.filter((_, i) => i !== index));\n };\n\n const commitRename = (index: number, newName: string) => {\n const oldName = variables[index].name;\n const trimmed = newName.trim();\n if (trimmed === oldName) return;\n const error = validateVariableName(trimmed, variables, index);\n if (error) return;\n const patch = oldName ? buildRenamePatch(document, oldName, trimmed) : {};\n const next = variables.map((v, i) => (i === index ? { ...v, name: trimmed } : v));\n writeVariables(next, patch);\n };\n\n const canInsert = Boolean(\n lastFocused &&\n (lastFocused.field === 'subject' ||\n (lastFocused.blockId && document[lastFocused.blockId]))\n );\n\n const insertIntoFocused = (name: string) => {\n const focused = getLastFocusedEditable();\n if (!focused) return;\n const token = `{{${name}}}`;\n\n if (focused.field === 'subject') {\n const layoutData = root.data as any;\n const current: string = layoutData.subject ?? '';\n const next =\n current.slice(0, focused.selectionStart) + token + current.slice(focused.selectionEnd);\n setDocument({\n root: { ...root, data: { ...layoutData, subject: next } },\n });\n return;\n }\n\n const block: any = document[focused.blockId];\n if (!block) return;\n const blockData = block.data;\n const props = blockData?.props ?? {};\n const field = focused.field; // 'text' | 'contents'\n const current: string = props[field] ?? '';\n const next =\n current.slice(0, focused.selectionStart) + token + current.slice(focused.selectionEnd);\n setDocument({\n [focused.blockId]: {\n ...block,\n data: { ...blockData, props: { ...props, [field]: next } },\n },\n } as any);\n };\n\n const copy = async (name: string) => {\n try {\n await navigator.clipboard.writeText(`{{${name}}}`);\n } catch {\n // Clipboard may be blocked (e.g., insecure context); silently ignore.\n }\n };\n\n return (\n <Box p={2}>\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" sx={{ mb: 1 }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 600 }}>\n {t('variables.title', 'Variables')}\n </Typography>\n <Tooltip title={t('variables.add', 'Add variable')}>\n <IconButton size=\"small\" onClick={add} aria-label={t('variables.add', 'Add variable')}>\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mb: 2 }}>\n {t(\n 'variables.intro',\n 'Declared variables travel with the template. Reference them in subject and body as {{name}}. In Preview mode, tokens render with the sample values below.'\n )}\n </Typography>\n\n {undeclared.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n <AlertTitle sx={{ fontSize: 13 }}>{t('variables.undeclared', 'Undeclared in body')}</AlertTitle>\n <Stack direction=\"row\" spacing={0.5} useFlexGap flexWrap=\"wrap\">\n {undeclared.map((name) => (\n <Chip\n key={name}\n size=\"small\"\n label={name}\n onClick={() => addFromToken(name)}\n onDelete={() => addFromToken(name)}\n deleteIcon={<AddOutlined />}\n sx={{ fontFamily: 'monospace' }}\n />\n ))}\n </Stack>\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mt: 0.5 }}>\n {t('variables.click-to-declare', 'Click a token to declare it.')}\n </Typography>\n </Alert>\n )}\n\n {variables.length === 0 ? (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary' }}>\n {t('variables.none', 'No variables declared. Click + to add one.')}\n </Typography>\n ) : (\n <Stack spacing={2}>\n {variables.map((v, i) => (\n <VariableRow\n key={i}\n index={i}\n variable={v}\n siblings={variables}\n usageCount={v.name ? usage.get(v.name) ?? 0 : 0}\n canInsert={canInsert}\n onCommitRename={(name) => commitRename(i, name)}\n onChangeDescription={(description) => updateAt(i, { description })}\n onChangeSampleValue={(sampleValue) => updateAt(i, { sampleValue })}\n onRemove={() => removeAt(i)}\n onInsert={() => v.name && insertIntoFocused(v.name)}\n onCopy={() => v.name && copy(v.name)}\n />\n ))}\n </Stack>\n )}\n </Box>\n );\n}\n\ntype VariableRowProps = {\n index: number;\n variable: TemplateVariable;\n siblings: TemplateVariable[];\n usageCount: number;\n canInsert: boolean;\n onCommitRename: (name: string) => void;\n onChangeDescription: (value: string) => void;\n onChangeSampleValue: (value: string) => void;\n onRemove: () => void;\n onInsert: () => void;\n onCopy: () => void;\n};\n\nfunction VariableRow({\n index,\n variable,\n siblings,\n usageCount,\n canInsert,\n onCommitRename,\n onChangeDescription,\n onChangeSampleValue,\n onRemove,\n onInsert,\n onCopy,\n}: VariableRowProps) {\n const [draftName, setDraftName] = useState(variable.name);\n const [isEditing, setIsEditing] = useState(false);\n\n // Re-sync from props when the stored name changes from the outside (e.g., an\n // undeclared-token add, or a sibling edit causing re-render). Avoid\n // overwriting an in-progress edit.\n useEffect(() => {\n if (!isEditing) setDraftName(variable.name);\n }, [variable.name, isEditing]);\n\n const nameError = validateVariableName(draftName, siblings, index);\n const unused = Boolean(variable.name) && usageCount === 0;\n const hasName = Boolean(variable.name);\n\n const commit = () => {\n setIsEditing(false);\n if (nameError) {\n setDraftName(variable.name);\n return;\n }\n if (draftName.trim() !== variable.name) {\n onCommitRename(draftName.trim());\n }\n };\n\n return (\n <Stack spacing={0.75} sx={{ pb: 1, borderBottom: 1, borderColor: 'divider' }}>\n <Stack direction=\"row\" spacing={1} alignItems=\"flex-start\">\n <TextField\n label={t('rename.name-label', 'Name')}\n size=\"small\"\n fullWidth\n value={draftName}\n onChange={(e) => {\n setDraftName(e.target.value);\n setIsEditing(true);\n }}\n onFocus={() => setIsEditing(true)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n setDraftName(variable.name);\n setIsEditing(false);\n (e.target as HTMLInputElement).blur();\n }\n }}\n error={Boolean(nameError)}\n helperText={nameError ?? ' '}\n />\n <Stack direction=\"row\" spacing={0.25} sx={{ mt: 0.5 }}>\n <Tooltip title={t('variables.copy-token', 'Copy {{name}} token')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={onCopy}\n disabled={!hasName}\n aria-label={t('variables.copy-token', 'Copy {{name}} token')}\n >\n <ContentCopyOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={canInsert ? t('variables.insert-at-cursor', 'Insert at cursor') : t('variables.focus-first', 'Focus a text field first')}>\n <span>\n <IconButton\n size=\"small\"\n onClick={onInsert}\n disabled={!hasName || !canInsert}\n aria-label={t('variables.insert-at-cursor', 'Insert at cursor')}\n >\n <InputOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={t('variables.remove', 'Remove')}>\n <IconButton\n size=\"small\"\n onClick={onRemove}\n aria-label={t('variables.remove', 'Remove')}\n >\n <DeleteOutline fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n </Stack>\n <TextField\n label={t('variables.description', 'Description')}\n size=\"small\"\n fullWidth\n value={variable.description ?? ''}\n onChange={(e) => onChangeDescription(e.target.value)}\n placeholder={t('variables.optional', 'Optional')}\n />\n <TextField\n label={t('variables.sample-value', 'Sample value')}\n size=\"small\"\n fullWidth\n value={variable.sampleValue ?? ''}\n onChange={(e) => onChangeSampleValue(e.target.value)}\n placeholder={t('variables.sample-hint', 'Shown in Preview mode')}\n InputProps={{\n startAdornment: (\n <DataObjectOutlined\n fontSize=\"small\"\n sx={{ color: 'text.secondary', mr: 0.75 }}\n />\n ),\n }}\n />\n <Stack direction=\"row\" spacing={0.5} sx={{ pt: 0.25 }}>\n {hasName &&\n (unused ? (\n <Chip size=\"small\" color=\"warning\" variant=\"outlined\" label={t('variables.unused', 'Unused in body')} />\n ) : (\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${usageCount} ${usageCount === 1 ? t('variables.ref-one', 'ref') : t('variables.ref-many', 'refs')}`}\n />\n ))}\n </Stack>\n </Stack>\n );\n}\n","import React from 'react';\n\nimport { Box, Drawer, Tab, Tabs } from '@mui/material';\n\nimport {\n setSidebarTab,\n useInspectorDrawerOpen,\n useSelectedSidebarTab\n} from '@editor/editor-context';\nimport { t } from '@i18n';\n\nimport ConfigurationPanel from './configuration-panel';\nimport StylesPanel from './styles-panel';\nimport TemplatePanel from './template-panel';\nimport VariablesPanel from './variables-panel';\n\nexport const INSPECTOR_DRAWER_WIDTH = 320;\n\nexport interface InspectorDrawerProps {\n /**\n * Duration for enter transition in milliseconds.\n * @default 225\n */\n enterDuration?: number;\n \n /**\n * Duration for exit transition in milliseconds.\n * @default 225\n */\n exitDuration?: number;\n\n /**\n * Callback to delete a template by ID\n */\n deleteTemplate?: (templateId: string) => void;\n \n /**\n * Callback to copy a template with a new name\n */\n copyTemplate?: (templateName: string, content: any) => void;\n\n /**\n * Callback to update a template's details (name + tags). Threaded through\n * to the Settings tab so editors can rename / retag without opening the\n * row menu.\n */\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n\n /**\n * Indicates whether the template is saving enabled\n */\n savingEnabled?: boolean;\n}\n\nexport default function InspectorDrawer({\n enterDuration = 225,\n exitDuration = 225,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n savingEnabled = true\n}: InspectorDrawerProps = {}) {\n const selectedSidebarTab = useSelectedSidebarTab();\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n\n const renderCurrentSidebarPanel = () => {\n switch (selectedSidebarTab) {\n case 'block-configuration':\n return <ConfigurationPanel />;\n case 'styles':\n return <StylesPanel />;\n case 'variables':\n return <VariablesPanel />;\n case 'template-settings':\n return <TemplatePanel\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n />;\n }\n };\n\n return (\n <Drawer\n variant=\"persistent\"\n anchor=\"right\"\n open={inspectorDrawerOpen}\n PaperProps={{\n style: { position: 'absolute' }\n }}\n ModalProps={{\n container: document.getElementById('drawer-container'),\n style: { position: 'absolute' },\n keepMounted: true\n }}\n transitionDuration={{\n enter: enterDuration,\n exit: exitDuration\n }}\n sx={{\n width: inspectorDrawerOpen ? INSPECTOR_DRAWER_WIDTH : 0,\n }}\n >\n <Box sx={{ width: INSPECTOR_DRAWER_WIDTH, height: 49, borderBottom: 1, borderColor: 'divider' }}>\n <Box px={1}>\n <Tabs\n value={selectedSidebarTab}\n onChange={(_, v) => setSidebarTab(v)}\n variant=\"fullWidth\"\n sx={{ '& .MuiTab-root': { minWidth: 0, px: 1, fontSize: 13 } }}\n >\n <Tab value=\"styles\" label={t('inspector.tab.styles', 'Styles')} />\n <Tab value=\"block-configuration\" label={t('inspector.tab.inspect', 'Inspect')} />\n <Tab value=\"variables\" label={t('inspector.tab.variables', 'Variables')} />\n <Tab value=\"template-settings\" label={t('inspector.tab.settings', 'Settings')} />\n </Tabs>\n </Box>\n </Box>\n <Box sx={{ width: INSPECTOR_DRAWER_WIDTH, height: 'calc(100% - 49px)', overflow: 'auto' }}>\n {renderCurrentSidebarPanel()}\n </Box>\n </Drawer>\n );\n}\n","import React, { createContext, useContext, useState } from 'react';\nimport { Snackbar } from '@mui/material';\n\n// Define the context\ninterface SnackbarContextType {\n showMessage: (message: string, duration?: number) => void;\n}\n\nconst SnackbarContext = createContext<SnackbarContextType | null>(null);\n\n// Custom hook to use the snackbar\nexport function useSnackbar() {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error('useSnackbar must be used within a SnackbarProvider');\n }\n return context;\n}\n\n// Snackbar Provider component\nexport function SnackbarProvider({ children }: { children: React.ReactNode }) {\n const [message, setMessage] = useState<string | null>(null);\n const [duration, setDuration] = useState(3000);\n\n const showMessage = (text: string, customDuration = 3000) => {\n setMessage(text);\n setDuration(customDuration);\n };\n\n const handleClose = () => {\n setMessage(null);\n };\n\n return (\n <SnackbarContext.Provider value={{ showMessage }}>\n {children}\n <Snackbar\n anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n open={message !== null}\n onClose={handleClose}\n message={message}\n autoHideDuration={duration}\n sx={{\n zIndex: 10000, // Very high z-index\n position: 'fixed', // Make sure it's fixed positioned\n }}\n />\n </SnackbarContext.Provider>\n );\n} ","import React, { useState } from 'react';\nimport {\n Box,\n Chip,\n Divider,\n IconButton,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n ContentCopyOutlined,\n DeleteOutlined,\n DriveFileRenameOutlineOutlined,\n FileDownloadOutlined,\n FileUploadOutlined,\n LibraryAddOutlined,\n MoreVertOutlined,\n} from '@mui/icons-material';\nimport { resetDocument } from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport { t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { TemplateListItem } from '../index';\n\nexport interface TemplateRowProps {\n template: TemplateListItem;\n isCurrent: boolean;\n templateLoader: () => Promise<TEditorConfiguration | null>;\n onDuplicate?: () => void;\n onRename?: () => void;\n onDelete?: () => void;\n onPromote?: () => void;\n onDemote?: () => void;\n onDuplicateAsTemplate?: () => void;\n}\n\nfunction relativeTime(iso?: string): string | null {\n if (!iso) return null;\n const date = new Date(iso).getTime();\n if (Number.isNaN(date)) return null;\n const diffMs = Date.now() - date;\n const diffSec = Math.round(diffMs / 1000);\n if (diffSec < 60) return t('time.just-now', 'just now');\n const diffMin = Math.round(diffSec / 60);\n if (diffMin < 60) return `${diffMin}${t('time.minutes-short', 'm ago')}`;\n const diffHr = Math.round(diffMin / 60);\n if (diffHr < 24) return `${diffHr}${t('time.hours-short', 'h ago')}`;\n const diffDay = Math.round(diffHr / 24);\n if (diffDay < 30) return `${diffDay}${t('time.days-short', 'd ago')}`;\n const diffMo = Math.round(diffDay / 30);\n if (diffMo < 12) return `${diffMo}${t('time.months-short', 'mo ago')}`;\n const diffYr = Math.round(diffMo / 12);\n return `${diffYr}${t('time.years-short', 'y ago')}`;\n}\n\nexport default function TemplateRow({\n template,\n isCurrent,\n templateLoader,\n onDuplicate,\n onRename,\n onDelete,\n onPromote,\n onDemote,\n onDuplicateAsTemplate,\n}: TemplateRowProps) {\n const { setCurrentTemplate } = useEmailEditor();\n const [hover, setHover] = useState(false);\n const [menuAnchor, setMenuAnchor] = useState<HTMLElement | null>(null);\n const closeMenu = () => setMenuAnchor(null);\n const openMenu = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n setMenuAnchor(e.currentTarget);\n };\n const runAction = (fn?: () => void) => () => {\n closeMenu();\n fn?.();\n };\n\n const handleClick = async () => {\n try {\n const content = await templateLoader();\n if (content) {\n resetDocument(content);\n setCurrentTemplate(template.id, template.slug, template.kind, template.tags ?? []);\n }\n } catch (error) {\n console.error('Error loading template:', error);\n }\n };\n\n const stop = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n const updated = relativeTime(template.updatedAt);\n const hasActions = Boolean(\n onDuplicate || onRename || onDelete || onPromote || onDemote || onDuplicateAsTemplate,\n );\n\n return (\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n sx={{\n position: 'relative',\n width: '100%',\n px: 1.5,\n py: 1,\n borderRadius: 1,\n cursor: 'pointer',\n bgcolor: isCurrent ? 'rgba(0, 0, 0, 0.08)' : 'transparent',\n '&:hover': { bgcolor: 'rgba(0, 0, 0, 0.04)' },\n '&:focus-visible': { outline: '2px solid', outlineColor: 'primary.main' },\n }}\n >\n <Stack direction=\"row\" alignItems=\"flex-start\" spacing={1}>\n <Box sx={{ flexGrow: 1, minWidth: 0, pr: hasActions ? 3 : 0 }}>\n <Stack direction=\"row\" alignItems=\"baseline\" spacing={1} sx={{ minWidth: 0 }}>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 600,\n flexGrow: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={template.slug}\n >\n {template.slug}\n </Typography>\n {updated && !hasActions && (\n <Typography\n variant=\"caption\"\n sx={{ color: 'text.secondary', flexShrink: 0, fontSize: '0.7rem' }}\n >\n {updated}\n </Typography>\n )}\n </Stack>\n {template.description && (\n <Typography\n variant=\"caption\"\n sx={{\n color: 'text.secondary',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n lineHeight: 1.3,\n }}\n >\n {template.description}\n </Typography>\n )}\n {template.tags && template.tags.length > 0 && (\n <Stack direction=\"row\" spacing={0.5} sx={{ mt: 0.5, flexWrap: 'wrap', gap: 0.5 }}>\n {template.tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n sx={{ height: 18, fontSize: '0.65rem', '& .MuiChip-label': { px: 0.75 } }}\n />\n ))}\n </Stack>\n )}\n </Box>\n </Stack>\n\n {hasActions && (\n <>\n <Tooltip title={t('row.more', 'More')}>\n <IconButton\n size=\"small\"\n onClick={openMenu}\n aria-label={t('row.actions', 'Row actions')}\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(menuAnchor) || undefined}\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n opacity: hover || isCurrent || Boolean(menuAnchor) ? 1 : 0.45,\n transition: 'opacity 120ms',\n }}\n >\n <MoreVertOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={menuAnchor}\n open={Boolean(menuAnchor)}\n onClose={closeMenu}\n onClick={stop}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n slotProps={{ paper: { sx: { minWidth: 200 } } }}\n >\n {onRename && (\n <MenuItem onClick={runAction(onRename)}>\n <ListItemIcon>\n <DriveFileRenameOutlineOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.edit-details', 'Edit name & tags…')}</ListItemText>\n </MenuItem>\n )}\n {onDuplicate && (\n <MenuItem onClick={runAction(onDuplicate)}>\n <ListItemIcon>\n <ContentCopyOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.duplicate', 'Duplicate')}</ListItemText>\n </MenuItem>\n )}\n {onDuplicateAsTemplate && (\n <MenuItem onClick={runAction(onDuplicateAsTemplate)}>\n <ListItemIcon>\n <LibraryAddOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.duplicate-as-template', 'Duplicate as template')}</ListItemText>\n </MenuItem>\n )}\n {onPromote && (\n <MenuItem onClick={runAction(onPromote)}>\n <ListItemIcon>\n <FileUploadOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.promote', 'Promote to sample')}</ListItemText>\n </MenuItem>\n )}\n {onDemote && (\n <MenuItem onClick={runAction(onDemote)}>\n <ListItemIcon>\n <FileDownloadOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('row.demote', 'Demote to template')}</ListItemText>\n </MenuItem>\n )}\n {onDelete && [\n <Divider key=\"divider\" />,\n <MenuItem key=\"delete\" onClick={runAction(onDelete)} sx={{ color: 'error.main' }}>\n <ListItemIcon sx={{ color: 'error.main' }}>\n <DeleteOutlined fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{t('tune.delete', 'Delete')}</ListItemText>\n </MenuItem>,\n ]}\n </Menu>\n </>\n )}\n </Box>\n );\n}\n","import { TEditorConfiguration } from '@editor/core';\n\n/**\n * A block's position in the document tree is described by a pointer to its\n * parent plus, when the parent is a `ColumnsContainer`, which column it lives\n * in. `EmailLayout` / `Container` children are a single flat array; columns\n * split it per index.\n */\nexport type ParentRef =\n | { kind: 'EmailLayout'; parentId: 'root' }\n | { kind: 'Container'; parentId: string }\n | { kind: 'ColumnsContainer'; parentId: string; columnIndex: number };\n\nexport function sameParent(a: ParentRef, b: ParentRef): boolean {\n if (a.kind !== b.kind || a.parentId !== b.parentId) return false;\n if (a.kind === 'ColumnsContainer' && b.kind === 'ColumnsContainer') {\n return a.columnIndex === b.columnIndex;\n }\n return true;\n}\n\nfunction getChildrenIds(doc: TEditorConfiguration, ref: ParentRef): string[] {\n const block: any = doc[ref.parentId];\n if (!block) return [];\n if (ref.kind === 'EmailLayout') return (block.data?.childrenIds ?? []) as string[];\n if (ref.kind === 'Container') return (block.data?.props?.childrenIds ?? []) as string[];\n const col = block.data?.props?.columns?.[ref.columnIndex];\n return (col?.childrenIds ?? []) as string[];\n}\n\nfunction patchChildrenIds(block: any, ref: ParentRef, newIds: string[]): any {\n if (ref.kind === 'EmailLayout') {\n return { ...block, data: { ...block.data, childrenIds: newIds } };\n }\n if (ref.kind === 'Container') {\n return {\n ...block,\n data: { ...block.data, props: { ...block.data.props, childrenIds: newIds } },\n };\n }\n const columns = (block.data?.props?.columns ?? []).map((c: any, i: number) =>\n i === ref.columnIndex ? { ...c, childrenIds: newIds } : c\n );\n return { ...block, data: { ...block.data, props: { ...block.data.props, columns } } };\n}\n\n/**\n * True if `candidateId` lives anywhere inside the subtree rooted at\n * `ancestorId` (including `ancestorId` itself). Used to reject drops that\n * would move a container into one of its own descendants.\n */\nexport function isDescendant(\n doc: TEditorConfiguration,\n ancestorId: string,\n candidateId: string\n): boolean {\n if (ancestorId === candidateId) return true;\n const block: any = doc[ancestorId];\n if (!block) return false;\n const direct: string[] = [];\n if (block.type === 'EmailLayout') direct.push(...(block.data?.childrenIds ?? []));\n if (block.type === 'Container') direct.push(...(block.data?.props?.childrenIds ?? []));\n if (block.type === 'ColumnsContainer') {\n for (const col of block.data?.props?.columns ?? []) {\n direct.push(...(col.childrenIds ?? []));\n }\n }\n for (const childId of direct) {\n if (isDescendant(doc, childId, candidateId)) return true;\n }\n return false;\n}\n\n/**\n * Compute the partial-document patch that moves `sourceId` from\n * `sourceParent` to `targetParent` at `targetIndex`. Returns `null` when the\n * move is a no-op (same position) or disallowed (dropping into self / own\n * descendant). Caller feeds the patch to `setDocument`.\n */\nexport function buildMovePatch(\n doc: TEditorConfiguration,\n sourceId: string,\n sourceParent: ParentRef,\n targetParent: ParentRef,\n targetIndex: number\n): Partial<TEditorConfiguration> | null {\n // Can't drop a block into its own subtree.\n if (isDescendant(doc, sourceId, targetParent.parentId)) return null;\n\n const srcIds = getChildrenIds(doc, sourceParent);\n const sourceIndex = srcIds.indexOf(sourceId);\n if (sourceIndex < 0) return null;\n\n if (sameParent(sourceParent, targetParent)) {\n // Single-array reorder — adjust targetIndex for the removal when the\n // insertion point is after the source.\n const arr = [...srcIds];\n arr.splice(sourceIndex, 1);\n let insertAt = targetIndex;\n if (insertAt > sourceIndex) insertAt -= 1;\n if (insertAt < 0) insertAt = 0;\n if (insertAt > arr.length) insertAt = arr.length;\n arr.splice(insertAt, 0, sourceId);\n if (arr.every((id, i) => id === srcIds[i])) return null;\n const sourceBlock: any = doc[sourceParent.parentId];\n return {\n [sourceParent.parentId]: patchChildrenIds(sourceBlock, sourceParent, arr),\n } as any;\n }\n\n // Cross-parent move: remove from source, insert into target.\n const newSrcIds = [...srcIds];\n newSrcIds.splice(sourceIndex, 1);\n const tgtIds = getChildrenIds(doc, targetParent);\n const newTgtIds = [...tgtIds];\n let insertAt = targetIndex;\n if (insertAt < 0) insertAt = 0;\n if (insertAt > newTgtIds.length) insertAt = newTgtIds.length;\n newTgtIds.splice(insertAt, 0, sourceId);\n\n // Same parent block, different columns (both refs are ColumnsContainer on\n // the same id). Collapse both column edits into one block patch.\n if (sourceParent.parentId === targetParent.parentId) {\n const block: any = doc[sourceParent.parentId];\n const columns = (block.data?.props?.columns ?? []).map((c: any, i: number) => {\n if (sourceParent.kind === 'ColumnsContainer' && i === sourceParent.columnIndex) {\n return { ...c, childrenIds: newSrcIds };\n }\n if (targetParent.kind === 'ColumnsContainer' && i === targetParent.columnIndex) {\n return { ...c, childrenIds: newTgtIds };\n }\n return c;\n });\n return {\n [sourceParent.parentId]: {\n ...block,\n data: { ...block.data, props: { ...block.data.props, columns } },\n },\n } as any;\n }\n\n const sourceBlock: any = doc[sourceParent.parentId];\n const targetBlock: any = doc[targetParent.parentId];\n return {\n [sourceParent.parentId]: patchChildrenIds(sourceBlock, sourceParent, newSrcIds),\n [targetParent.parentId]: patchChildrenIds(targetBlock, targetParent, newTgtIds),\n } as any;\n}\n","import React, { useState } from 'react';\nimport { Box, IconButton, Stack, Tooltip, Typography } from '@mui/material';\nimport {\n AccountCircleOutlined,\n BusinessOutlined,\n ChevronRight,\n ContactMailOutlined,\n Crop32Outlined,\n DashboardOutlined,\n ExpandMore,\n HMobiledataOutlined,\n HorizontalRuleOutlined,\n HtmlOutlined,\n ImageOutlined,\n KeyboardArrowDown,\n KeyboardArrowUp,\n LibraryAddOutlined,\n NotesOutlined,\n SmartButtonOutlined,\n ViewColumnOutlined,\n ViewColumnSharp,\n} from '@mui/icons-material';\nimport {\n setDocument,\n setHoveredBlockId,\n setSelectedBlockId,\n useDocument,\n useSelectedBlockId,\n} from '@editor/editor-context';\nimport { TEditorConfiguration } from '@editor/core';\nimport { t } from '@i18n';\nimport {\n buildMovePatch,\n isDescendant,\n type ParentRef,\n} from '@editor/blocks/helpers/move-block';\n\nconst ROOT_BLOCK_ID = 'root';\nconst PREVIEW_MAX = 36;\n\ntype OutlineNode = {\n id: string;\n label: string;\n preview?: string;\n icon: React.ReactNode;\n children?: OutlineNode[];\n // Populated for real blocks; omitted for synthetic rows (Canvas, Column i).\n parent?: ParentRef;\n indexInParent?: number;\n siblingsCount?: number;\n // Parent ref whose childrenIds this node addresses when it's itself a\n // container (EmailLayout / Container / ColumnsContainer column). Used as\n // the target when a block is dropped onto this row.\n containerChildrenRef?: ParentRef;\n};\n\nfunction iconForType(type: string): React.ReactNode {\n switch (type) {\n case 'EmailLayout':\n return <DashboardOutlined fontSize=\"small\" />;\n case 'Heading':\n return <HMobiledataOutlined fontSize=\"small\" />;\n case 'Text':\n return <NotesOutlined fontSize=\"small\" />;\n case 'Button':\n return <SmartButtonOutlined fontSize=\"small\" />;\n case 'Image':\n return <ImageOutlined fontSize=\"small\" />;\n case 'Avatar':\n return <AccountCircleOutlined fontSize=\"small\" />;\n case 'Signature':\n return <ContactMailOutlined fontSize=\"small\" />;\n case 'Divider':\n return <HorizontalRuleOutlined fontSize=\"small\" />;\n case 'Spacer':\n return <Crop32Outlined fontSize=\"small\" />;\n case 'Html':\n return <HtmlOutlined fontSize=\"small\" />;\n case 'Container':\n return <LibraryAddOutlined fontSize=\"small\" />;\n case 'ColumnsContainer':\n return <ViewColumnOutlined fontSize=\"small\" />;\n default:\n return <BusinessOutlined fontSize=\"small\" />;\n }\n}\n\nfunction previewText(text: string | null | undefined): string | undefined {\n if (!text) return undefined;\n const trimmed = text.trim().replace(/\\s+/g, ' ');\n if (!trimmed) return undefined;\n return trimmed.length > PREVIEW_MAX ? trimmed.slice(0, PREVIEW_MAX - 1) + '…' : trimmed;\n}\n\ntype BuildCtx = {\n parent: ParentRef;\n indexInParent: number;\n siblingsCount: number;\n};\n\nfunction buildNode(id: string, doc: TEditorConfiguration, ctx?: BuildCtx): OutlineNode | null {\n const block: any = doc[id];\n if (!block) return null;\n const type: string = block.type;\n const data = block.data ?? {};\n const props = data.props ?? {};\n const baseMeta: Partial<OutlineNode> = ctx\n ? { parent: ctx.parent, indexInParent: ctx.indexInParent, siblingsCount: ctx.siblingsCount }\n : {};\n\n switch (type) {\n case 'EmailLayout': {\n const ids = (data.childrenIds as string[] | null) ?? [];\n const parentForChildren: ParentRef = { kind: 'EmailLayout', parentId: 'root' };\n const children = ids\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForChildren,\n indexInParent: i,\n siblingsCount: ids.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n return {\n id,\n label: t('outline.canvas', 'Canvas'),\n icon: iconForType('EmailLayout'),\n children,\n containerChildrenRef: parentForChildren,\n };\n }\n case 'Container': {\n const ids = (props.childrenIds as string[] | null) ?? [];\n const parentForChildren: ParentRef = { kind: 'Container', parentId: id };\n const children = ids\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForChildren,\n indexInParent: i,\n siblingsCount: ids.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n const count = children.length;\n return {\n id,\n label: 'Container',\n preview: count === 1 ? '1 child' : `${count} children`,\n icon: iconForType('Container'),\n children,\n containerChildrenRef: parentForChildren,\n ...baseMeta,\n };\n }\n case 'ColumnsContainer': {\n const columns: Array<{ childrenIds?: string[] }> = props.columns ?? [];\n const children: OutlineNode[] = [];\n columns.forEach((col, colIdx) => {\n const colIds = col.childrenIds ?? [];\n const parentForCol: ParentRef = {\n kind: 'ColumnsContainer',\n parentId: id,\n columnIndex: colIdx,\n };\n const colChildren = colIds\n .map((childId, i) =>\n buildNode(childId, doc, {\n parent: parentForCol,\n indexInParent: i,\n siblingsCount: colIds.length,\n })\n )\n .filter((n): n is OutlineNode => n !== null);\n children.push({\n id: `${id}::col${colIdx}`,\n label: `Column ${colIdx + 1}`,\n preview: colChildren.length === 1 ? '1 child' : `${colChildren.length} children`,\n icon: <ViewColumnSharp fontSize=\"small\" sx={{ opacity: 0.6 }} />,\n children: colChildren,\n containerChildrenRef: parentForCol,\n });\n });\n return {\n id,\n label: 'Columns',\n preview: `${columns.length} columns`,\n icon: iconForType('ColumnsContainer'),\n children,\n ...baseMeta,\n };\n }\n case 'Text':\n case 'Heading':\n case 'Button':\n return { id, label: type, preview: previewText(props.text), icon: iconForType(type), ...baseMeta };\n case 'Html':\n return { id, label: 'Html', preview: previewText(props.contents), icon: iconForType('Html'), ...baseMeta };\n case 'Image':\n return {\n id,\n label: 'Image',\n preview: previewText(props.alt) ?? previewText(props.url),\n icon: iconForType('Image'),\n ...baseMeta,\n };\n case 'Avatar':\n return { id, label: 'Avatar', preview: previewText(props.imageUrl), icon: iconForType('Avatar'), ...baseMeta };\n case 'Divider':\n return { id, label: 'Divider', icon: iconForType('Divider'), ...baseMeta };\n case 'Spacer':\n return {\n id,\n label: 'Spacer',\n preview: props.height ? `${props.height}px` : undefined,\n icon: iconForType('Spacer'),\n ...baseMeta,\n };\n case 'Signature':\n return { id, label: 'Signature', preview: previewText(props.name), icon: iconForType('Signature'), ...baseMeta };\n default:\n return { id, label: type, icon: iconForType(type), ...baseMeta };\n }\n}\n\n// Drag payload: a JSON string stashed on the DataTransfer so we can tell\n// an in-editor block drag from arbitrary external drops.\nconst DRAG_MIME = 'application/x-email-editor-block';\n\ntype DragPayload = {\n sourceId: string;\n sourceParent: ParentRef;\n};\n\ntype DropPos = 'before' | 'after' | 'inside' | null;\n\nexport default function OutlinePanel() {\n const document = useDocument();\n const selectedBlockId = useSelectedBlockId();\n const [dragging, setDragging] = useState<DragPayload | null>(null);\n const tree = buildNode(ROOT_BLOCK_ID, document);\n\n const performMove = (\n payload: DragPayload,\n targetParent: ParentRef,\n targetIndex: number\n ) => {\n const patch = buildMovePatch(\n document,\n payload.sourceId,\n payload.sourceParent,\n targetParent,\n targetIndex\n );\n if (patch) {\n setDocument(patch as any);\n setSelectedBlockId(payload.sourceId);\n }\n };\n\n return (\n <Box>\n <Typography variant=\"subtitle2\" component=\"h2\" sx={{ fontWeight: 'bold', mb: 0.5, px: 0.5 }}>\n {t('outline.title', 'Outline')}\n </Typography>\n <Typography variant=\"caption\" sx={{ display: 'block', color: 'text.secondary', px: 0.5, mb: 1 }}>\n {t('outline.hint', 'Click a row to select. Drag a row to reorder or move it into a container.')}\n </Typography>\n {tree ? (\n <OutlineRow\n node={tree}\n depth={0}\n selectedBlockId={selectedBlockId}\n document={document}\n dragging={dragging}\n setDragging={setDragging}\n performMove={performMove}\n />\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', px: 0.5 }}>\n Nothing to outline.\n </Typography>\n )}\n </Box>\n );\n}\n\ntype OutlineRowProps = {\n node: OutlineNode;\n depth: number;\n selectedBlockId: string | null;\n document: TEditorConfiguration;\n dragging: DragPayload | null;\n setDragging: (p: DragPayload | null) => void;\n performMove: (payload: DragPayload, targetParent: ParentRef, targetIndex: number) => void;\n};\n\nfunction OutlineRow({\n node,\n depth,\n selectedBlockId,\n document,\n dragging,\n setDragging,\n performMove,\n}: OutlineRowProps) {\n const [expanded, setExpanded] = useState(true);\n const [dropPos, setDropPos] = useState<DropPos>(null);\n const hasChildren = Boolean(node.children && node.children.length > 0);\n const isSelectable = !node.id.includes('::');\n const isSelected = isSelectable && selectedBlockId === node.id;\n\n const canMove =\n isSelectable &&\n node.parent !== undefined &&\n node.indexInParent !== undefined &&\n node.siblingsCount !== undefined;\n const canMoveUp = canMove && (node.indexInParent as number) > 0;\n const canMoveDown = canMove && (node.indexInParent as number) < (node.siblingsCount as number) - 1;\n\n const isDragSource = dragging?.sourceId === node.id;\n\n // Block is draggable if it has a parent (so is a real block, not Canvas).\n const draggable = canMove;\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {\n if (!draggable || !node.parent) return;\n const payload: DragPayload = { sourceId: node.id, sourceParent: node.parent };\n e.dataTransfer.setData(DRAG_MIME, JSON.stringify(payload));\n e.dataTransfer.setData('text/plain', node.label);\n e.dataTransfer.effectAllowed = 'move';\n setDragging(payload);\n };\n\n const handleDragEnd = () => setDragging(null);\n\n // Compute which region of the row the cursor is in: top band, bottom band,\n // or center (valid drop-inside when this row is itself a container).\n const computeDropPos = (e: React.DragEvent<HTMLDivElement>): DropPos => {\n if (!dragging) return null;\n const rect = e.currentTarget.getBoundingClientRect();\n const y = e.clientY - rect.top;\n const h = rect.height || 28;\n const canDropInside = Boolean(node.containerChildrenRef);\n // Top 25% → before, bottom 25% → after, middle → inside (if container).\n if (canDropInside && y > h * 0.25 && y < h * 0.75) return 'inside';\n if (y < h * 0.5) return 'before';\n return 'after';\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n if (!dragging) return;\n // Skip if dropping onto self or into own descendant.\n if (dragging.sourceId === node.id) {\n setDropPos(null);\n return;\n }\n if (node.containerChildrenRef && isDescendant(document, dragging.sourceId, node.id)) {\n setDropPos(null);\n return;\n }\n const pos = computeDropPos(e);\n if (!pos) {\n setDropPos(null);\n return;\n }\n // Reorder requires the target row to have a parent (not the synthetic Canvas root).\n if ((pos === 'before' || pos === 'after') && !node.parent) {\n setDropPos(null);\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setDropPos(pos);\n };\n\n const handleDragLeave = () => setDropPos(null);\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n if (!dragging || !dropPos) return;\n e.preventDefault();\n let targetParent: ParentRef | undefined;\n let targetIndex = 0;\n if (dropPos === 'inside' && node.containerChildrenRef) {\n targetParent = node.containerChildrenRef;\n // Append to the end of the container's children. Using Infinity lets\n // buildMovePatch clamp to length regardless of current child count.\n targetIndex = Number.MAX_SAFE_INTEGER;\n } else if ((dropPos === 'before' || dropPos === 'after') && node.parent) {\n targetParent = node.parent;\n targetIndex = (node.indexInParent as number) + (dropPos === 'after' ? 1 : 0);\n }\n if (targetParent) performMove(dragging, targetParent, targetIndex);\n setDropPos(null);\n setDragging(null);\n };\n\n const handleMove = (delta: -1 | 1) => {\n if (!canMove || !node.parent) return;\n const nextIndex = (node.indexInParent as number) + delta;\n const patch = buildMovePatch(document, node.id, node.parent, node.parent, nextIndex + (delta > 0 ? 1 : 0));\n if (patch) setDocument(patch as any);\n };\n\n return (\n <>\n <Box sx={{ position: 'relative' }}>\n {dropPos === 'before' && <DropLine depth={depth} />}\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={0.5}\n draggable={draggable}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => isSelectable && setSelectedBlockId(node.id)}\n onMouseEnter={() => isSelectable && !dragging && setHoveredBlockId(node.id)}\n onMouseLeave={() => isSelectable && setHoveredBlockId(null)}\n sx={{\n pl: `${depth * 12 + 4}px`,\n pr: 0.5,\n py: 0.25,\n minHeight: 28,\n borderRadius: 0.75,\n cursor: isSelectable ? (draggable ? 'grab' : 'pointer') : 'default',\n backgroundColor: isSelected\n ? 'action.selected'\n : dropPos === 'inside'\n ? 'rgba(25, 118, 210, 0.12)'\n : 'transparent',\n opacity: isDragSource ? 0.5 : 1,\n outline:\n dropPos === 'inside'\n ? '1.5px solid rgba(25, 118, 210, 0.7)'\n : undefined,\n transition: 'background-color 80ms, outline-color 80ms',\n '&:hover': {\n backgroundColor: isSelected ? 'action.selected' : 'action.hover',\n },\n '&:hover .outline-move-btns': { opacity: 1 },\n userSelect: 'none',\n }}\n >\n {hasChildren ? (\n <Box\n role=\"button\"\n aria-label={expanded ? 'Collapse' : 'Expand'}\n onClick={(e) => {\n e.stopPropagation();\n setExpanded((v) => !v);\n }}\n sx={{ display: 'flex', alignItems: 'center', cursor: 'pointer' }}\n >\n {expanded ? <ExpandMore fontSize=\"small\" /> : <ChevronRight fontSize=\"small\" />}\n </Box>\n ) : (\n <Box sx={{ width: 20 }} />\n )}\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n color: isSelected ? 'primary.main' : 'text.secondary',\n flexShrink: 0,\n }}\n >\n {node.icon}\n </Box>\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: 600,\n color: isSelected ? 'primary.main' : 'text.primary',\n flexShrink: 0,\n }}\n >\n {node.label}\n </Typography>\n {node.preview && (\n <Typography\n variant=\"body2\"\n sx={{\n color: 'text.secondary',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n }}\n >\n — {node.preview}\n </Typography>\n )}\n {canMove && (\n <Box\n className=\"outline-move-btns\"\n sx={{\n display: 'flex',\n ml: 'auto',\n opacity: isSelected ? 1 : 0,\n transition: 'opacity 120ms',\n }}\n >\n <Tooltip title=\"Move up\">\n <span>\n <IconButton\n size=\"small\"\n disabled={!canMoveUp}\n onClick={(e) => {\n e.stopPropagation();\n handleMove(-1);\n }}\n aria-label={`Move ${node.label} up`}\n sx={{ p: 0.25 }}\n >\n <KeyboardArrowUp fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"Move down\">\n <span>\n <IconButton\n size=\"small\"\n disabled={!canMoveDown}\n onClick={(e) => {\n e.stopPropagation();\n handleMove(1);\n }}\n aria-label={`Move ${node.label} down`}\n sx={{ p: 0.25 }}\n >\n <KeyboardArrowDown fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </Stack>\n {dropPos === 'after' && <DropLine depth={depth} />}\n </Box>\n {hasChildren && expanded && (\n <Box>\n {node.children!.map((child) => (\n <OutlineRow\n key={child.id}\n node={child}\n depth={depth + 1}\n selectedBlockId={selectedBlockId}\n document={document}\n dragging={dragging}\n setDragging={setDragging}\n performMove={performMove}\n />\n ))}\n </Box>\n )}\n </>\n );\n}\n\nfunction DropLine({ depth }: { depth: number }) {\n return (\n <Box\n sx={{\n position: 'relative',\n height: 0,\n }}\n >\n <Box\n sx={{\n position: 'absolute',\n left: `${depth * 12 + 24}px`,\n right: 4,\n top: -1,\n height: 2,\n backgroundColor: 'primary.main',\n borderRadius: 1,\n pointerEvents: 'none',\n }}\n />\n </Box>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n List,\n ListItemButton,\n ListItemText,\n TextField,\n Typography,\n} from '@mui/material';\nimport { DescriptionOutlined, InsertDriveFileOutlined } from '@mui/icons-material';\nimport { t } from '@i18n';\nimport { TemplateListItem } from '../index';\n\ntype NewTemplatePickerDialogProps = {\n open: boolean;\n kind: 'template' | 'sample';\n samples: TemplateListItem[];\n existingSlugs: string[];\n defaultName?: string;\n onClose: () => void;\n /** Returns `true` on success so the dialog closes, `false` to keep it open (e.g. for server-side validation errors). */\n onCreate: (name: string, starterId: string | null) => Promise<boolean>;\n};\n\nexport default function NewTemplatePickerDialog({\n open,\n kind,\n samples,\n existingSlugs,\n defaultName,\n onClose,\n onCreate,\n}: NewTemplatePickerDialogProps) {\n const [name, setName] = useState('');\n const [selectedStarter, setSelectedStarter] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (open) {\n setName(defaultName ?? t(kind === 'sample' ? 'drawer.new-sample' : 'drawer.new-template', kind === 'sample' ? 'New sample' : 'New template'));\n setSelectedStarter(null);\n setError(null);\n setBusy(false);\n }\n }, [open, defaultName, kind]);\n\n const validate = (): string | null => {\n const trimmed = name.trim();\n if (!trimmed) return t('picker.error-name-required', 'Name is required');\n if (existingSlugs.some((s) => s.toLowerCase() === trimmed.toLowerCase())) {\n return kind === 'sample'\n ? t('picker.error-sample-taken', 'A sample with this name already exists')\n : t('picker.error-template-taken', 'A template with this name already exists');\n }\n return null;\n };\n\n const handleCreate = async () => {\n const err = validate();\n if (err) {\n setError(err);\n return;\n }\n setBusy(true);\n try {\n const ok = await onCreate(name.trim(), selectedStarter);\n if (ok) onClose();\n } finally {\n setBusy(false);\n }\n };\n\n const pickable = samples.filter((s) => s.id !== 'empty-email');\n\n return (\n <Dialog open={open} onClose={busy ? undefined : onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>\n {kind === 'sample'\n ? t('picker.title-sample', 'New sample')\n : t('picker.title-template', 'New template')}\n </DialogTitle>\n <DialogContent dividers>\n <Typography variant=\"subtitle2\" sx={{ mb: 1 }}>\n {t('picker.start-from', 'Start from')}\n </Typography>\n <List\n dense\n sx={{\n mb: 2,\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n py: 0,\n maxHeight: 260,\n overflowY: 'auto',\n }}\n >\n <ListItemButton\n selected={selectedStarter === null}\n onClick={() => setSelectedStarter(null)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5, flex: 1 }}>\n <InsertDriveFileOutlined fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <ListItemText primary={t('picker.blank-title', 'Blank')} secondary={t('picker.blank-desc', 'Start from an empty email')} />\n </Box>\n </ListItemButton>\n {pickable.map((s) => (\n <ListItemButton\n key={s.id}\n selected={selectedStarter === s.id}\n onClick={() => setSelectedStarter(s.id)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.5, flex: 1 }}>\n <DescriptionOutlined fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <ListItemText primary={s.slug} secondary={s.description} />\n </Box>\n </ListItemButton>\n ))}\n </List>\n <TextField\n autoFocus\n fullWidth\n size=\"small\"\n label={t('rename.name-label', 'Name')}\n value={name}\n onFocus={(e) => e.currentTarget.select()}\n onChange={(e) => {\n setName(e.target.value);\n if (error) setError(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !busy) void handleCreate();\n }}\n error={Boolean(error)}\n helperText={error ?? ' '}\n disabled={busy}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={busy}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleCreate} disabled={busy}>\n {busy\n ? t('picker.creating', 'Creating…')\n : kind === 'sample'\n ? t('picker.create-sample', 'Create sample')\n : t('picker.create-template', 'Create template')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n InputAdornment,\n Stack,\n TextField,\n Typography,\n} from '@mui/material';\nimport { AddOutlined } from '@mui/icons-material';\n\nimport { t } from '@i18n';\n\nexport interface RenameDialogProps {\n open: boolean;\n currentSlug: string;\n currentTags?: string[];\n existingSlugs: string[];\n onClose: () => void;\n onSubmit: (newSlug: string, opts?: { tags?: string[] }) => void | Promise<void>;\n}\n\nexport default function RenameDialog({\n open,\n currentSlug,\n currentTags = [],\n existingSlugs,\n onClose,\n onSubmit,\n}: RenameDialogProps) {\n const [slug, setSlug] = useState(currentSlug);\n const [tags, setTags] = useState<string[]>(currentTags);\n const [tagInput, setTagInput] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n if (open) {\n setSlug(currentSlug);\n setTags(currentTags);\n setTagInput('');\n setError(null);\n setSubmitting(false);\n }\n }, [open, currentSlug, currentTags]);\n\n const addTag = () => {\n const trimmed = tagInput.trim();\n if (!trimmed) return;\n if (tags.some((t) => t.toLowerCase() === trimmed.toLowerCase())) {\n setTagInput('');\n return;\n }\n setTags([...tags, trimmed]);\n setTagInput('');\n };\n\n const removeTag = (tag: string) => setTags(tags.filter((t) => t !== tag));\n\n const tagsUnchanged =\n tags.length === currentTags.length &&\n tags.every((t, i) => t === currentTags[i]);\n\n const handleSubmit = async () => {\n const trimmedSlug = slug.trim();\n if (!trimmedSlug) {\n setError(t('rename.error-empty', 'Please enter a name'));\n return;\n }\n const slugChanged = trimmedSlug !== currentSlug;\n if (slugChanged && existingSlugs.some((s) => s.toLowerCase() === trimmedSlug.toLowerCase())) {\n setError(t('rename.error-taken', 'A template with this name already exists'));\n return;\n }\n if (!slugChanged && tagsUnchanged) {\n onClose();\n return;\n }\n setSubmitting(true);\n try {\n await onSubmit(trimmedSlug, { tags });\n onClose();\n } catch (e) {\n console.error('Error updating template details:', e);\n setError(t('rename.error-generic', 'Failed to update template details'));\n } finally {\n setSubmitting(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={submitting ? undefined : onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{t('rename.title', 'Edit details')}</DialogTitle>\n <DialogContent>\n <TextField\n autoFocus\n margin=\"dense\"\n label={t('rename.name-label', 'Name')}\n fullWidth\n variant=\"outlined\"\n value={slug}\n onChange={(e) => {\n setSlug(e.target.value);\n setError(null);\n }}\n error={!!error}\n helperText={error ?? ' '}\n disabled={submitting}\n onKeyPress={(e) => {\n if (e.key === 'Enter' && !submitting) handleSubmit();\n }}\n />\n <Typography variant=\"caption\" sx={{ color: 'text.secondary', display: 'block', mt: 1, mb: 0.5 }}>\n {t('rename.tags', 'Tags')}\n </Typography>\n {tags.length > 0 ? (\n <Stack direction=\"row\" spacing={0.5} sx={{ flexWrap: 'wrap', gap: 0.5, mb: 1 }}>\n {tags.map((tag) => (\n <Chip\n key={tag}\n label={tag}\n size=\"small\"\n onDelete={submitting ? undefined : () => removeTag(tag)}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"caption\" sx={{ color: 'text.disabled', display: 'block', mb: 1 }}>\n {t('rename.no-tags', 'No tags yet.')}\n </Typography>\n )}\n <TextField\n size=\"small\"\n fullWidth\n placeholder={t('rename.tag-placeholder', 'Add a tag and press Enter')}\n value={tagInput}\n onChange={(e) => setTagInput(e.target.value)}\n disabled={submitting}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag();\n } else if (e.key === 'Backspace' && !tagInput && tags.length > 0) {\n e.preventDefault();\n removeTag(tags[tags.length - 1]);\n }\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <Button\n size=\"small\"\n onClick={addTag}\n disabled={!tagInput.trim() || submitting}\n startIcon={<AddOutlined fontSize=\"small\" />}\n sx={{ textTransform: 'none' }}\n >\n {t('common.add', 'Add')}\n </Button>\n </InputAdornment>\n ),\n }}\n />\n <Box sx={{ minHeight: 8 }} />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={submitting}>\n {t('common.cancel', 'Cancel')}\n </Button>\n <Button\n onClick={handleSubmit}\n variant=\"contained\"\n disabled={!slug.trim() || submitting}\n >\n {submitting ? t('common.saving', 'Saving…') : t('common.save', 'Save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box\n} from '@mui/material';\nimport { t } from '@i18n';\n\ninterface SaveTemplateDialogProps {\n open: boolean;\n onClose: () => void;\n onSave: (templateName: string) => Promise<boolean> | boolean | void;\n onNameChange?: () => void;\n defaultName?: string;\n error?: string | null;\n /**\n * Dialog flavour — controls the title + submit label. \"save-as\" (default)\n * shows \"Save as a new template\"; \"new\" shows \"Create a new template\".\n */\n mode?: 'save-as' | 'new';\n}\n\nexport default function SaveTemplateDialog({\n open,\n onClose,\n onSave,\n onNameChange,\n defaultName = '',\n error: externalError = null,\n mode = 'save-as',\n}: SaveTemplateDialogProps) {\n const [templateName, setTemplateName] = useState(defaultName);\n const [internalError, setInternalError] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n \n // Reset name when dialog opens with the default name\n useEffect(() => {\n if (open) {\n setTemplateName(defaultName);\n setInternalError('');\n setIsSubmitting(false);\n }\n }, [open, defaultName]);\n\n // Determine which error to display - external has priority\n const displayError = externalError || internalError;\n\n const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setTemplateName(e.target.value);\n \n if (e.target.value.trim()) {\n setInternalError('');\n }\n \n // Notify parent component that name has changed\n if (onNameChange) {\n onNameChange();\n }\n };\n\n const handleSave = async () => {\n if (!templateName.trim()) {\n setInternalError(t('save-dialog.error-empty-name', 'Please enter a template name'));\n return;\n }\n \n setIsSubmitting(true);\n \n try {\n // Call onSave and wait for result if it's a Promise\n const result = onSave(templateName);\n \n // Handle promise or boolean result\n if (result instanceof Promise) {\n const success = await result;\n if (success) {\n setTemplateName('');\n setInternalError('');\n onClose();\n }\n } else if (result !== false) {\n // If not explicitly false, assume success\n setTemplateName('');\n setInternalError('');\n onClose();\n }\n } catch (error) {\n console.error('Error saving template:', error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n setTemplateName('');\n setInternalError('');\n onClose();\n };\n\n return (\n <Dialog \n open={open} \n onClose={handleCancel}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {mode === 'new'\n ? t('save-dialog.title-new', 'Create a new template')\n : t('save-dialog.title', 'Save as a new template')}\n </DialogTitle>\n <DialogContent>\n <Box sx={{ pt: 1 }}>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"template-name\"\n label={t('save-dialog.name-label', 'Template Name')}\n type=\"text\"\n fullWidth\n variant=\"outlined\"\n value={templateName}\n onChange={handleNameChange}\n onFocus={(e) => e.currentTarget.select()}\n error={!!displayError}\n helperText={displayError}\n onKeyPress={(e) => {\n if (e.key === 'Enter' && templateName.trim() && !displayError && !isSubmitting) {\n handleSave();\n }\n }}\n disabled={isSubmitting}\n />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} disabled={isSubmitting}>{t('common.cancel', 'Cancel')}</Button>\n <Button\n onClick={handleSave}\n variant=\"contained\"\n color=\"primary\"\n disabled={!templateName.trim() || !!displayError || isSubmitting}\n >\n {isSubmitting\n ? t('save-dialog.saving', 'Saving...')\n : mode === 'new'\n ? t('save-dialog.create', 'Create')\n : t('save-dialog.save', 'Save')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n} ","import { TEditorConfiguration } from '@editor/core';\n\nconst EMPTY_EMAIL_MESSAGE: TEditorConfiguration = {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: [],\n },\n },\n};\n\nexport default EMPTY_EMAIL_MESSAGE;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Alert,\n Box,\n Chip,\n CircularProgress,\n Drawer,\n IconButton,\n InputAdornment,\n MenuItem,\n Stack,\n Tab,\n Tabs,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport {\n AddOutlined,\n SearchOutlined,\n} from '@mui/icons-material';\nimport { useSamplesDrawerOpen, resetDocument } from '@editor/editor-context';\nimport { TemplateKind, TemplateListItem } from '../index';\nimport { TEditorConfiguration } from '@editor/core';\nimport { Trans, t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { useSnackbar } from '../email-canvas/snackbar-provider';\nimport { buildSavePayload, SavePayload } from '../save-payload';\nimport TemplateRow from './template-row';\nimport OutlinePanel from './outline-panel';\nimport NewTemplatePickerDialog from './new-template-picker-dialog';\nimport RenameDialog from './rename-dialog';\nimport SaveTemplateDialog from '../email-canvas/save-template-dialog';\nimport EMPTY_EMAIL_MESSAGE from '@sample/empty-email-message';\n\nexport const SAMPLES_DRAWER_WIDTH = 320;\n\n// Empty template definition that will always be available. The visible slug\n// and description come from the catalog (see `empty.*` keys) so the drawer\n// shows localized copy.\nconst buildEmptyTemplate = (): TemplateListItem => ({\n id: 'empty-email',\n slug: t('empty.slug', 'Empty email'),\n kind: 'sample',\n description: t('empty.description', 'A blank email template to start from scratch'),\n});\n\ntype SortKey = 'updatedAt' | 'createdAt' | 'slug';\n\nconst SORT_OPTIONS: Array<{ value: SortKey; labelKey: string; fallback: string }> = [\n { value: 'updatedAt', labelKey: 'sort.last-updated', fallback: 'Last updated' },\n { value: 'createdAt', labelKey: 'sort.recently-created', fallback: 'Recently created' },\n { value: 'slug', labelKey: 'sort.name', fallback: 'Name (A–Z)' },\n];\n\nfunction compareTemplates(a: TemplateListItem, b: TemplateListItem, key: SortKey): number {\n if (key === 'slug') {\n return a.slug.localeCompare(b.slug);\n }\n const av = a[key];\n const bv = b[key];\n if (!av && !bv) return 0;\n if (!av) return 1;\n if (!bv) return -1;\n return new Date(bv).getTime() - new Date(av).getTime();\n}\n\nexport interface SamplesDrawerProps {\n enterDuration?: number;\n exitDuration?: number;\n enabled?: boolean;\n loadSamples?: () => Promise<TemplateListItem[]>;\n loadTemplates?: () => Promise<TemplateListItem[]>;\n loadTemplate?: (templateId: string) => Promise<TEditorConfiguration | null>;\n currentTemplateId?: string | null;\n deleteTemplate?: (templateId: string) => void;\n copyTemplate?: (templateName: string, content: any) => void;\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n setTemplateKind?: (templateId: string, kind: TemplateKind) => void | Promise<void>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n}\n\nexport default function SamplesDrawer({\n enterDuration = 225,\n exitDuration = 225,\n enabled = true,\n loadSamples,\n loadTemplates,\n loadTemplate,\n currentTemplateId,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n}: SamplesDrawerProps) {\n const samplesDrawerOpen = useSamplesDrawerOpen();\n const { setCurrentTemplate, loadTemplate: ctxLoadTemplate } = useEmailEditor();\n const { showMessage } = useSnackbar();\n\n const [samples, setSamples] = useState<TemplateListItem[]>([buildEmptyTemplate()]);\n const [templates, setTemplates] = useState<TemplateListItem[]>([]);\n const [loadingSamples, setLoadingSamples] = useState(false);\n const [loadingTemplates, setLoadingTemplates] = useState(false);\n const [templatesError, setTemplatesError] = useState<string | null>(null);\n\n const [activeLeftTab, setActiveLeftTab] = useState<'templates' | 'samples' | 'outline'>('templates');\n const [search, setSearch] = useState('');\n const [sortKey, setSortKey] = useState<SortKey>('updatedAt');\n const [activeTags, setActiveTags] = useState<string[]>([]);\n\n const [renameTarget, setRenameTarget] = useState<TemplateListItem | null>(null);\n const [pendingSaveAs, setPendingSaveAs] = useState<{ content: TEditorConfiguration; defaultName: string } | null>(null);\n const [newError, setNewError] = useState<string | null>(null);\n const [pickerKind, setPickerKind] = useState<'template' | 'sample' | null>(null);\n\n // Handler for the empty template + delegation\n const handleLoadTemplate = async (templateId: string) => {\n if (templateId === 'empty-email') {\n return EMPTY_EMAIL_MESSAGE;\n }\n if (loadTemplate) {\n return loadTemplate(templateId);\n }\n return null;\n };\n\n // Defensive kind coercion so older consumers that don't send `kind` still partition correctly.\n const withKind = (items: TemplateListItem[], fallback: TemplateKind): TemplateListItem[] =>\n items.map((item) => (item.kind ? item : { ...item, kind: fallback }));\n\n // Load samples\n useEffect(() => {\n if (!enabled || !samplesDrawerOpen || !loadSamples) return;\n setLoadingSamples(true);\n loadSamples()\n .then((results) => {\n const normalized = withKind(results, 'sample');\n const existingEmpty = normalized.find((s) => s.id === 'empty-email');\n setSamples(existingEmpty ? normalized : [buildEmptyTemplate(), ...normalized]);\n })\n .catch((error) => {\n console.error('Failed to load samples:', error);\n setSamples([buildEmptyTemplate()]);\n })\n .finally(() => setLoadingSamples(false));\n }, [enabled, samplesDrawerOpen, loadSamples]);\n\n // Load existing templates\n const refreshTemplates = async () => {\n if (!loadTemplates) return;\n setLoadingTemplates(true);\n setTemplatesError(null);\n try {\n const results = await loadTemplates();\n setTemplates(withKind(results, 'template'));\n } catch (error) {\n console.error('Failed to load templates:', error);\n setTemplatesError('Could not load templates');\n } finally {\n setLoadingTemplates(false);\n }\n };\n\n // Optimistic insert: if the host's loadTemplates hasn't yet reflected a\n // just-saved row (common with cached SWR/React-Query or read-replica lag),\n // patch it into local state so the user sees it immediately.\n const ensureRowPresent = (id: string, slug: string, kind: TemplateKind, tags?: string[]) => {\n const now = new Date().toISOString();\n const row: TemplateListItem = { id, slug, kind, tags, createdAt: now, updatedAt: now };\n if (kind === 'sample') {\n setSamples((prev) => (prev.some((t) => t.id === id) ? prev : [...prev, row]));\n } else {\n setTemplates((prev) => (prev.some((t) => t.id === id) ? prev : [...prev, row]));\n }\n };\n\n useEffect(() => {\n if (!enabled || !loadTemplates) return;\n refreshTemplates();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, loadTemplates]);\n\n // Listen for template list updates (fallback path for hosts that dispatch the event)\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent<TemplateListItem[]>).detail;\n if (Array.isArray(detail)) setTemplates(withKind(detail, 'template'));\n };\n window.addEventListener('templateListUpdated', handler);\n return () => window.removeEventListener('templateListUpdated', handler);\n }, []);\n\n // Partition by kind — an item's section is determined by `kind`, not by which callback returned it.\n // If an id appears in both lists, the most recent state wins (templates list wins ties).\n const { templateRows, sampleRows } = useMemo(() => {\n const byId = new Map<string, TemplateListItem>();\n for (const s of samples) byId.set(s.id, s);\n for (const t of templates) byId.set(t.id, t);\n const all = Array.from(byId.values());\n return {\n templateRows: all.filter((t) => t.kind === 'template'),\n sampleRows: all.filter((t) => t.kind === 'sample'),\n };\n }, [samples, templates]);\n\n const allTags = useMemo(() => {\n const set = new Set<string>();\n for (const t of templateRows) t.tags?.forEach((tag) => set.add(tag));\n for (const s of sampleRows) s.tags?.forEach((tag) => set.add(tag));\n return Array.from(set).sort();\n }, [templateRows, sampleRows]);\n\n const matchesSearchAndTags = useMemo(() => {\n const term = search.trim().toLowerCase();\n return (t: TemplateListItem) => {\n if (term) {\n const haystack = [t.slug, t.description, t.subject]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n if (!haystack.includes(term)) return false;\n }\n if (activeTags.length > 0) {\n if (!t.tags || t.tags.length === 0) return false;\n if (!activeTags.every((tag) => t.tags!.includes(tag))) return false;\n }\n return true;\n };\n }, [search, activeTags]);\n\n const filteredTemplates = useMemo(\n () => templateRows.filter(matchesSearchAndTags).slice().sort((a, b) => compareTemplates(a, b, sortKey)),\n [templateRows, matchesSearchAndTags, sortKey]\n );\n\n const filteredSamples = useMemo(\n () => sampleRows.filter(matchesSearchAndTags).slice().sort((a, b) => compareTemplates(a, b, sortKey)),\n [sampleRows, matchesSearchAndTags, sortKey]\n );\n\n const toggleTag = (tag: string) => {\n setActiveTags((prev) => (prev.includes(tag) ? prev.filter((t) => t !== tag) : [...prev, tag]));\n };\n\n const handleDuplicate = (template: TemplateListItem) => {\n if (!copyTemplate) return;\n const content = null; // must fetch full content before duplicating\n (async () => {\n try {\n const full = await handleLoadTemplate(template.id);\n if (!full) {\n showMessage('Could not load template to duplicate');\n return;\n }\n copyTemplate(`${template.slug} (Copy)`, full);\n showMessage('Template duplicated');\n } catch (e) {\n console.error('Error duplicating template:', e);\n showMessage('Error duplicating template');\n }\n })();\n void content;\n };\n\n const handleDelete = (template: TemplateListItem) => {\n if (!deleteTemplate) return;\n if (!window.confirm(`Delete \"${template.slug}\"? This cannot be undone.`)) return;\n deleteTemplate(template.id);\n showMessage('Template deleted');\n };\n\n const handleRenameSubmit = async (newSlug: string, opts?: { tags?: string[] }) => {\n if (!renameTarget || !renameTemplate) return;\n await renameTemplate(renameTarget.id, newSlug, opts);\n const newTags = opts?.tags ?? renameTarget.tags ?? [];\n // Optimistic: update local lists (both templates + samples) so the UI\n // reflects the edit without waiting on the host's event.\n const patch = (t: TemplateListItem) =>\n t.id === renameTarget.id ? { ...t, slug: newSlug, tags: newTags } : t;\n setTemplates((prev) => prev.map(patch));\n setSamples((prev) => prev.map(patch));\n if (currentTemplateId === renameTarget.id) {\n setCurrentTemplate(renameTarget.id, newSlug, undefined, newTags);\n }\n showMessage('Details saved');\n };\n\n const flipKindLocally = (id: string, kind: TemplateKind) => {\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, kind } : t)));\n setSamples((prev) => prev.map((t) => (t.id === id ? { ...t, kind } : t)));\n };\n\n const handleSetKind = (template: TemplateListItem, kind: TemplateKind) => {\n if (!setTemplateKind) return;\n (async () => {\n try {\n await setTemplateKind(template.id, kind);\n flipKindLocally(template.id, kind);\n if (currentTemplateId === template.id) {\n setCurrentTemplate(template.id, template.slug, kind);\n }\n showMessage(kind === 'sample' ? 'Promoted to sample' : 'Demoted to template');\n } catch (e) {\n console.error('Error updating template kind:', e);\n showMessage('Error updating template kind');\n }\n })();\n };\n\n const handleDuplicateAsTemplate = (sample: TemplateListItem) => {\n if (!saveAs) return;\n (async () => {\n try {\n const content = await handleLoadTemplate(sample.id);\n if (!content) {\n showMessage('Could not load sample');\n return;\n }\n resetDocument(content);\n setPendingSaveAs({ content, defaultName: `${sample.slug} (Copy)` });\n } catch (e) {\n console.error('Error duplicating sample:', e);\n showMessage('Error duplicating sample');\n }\n })();\n };\n\n const handleSaveAsSubmit = async (templateName: string): Promise<boolean> => {\n if (!saveAs || !pendingSaveAs) return false;\n const taken = templateRows.some((t) => t.slug.toLowerCase() === templateName.toLowerCase());\n if (taken) {\n setNewError('A template with this name already exists');\n return false;\n }\n try {\n const content = pendingSaveAs.content;\n const { id, slug } = await saveAs(templateName, buildSavePayload(content));\n resetDocument(content);\n setCurrentTemplate(id, slug, 'template');\n ctxLoadTemplate(content, id, slug, 'template');\n showMessage('New template created!');\n window.location.hash = `#template/${id}`;\n await refreshTemplates();\n ensureRowPresent(id, slug, 'template');\n return true;\n } catch (e) {\n console.error('Error creating template:', e);\n showMessage('Error creating template');\n return false;\n }\n };\n\n const openNewPicker = (kind: 'template' | 'sample') => {\n setPickerKind(kind);\n };\n\n const handleCreateFromPicker = async (\n name: string,\n starterId: string | null\n ): Promise<boolean> => {\n if (!saveAs) return false;\n const kind = pickerKind ?? 'template';\n try {\n let content: TEditorConfiguration | null = EMPTY_EMAIL_MESSAGE;\n if (starterId !== null) {\n content = await handleLoadTemplate(starterId);\n if (!content) {\n showMessage('Could not load the selected sample');\n return false;\n }\n }\n const { id, slug } = await saveAs(name, buildSavePayload(content));\n if (kind === 'sample' && setTemplateKind) {\n try {\n await setTemplateKind(id, 'sample');\n flipKindLocally(id, 'sample');\n } catch (e) {\n console.error('Failed to mark new row as sample:', e);\n }\n }\n resetDocument(content);\n setCurrentTemplate(id, slug, kind);\n ctxLoadTemplate(content, id, slug, kind);\n showMessage(kind === 'sample' ? 'New sample created' : 'New template created');\n window.location.hash = `#template/${id}`;\n await refreshTemplates();\n ensureRowPresent(id, slug, kind);\n return true;\n } catch (e) {\n console.error('Error creating:', e);\n showMessage('Error creating');\n return false;\n }\n };\n\n if (!enabled) {\n return null;\n }\n\n const existingSlugs = templates.map((t) => t.slug);\n\n return (\n <>\n <Drawer\n variant=\"persistent\"\n anchor=\"left\"\n open={samplesDrawerOpen}\n PaperProps={{ style: { position: 'absolute' } }}\n ModalProps={{\n container: document.getElementById('drawer-container'),\n style: { position: 'absolute' },\n keepMounted: true,\n }}\n transitionDuration={{ enter: enterDuration, exit: exitDuration }}\n sx={{ width: samplesDrawerOpen ? SAMPLES_DRAWER_WIDTH : 0 }}\n >\n <Stack\n py={1}\n px={2}\n width={SAMPLES_DRAWER_WIDTH}\n height=\"100%\"\n spacing={1.5}\n sx={{ overflowY: 'auto' }}\n >\n <Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" sx={{ pt: 1 }}>\n <Typography variant=\"h6\" component=\"h1\">\n <Trans id=\"drawer.library\">Library</Trans>\n </Typography>\n {saveAs && (activeLeftTab === 'templates' || activeLeftTab === 'samples') && (\n <Tooltip title={activeLeftTab === 'samples' ? t('drawer.new-sample', 'New sample') : t('drawer.new-template', 'New template')}>\n <IconButton\n size=\"small\"\n onClick={() => openNewPicker(activeLeftTab === 'samples' ? 'sample' : 'template')}\n aria-label={activeLeftTab === 'samples' ? t('drawer.new-sample', 'New sample') : t('drawer.new-template', 'New template')}\n >\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n </Stack>\n\n <Tabs\n value={activeLeftTab}\n onChange={(_, v) => setActiveLeftTab(v)}\n variant=\"fullWidth\"\n sx={{ minHeight: 36, '& .MuiTab-root': { minHeight: 36, minWidth: 0, px: 1, fontSize: 13 } }}\n >\n <Tab value=\"templates\" label={t('drawer.tab.templates', 'Templates')} disabled={!loadTemplates} />\n <Tab value=\"samples\" label={t('drawer.tab.samples', 'Samples')} />\n <Tab value=\"outline\" label={t('drawer.tab.outline', 'Outline')} />\n </Tabs>\n\n {activeLeftTab === 'outline' ? (\n <OutlinePanel />\n ) : (\n <>\n <TextField\n size=\"small\"\n placeholder={activeLeftTab === 'templates' ? t('drawer.search-templates', 'Search templates') : t('drawer.search-samples', 'Search samples')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchOutlined fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n\n <TextField\n select\n size=\"small\"\n label={t('drawer.sort-by', 'Sort by')}\n value={sortKey}\n onChange={(e) => setSortKey(e.target.value as SortKey)}\n >\n {SORT_OPTIONS.map((opt) => (\n <MenuItem key={opt.value} value={opt.value}>\n {t(opt.labelKey, opt.fallback)}\n </MenuItem>\n ))}\n </TextField>\n\n {allTags.length > 0 && (\n <Stack direction=\"row\" sx={{ flexWrap: 'wrap', gap: 0.5 }}>\n <Chip\n label={t('drawer.tag.all', 'All')}\n size=\"small\"\n clickable\n color={activeTags.length === 0 ? 'primary' : 'default'}\n variant={activeTags.length === 0 ? 'filled' : 'outlined'}\n onClick={() => setActiveTags([])}\n />\n {allTags.map((tag) => (\n <Chip\n key={tag}\n label={t(`tag.${tag}`, tag)}\n size=\"small\"\n clickable\n color={activeTags.includes(tag) ? 'primary' : 'default'}\n variant={activeTags.includes(tag) ? 'filled' : 'outlined'}\n onClick={() => toggleTag(tag)}\n />\n ))}\n </Stack>\n )}\n\n {activeLeftTab === 'templates' ? (\n <Box>\n {loadingTemplates ? (\n <Stack alignItems=\"center\" width=\"100%\" py={2}>\n <CircularProgress size={24} />\n </Stack>\n ) : templatesError ? (\n <Alert severity=\"error\" sx={{ my: 1 }}>\n {templatesError}\n </Alert>\n ) : filteredTemplates.length > 0 ? (\n <Stack spacing={0.25} sx={{ width: '100%' }}>\n {filteredTemplates.map((template) => (\n <TemplateRow\n key={template.id}\n template={template}\n isCurrent={currentTemplateId === template.id}\n templateLoader={() => handleLoadTemplate(template.id)}\n onDuplicate={copyTemplate ? () => handleDuplicate(template) : undefined}\n onRename={renameTemplate ? () => setRenameTarget(template) : undefined}\n onDelete={deleteTemplate ? () => handleDelete(template) : undefined}\n onPromote={setTemplateKind ? () => handleSetKind(template, 'sample') : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', py: 1 }}>\n {templateRows.length === 0\n ? t('drawer.no-templates', 'No saved templates yet')\n : t('drawer.no-templates-match', 'No templates match your filters')}\n </Typography>\n )}\n </Box>\n ) : (\n <Box>\n {loadingSamples ? (\n <Stack alignItems=\"center\" width=\"100%\" py={2}>\n <CircularProgress size={24} />\n </Stack>\n ) : filteredSamples.length > 0 ? (\n <Stack spacing={0.25} sx={{ width: '100%' }}>\n {filteredSamples.map((sample) => (\n <TemplateRow\n key={sample.id}\n template={sample}\n isCurrent={currentTemplateId === sample.id}\n templateLoader={() => handleLoadTemplate(sample.id)}\n onDuplicateAsTemplate={saveAs ? () => handleDuplicateAsTemplate(sample) : undefined}\n onRename={renameTemplate ? () => setRenameTarget(sample) : undefined}\n onDelete={deleteTemplate ? () => handleDelete(sample) : undefined}\n onDemote={setTemplateKind ? () => handleSetKind(sample, 'template') : undefined}\n />\n ))}\n </Stack>\n ) : (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', py: 1 }}>\n {sampleRows.length === 0 ? t('drawer.no-samples', 'No samples available') : t('drawer.no-samples-match', 'No samples match your filters')}\n </Typography>\n )}\n </Box>\n )}\n </>\n )}\n </Stack>\n </Drawer>\n\n {renameTarget && (\n <RenameDialog\n open={!!renameTarget}\n currentSlug={renameTarget.slug}\n currentTags={renameTarget.tags ?? []}\n existingSlugs={existingSlugs.filter((s) => s !== renameTarget.slug)}\n onClose={() => setRenameTarget(null)}\n onSubmit={handleRenameSubmit}\n />\n )}\n\n <SaveTemplateDialog\n open={!!pendingSaveAs}\n onClose={() => {\n setPendingSaveAs(null);\n setNewError(null);\n }}\n onSave={handleSaveAsSubmit}\n onNameChange={() => setNewError(null)}\n defaultName={pendingSaveAs?.defaultName ?? 'New Template'}\n error={newError}\n />\n\n <NewTemplatePickerDialog\n open={pickerKind !== null}\n kind={pickerKind ?? 'template'}\n samples={sampleRows}\n existingSlugs={\n pickerKind === 'sample'\n ? sampleRows.map((s) => s.slug)\n : templateRows.map((t) => t.slug)\n }\n onClose={() => setPickerKind(null)}\n onCreate={handleCreateFromPicker}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport { Box, Button, SxProps, Typography } from '@mui/material';\n\ntype BlockMenuButtonProps = {\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n};\n\nconst BUTTON_SX: SxProps = { p: 1.5, display: 'flex', flexDirection: 'column' };\nconst ICON_SX: SxProps = {\n mb: 0.75,\n width: '100%',\n bgcolor: 'cadet.200',\n display: 'flex',\n justifyContent: 'center',\n p: 1,\n border: '1px solid',\n borderColor: 'cadet.300',\n};\n\nexport default function BlockTypeButton({ label, icon, onClick }: BlockMenuButtonProps) {\n return (\n <Button\n sx={BUTTON_SX}\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n >\n <Box sx={ICON_SX}>{icon}</Box>\n <Typography variant=\"body2\">{label}</Typography>\n </Button>\n );\n}\n","import React from 'react';\n\nimport {\n AccountCircleOutlined,\n BusinessOutlined,\n ContactMailOutlined,\n Crop32Outlined,\n HMobiledataOutlined,\n HorizontalRuleOutlined,\n HtmlOutlined,\n ImageOutlined,\n LibraryAddOutlined,\n NotesOutlined,\n SmartButtonOutlined,\n ViewColumnOutlined,\n} from '@mui/icons-material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { t } from '@i18n';\n\ntype TButtonProps = {\n label: string;\n icon: JSX.Element;\n block: () => TEditorBlock;\n};\nexport const BUTTONS: TButtonProps[] = [\n {\n label: 'Heading',\n icon: <HMobiledataOutlined />,\n block: () => ({\n type: 'Heading',\n data: {\n props: { text: t('default.heading', 'Hello friend') },\n style: {\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n },\n },\n }),\n },\n {\n label: 'Text',\n icon: <NotesOutlined />,\n block: () => ({\n type: 'Text',\n data: {\n props: { text: t('default.text', 'My new text block'), markdown: true },\n style: {\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n fontWeight: 'normal',\n },\n },\n }),\n },\n\n {\n label: 'Button',\n icon: <SmartButtonOutlined />,\n block: () => ({\n type: 'Button',\n data: {\n props: {\n text: t('default.button', 'Button'),\n url: 'https://example.com',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Image',\n icon: <ImageOutlined />,\n block: () => ({\n type: 'Image',\n data: {\n props: {\n url: 'https://placehold.co/600x400/EEE/999?text=Sample+Image',\n alt: t('default.image-alt', 'Sample product'),\n contentAlignment: 'middle',\n linkHref: null,\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Avatar',\n icon: <AccountCircleOutlined />,\n block: () => ({\n type: 'Avatar',\n data: {\n props: {\n imageUrl: 'https://ui-avatars.com/api/?size=128',\n shape: 'circle',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Personal Signature',\n icon: <ContactMailOutlined />,\n block: () => ({\n type: 'Signature',\n data: {\n props: {\n greeting: t('default.personal-greeting', 'Best regards,'),\n name: t('default.personal-name', 'John Doe'),\n title: t('default.personal-title', 'Software Engineer'),\n company: t('default.personal-company', 'Acme Inc.'),\n email: 'john@example.com',\n phone: '+1 234 567 890',\n imageUrl: 'https://ui-avatars.com/api/?name=John+Doe&size=128',\n imageSize: 64,\n imageShape: 'circle',\n layout: 'horizontal',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Company Signature',\n icon: <BusinessOutlined />,\n block: () => ({\n type: 'Signature',\n data: {\n props: {\n company: t('default.personal-company', 'Acme Inc.'),\n address: t('default.company-address', '123 Main Street, City, Country'),\n email: 'support@example.com',\n website: 'www.example.com',\n imageUrl: 'https://placehold.co/128x128/EEE/999?text=Logo',\n imageSize: 48,\n imageShape: 'rounded',\n layout: 'horizontal',\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Divider',\n icon: <HorizontalRuleOutlined />,\n block: () => ({\n type: 'Divider',\n data: {\n style: { padding: { top: 16, right: 0, bottom: 16, left: 0 } },\n props: {\n lineColor: '#CCCCCC',\n },\n },\n }),\n },\n {\n label: 'Spacer',\n icon: <Crop32Outlined />,\n block: () => ({\n type: 'Spacer',\n data: {},\n }),\n },\n {\n label: 'Html',\n icon: <HtmlOutlined />,\n block: () => ({\n type: 'Html',\n data: {\n props: { contents: `<strong>${t('default.html', 'Hello world')}</strong>` },\n style: {\n fontSize: 16,\n textAlign: null,\n padding: { top: 16, bottom: 16, left: 24, right: 24 },\n },\n },\n }),\n },\n {\n label: 'Columns',\n icon: <ViewColumnOutlined />,\n block: () => ({\n type: 'ColumnsContainer',\n data: {\n props: {\n columnsGap: 16,\n columnsCount: 3,\n columns: [{ childrenIds: [] }, { childrenIds: [] }, { childrenIds: [] }],\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n {\n label: 'Container',\n icon: <LibraryAddOutlined />,\n block: () => ({\n type: 'Container',\n data: {\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n }),\n },\n\n // { label: 'ProgressBar', icon: <ProgressBarOutlined />, block: () => ({}) },\n // { label: 'LoopContainer', icon: <ViewListOutlined />, block: () => ({}) },\n];\n","import React from 'react';\n\nimport { Box, Menu } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { t } from '@i18n';\n\nimport BlockButton from './block-button';\nimport { BUTTONS } from './buttons';\n\nconst LABEL_KEYS: Record<string, string> = {\n Heading: 'block-add.heading',\n Text: 'block-add.text',\n Button: 'block-add.button',\n Image: 'block-add.image',\n Avatar: 'block-add.avatar',\n 'Personal Signature': 'block-add.personal-signature',\n 'Company Signature': 'block-add.company-signature',\n Divider: 'block-add.divider',\n Spacer: 'block-add.spacer',\n Html: 'block-add.html',\n Columns: 'block-add.columns',\n Container: 'block-add.container',\n};\n\ntype BlocksMenuProps = {\n anchorEl: HTMLElement | null;\n setAnchorEl: (v: HTMLElement | null) => void;\n onSelect: (block: TEditorBlock) => void;\n};\nexport default function BlocksMenu({ anchorEl, setAnchorEl, onSelect }: BlocksMenuProps) {\n const onClose = () => {\n setAnchorEl(null);\n };\n\n const onClick = (block: TEditorBlock) => {\n onSelect(block);\n setAnchorEl(null);\n };\n\n if (anchorEl === null) {\n return null;\n }\n\n return (\n <Menu\n open\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n transformOrigin={{ vertical: 'top', horizontal: 'center' }}\n >\n <Box sx={{ p: 1, display: 'grid', gridTemplateColumns: '1fr 1fr 1fr 1fr' }}>\n {BUTTONS.map((k, i) => (\n <BlockButton\n key={i}\n label={LABEL_KEYS[k.label] ? t(LABEL_KEYS[k.label], k.label) : k.label}\n icon={k.icon}\n onClick={() => onClick(k.block())}\n />\n ))}\n </Box>\n </Menu>\n );\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { AddOutlined } from '@mui/icons-material';\nimport { Fade, IconButton } from '@mui/material';\n\ntype Props = {\n buttonElement: HTMLElement | null;\n onClick: () => void;\n};\nexport default function DividerButton({ buttonElement, onClick }: Props) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n function listener({ clientX, clientY }: MouseEvent) {\n if (!buttonElement) {\n return;\n }\n const rect = buttonElement.getBoundingClientRect();\n const rectY = rect.y;\n const bottomX = rect.x;\n const topX = bottomX + rect.width;\n\n if (Math.abs(clientY - rectY) < 20) {\n if (bottomX < clientX && clientX < topX) {\n setVisible(true);\n return;\n }\n }\n setVisible(false);\n }\n window.addEventListener('mousemove', listener);\n return () => {\n window.removeEventListener('mousemove', listener);\n };\n }, [buttonElement, setVisible]);\n\n return (\n <Fade in={visible}>\n <IconButton\n size=\"small\"\n sx={{\n p: 0.12,\n position: 'absolute',\n top: '-12px',\n left: '50%',\n transform: 'translateX(-10px)',\n bgcolor: 'brand.blue',\n color: 'primary.contrastText',\n zIndex: 'fab',\n '&:hover, &:active, &:focus': {\n bgcolor: 'brand.blue',\n color: 'primary.contrastText',\n },\n }}\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n >\n <AddOutlined fontSize=\"small\" />\n </IconButton>\n </Fade>\n );\n}\n","import React from 'react';\n\nimport { AddOutlined } from '@mui/icons-material';\nimport { ButtonBase } from '@mui/material';\n\ntype Props = {\n onClick: () => void;\n};\nexport default function PlaceholderButton({ onClick }: Props) {\n return (\n <ButtonBase\n onClick={(ev) => {\n ev.stopPropagation();\n onClick();\n }}\n sx={{\n display: 'flex',\n alignContent: 'center',\n justifyContent: 'center',\n height: 48,\n width: '100%',\n bgcolor: 'rgba(0,0,0, 0.05)',\n }}\n >\n <AddOutlined\n sx={{\n p: 0.12,\n bgcolor: 'brand.blue',\n borderRadius: 24,\n color: 'primary.contrastText',\n }}\n fontSize=\"small\"\n />\n </ButtonBase>\n );\n}\n","import React, { useState } from 'react';\n\nimport { TEditorBlock } from '@editor/core';\n\nimport BlocksMenu from './blocks-menu';\nimport DividerButton from './divider-button';\nimport PlaceholderButton from './placeholder-button';\n\ntype Props = {\n placeholder?: boolean;\n onSelect: (block: TEditorBlock) => void;\n};\nexport default function AddBlockButton({ onSelect, placeholder }: Props) {\n const [menuAnchorEl, setMenuAnchorEl] = useState<HTMLElement | null>(null);\n const [buttonElement, setButtonElement] = useState<HTMLElement | null>(null);\n\n const handleButtonClick = () => {\n setMenuAnchorEl(buttonElement);\n };\n\n const renderButton = () => {\n if (placeholder) {\n return <PlaceholderButton onClick={handleButtonClick} />;\n } else {\n return <DividerButton buttonElement={buttonElement} onClick={handleButtonClick} />;\n }\n };\n\n return (\n <>\n <div ref={setButtonElement} style={{ position: 'relative' }}>\n {renderButton()}\n </div>\n <BlocksMenu anchorEl={menuAnchorEl} setAnchorEl={setMenuAnchorEl} onSelect={onSelect} />\n </>\n );\n}\n","import React, { createContext, useContext } from 'react';\nimport type { ParentRef } from './move-block';\n\nexport type BlockParentInfo = {\n parent: ParentRef;\n indexInParent: number;\n};\n\nconst BlockParentContext = createContext<BlockParentInfo | null>(null);\n\n/**\n * Tells the subtree (an `EditorBlock` and its wrapper) which parent\n * container + slot it's rendered under. Used by the block wrapper to\n * construct the drag-source payload for canvas drag-and-drop.\n */\nexport function BlockParentProvider({\n info,\n children,\n}: {\n info: BlockParentInfo;\n children: React.ReactNode;\n}) {\n return <BlockParentContext.Provider value={info}>{children}</BlockParentContext.Provider>;\n}\n\nexport function useBlockParent(): BlockParentInfo | null {\n return useContext(BlockParentContext);\n}\n","import React, { Fragment, useState } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport EditorBlock from '@editor/editor-block';\nimport {\n getDraggingBlock,\n setDraggingBlock,\n setDocument,\n setSelectedBlockId,\n useDocument,\n useDraggingBlock,\n} from '@editor/editor-context';\n\nimport AddBlockButton from './add-block-menu';\nimport { BlockParentProvider } from '../block-parent-context';\nimport { buildMovePatch, isDescendant, type ParentRef } from '../move-block';\n\nexport type EditorChildrenChange = {\n blockId: string;\n block: TEditorBlock;\n childrenIds: string[];\n};\n\nfunction generateId() {\n return `block-${Date.now()}`;\n}\n\nexport type EditorChildrenIdsProps = {\n childrenIds: string[] | null | undefined;\n onChange: (val: EditorChildrenChange) => void;\n /** Parent context for DnD — see BlockParentContext. Required for drag/drop to work in this container. */\n parentRef?: ParentRef;\n};\n\nexport default function EditorChildrenIds({ childrenIds, onChange, parentRef }: EditorChildrenIdsProps) {\n const appendBlock = (block: TEditorBlock) => {\n const blockId = generateId();\n return onChange({\n blockId,\n block,\n childrenIds: [...(childrenIds || []), blockId],\n });\n };\n\n const insertBlock = (block: TEditorBlock, index: number) => {\n const blockId = generateId();\n const newChildrenIds = [...(childrenIds || [])];\n newChildrenIds.splice(index, 0, blockId);\n return onChange({\n blockId,\n block,\n childrenIds: newChildrenIds,\n });\n };\n\n if (!childrenIds || childrenIds.length === 0) {\n return (\n <>\n <AddBlockButton placeholder onSelect={appendBlock} />\n {parentRef && (\n <CanvasDropZone parentRef={parentRef} targetIndex={0} placeholder />\n )}\n </>\n );\n }\n\n return (\n <>\n {childrenIds.map((childId, i) => (\n <Fragment key={childId}>\n <AddBlockButton onSelect={(block) => insertBlock(block, i)} />\n {parentRef && <CanvasDropZone parentRef={parentRef} targetIndex={i} />}\n {parentRef ? (\n <BlockParentProvider info={{ parent: parentRef, indexInParent: i }}>\n <EditorBlock id={childId} />\n </BlockParentProvider>\n ) : (\n <EditorBlock id={childId} />\n )}\n </Fragment>\n ))}\n <AddBlockButton onSelect={appendBlock} />\n {parentRef && <CanvasDropZone parentRef={parentRef} targetIndex={childrenIds.length} />}\n </>\n );\n}\n\nfunction CanvasDropZone({\n parentRef,\n targetIndex,\n placeholder = false,\n}: {\n parentRef: ParentRef;\n targetIndex: number;\n placeholder?: boolean;\n}) {\n const document = useDocument();\n const dragging = useDraggingBlock();\n const [over, setOver] = useState(false);\n\n if (!dragging) return null;\n\n // Skip this drop zone if it would move the block into its own subtree, or if\n // it's the trivial \"drop on own position\" no-op.\n if (isDescendant(document, dragging.sourceId, parentRef.parentId)) return null;\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n setOver(true);\n };\n const handleDragLeave = () => setOver(false);\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setOver(false);\n const payload = getDraggingBlock();\n if (!payload) return;\n const patch = buildMovePatch(\n document,\n payload.sourceId,\n payload.sourceParent,\n parentRef,\n targetIndex,\n );\n if (patch) {\n setDocument(patch as any);\n setSelectedBlockId(payload.sourceId);\n }\n setDraggingBlock(null);\n };\n\n return (\n <Box\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n sx={{\n height: placeholder ? 64 : over ? 16 : 8,\n mx: placeholder ? 2 : 3,\n my: placeholder ? 0 : over ? 0.5 : 0,\n borderRadius: 1,\n backgroundColor: over ? 'rgba(25, 118, 210, 0.16)' : 'transparent',\n outline: over ? '1.5px dashed rgba(25, 118, 210, 0.8)' : undefined,\n transition: 'height 80ms, background-color 80ms, outline-color 80ms',\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { ColumnsContainer as BaseColumnsContainer } from '@blocks';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setSelectedBlockId } from '@editor/editor-context';\nimport EditorChildrenIds, { EditorChildrenChange } from '@editor/blocks/helpers/editor-children-ids';\n\nimport ColumnsContainerPropsSchema, { ColumnsContainerProps } from './columns-container-props-schema';\n\nconst EMPTY_COLUMNS = [{ childrenIds: [] }, { childrenIds: [] }, { childrenIds: [] }];\n\nexport default function ColumnsContainerEditor({ style, props }: ColumnsContainerProps) {\n const currentBlockId = useCurrentBlockId();\n\n const { columns, ...restProps } = props ?? {};\n const columnsValue = columns ?? EMPTY_COLUMNS;\n\n const updateColumn = (columnIndex: 0 | 1 | 2, { block, blockId, childrenIds }: EditorChildrenChange) => {\n const nColumns = [...columnsValue];\n nColumns[columnIndex] = { childrenIds };\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'ColumnsContainer',\n data: ColumnsContainerPropsSchema.parse({\n style,\n props: {\n ...restProps,\n columns: nColumns,\n },\n }),\n },\n });\n setSelectedBlockId(blockId);\n };\n\n return (\n <BaseColumnsContainer\n props={restProps}\n style={style}\n columns={[\n <EditorChildrenIds\n childrenIds={columns?.[0]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 0 }}\n onChange={(change) => updateColumn(0, change)}\n />,\n <EditorChildrenIds\n childrenIds={columns?.[1]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 1 }}\n onChange={(change) => updateColumn(1, change)}\n />,\n <EditorChildrenIds\n childrenIds={columns?.[2]?.childrenIds}\n parentRef={{ kind: 'ColumnsContainer', parentId: currentBlockId, columnIndex: 2 }}\n onChange={(change) => updateColumn(2, change)}\n />,\n ]}\n />\n );\n}\n","import React from 'react';\n\nimport { Container as BaseContainer } from '@blocks';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setSelectedBlockId, useDocument } from '@editor/editor-context';\nimport EditorChildrenIds from '@editor/blocks/helpers/editor-children-ids';\n\nimport { ContainerProps } from './container-props-schema';\n\nexport default function ContainerEditor({ style, props }: ContainerProps) {\n const childrenIds = props?.childrenIds ?? [];\n\n const document = useDocument();\n const currentBlockId = useCurrentBlockId();\n\n return (\n <BaseContainer style={style}>\n <EditorChildrenIds\n childrenIds={childrenIds}\n parentRef={{ kind: 'Container', parentId: currentBlockId }}\n onChange={({ block, blockId, childrenIds }) => {\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'Container',\n data: {\n ...document[currentBlockId].data,\n props: { childrenIds: childrenIds },\n },\n },\n });\n setSelectedBlockId(blockId);\n }}\n />\n </BaseContainer>\n );\n}\n","import React, { useCallback, useEffect } from 'react';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { replaceDocument, setDocument, setSelectedBlockId, useDocument, useSelectedBlockId } from '@editor/editor-context';\nimport { TEditorBlock } from '@editor/core';\nimport EditorChildrenIds from '@editor/blocks/helpers/editor-children-ids';\n\nimport { EmailLayoutProps } from './email-layout-props-schema';\n\nfunction generateId() {\n return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction rekeyBlocks(blocks: Record<string, any>, rootBlockId: string): { blocks: Record<string, any>; newRootId: string } {\n const idMap: Record<string, string> = {};\n for (const oldId of Object.keys(blocks)) {\n idMap[oldId] = generateId();\n }\n\n const remapIds = (ids: string[] | null | undefined) =>\n ids?.map((id) => idMap[id] ?? id);\n\n const newBlocks: Record<string, any> = {};\n for (const [oldId, block] of Object.entries(blocks)) {\n const b = block as TEditorBlock;\n const newId = idMap[oldId];\n if (b.type === 'Container') {\n newBlocks[newId] = {\n ...b,\n data: {\n ...b.data,\n props: { ...b.data.props, childrenIds: remapIds(b.data.props?.childrenIds) },\n },\n };\n } else if (b.type === 'ColumnsContainer') {\n newBlocks[newId] = {\n ...b,\n data: {\n ...b.data,\n props: {\n ...b.data.props,\n columns: b.data.props?.columns?.map((c: any) => ({\n ...c,\n childrenIds: remapIds(c.childrenIds),\n })),\n },\n },\n };\n } else {\n newBlocks[newId] = b;\n }\n }\n return { blocks: newBlocks, newRootId: idMap[rootBlockId] };\n}\n\nfunction collectBlock(blockId: string, document: Record<string, any>): Record<string, any> {\n const block = document[blockId] as TEditorBlock;\n if (!block) return {};\n const result: Record<string, any> = { [blockId]: block };\n if (block.type === 'Container') {\n for (const childId of block.data.props?.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n if (block.type === 'ColumnsContainer') {\n for (const col of block.data.props?.columns ?? []) {\n for (const childId of col.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n }\n return result;\n}\n\nfunction getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) {\n const f = fontFamily ?? 'MODERN_SANS';\n switch (f) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n}\n\nexport default function EmailLayoutEditor(props: EmailLayoutProps) {\n const childrenIds = props.childrenIds ?? [];\n const document = useDocument();\n const currentBlockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n\n const handleDelete = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Delete' && e.key !== 'Backspace') return;\n if (!selectedBlockId) return;\n\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n e.preventDefault();\n\n const filterChildrenIds = (ids: string[] | null | undefined) =>\n ids?.filter((id) => id !== selectedBlockId);\n\n const nDocument: Record<string, any> = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === selectedBlockId) continue;\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = { ...block, data: { ...block.data, childrenIds: filterChildrenIds(block.data.childrenIds) } };\n break;\n case 'Container':\n nDocument[id] = { ...block, data: { ...block.data, props: { ...block.data.props, childrenIds: filterChildrenIds(block.data.props?.childrenIds) } } };\n break;\n case 'ColumnsContainer':\n nDocument[id] = { ...block, data: { ...block.data, props: { ...block.data.props, columns: block.data.props?.columns?.map((c: any) => ({ ...c, childrenIds: filterChildrenIds(c.childrenIds) })) } } };\n break;\n default:\n nDocument[id] = block;\n }\n }\n delete nDocument[selectedBlockId];\n replaceDocument(nDocument as any);\n }, [selectedBlockId, document]);\n\n const handleCopy = useCallback((e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key !== 'c') return;\n if (!selectedBlockId) return;\n\n // Don't intercept when typing in an input/textarea\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n const blocks = collectBlock(selectedBlockId, document);\n if (Object.keys(blocks).length === 0) return;\n\n e.preventDefault();\n const payload = JSON.stringify({ __emailEditorBlocks: true, rootBlockId: selectedBlockId, blocks });\n navigator.clipboard.writeText(payload);\n }, [selectedBlockId, document]);\n\n const handlePaste = useCallback(async (e: ClipboardEvent) => {\n // Don't intercept paste when typing in an input/textarea\n const target = e.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n const text = e.clipboardData?.getData('text/plain');\n if (!text) return;\n\n let parsed: any;\n try {\n parsed = JSON.parse(text);\n } catch {\n return;\n }\n\n if (!parsed?.__emailEditorBlocks || !parsed.rootBlockId || !parsed.blocks) return;\n\n e.preventDefault();\n\n const { blocks: newBlocks, newRootId } = rekeyBlocks(parsed.blocks, parsed.rootBlockId);\n const doc = { ...document };\n\n // Add all new blocks to the document\n Object.assign(doc, newBlocks);\n\n // Insert after selected block, or append to end\n const currentChildrenIds = [...(childrenIds || [])];\n const insertIndex = selectedBlockId ? currentChildrenIds.indexOf(selectedBlockId) + 1 : currentChildrenIds.length;\n currentChildrenIds.splice(insertIndex, 0, newRootId);\n\n doc[currentBlockId] = {\n type: 'EmailLayout',\n data: {\n ...document[currentBlockId].data,\n childrenIds: currentChildrenIds,\n },\n };\n\n replaceDocument(doc);\n setSelectedBlockId(newRootId);\n }, [document, childrenIds, selectedBlockId, currentBlockId]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleDelete);\n window.addEventListener('keydown', handleCopy);\n window.addEventListener('paste', handlePaste);\n return () => {\n window.removeEventListener('keydown', handleDelete);\n window.removeEventListener('keydown', handleCopy);\n window.removeEventListener('paste', handlePaste);\n };\n }, [handleDelete, handleCopy, handlePaste]);\n\n const baseStyle: React.CSSProperties = {\n color: props.textColor ?? '#262626',\n fontFamily: getFontFamily(props.fontFamily),\n fontSize: '16px',\n fontWeight: '400',\n letterSpacing: '0.15008px',\n lineHeight: '1.5',\n margin: '0',\n };\n\n const editorChildren = (\n <EditorChildrenIds\n childrenIds={childrenIds}\n parentRef={{ kind: 'EmailLayout', parentId: 'root' }}\n onChange={({ block, blockId, childrenIds }) => {\n setDocument({\n [blockId]: block,\n [currentBlockId]: {\n type: 'EmailLayout',\n data: {\n ...document[currentBlockId].data,\n childrenIds: childrenIds,\n },\n },\n });\n setSelectedBlockId(blockId);\n }}\n />\n );\n\n // Editor-only chrome: framing around the 600-px canvas on wide screens.\n // The workspace background (solid or checkerboard) is painted by the parent\n // TemplatePanel so it fills the entire out-of-canvas area; this wrapper\n // stays transparent to let it show through. None of this ships with the\n // rendered email — EmailLayoutReader is unchanged.\n const CARD_MAX_WIDTH = 664; // 600 canvas + 32px horizontal padding\n // Note: no `overflow: hidden` on the card — the per-block TuneMenu renders\n // icon controls that sit slightly outside the block's rectangle, and clipping\n // them here would hide the move-up/down/copy/delete affordances.\n const cardStyle: React.CSSProperties = {\n maxWidth: CARD_MAX_WIDTH,\n margin: '0 auto',\n borderRadius: 12,\n boxShadow: '0 1px 2px rgba(33, 36, 67, 0.05), 0 8px 24px rgba(33, 36, 67, 0.08)',\n };\n\n if (props.backdropDisabled) {\n return (\n <div\n onClick={() => {\n setSelectedBlockId(null);\n }}\n style={{\n ...baseStyle,\n padding: '32px',\n width: '100%',\n minHeight: '100%',\n }}\n >\n <div\n style={{\n ...cardStyle,\n backgroundColor: '#F5F5F5',\n padding: '32px',\n }}\n >\n <div style={{ maxWidth: '600px', margin: '0 auto' }}>{editorChildren}</div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n onClick={() => {\n setSelectedBlockId(null);\n }}\n style={{\n ...baseStyle,\n padding: '32px 16px',\n width: '100%',\n minHeight: '100%',\n }}\n >\n <div\n style={{\n ...cardStyle,\n backgroundColor: props.backdropColor ?? '#F5F5F5',\n padding: '32px 0',\n }}\n >\n <table\n align=\"center\"\n width=\"100%\"\n style={{\n margin: '0 auto',\n maxWidth: '600px',\n backgroundColor: props.canvasColor ?? '#FFFFFF',\n borderRadius: props.borderRadius ?? undefined,\n overflow: props.borderRadius ? 'hidden' : undefined,\n border: (() => {\n const v = props.borderColor;\n if (!v) {\n return undefined;\n }\n return `1px solid ${v}`;\n })(),\n }}\n role=\"presentation\"\n cellSpacing=\"0\"\n cellPadding=\"0\"\n border={0}\n >\n <tbody>\n <tr style={{ width: '100%' }}>\n <td>{editorChildren}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { ArrowDownwardOutlined, ArrowUpwardOutlined, ContentCopyOutlined, DeleteOutlined } from '@mui/icons-material';\nimport { IconButton, Paper, Stack, SxProps, Tooltip } from '@mui/material';\n\nimport { TEditorBlock } from '@editor/core';\nimport { resetDocument, setSelectedBlockId, useDocument } from '@editor/editor-context';\nimport { ColumnsContainerProps } from '@editor/blocks/columns-container/columns-container-props-schema';\nimport { t } from '@i18n';\n\nconst sx: SxProps = {\n position: 'absolute',\n top: 0,\n left: -56,\n borderRadius: 64,\n paddingX: 0.5,\n paddingY: 1,\n zIndex: 'fab',\n};\n\nfunction collectBlock(blockId: string, document: Record<string, any>): Record<string, any> {\n const block = document[blockId] as TEditorBlock;\n if (!block) return {};\n const result: Record<string, any> = { [blockId]: block };\n\n // Collect children from Container\n if (block.type === 'Container') {\n const childrenIds = block.data.props?.childrenIds ?? [];\n for (const childId of childrenIds) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n // Collect children from ColumnsContainer\n if (block.type === 'ColumnsContainer') {\n const columns = block.data.props?.columns ?? [];\n for (const col of columns) {\n for (const childId of col.childrenIds ?? []) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n }\n // Collect children from EmailLayout\n if (block.type === 'EmailLayout') {\n const childrenIds = block.data.childrenIds ?? [];\n for (const childId of childrenIds) {\n Object.assign(result, collectBlock(childId, document));\n }\n }\n return result;\n}\n\ntype Props = {\n blockId: string;\n};\nexport default function TuneMenu({ blockId }: Props) {\n const document = useDocument();\n\n const handleDeleteClick = () => {\n const filterChildrenIds = (childrenIds: string[] | null | undefined) => {\n if (!childrenIds) {\n return childrenIds;\n }\n return childrenIds.filter((f) => f !== blockId);\n };\n const nDocument: typeof document = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === blockId) {\n continue;\n }\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n childrenIds: filterChildrenIds(block.data.childrenIds),\n },\n };\n break;\n case 'Container':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n props: {\n ...block.data.props,\n childrenIds: filterChildrenIds(block.data.props?.childrenIds),\n },\n },\n };\n break;\n case 'ColumnsContainer':\n nDocument[id] = {\n type: 'ColumnsContainer',\n data: {\n style: block.data.style,\n props: {\n ...block.data.props,\n columns: block.data.props?.columns?.map((c) => ({\n childrenIds: filterChildrenIds(c.childrenIds),\n })),\n },\n } as ColumnsContainerProps,\n };\n break;\n default:\n nDocument[id] = block;\n }\n }\n delete nDocument[blockId];\n resetDocument(nDocument);\n };\n\n const handleCopyClick = () => {\n const blocks = collectBlock(blockId, document);\n const payload = JSON.stringify({ __emailEditorBlocks: true, rootBlockId: blockId, blocks });\n navigator.clipboard.writeText(payload);\n };\n\n const handleMoveClick = (direction: 'up' | 'down') => {\n const moveChildrenIds = (ids: string[] | null | undefined) => {\n if (!ids) {\n return ids;\n }\n const index = ids.indexOf(blockId);\n if (index < 0) {\n return ids;\n }\n const childrenIds = [...ids];\n if (direction === 'up' && index > 0) {\n [childrenIds[index], childrenIds[index - 1]] = [childrenIds[index - 1], childrenIds[index]];\n } else if (direction === 'down' && index < childrenIds.length - 1) {\n [childrenIds[index], childrenIds[index + 1]] = [childrenIds[index + 1], childrenIds[index]];\n }\n return childrenIds;\n };\n const nDocument: typeof document = { ...document };\n for (const [id, b] of Object.entries(nDocument)) {\n const block = b as TEditorBlock;\n if (id === blockId) {\n continue;\n }\n switch (block.type) {\n case 'EmailLayout':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n childrenIds: moveChildrenIds(block.data.childrenIds),\n },\n };\n break;\n case 'Container':\n nDocument[id] = {\n ...block,\n data: {\n ...block.data,\n props: {\n ...block.data.props,\n childrenIds: moveChildrenIds(block.data.props?.childrenIds),\n },\n },\n };\n break;\n case 'ColumnsContainer':\n nDocument[id] = {\n type: 'ColumnsContainer',\n data: {\n style: block.data.style,\n props: {\n ...block.data.props,\n columns: block.data.props?.columns?.map((c) => ({\n childrenIds: moveChildrenIds(c.childrenIds),\n })),\n },\n } as ColumnsContainerProps,\n };\n break;\n default:\n nDocument[id] = block;\n }\n }\n\n resetDocument(nDocument);\n setSelectedBlockId(blockId);\n };\n\n return (\n <Paper sx={sx} onClick={(ev) => ev.stopPropagation()}>\n <Stack>\n <Tooltip title={t('tune.move-up', 'Move up')} placement=\"left-start\">\n <IconButton aria-label={t('tune.move-up', 'Move up')} onClick={() => handleMoveClick('up')} sx={{ color: 'text.primary' }}>\n <ArrowUpwardOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.move-down', 'Move down')} placement=\"left-start\">\n <IconButton aria-label={t('tune.move-down', 'Move down')} onClick={() => handleMoveClick('down')} sx={{ color: 'text.primary' }}>\n <ArrowDownwardOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.copy', 'Copy block')} placement=\"left-start\">\n <IconButton aria-label={t('tune.copy', 'Copy block')} onClick={handleCopyClick} sx={{ color: 'text.primary' }}>\n <ContentCopyOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={t('tune.delete', 'Delete')} placement=\"left-start\">\n <IconButton aria-label={t('tune.delete', 'Delete')} onClick={handleDeleteClick} sx={{ color: 'text.primary' }}>\n <DeleteOutlined fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Stack>\n </Paper>\n );\n}\n","import React, { CSSProperties, useState } from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport {\n setDraggingBlock,\n setSelectedBlockId,\n useDraggingBlock,\n useHoveredBlockId,\n useSelectedBlockId,\n} from '@editor/editor-context';\n\nimport { useBlockParent } from '../block-parent-context';\n\nimport TuneMenu from './tune-menu';\n\ntype TEditorBlockWrapperProps = {\n children: JSX.Element;\n};\n\nexport default function EditorBlockWrapper({ children }: TEditorBlockWrapperProps) {\n const selectedBlockId = useSelectedBlockId();\n const hoveredBlockId = useHoveredBlockId();\n const draggingBlock = useDraggingBlock();\n const blockParent = useBlockParent();\n const [mouseInside, setMouseInside] = useState(false);\n const blockId = useCurrentBlockId();\n\n const isBeingDragged = draggingBlock?.sourceId === blockId;\n\n let outline: CSSProperties['outline'];\n if (selectedBlockId === blockId) {\n outline = '2px solid rgba(0,121,204, 1)';\n } else if ((mouseInside && !draggingBlock) || hoveredBlockId === blockId) {\n outline = '2px solid rgba(0,121,204, 0.3)';\n }\n\n const renderMenu = () => {\n if (selectedBlockId !== blockId) {\n return null;\n }\n return <TuneMenu blockId={blockId} />;\n };\n\n // Drag support: only enable when the wrapper has a parent context — the\n // root EmailLayout (which owns its own drag-free surface) has no parent.\n // Also disable while the block is selected so click-drag and Shift+Arrow\n // work for text selection inside the textarea.\n const draggable = Boolean(blockParent) && selectedBlockId !== blockId;\n\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {\n if (!blockParent) return;\n e.stopPropagation();\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', blockId);\n setDraggingBlock({ sourceId: blockId, sourceParent: blockParent.parent });\n };\n\n const handleDragEnd = () => {\n setDraggingBlock(null);\n };\n\n return (\n <Box\n draggable={draggable}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n sx={{\n position: 'relative',\n maxWidth: '100%',\n outlineOffset: '-1px',\n outline,\n opacity: isBeingDragged ? 0.4 : 1,\n cursor: draggable ? (draggingBlock ? 'grabbing' : 'default') : 'default',\n }}\n onMouseEnter={(ev) => {\n setMouseInside(true);\n ev.stopPropagation();\n }}\n onMouseLeave={() => {\n setMouseInside(false);\n }}\n onClick={(ev) => {\n setSelectedBlockId(blockId);\n ev.stopPropagation();\n }}\n >\n {renderMenu()}\n {children}\n </Box>\n );\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { ButtonProps, ButtonPropsDefaults } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useSelectedBlockId } from '@editor/editor-context';\n\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n }\n return undefined;\n}\n\nconst getPadding = (padding: { top: number; right: number; bottom: number; left: number } | null | undefined) =>\n padding ? `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px` : undefined;\n\nfunction getRoundedCorners(props: ButtonProps['props']) {\n const buttonStyle = props?.buttonStyle ?? ButtonPropsDefaults.buttonStyle;\n switch (buttonStyle) {\n case 'rectangle':\n return undefined;\n case 'pill':\n return 64;\n case 'rounded':\n default:\n return 4;\n }\n}\n\nfunction getButtonSizePadding(props: ButtonProps['props']) {\n const size = props?.size ?? ButtonPropsDefaults.size;\n switch (size) {\n case 'x-small':\n return [4, 8] as const;\n case 'small':\n return [8, 12] as const;\n case 'large':\n return [16, 32] as const;\n case 'medium':\n default:\n return [12, 20] as const;\n }\n}\n\nexport default function ButtonEditor({ style, props }: ButtonProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const text = props?.text ?? ButtonPropsDefaults.text;\n const fullWidth = props?.fullWidth ?? ButtonPropsDefaults.fullWidth;\n const buttonTextColor = props?.buttonTextColor ?? ButtonPropsDefaults.buttonTextColor;\n const buttonBackgroundColor = props?.buttonBackgroundColor ?? ButtonPropsDefaults.buttonBackgroundColor;\n\n const [localText, setLocalText] = useState(text);\n\n useEffect(() => {\n setLocalText(text);\n }, [text]);\n\n const padding = getButtonSizePadding(props);\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n };\n\n const linkStyle: CSSProperties = {\n color: buttonTextColor,\n fontSize: style?.fontSize ?? 16,\n fontFamily: getFontFamily(style?.fontFamily),\n fontWeight: style?.fontWeight ?? 'bold',\n backgroundColor: buttonBackgroundColor,\n borderRadius: getRoundedCorners(props),\n display: fullWidth ? 'block' : 'inline-block',\n padding: `${padding[0]}px ${padding[1]}px`,\n textDecoration: 'none',\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newText = e.target.value;\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Button',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n },\n },\n },\n });\n };\n\n if (isSelected) {\n const inputStyle: CSSProperties = {\n ...linkStyle,\n border: 'none',\n outline: 'none',\n cursor: 'text',\n width: fullWidth ? '100%' : undefined,\n textAlign: 'center',\n };\n\n const trackFocus = (e: React.SyntheticEvent<HTMLInputElement>) => {\n const el = e.currentTarget;\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: el.selectionStart ?? el.value.length,\n selectionEnd: el.selectionEnd ?? el.value.length,\n });\n };\n\n return (\n <div style={wrapperStyle}>\n <input\n type=\"text\"\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={inputStyle}\n />\n </div>\n );\n }\n\n return (\n <div style={wrapperStyle}>\n <span style={linkStyle}>\n <span>{text}</span>\n </span>\n </div>\n );\n}\n","import { RefObject, useCallback, useEffect, useRef, useState } from 'react';\n\nexport type MarkdownToolbarSelection = { start: number; end: number };\nexport type MarkdownToolbarPrompt = 'none' | 'link' | 'color' | 'font';\n\ntype Options = {\n text: string;\n isSelected: boolean;\n commitText: (newText: string) => void;\n trackSelection?: (selection: MarkdownToolbarSelection) => void;\n};\n\nexport function useMarkdownToolbar({ text, isSelected, commitText, trackSelection }: Options) {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const [selection, setSelection] = useState<MarkdownToolbarSelection>({ start: 0, end: 0 });\n const [activePrompt, setActivePrompt] = useState<MarkdownToolbarPrompt>('none');\n const pendingSelectionRef = useRef<MarkdownToolbarSelection | null>(null);\n\n const textRef = useRef(text);\n useEffect(() => {\n textRef.current = text;\n }, [text]);\n\n const syncSelection = useCallback(\n (start: number, end: number) => {\n const next = { start, end };\n setSelection(next);\n trackSelection?.(next);\n },\n [trackSelection]\n );\n\n const trackFocus = useCallback(\n (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const el = e.currentTarget;\n const start = el.selectionStart ?? el.value.length;\n const end = el.selectionEnd ?? el.value.length;\n syncSelection(start, end);\n },\n [syncSelection]\n );\n\n useEffect(() => {\n const target = pendingSelectionRef.current;\n if (!target) return;\n const ta = textareaRef.current;\n if (!ta) return;\n ta.focus();\n ta.setSelectionRange(target.start, target.end);\n syncSelection(target.start, target.end);\n pendingSelectionRef.current = null;\n }, [text, syncSelection]);\n\n useEffect(() => {\n if (!isSelected || selection.start === selection.end) {\n setActivePrompt('none');\n }\n }, [isSelected, selection.start, selection.end]);\n\n const wrapSelection = (prefix: string, suffix: string) => {\n const ta = textareaRef.current;\n if (!ta) return;\n // Prefer the textarea's live selection when it's non-empty. If the\n // textarea's DOM selection has collapsed (e.g. because a native color\n // picker briefly stole focus), fall back to the last tracked React-state\n // selection so async popover flows still find the right range.\n let start = ta.selectionStart ?? selection.start;\n let end = ta.selectionEnd ?? selection.end;\n if (start === end) {\n start = selection.start;\n end = selection.end;\n }\n if (start === end) return;\n const current = textRef.current;\n const selected = current.slice(start, end);\n const before = current.slice(0, start);\n const after = current.slice(end);\n const wrapped = `${prefix}${selected}${suffix}`;\n const newText = `${before}${wrapped}${after}`;\n const newStart = start + prefix.length;\n const newEnd = newStart + selected.length;\n pendingSelectionRef.current = { start: newStart, end: newEnd };\n commitText(newText);\n };\n\n const handleBold = () => wrapSelection('**', '**');\n const handleItalic = () => wrapSelection('*', '*');\n const handleUnderline = () => wrapSelection('<u>', '</u>');\n const handleOverline = () =>\n wrapSelection('<span style=\"text-decoration:overline\">', '</span>');\n\n const openPrompt = (kind: Exclude<MarkdownToolbarPrompt, 'none'>) => {\n if (selection.start === selection.end) return;\n setActivePrompt(kind);\n };\n const cancelPrompt = () => {\n setActivePrompt('none');\n textareaRef.current?.focus();\n };\n\n const handleLinkRequest = () => openPrompt('link');\n const handleColorRequest = () => openPrompt('color');\n const handleFontRequest = () => openPrompt('font');\n\n const handleLinkSubmit = (url: string) => {\n const start = selection.start;\n const end = selection.end;\n if (start === end) {\n setActivePrompt('none');\n return;\n }\n const current = textRef.current;\n const selected = current.slice(start, end);\n const before = current.slice(0, start);\n const after = current.slice(end);\n const wrapped = `[${selected}](${url})`;\n const newText = `${before}${wrapped}${after}`;\n const newStart = start + wrapped.length;\n pendingSelectionRef.current = { start: newStart, end: newStart };\n commitText(newText);\n setActivePrompt('none');\n };\n\n const handleColorSubmit = (color: string) => {\n wrapSelection(`<span style=\"color: ${color}\">`, '</span>');\n setActivePrompt('none');\n };\n\n const handleFontSubmit = (fontFamily: string) => {\n wrapSelection(`<span style=\"font-family: ${fontFamily}\">`, '</span>');\n setActivePrompt('none');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!(e.metaKey || e.ctrlKey)) return;\n const key = e.key.toLowerCase();\n if (key === 'b') {\n e.preventDefault();\n handleBold();\n } else if (key === 'i') {\n e.preventDefault();\n handleItalic();\n } else if (key === 'u') {\n e.preventDefault();\n handleUnderline();\n } else if (key === 'k') {\n e.preventDefault();\n handleLinkRequest();\n }\n };\n\n const toolbarVisible = isSelected && (selection.start !== selection.end || activePrompt !== 'none');\n\n return {\n textareaRef: textareaRef as RefObject<HTMLTextAreaElement>,\n selection,\n trackFocus,\n handleKeyDown,\n toolbarProps: {\n visible: toolbarVisible,\n activePrompt,\n onBold: handleBold,\n onItalic: handleItalic,\n onUnderline: handleUnderline,\n onOverline: handleOverline,\n onLinkRequest: handleLinkRequest,\n onLinkSubmit: handleLinkSubmit,\n onColorRequest: handleColorRequest,\n onColorSubmit: handleColorSubmit,\n onFontRequest: handleFontRequest,\n onFontSubmit: handleFontSubmit,\n onPromptCancel: cancelPrompt,\n },\n };\n}\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport {\n FormatBoldOutlined,\n FormatColorTextOutlined,\n FormatItalicOutlined,\n FormatOverlineOutlined,\n FormatUnderlinedOutlined,\n LinkOutlined,\n TextFieldsOutlined,\n} from '@mui/icons-material';\nimport { IconButton, MenuItem, Paper, Popper, Select, Stack, TextField } from '@mui/material';\n\nimport { t } from '@i18n';\n\nimport type { MarkdownToolbarPrompt } from '../helpers/use-markdown-toolbar';\n\ntype Props = {\n anchorEl: HTMLElement | null;\n visible: boolean;\n activePrompt: MarkdownToolbarPrompt;\n onBold: () => void;\n onItalic: () => void;\n onUnderline: () => void;\n onOverline: () => void;\n onLinkRequest: () => void;\n onLinkSubmit: (url: string) => void;\n onColorRequest: () => void;\n onColorSubmit: (color: string) => void;\n onFontRequest: () => void;\n onFontSubmit: (fontFamily: string) => void;\n onPromptCancel: () => void;\n};\n\n// Stack aligned with the sidebar font-family options. Values are the CSS\n// font-family strings emitted for each choice; labels are shown to the user.\nconst FONT_OPTIONS: Array<{ label: string; value: string }> = [\n {\n label: 'Modern sans',\n value: '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif',\n },\n {\n label: 'Book sans',\n value: 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif',\n },\n {\n label: 'Organic sans',\n value: 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif',\n },\n {\n label: 'Geometric sans',\n value: 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif',\n },\n {\n label: 'Modern serif',\n value: 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif',\n },\n {\n label: 'Book serif',\n value: '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif',\n },\n {\n label: 'Monospace',\n value: '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace',\n },\n];\n\nexport default function InlineFormattingToolbar({\n anchorEl,\n visible,\n activePrompt,\n onBold,\n onItalic,\n onUnderline,\n onOverline,\n onLinkRequest,\n onLinkSubmit,\n onColorRequest,\n onColorSubmit,\n onFontRequest,\n onFontSubmit,\n onPromptCancel,\n}: Props) {\n const [url, setUrl] = useState('');\n const [color, setColor] = useState('#000000');\n const [font, setFont] = useState(FONT_OPTIONS[0].value);\n const urlRef = useRef<HTMLInputElement>(null);\n const colorRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (activePrompt === 'link') {\n setUrl('');\n setTimeout(() => urlRef.current?.focus(), 0);\n } else if (activePrompt === 'color') {\n setColor('#000000');\n // Auto-open the native color picker so the user doesn't have to click\n // the tiny swatch to find it. Small delay lets the popper mount first.\n setTimeout(() => colorRef.current?.click(), 0);\n } else if (activePrompt === 'font') {\n setFont(FONT_OPTIONS[0].value);\n }\n }, [activePrompt]);\n\n const preventBlur = (e: React.MouseEvent) => e.preventDefault();\n\n return (\n <Popper open={visible} anchorEl={anchorEl} placement=\"top-start\" style={{ zIndex: 1300 }}>\n <Paper elevation={4} sx={{ px: 0.5, py: 0.25, mb: 0.5 }} onMouseDown={preventBlur}>\n {activePrompt === 'link' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5 }}>\n <TextField\n inputRef={urlRef}\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://example.com\"\n variant=\"standard\"\n size=\"small\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = url.trim();\n if (trimmed) onLinkSubmit(trimmed);\n else onPromptCancel();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onPromptCancel();\n }\n }}\n sx={{ width: 220 }}\n />\n </Stack>\n ) : activePrompt === 'color' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5, py: 0.25 }}>\n <input\n ref={colorRef}\n type=\"color\"\n value={color}\n onChange={(e) => {\n const v = e.target.value;\n setColor(v);\n // Native color pickers fire `change` once the user confirms a\n // color; apply immediately so there's no separate Apply step.\n onColorSubmit(v);\n }}\n style={{ width: 40, height: 28, border: 'none', padding: 0, background: 'transparent', cursor: 'pointer' }}\n />\n <IconButton size=\"small\" onClick={onPromptCancel} title={t('common.cancel', 'Cancel')}>\n <FormatColorTextOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n ) : activePrompt === 'font' ? (\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5} sx={{ px: 0.5, py: 0.25 }}>\n <Select\n value={font}\n onChange={(e) => {\n const v = e.target.value as string;\n setFont(v);\n // Apply the font as soon as the user picks one.\n onFontSubmit(v);\n }}\n size=\"small\"\n variant=\"standard\"\n sx={{ minWidth: 180, fontSize: 13 }}\n >\n {FONT_OPTIONS.map((opt) => (\n <MenuItem key={opt.value} value={opt.value} sx={{ fontFamily: opt.value }}>\n {opt.label}\n </MenuItem>\n ))}\n </Select>\n <IconButton size=\"small\" onClick={onPromptCancel} title={t('common.cancel', 'Cancel')}>\n <TextFieldsOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n ) : (\n <Stack direction=\"row\" spacing={0.25}>\n <IconButton size=\"small\" onClick={onBold} title={t('toolbar.bold-shortcut', 'Bold (Cmd+B)')} aria-label={t('toolbar.bold', 'Bold')}>\n <FormatBoldOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onItalic} title={t('toolbar.italic-shortcut', 'Italic (Cmd+I)')} aria-label={t('toolbar.italic', 'Italic')}>\n <FormatItalicOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onUnderline} title={t('toolbar.underline-shortcut', 'Underline (Cmd+U)')} aria-label={t('toolbar.underline', 'Underline')}>\n <FormatUnderlinedOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onOverline} title={t('toolbar.overline', 'Overline')} aria-label={t('toolbar.overline', 'Overline')}>\n <FormatOverlineOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onColorRequest} title={t('toolbar.text-color', 'Text color')} aria-label={t('toolbar.text-color', 'Text color')}>\n <FormatColorTextOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onFontRequest} title={t('toolbar.font-family', 'Font family')} aria-label={t('toolbar.font-family', 'Font family')}>\n <TextFieldsOutlined fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onLinkRequest} title={t('toolbar.link-shortcut', 'Link (Cmd+K)')} aria-label={t('toolbar.link', 'Link')}>\n <LinkOutlined fontSize=\"small\" />\n </IconButton>\n </Stack>\n )}\n </Paper>\n </Popper>\n );\n}\n","import React, { useState, useEffect, useLayoutEffect, useRef, CSSProperties } from 'react';\nimport { HeadingProps, HeadingPropsDefaults, renderInlineMarkdownString } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useDocument, useSelectedBlockId } from '@editor/editor-context';\n\nimport { useMarkdownToolbar } from '../helpers/use-markdown-toolbar';\nimport InlineFormattingToolbar from '../text/inline-formatting-toolbar';\n\n// Helper function to get font family from existing Heading component\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n case 'inherit':\n case null:\n case undefined:\n return undefined;\n }\n return undefined;\n}\n\n// Helper function to get padding from existing utils\nfunction getPadding(padding: any) {\n if (!padding) return undefined;\n\n // Object format from the schema (matching the original blocks)\n if (typeof padding === 'object' && !Array.isArray(padding) &&\n 'top' in padding && 'right' in padding && 'bottom' in padding && 'left' in padding) {\n return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n }\n\n // For backward compatibility with the array format\n if (Array.isArray(padding)) {\n if (padding.length === 1) {\n return `${padding[0]}px`;\n }\n if (padding.length === 2) {\n return `${padding[0]}px ${padding[1]}px`;\n }\n if (padding.length === 3) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px`;\n }\n if (padding.length === 4) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px ${padding[3]}px`;\n }\n }\n\n // For single number\n if (typeof padding === 'number') {\n return `${padding}px`;\n }\n\n return undefined;\n}\n\n// Helper function to get font size based on heading level\nfunction getFontSize(level: 'h1' | 'h2' | 'h3') {\n switch (level) {\n case 'h1':\n return 32;\n case 'h2':\n return 24;\n case 'h3':\n return 20;\n }\n}\n\nexport default function HeadingEditor({ style, props }: HeadingProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const document = useDocument();\n const isSelected = selectedBlockId === blockId;\n\n const level = props?.level ?? HeadingPropsDefaults.level;\n const textContent = props?.text ?? HeadingPropsDefaults.text;\n const [localText, setLocalText] = useState(textContent);\n const isMarkdown = props?.markdown ?? false;\n\n const rootBlock = document.root;\n const rootFontFamily = rootBlock && rootBlock.type === 'EmailLayout'\n ? getFontFamily(rootBlock.data.fontFamily)\n : '\"Helvetica Neue\", Arial, sans-serif';\n\n useEffect(() => {\n setLocalText(textContent);\n }, [textContent]);\n\n const fontFamily = getFontFamily(style?.fontFamily) || rootFontFamily;\n\n const hStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontWeight: style?.fontWeight ?? 'bold',\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n margin: 0,\n fontFamily,\n fontSize: getFontSize(level),\n padding: getPadding(style?.padding),\n width: '100%',\n minHeight: '1em',\n };\n\n const textareaStyle: CSSProperties = {\n ...hStyle,\n border: 'none',\n outline: 'none',\n resize: 'none',\n backgroundColor: 'transparent',\n overflow: 'hidden',\n lineHeight: hStyle.lineHeight ?? 'inherit',\n margin: 0,\n display: 'block',\n width: '100%'\n };\n\n const commitText = (newText: string, opts?: { enableMarkdown?: boolean }) => {\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Heading',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n ...(opts?.enableMarkdown ? { markdown: true } : {}),\n },\n },\n },\n });\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n commitText(e.target.value);\n };\n\n // See text-editor.tsx: seed the textarea with at least the rendered heading's\n // height so the click-to-edit transition doesn't shrink.\n const displayRef = useRef<HTMLHeadingElement | null>(null);\n const lastDisplayHeightRef = useRef<number>(0);\n\n useLayoutEffect(() => {\n if (!isSelected && displayRef.current) {\n const h = displayRef.current.offsetHeight;\n if (h > 0) lastDisplayHeightRef.current = h;\n }\n }, [isSelected, textContent, isMarkdown, level]);\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (!element) return;\n element.style.height = 'auto';\n const scrollH = element.scrollHeight;\n const floor = lastDisplayHeightRef.current;\n element.style.height = `${Math.max(scrollH, floor)}px`;\n };\n\n const { textareaRef, trackFocus, handleKeyDown, toolbarProps } = useMarkdownToolbar({\n text: localText,\n isSelected,\n commitText: (newText) => commitText(newText, { enableMarkdown: true }),\n trackSelection: (sel) => {\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: sel.start,\n selectionEnd: sel.end,\n });\n },\n });\n\n useLayoutEffect(() => {\n if (textareaRef.current) adjustTextareaHeight(textareaRef.current);\n }, [localText, isSelected]);\n\n if (isSelected) {\n return (\n <>\n <textarea\n ref={textareaRef}\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={1}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n />\n <InlineFormattingToolbar anchorEl={textareaRef.current} {...toolbarProps} />\n </>\n );\n }\n\n const headingProps: React.HTMLAttributes<HTMLHeadingElement> & {\n ref: React.RefObject<HTMLHeadingElement>;\n } = isMarkdown\n ? {\n ref: displayRef,\n style: hStyle,\n dangerouslySetInnerHTML: { __html: renderInlineMarkdownString(textContent) },\n }\n : { ref: displayRef, style: hStyle, children: textContent };\n\n switch (level) {\n case 'h1':\n return <h1 {...headingProps} />;\n case 'h2':\n return <h2 {...headingProps} />;\n case 'h3':\n return <h3 {...headingProps} />;\n }\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { HtmlProps } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useSelectedBlockId } from '@editor/editor-context';\n\nexport default function HtmlEditor({ style, props }: HtmlProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const contents = props?.contents ?? '';\n const [localContents, setLocalContents] = useState(contents);\n\n useEffect(() => {\n setLocalContents(contents);\n }, [contents]);\n\n const cssStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: style?.padding\n ? `${style.padding.top}px ${style.padding.right}px ${style.padding.bottom}px ${style.padding.left}px`\n : undefined,\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newContents = e.target.value;\n setLocalContents(newContents);\n setDocument({\n [blockId]: {\n type: 'Html',\n data: {\n style,\n props: {\n ...props,\n contents: newContents,\n },\n },\n },\n });\n };\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (element) {\n element.style.height = 'auto';\n element.style.height = `${element.scrollHeight}px`;\n }\n };\n\n if (isSelected) {\n const textareaStyle: CSSProperties = {\n ...cssStyle,\n fontFamily: '\"Nimbus Mono PS\", \"Courier New\", monospace',\n fontSize: 13,\n color: cssStyle.color ?? '#333',\n border: 'none',\n outline: 'none',\n resize: 'none',\n overflow: 'hidden',\n width: '100%',\n display: 'block',\n margin: 0,\n backgroundColor: 'transparent',\n };\n\n const trackFocus = (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const el = e.currentTarget;\n setLastFocusedEditable({\n blockId,\n field: 'contents',\n selectionStart: el.selectionStart ?? el.value.length,\n selectionEnd: el.selectionEnd ?? el.value.length,\n });\n };\n\n return (\n <div style={cssStyle}>\n <textarea\n value={localContents}\n onChange={handleChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={3}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n ref={(el) => el && adjustTextareaHeight(el)}\n />\n </div>\n );\n }\n\n if (!contents) {\n return <div style={cssStyle} />;\n }\n return <div style={cssStyle} dangerouslySetInnerHTML={{ __html: contents }} />;\n}\n","import React, { useState, useEffect, CSSProperties } from 'react';\nimport { SignatureProps, SignaturePropsDefaults } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, useSelectedBlockId } from '@editor/editor-context';\n\nfunction getImageBorderRadius(shape: string, size: number): number | undefined {\n switch (shape) {\n case 'circle':\n return size;\n case 'rounded':\n return size * 0.125;\n case 'square':\n default:\n return undefined;\n }\n}\n\nexport default function SignatureEditor({ style, props }: SignatureProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const isSelected = selectedBlockId === blockId;\n\n const greeting = props?.greeting ?? SignaturePropsDefaults.greeting;\n const name = props?.name ?? SignaturePropsDefaults.name;\n const title = props?.title ?? SignaturePropsDefaults.title;\n const company = props?.company ?? SignaturePropsDefaults.company;\n const address = props?.address ?? SignaturePropsDefaults.address;\n const email = props?.email ?? SignaturePropsDefaults.email;\n const phone = props?.phone ?? SignaturePropsDefaults.phone;\n const website = props?.website ?? SignaturePropsDefaults.website;\n const imageUrl = props?.imageUrl ?? SignaturePropsDefaults.imageUrl;\n const imageSize = props?.imageSize ?? SignaturePropsDefaults.imageSize;\n const imageShape = props?.imageShape ?? SignaturePropsDefaults.imageShape;\n const layout = props?.layout ?? SignaturePropsDefaults.layout;\n const nameColor = props?.nameColor ?? SignaturePropsDefaults.nameColor;\n const textColor = props?.textColor ?? SignaturePropsDefaults.textColor;\n const linkColor = props?.linkColor ?? SignaturePropsDefaults.linkColor;\n\n const [localGreeting, setLocalGreeting] = useState(greeting);\n const [localName, setLocalName] = useState(name);\n const [localTitle, setLocalTitle] = useState(title);\n const [localCompany, setLocalCompany] = useState(company);\n const [localAddress, setLocalAddress] = useState(address);\n const [localEmail, setLocalEmail] = useState(email);\n const [localPhone, setLocalPhone] = useState(phone);\n const [localWebsite, setLocalWebsite] = useState(website);\n\n useEffect(() => { setLocalGreeting(greeting); }, [greeting]);\n useEffect(() => { setLocalName(name); }, [name]);\n useEffect(() => { setLocalTitle(title); }, [title]);\n useEffect(() => { setLocalCompany(company); }, [company]);\n useEffect(() => { setLocalAddress(address); }, [address]);\n useEffect(() => { setLocalEmail(email); }, [email]);\n useEffect(() => { setLocalPhone(phone); }, [phone]);\n useEffect(() => { setLocalWebsite(website); }, [website]);\n\n const updateProps = (updates: Partial<typeof props>) => {\n setDocument({\n [blockId]: {\n type: 'Signature',\n data: {\n style,\n props: { ...props, ...updates },\n },\n },\n });\n };\n\n const greetingStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n marginBottom: 8,\n lineHeight: '1.4',\n fontStyle: 'italic',\n };\n\n const nameStyle: CSSProperties = {\n fontSize: 16,\n fontWeight: 'bold',\n color: nameColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const detailStyle: CSSProperties = {\n fontSize: 14,\n color: textColor,\n margin: 0,\n lineHeight: '1.4',\n };\n\n const linkStyle: CSSProperties = {\n fontSize: 14,\n color: linkColor,\n textDecoration: 'none',\n };\n\n const inputBase: CSSProperties = {\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n width: '100%',\n padding: 0,\n margin: 0,\n fontFamily: 'inherit',\n };\n\n const wrapperStyle: CSSProperties = {\n backgroundColor: style?.backgroundColor ?? undefined,\n padding: style?.padding\n ? `${style.padding.top}px ${style.padding.right}px ${style.padding.bottom}px ${style.padding.left}px`\n : undefined,\n };\n\n const imageElement = imageUrl ? (\n <img\n src={imageUrl}\n alt={name || company}\n width={imageSize}\n height={imageSize}\n style={{\n width: imageSize,\n height: imageSize,\n objectFit: 'cover',\n borderRadius: getImageBorderRadius(imageShape, imageSize),\n display: 'block',\n outline: 'none',\n border: 'none',\n }}\n />\n ) : null;\n\n const greetingElement = isSelected ? (\n <div onClick={(e) => e.stopPropagation()}>\n <input\n value={localGreeting}\n onChange={(e) => { setLocalGreeting(e.target.value); updateProps({ greeting: e.target.value }); }}\n placeholder=\"Greeting (e.g. Best regards,)\"\n style={{ ...inputBase, ...greetingStyle }}\n />\n </div>\n ) : greeting ? (\n <p style={greetingStyle}>{greeting}</p>\n ) : null;\n\n const textContent = isSelected ? (\n <div onClick={(e) => e.stopPropagation()}>\n <input\n value={localName}\n onChange={(e) => { setLocalName(e.target.value); updateProps({ name: e.target.value }); }}\n placeholder=\"Name\"\n style={{ ...inputBase, ...nameStyle }}\n />\n <input\n value={localTitle}\n onChange={(e) => { setLocalTitle(e.target.value); updateProps({ title: e.target.value }); }}\n placeholder=\"Title\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localCompany}\n onChange={(e) => { setLocalCompany(e.target.value); updateProps({ company: e.target.value }); }}\n placeholder=\"Company\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localAddress}\n onChange={(e) => { setLocalAddress(e.target.value); updateProps({ address: e.target.value }); }}\n placeholder=\"Address\"\n style={{ ...inputBase, ...detailStyle }}\n />\n <input\n value={localEmail}\n onChange={(e) => { setLocalEmail(e.target.value); updateProps({ email: e.target.value }); }}\n placeholder=\"Email\"\n style={{ ...inputBase, ...linkStyle, marginTop: 4, display: 'block' }}\n />\n <input\n value={localPhone}\n onChange={(e) => { setLocalPhone(e.target.value); updateProps({ phone: e.target.value }); }}\n placeholder=\"Phone\"\n style={{ ...inputBase, ...linkStyle, display: 'block' }}\n />\n <input\n value={localWebsite}\n onChange={(e) => { setLocalWebsite(e.target.value); updateProps({ website: e.target.value }); }}\n placeholder=\"Website\"\n style={{ ...inputBase, ...linkStyle, display: 'block' }}\n />\n </div>\n ) : (\n <div>\n {name && <p style={nameStyle}>{name}</p>}\n {title && <p style={detailStyle}>{title}</p>}\n {company && <p style={detailStyle}>{company}</p>}\n {address && <p style={detailStyle}>{address}</p>}\n {(email || phone || website) && (\n <p style={{ ...detailStyle, marginTop: 4 }}>\n {email && <span style={linkStyle}>{email}</span>}\n {email && (phone || website) && <span style={detailStyle}> &middot; </span>}\n {phone && <span style={linkStyle}>{phone}</span>}\n {phone && website && <span style={detailStyle}> &middot; </span>}\n {website && <span style={linkStyle}>{website}</span>}\n </p>\n )}\n {!name && !title && !company && !email && !phone && !website && (\n <p style={detailStyle}>Click to edit signature</p>\n )}\n </div>\n );\n\n if (layout === 'vertical') {\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n {imageElement && <div style={{ marginBottom: 12 }}>{imageElement}</div>}\n {textContent}\n </div>\n );\n }\n\n return (\n <div style={wrapperStyle}>\n {greetingElement}\n <table cellPadding=\"0\" cellSpacing=\"0\" border={0} role=\"presentation\">\n <tbody>\n <tr>\n {imageElement && (\n <td style={{ verticalAlign: 'middle', paddingRight: 16 }}>\n {imageElement}\n </td>\n )}\n <td style={{ verticalAlign: 'middle' }}>\n {textContent}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n );\n}\n","import React, { useState, useEffect, useLayoutEffect, useRef, CSSProperties } from 'react';\nimport { TextProps, TextPropsDefaults, renderMarkdownString } from '@blocks';\nimport { useCurrentBlockId } from '@editor/editor-block';\nimport { setDocument, setLastFocusedEditable, useDocument, useSelectedBlockId } from '@editor/editor-context';\n\nimport { useMarkdownToolbar } from '../helpers/use-markdown-toolbar';\nimport InlineFormattingToolbar from './inline-formatting-toolbar';\n\n// Helper function to get font family from existing Text component\nfunction getFontFamily(fontFamily: string | null | undefined) {\n switch (fontFamily) {\n case 'MODERN_SANS':\n return '\"Helvetica Neue\", \"Arial Nova\", \"Nimbus Sans\", Arial, sans-serif';\n case 'BOOK_SANS':\n return 'Optima, Candara, \"Noto Sans\", source-sans-pro, sans-serif';\n case 'ORGANIC_SANS':\n return 'Seravek, \"Gill Sans Nova\", Ubuntu, Calibri, \"DejaVu Sans\", source-sans-pro, sans-serif';\n case 'GEOMETRIC_SANS':\n return 'Avenir, \"Avenir Next LT Pro\", Montserrat, Corbel, \"URW Gothic\", source-sans-pro, sans-serif';\n case 'HEAVY_SANS':\n return 'Bahnschrift, \"DIN Alternate\", \"Franklin Gothic Medium\", \"Nimbus Sans Narrow\", sans-serif-condensed, sans-serif';\n case 'ROUNDED_SANS':\n return 'ui-rounded, \"Hiragino Maru Gothic ProN\", Quicksand, Comfortaa, Manjari, \"Arial Rounded MT Bold\", Calibri, source-sans-pro, sans-serif';\n case 'MODERN_SERIF':\n return 'Charter, \"Bitstream Charter\", \"Sitka Text\", Cambria, serif';\n case 'BOOK_SERIF':\n return '\"Iowan Old Style\", \"Palatino Linotype\", \"URW Palladio L\", P052, serif';\n case 'MONOSPACE':\n return '\"Nimbus Mono PS\", \"Courier New\", \"Cutive Mono\", monospace';\n case 'inherit':\n case null:\n case undefined:\n return undefined;\n }\n return undefined;\n}\n\n// Helper function to get padding from existing utils\nfunction getPadding(padding: any) {\n if (!padding) return undefined;\n\n // Object format from the schema (matching the original blocks)\n if (typeof padding === 'object' && !Array.isArray(padding) &&\n 'top' in padding && 'right' in padding && 'bottom' in padding && 'left' in padding) {\n return `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;\n }\n\n // For backward compatibility with the array format\n if (Array.isArray(padding)) {\n if (padding.length === 1) {\n return `${padding[0]}px`;\n }\n if (padding.length === 2) {\n return `${padding[0]}px ${padding[1]}px`;\n }\n if (padding.length === 3) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px`;\n }\n if (padding.length === 4) {\n return `${padding[0]}px ${padding[1]}px ${padding[2]}px ${padding[3]}px`;\n }\n }\n\n // For single number\n if (typeof padding === 'number') {\n return `${padding}px`;\n }\n\n return undefined;\n}\n\nexport default function TextEditor({ style, props }: TextProps) {\n const blockId = useCurrentBlockId();\n const selectedBlockId = useSelectedBlockId();\n const document = useDocument();\n const isSelected = selectedBlockId === blockId;\n\n const textContent = props?.text ?? TextPropsDefaults.text;\n const [localText, setLocalText] = useState(textContent);\n const isMarkdown = props?.markdown ?? false;\n\n const rootBlock = document.root;\n const rootFontFamily = rootBlock && rootBlock.type === 'EmailLayout'\n ? getFontFamily(rootBlock.data.fontFamily)\n : '\"Helvetica Neue\", Arial, sans-serif';\n\n useEffect(() => {\n setLocalText(textContent);\n }, [textContent]);\n\n const fontFamily = getFontFamily(style?.fontFamily) || rootFontFamily;\n\n const wStyle: CSSProperties = {\n color: style?.color ?? undefined,\n backgroundColor: style?.backgroundColor ?? undefined,\n fontSize: style?.fontSize ?? undefined,\n fontFamily,\n fontWeight: style?.fontWeight ?? undefined,\n lineHeight: style?.lineHeight ?? undefined,\n letterSpacing: style?.letterSpacing != null ? `${style.letterSpacing}px` : undefined,\n textAlign: style?.textAlign ?? undefined,\n padding: getPadding(style?.padding),\n width: '100%',\n minHeight: '1em'\n };\n\n const textareaStyle: CSSProperties = {\n ...wStyle,\n border: 'none',\n outline: 'none',\n resize: 'none',\n backgroundColor: 'transparent',\n overflow: 'hidden',\n lineHeight: wStyle.lineHeight ?? 'inherit',\n margin: 0,\n display: 'block',\n width: '100%',\n fontSize: wStyle.fontSize,\n fontWeight: wStyle.fontWeight,\n textAlign: wStyle.textAlign\n };\n\n const commitText = (newText: string, opts?: { enableMarkdown?: boolean }) => {\n setLocalText(newText);\n setDocument({\n [blockId]: {\n type: 'Text',\n data: {\n style,\n props: {\n ...props,\n text: newText,\n ...(opts?.enableMarkdown ? { markdown: true } : {}),\n },\n },\n },\n });\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n commitText(e.target.value);\n };\n\n // When the block is rendered as a div (not selected), remember its height so\n // the textarea can seed itself with at least that tall on the next select.\n // Markdown's <p> margins make the rendered div taller than textarea.scrollHeight\n // for identical text, which otherwise causes a visible shrink on click-to-edit.\n const displayRef = useRef<HTMLDivElement | null>(null);\n const lastDisplayHeightRef = useRef<number>(0);\n\n useLayoutEffect(() => {\n if (!isSelected && displayRef.current) {\n const h = displayRef.current.offsetHeight;\n if (h > 0) lastDisplayHeightRef.current = h;\n }\n }, [isSelected, textContent, isMarkdown]);\n\n const adjustTextareaHeight = (element: HTMLTextAreaElement) => {\n if (!element) return;\n element.style.height = 'auto';\n const scrollH = element.scrollHeight;\n const floor = lastDisplayHeightRef.current;\n element.style.height = `${Math.max(scrollH, floor)}px`;\n };\n\n const { textareaRef, trackFocus, handleKeyDown, toolbarProps } = useMarkdownToolbar({\n text: localText,\n isSelected,\n commitText: (newText) => commitText(newText, { enableMarkdown: true }),\n trackSelection: (sel) => {\n setLastFocusedEditable({\n blockId,\n field: 'text',\n selectionStart: sel.start,\n selectionEnd: sel.end,\n });\n },\n });\n\n useLayoutEffect(() => {\n if (textareaRef.current) adjustTextareaHeight(textareaRef.current);\n }, [localText, isSelected]);\n\n if (isSelected) {\n return (\n <>\n <textarea\n ref={textareaRef}\n value={localText}\n onChange={handleTextChange}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n e.stopPropagation();\n trackFocus(e);\n }}\n style={textareaStyle}\n rows={1}\n onInput={(e) => adjustTextareaHeight(e.target as HTMLTextAreaElement)}\n />\n <InlineFormattingToolbar anchorEl={textareaRef.current} {...toolbarProps} />\n </>\n );\n }\n\n if (isMarkdown) {\n return (\n <div\n ref={displayRef}\n style={wStyle}\n dangerouslySetInnerHTML={{ __html: renderMarkdownString(textContent) }}\n />\n );\n }\n\n return (\n <div ref={displayRef} style={wStyle}>\n {textContent}\n </div>\n );\n}\n","import React from 'react';\nimport { z } from 'zod';\n\nimport {\n Avatar, AvatarPropsSchema,\n ButtonPropsSchema,\n Divider, DividerPropsSchema,\n HeadingPropsSchema,\n HtmlPropsSchema,\n Image, ImagePropsSchema,\n SignaturePropsSchema,\n Spacer, SpacerPropsSchema,\n TextPropsSchema\n} from '@blocks';\nimport {\n buildBlockComponent,\n buildBlockConfigurationDictionary,\n buildBlockConfigurationSchema,\n} from '@core';\n\nimport ColumnsContainerEditor from '@editor/blocks/columns-container/columns-container-editor';\nimport ColumnsContainerPropsSchema from '@editor/blocks/columns-container/columns-container-props-schema';\nimport ContainerEditor from '@editor/blocks/container/container-editor';\nimport ContainerPropsSchema from '@editor/blocks/container/container-props-schema';\nimport EmailLayoutEditor from '@editor/blocks/email-layout/email-layout-editor';\nimport EmailLayoutPropsSchema from '@editor/blocks/email-layout/email-layout-props-schema';\nimport EditorBlockWrapper from '@editor/blocks/helpers/block-wrappers/editor-block-wrapper';\nimport ButtonEditor from '@editor/blocks/button/button-editor';\nimport HeadingEditor from '@editor/blocks/heading/heading-editor';\nimport HtmlEditor from '@editor/blocks/html/html-editor';\nimport SignatureEditor from '@editor/blocks/signature/signature-editor';\nimport TextEditor from '@editor/blocks/text/text-editor';\n\nconst EDITOR_DICTIONARY = buildBlockConfigurationDictionary({\n Avatar: {\n schema: AvatarPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Avatar {...props} />\n </EditorBlockWrapper>\n ),\n },\n Button: {\n schema: ButtonPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ButtonEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Container: {\n schema: ContainerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ContainerEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n ColumnsContainer: {\n schema: ColumnsContainerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <ColumnsContainerEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Heading: {\n schema: HeadingPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <HeadingEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Html: {\n schema: HtmlPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <HtmlEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n Image: {\n schema: ImagePropsSchema,\n Component: (data) => {\n const props = {\n ...data,\n props: {\n ...data.props,\n url: data.props?.url ?? 'https://placehold.co/600x400@2x/F8F8F8/CCC?text=Your%20image',\n linkHref: null,\n },\n };\n return (\n <EditorBlockWrapper>\n <Image {...props} />\n </EditorBlockWrapper>\n );\n },\n },\n Text: {\n schema: TextPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <TextEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n EmailLayout: {\n schema: EmailLayoutPropsSchema,\n Component: (p) => <EmailLayoutEditor {...p} />,\n },\n Spacer: {\n schema: SpacerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Spacer {...props} />\n </EditorBlockWrapper>\n ),\n },\n Divider: {\n schema: DividerPropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <Divider {...props} />\n </EditorBlockWrapper>\n ),\n },\n Signature: {\n schema: SignaturePropsSchema,\n Component: (props) => (\n <EditorBlockWrapper>\n <SignatureEditor {...props} />\n </EditorBlockWrapper>\n ),\n },\n});\n\nexport const EditorBlock = buildBlockComponent(EDITOR_DICTIONARY);\nexport const EditorBlockSchema = buildBlockConfigurationSchema(EDITOR_DICTIONARY);\nexport const EditorConfigurationSchema = z.record(z.string(), EditorBlockSchema);\n\nexport type TEditorBlock = z.infer<typeof EditorBlockSchema>;\nexport type TEditorConfiguration = Record<string, TEditorBlock>;\n","import React, { createContext, useContext } from 'react';\n\nimport { EditorBlock as CoreEditorBlock } from './core';\nimport { useDocument } from './editor-context';\n\nconst EditorBlockContext = createContext<string | null>(null);\nexport const useCurrentBlockId = () => useContext(EditorBlockContext)!;\n\ntype EditorBlockProps = {\n id: string;\n};\n\n/**\n *\n * @param id - Block id\n * @returns EditorBlock component that loads data from the EditorDocumentContext\n */\nexport default function EditorBlock({ id }: EditorBlockProps) {\n const document = useDocument();\n const block = document[id];\n if (!block) {\n throw new Error('Could not find block');\n }\n return (\n <EditorBlockContext.Provider value={id}>\n <CoreEditorBlock {...block} />\n </EditorBlockContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { AppRegistrationOutlined, LastPageOutlined } from '@mui/icons-material';\nimport { IconButton } from '@mui/material';\n\nimport { toggleInspectorDrawerOpen, useInspectorDrawerOpen } from '@editor/editor-context';\n\nexport default function ToggleInspectorPanelButton() {\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n\n const handleClick = () => {\n toggleInspectorDrawerOpen();\n };\n if (inspectorDrawerOpen) {\n return (\n <IconButton onClick={handleClick}>\n <LastPageOutlined fontSize=\"small\" />\n </IconButton>\n );\n }\n return (\n <IconButton onClick={handleClick}>\n <AppRegistrationOutlined fontSize=\"small\" />\n </IconButton>\n );\n}\n","import React from 'react';\n\nimport { FirstPageOutlined, MenuOutlined } from '@mui/icons-material';\nimport { IconButton } from '@mui/material';\n\nimport { toggleSamplesDrawerOpen, useSamplesDrawerOpen } from '@editor/editor-context';\n\nfunction useIcon() {\n const samplesDrawerOpen = useSamplesDrawerOpen();\n if (samplesDrawerOpen) {\n return <FirstPageOutlined fontSize=\"small\" />;\n }\n return <MenuOutlined fontSize=\"small\" />;\n}\n\nexport default function ToggleSamplesPanelButton() {\n const icon = useIcon();\n return <IconButton onClick={toggleSamplesDrawerOpen}>{icon}</IconButton>;\n}\n","/**\n * HTML formatter using the lightweight htmlfy library\n * https://github.com/j4w8n/htmlfy\n */\n\nimport { prettify } from 'htmlfy';\n\n/**\n * Format HTML string using htmlfy's prettify function \n * @param html The HTML string to format\n * @param spaces Indentation spaces (default: 2)\n * @returns Formatted HTML\n */\nexport function formatHtml(html: string, spaces: number = 2): string {\n try {\n return prettify(html, {\n tab_size: spaces,\n content_wrap: 80, // Wrap content at 80 characters\n tag_wrap: 60, // Wrap tag attributes at 60 characters\n ignore: [] // Don't ignore any elements\n });\n } catch (e) {\n console.error('Error formatting HTML:', e);\n // Fallback to basic formatting if htmlfy fails\n return html.trim()\n .replace(/>\\s*</g, '>\\n<')\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line)\n .join('\\n');\n }\n}\n\n/**\n * Minify HTML string using htmlfy's minify function\n * @param html The HTML string to minify\n * @returns Minified HTML\n */\nexport function minifyHtml(html: string): string {\n try {\n return minify(html);\n } catch (e) {\n console.error('Error minifying HTML:', e);\n // Fallback to basic minification\n return html.replace(/>\\s+</g, '><').trim();\n }\n} ","import hljs from 'highlight.js';\nimport jsonHighlighter from 'highlight.js/lib/languages/json';\nimport xmlHighlighter from 'highlight.js/lib/languages/xml';\nimport { formatHtml } from './html-formatter';\n\nhljs.registerLanguage('json', jsonHighlighter);\nhljs.registerLanguage('html', xmlHighlighter);\n\nexport async function html(value: string): Promise<string> {\n try {\n // Use our custom formatter\n const prettyValue = formatHtml(value, 2);\n return hljs.highlight(prettyValue, { language: 'html' }).value;\n } catch (e) {\n console.error('Error highlighting HTML:', e);\n return hljs.highlight(value, { language: 'html' }).value;\n }\n}\n\nexport async function json(value: string): Promise<string> {\n try {\n // Try to parse and then format with native JSON.stringify\n const parsed = JSON.parse(value);\n const prettyValue = JSON.stringify(parsed, null, 2);\n return hljs.highlight(prettyValue, { language: 'javascript' }).value;\n } catch (e) {\n console.error('Error highlighting JSON:', e);\n // If parsing fails, just highlight the original value\n return hljs.highlight(value, { language: 'javascript' }).value;\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { html, json } from './highlighters';\n\ntype TextEditorPanelProps = {\n type: 'json' | 'html' | 'javascript';\n value: string;\n};\nexport default function HighlightedCodePanel({ type, value }: TextEditorPanelProps) {\n const [code, setCode] = useState<string | null>(null);\n\n useEffect(() => {\n switch (type) {\n case 'html':\n html(value).then(setCode);\n return;\n case 'json':\n json(value).then(setCode);\n return;\n }\n }, [setCode, value, type]);\n\n if (code === null) {\n return null;\n }\n\n return (\n <pre\n style={{ \n margin: 0, \n padding: 16,\n overflowX: 'auto',\n whiteSpace: 'pre',\n fontSize: '12px',\n }}\n dangerouslySetInnerHTML={{ __html: code }}\n onClick={(ev) => {\n const s = window.getSelection();\n if (s === null) {\n return;\n }\n s.selectAllChildren(ev.currentTarget);\n }}\n />\n );\n}\n","import React, { useMemo } from 'react';\n\nimport { renderToStaticMarkup } from '@email-builder';\n\nimport { useDocument } from '@editor/editor-context';\n\nimport HighlightedCodePanel from './helper/highlighted-code-panel';\n\nexport default function HtmlPanel() {\n const document = useDocument();\n const code = useMemo(() => renderToStaticMarkup(document, { rootBlockId: 'root' }), [document]);\n return <HighlightedCodePanel type=\"html\" value={code} />;\n}\n","import React, { useMemo } from 'react';\n\nimport { useDocument } from '@editor/editor-context';\n\nimport HighlightedCodePanel from './helper/highlighted-code-panel';\n\nexport default function JsonPanel() {\n const document = useDocument();\n const code = useMemo(() => JSON.stringify(document, null, ' '), [document]);\n return <HighlightedCodePanel type=\"json\" value={code} />;\n}\n","import React, { useMemo } from 'react';\n\nimport { renderToText } from '@email-builder';\n\nimport { useDocument } from '@editor/editor-context';\n\nexport default function TextPanel() {\n const document = useDocument();\n const text = useMemo(() => renderToText(document, { rootBlockId: 'root' }), [document]);\n return (\n <pre\n style={{\n margin: 0,\n padding: 16,\n overflowX: 'auto',\n whiteSpace: 'pre-wrap',\n fontSize: '13px',\n fontFamily: 'monospace',\n lineHeight: '1.5',\n }}\n onClick={(ev) => {\n const s = window.getSelection();\n if (s === null) return;\n s.selectAllChildren(ev.currentTarget);\n }}\n >\n {text}\n </pre>\n );\n}\n","import React from 'react';\n\nimport { CodeOutlined, DataObjectOutlined, EditOutlined, PreviewOutlined, SubjectOutlined } from '@mui/icons-material';\nimport { Tab, Tabs, Tooltip } from '@mui/material';\n\nimport { setSelectedMainTab, useSelectedMainTab } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nexport default function MainTabsGroup() {\n const selectedMainTab = useSelectedMainTab();\n const handleChange = (_: unknown, v: unknown) => {\n switch (v) {\n case 'json':\n case 'preview':\n case 'editor':\n case 'html':\n case 'text':\n setSelectedMainTab(v);\n return;\n default:\n setSelectedMainTab('editor');\n }\n };\n\n return (\n <Tabs value={selectedMainTab} onChange={handleChange}>\n <Tab\n value=\"editor\"\n label={\n <Tooltip title={t('tab.edit', 'Edit')}>\n <EditOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"preview\"\n label={\n <Tooltip title={t('tab.preview', 'Preview')}>\n <PreviewOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"html\"\n label={\n <Tooltip title={t('tab.html-output', 'HTML output')}>\n <CodeOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"text\"\n label={\n <Tooltip title={t('tab.text-output', 'Plain text output')}>\n <SubjectOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n <Tab\n value=\"json\"\n label={\n <Tooltip title={t('tab.json-output', 'JSON output')}>\n <DataObjectOutlined fontSize=\"small\" />\n </Tooltip>\n }\n />\n </Tabs>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Button, Tooltip } from '@mui/material';\nimport { AddOutlined, SaveOutlined, SaveAsOutlined } from '@mui/icons-material';\nimport { resetDocument, useDocument } from '@editor/editor-context';\nimport { t } from '@i18n';\nimport { useEmailEditor } from '../context';\nimport { useSnackbar } from './snackbar-provider';\nimport { buildSavePayload, type SavePayload } from '../save-payload';\nimport SaveTemplateDialog from './save-template-dialog';\nimport EMPTY_EMAIL_MESSAGE from '@sample/empty-email-message';\nimport type { TemplateListItem } from '../index';\n\ntype SaveBarProps = {\n loadTemplates?: () => Promise<TemplateListItem[]>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n};\n\ntype DialogMode = null | 'save-as' | 'new-blank';\n\nexport default function SaveBar({ loadTemplates, saveAs }: SaveBarProps) {\n const {\n saveTemplate,\n currentTemplateId,\n currentTemplateName,\n currentTemplateKind,\n setCurrentTemplate,\n loadTemplate: ctxLoadTemplate,\n } = useEmailEditor();\n const { showMessage } = useSnackbar();\n const document = useDocument();\n const [dialogMode, setDialogMode] = useState<DialogMode>(null);\n const [nameError, setNameError] = useState<string | null>(null);\n\n const hasOpenRow = Boolean(currentTemplateId);\n const isSample = currentTemplateKind === 'sample';\n const primaryLabel = hasOpenRow ? t('savebar.save', 'Save') : t('savebar.save-as-new', 'Save as new…');\n\n const handlePrimary = async () => {\n try {\n if (!hasOpenRow) {\n setNameError(null);\n setDialogMode('save-as');\n return;\n }\n saveTemplate();\n showMessage(isSample ? t('savebar.sample-saved', 'Sample saved') : t('savebar.template-saved', 'Template saved'));\n if (loadTemplates) await loadTemplates();\n } catch (e) {\n console.error('Error saving:', e);\n showMessage(t('savebar.error-saving', 'Error saving'));\n }\n };\n\n const handleSaveAs = async (name: string): Promise<boolean> => {\n if (!saveAs) return false;\n try {\n const starterContent = dialogMode === 'new-blank' ? EMPTY_EMAIL_MESSAGE : document;\n const { id, slug } = await saveAs(name, buildSavePayload(starterContent));\n resetDocument(starterContent);\n setCurrentTemplate(id, slug, 'template');\n ctxLoadTemplate(starterContent, id, slug, 'template');\n if (loadTemplates) await loadTemplates();\n showMessage(\n dialogMode === 'new-blank'\n ? t('savebar.new-template-created', 'New template created')\n : t('savebar.template-saved', 'Template saved')\n );\n window.location.hash = `#template/${id}`;\n return true;\n } catch (e) {\n console.error('Error in saveAs:', e);\n showMessage(t('savebar.error-saving', 'Error saving'));\n return false;\n }\n };\n\n return (\n <>\n <Box\n sx={{\n position: 'sticky',\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n pointerEvents: 'none',\n zIndex: 2,\n pb: 3,\n }}\n >\n <Box\n sx={{\n pointerEvents: 'auto',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 1.25,\n px: 2,\n py: 1.25,\n backgroundColor: 'background.paper',\n borderRadius: 999,\n boxShadow:\n '0 2px 6px rgba(33, 36, 67, 0.06), 0 16px 40px rgba(33, 36, 67, 0.14)',\n }}\n >\n {hasOpenRow && currentTemplateName && (\n <Box\n sx={{\n pl: 1,\n pr: 1,\n fontSize: 14,\n color: 'text.secondary',\n maxWidth: 220,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={currentTemplateName}\n >\n {isSample ? `${t('savebar.sample-prefix', 'Sample')} · ` : ''}\n <Box component=\"span\" sx={{ color: 'text.primary', fontWeight: 600 }}>\n {currentTemplateName}\n </Box>\n </Box>\n )}\n <Tooltip title={\n hasOpenRow\n ? (isSample\n ? t('savebar.save-changes-to-sample', 'Save changes to this sample')\n : t('savebar.save-changes', 'Save changes'))\n : t('savebar.save-as-new-template', 'Save as a new template')\n }>\n <Button\n variant=\"contained\"\n size=\"large\"\n startIcon={<SaveOutlined />}\n onClick={handlePrimary}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2.5, fontSize: 15, fontWeight: 600 }}\n >\n {primaryLabel}\n </Button>\n </Tooltip>\n {hasOpenRow && saveAs && (\n <Tooltip title={t('savebar.save-as-new-template', 'Save as a new template')}>\n <Button\n variant=\"outlined\"\n size=\"large\"\n startIcon={<SaveAsOutlined />}\n onClick={() => {\n setNameError(null);\n setDialogMode('save-as');\n }}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2, fontSize: 14 }}\n >\n {t('savebar.save-as', 'Save as…')}\n </Button>\n </Tooltip>\n )}\n {saveAs && (\n <Tooltip title={t('savebar.start-fresh', 'Start a fresh template')}>\n <Button\n variant=\"text\"\n size=\"large\"\n startIcon={<AddOutlined />}\n onClick={() => {\n setNameError(null);\n setDialogMode('new-blank');\n }}\n sx={{ borderRadius: 999, textTransform: 'none', px: 2, fontSize: 14, color: 'text.secondary' }}\n >\n {t('savebar.new', 'New')}\n </Button>\n </Tooltip>\n )}\n </Box>\n </Box>\n\n <SaveTemplateDialog\n open={dialogMode !== null}\n mode={dialogMode === 'new-blank' ? 'new' : 'save-as'}\n onClose={() => {\n setDialogMode(null);\n setNameError(null);\n }}\n onSave={handleSaveAs}\n onNameChange={() => setNameError(null)}\n defaultName={\n dialogMode === 'new-blank'\n ? 'New Template'\n : currentTemplateName\n ? `${currentTemplateName} (Copy)`\n : 'New Template'\n }\n error={nameError}\n />\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { RedoOutlined, UndoOutlined } from '@mui/icons-material';\nimport { IconButton, Stack, Tooltip } from '@mui/material';\n\nimport { redo, undo, useCanRedo, useCanUndo } from '@editor/editor-context';\nimport { t } from '@i18n';\n\nfunction isMac(): boolean {\n if (typeof navigator === 'undefined') return false;\n const platform = (navigator.platform || '').toLowerCase();\n if (platform.includes('mac')) return true;\n const ua = (navigator.userAgent || '').toLowerCase();\n return ua.includes('mac') && !ua.includes('windows');\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n const tag = target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if (target.isContentEditable) return true;\n return false;\n}\n\nexport default function UndoRedoButtons() {\n const canUndo = useCanUndo();\n const canRedo = useCanRedo();\n const mac = isMac();\n const modKey = mac ? '⌘' : 'Ctrl';\n const undoHint = `${modKey}+Z`;\n const redoHint = mac ? `${modKey}+⇧+Z` : `${modKey}+Shift+Z / ${modKey}+Y`;\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const mod = mac ? e.metaKey : e.ctrlKey;\n if (!mod) return;\n // Defer to the native undo stack when focus is inside a text field —\n // the user expects Cmd+Z to rewind the field they're typing in.\n if (isEditableTarget(e.target)) return;\n\n const key = e.key.toLowerCase();\n if (key === 'z' && !e.shiftKey) {\n e.preventDefault();\n undo();\n } else if ((key === 'z' && e.shiftKey) || (key === 'y' && !mac)) {\n e.preventDefault();\n redo();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [mac]);\n\n return (\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\">\n <Tooltip title={`${t('undo.tooltip', 'Undo')} (${undoHint})`}>\n <span>\n <IconButton\n size=\"small\"\n onClick={undo}\n disabled={!canUndo}\n aria-label={t('undo.label', 'Undo')}\n >\n <UndoOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title={`${t('redo.tooltip', 'Redo')} (${redoHint})`}>\n <span>\n <IconButton\n size=\"small\"\n onClick={redo}\n disabled={!canRedo}\n aria-label={t('redo.label', 'Redo')}\n >\n <RedoOutlined fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Stack>\n );\n}\n","import React from 'react';\nimport { Box, InputBase } from '@mui/material';\nimport { setDocument, setLastFocusedEditable, useDocument } from '@editor/editor-context';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\n\nexport default function SubjectInput() {\n const document = useDocument();\n const root = document.root;\n if (!root || root.type !== 'EmailLayout') return null;\n const data = root.data as EmailLayoutProps;\n const subject = data.subject ?? '';\n\n const handleChange = (value: string) => {\n setDocument({\n root: { ...root, data: { ...data, subject: value } },\n });\n };\n\n const trackFocus = (e: React.SyntheticEvent) => {\n const target = e.target as HTMLInputElement | null;\n if (!target || typeof target.value !== 'string') return;\n setLastFocusedEditable({\n blockId: 'subject',\n field: 'subject',\n selectionStart: target.selectionStart ?? target.value.length,\n selectionEnd: target.selectionEnd ?? target.value.length,\n });\n };\n\n return (\n <Box\n sx={{\n px: 3,\n py: 1.25,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 49,\n zIndex: 'appBar',\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n }}\n >\n <Box sx={{ color: 'text.secondary', fontSize: 13, fontWeight: 600, minWidth: 56 }}>\n {t('subject.label', 'Subject')}\n </Box>\n <InputBase\n fullWidth\n placeholder={t('subject.placeholder', 'Email subject — supports {{variables}}')}\n value={subject}\n onChange={(e) => handleChange(e.target.value)}\n onFocus={trackFocus}\n onSelect={trackFocus}\n onKeyUp={trackFocus}\n onClick={trackFocus}\n sx={{ fontSize: 14 }}\n />\n </Box>\n );\n}\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport { useDocument } from '@editor/editor-context';\nimport type { EmailLayoutProps } from '@editor/blocks/email-layout/email-layout-props-schema';\nimport { t } from '@i18n';\nimport {\n buildSampleValueMap,\n substituteSampleValues,\n TemplateVariable,\n} from '../variables/variable-utils';\n\nexport default function SubjectPreview() {\n const document = useDocument();\n const root = document.root;\n if (!root || root.type !== 'EmailLayout') return null;\n const data = root.data as EmailLayoutProps;\n const subject = data.subject ?? '';\n if (!subject) return null;\n\n const samples = buildSampleValueMap((data.variables ?? []) as TemplateVariable[]);\n const rendered = substituteSampleValues(subject, samples);\n\n return (\n <Box\n sx={{\n px: 3,\n py: 1.25,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 49,\n zIndex: 'appBar',\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n }}\n >\n <Box sx={{ color: 'text.secondary', fontSize: 13, fontWeight: 600, minWidth: 56 }}>\n {t('subject.label', 'Subject')}\n </Box>\n <Box sx={{ fontSize: 14 }}>{rendered}</Box>\n </Box>\n );\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Box } from '@mui/material';\nimport { CloudUploadOutlined } from '@mui/icons-material';\nimport {\n getDocument,\n setDocument,\n setSelectedBlockId,\n} from '@editor/editor-context';\nimport { useImageCallbacks, type UploadedImage } from '../image-context';\n\ntype Props = {\n enabled: boolean;\n children: React.ReactNode;\n};\n\nfunction generateId() {\n return `block-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction buildImageBlock(uploaded: UploadedImage) {\n return {\n type: 'Image' as const,\n data: {\n props: {\n url: uploaded.url,\n width: uploaded.width ?? null,\n height: uploaded.height ?? null,\n alt: uploaded.alt ?? '',\n contentAlignment: 'middle' as const,\n },\n style: { padding: { top: 16, bottom: 16, left: 24, right: 24 } },\n },\n };\n}\n\nfunction appendImageBlock(uploaded: UploadedImage) {\n const doc = getDocument();\n const root: any = doc.root;\n if (!root || root.type !== 'EmailLayout') return;\n const id = generateId();\n const childrenIds = [...((root.data.childrenIds as string[] | null) ?? []), id];\n setDocument({\n [id]: buildImageBlock(uploaded),\n root: { ...root, data: { ...root.data, childrenIds } },\n } as any);\n setSelectedBlockId(id);\n}\n\nfunction findImageFile(items: FileList | DataTransferItemList | null | undefined): File | null {\n if (!items) return null;\n const fileList = items instanceof FileList ? Array.from(items) : Array.from(items);\n for (const item of fileList) {\n const file = item instanceof File ? item : (item as DataTransferItem).getAsFile?.();\n if (file && file.type.startsWith('image/')) return file;\n }\n return null;\n}\n\n/**\n * Listens for image-file drops and clipboard pastes on the canvas wrapper.\n * Calls `uploadImage` then appends a new Image block at the root. Renders a\n * drop overlay while a file is dragged over. No-op when uploadImage is not\n * provided or `enabled` is false.\n */\nexport default function ImageDropPasteHandler({ enabled, children }: Props) {\n const { uploadImage } = useImageCallbacks();\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const dragDepth = useRef(0);\n const [dragging, setDragging] = useState(false);\n const [uploading, setUploading] = useState(false);\n\n const active = enabled && Boolean(uploadImage);\n\n useEffect(() => {\n if (!active || !uploadImage) return;\n const handlePaste = async (e: ClipboardEvent) => {\n const target = e.target as HTMLElement | null;\n if (target?.tagName === 'INPUT' || target?.tagName === 'TEXTAREA' || target?.isContentEditable) return;\n const file = findImageFile(e.clipboardData?.files);\n if (!file) return;\n e.preventDefault();\n setUploading(true);\n try {\n const uploaded = await uploadImage(file);\n appendImageBlock(uploaded);\n } catch {\n // silent: surfaced via console; consumer can show their own toast\n } finally {\n setUploading(false);\n }\n };\n window.addEventListener('paste', handlePaste);\n return () => window.removeEventListener('paste', handlePaste);\n }, [active, uploadImage]);\n\n if (!active) return <>{children}</>;\n\n const onDragEnter = (e: React.DragEvent) => {\n if (!Array.from(e.dataTransfer?.items ?? []).some((i) => i.kind === 'file')) return;\n dragDepth.current += 1;\n setDragging(true);\n };\n const onDragLeave = () => {\n dragDepth.current = Math.max(0, dragDepth.current - 1);\n if (dragDepth.current === 0) setDragging(false);\n };\n const onDragOver = (e: React.DragEvent) => {\n if (!Array.from(e.dataTransfer?.items ?? []).some((i) => i.kind === 'file')) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n };\n const onDrop = async (e: React.DragEvent) => {\n dragDepth.current = 0;\n setDragging(false);\n const file = findImageFile(e.dataTransfer?.files);\n if (!file || !uploadImage) return;\n e.preventDefault();\n setUploading(true);\n try {\n const uploaded = await uploadImage(file);\n appendImageBlock(uploaded);\n } catch {\n // silent\n } finally {\n setUploading(false);\n }\n };\n\n return (\n <Box\n ref={wrapperRef}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n sx={{ position: 'relative' }}\n >\n {children}\n {(dragging || uploading) && (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n backgroundColor: 'rgba(33, 150, 243, 0.06)',\n border: '2px dashed',\n borderColor: 'primary.main',\n borderRadius: 1,\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: 12,\n color: 'primary.dark',\n pointerEvents: 'none',\n zIndex: 10,\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, fontWeight: 600, fontSize: 14 }}>\n <CloudUploadOutlined />\n {uploading ? 'Uploading…' : 'Drop image to insert'}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\n\nimport { MonitorOutlined, PhoneIphoneOutlined } from '@mui/icons-material';\nimport { Box, Stack, SxProps, ToggleButton, ToggleButtonGroup, Tooltip } from '@mui/material';\nimport { Reader } from '@email-builder';\n\nimport EditorBlock from '@editor/editor-block';\nimport {\n setSelectedScreenSize,\n useDocument,\n useSelectedMainTab,\n useSelectedScreenSize,\n usePersistenceEnabled,\n useWorkspaceBackground\n} from '@editor/editor-context';\nimport { t } from '@i18n';\nimport ToggleInspectorPanelButton from '../inspector-drawer/toggle-inspector-panel-button';\nimport ToggleSamplesPanelButton from '../templates-drawer/toggle-samples-panel-button';\n\nimport HtmlPanel from './html-panel';\nimport JsonPanel from './json-panel';\nimport TextPanel from './text-panel';\nimport MainTabsGroup from './main-tabs-group';\nimport SaveBar from './save-bar';\nimport UndoRedoButtons from './undo-redo-buttons';\nimport SubjectInput from './subject-input';\nimport SubjectPreview from './subject-preview';\nimport ImageDropPasteHandler from './image-drop-paste-handler';\nimport { TemplateListItem } from '../index';\nimport type { SavePayload } from '../save-payload';\nimport {\n applySampleValuesToDocument,\n buildSampleValueMap,\n TemplateVariable,\n} from '../variables/variable-utils';\n\ninterface TemplatePanelProps {\n loadTemplates?: () => Promise<TemplateListItem[]>;\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n samplesDrawerEnabled?: boolean;\n}\n\n// Editor-mode workspace backgrounds. 'checkerboard' is a 12-px light/dark\n// squares pattern (opt-in default per user ask); 'solid' is the previous flat\n// gray. Both sit behind the email card and never reach the rendered output.\nconst WORKSPACE_SOLID = '#e7e8ec';\nconst WORKSPACE_CHECKERBOARD =\n 'repeating-conic-gradient(#eceef2 0% 25%, #dfe1e6 0% 50%) 50% / 12px 12px';\n\nexport default function TemplatePanel({ loadTemplates, saveAs, samplesDrawerEnabled = true }: TemplatePanelProps) {\n const document = useDocument();\n const selectedMainTab = useSelectedMainTab();\n const selectedScreenSize = useSelectedScreenSize();\n const persistenceEnabled = usePersistenceEnabled();\n const workspaceBackground = useWorkspaceBackground();\n\n let mainBoxSx: SxProps = {\n height: '100%',\n };\n if (selectedScreenSize === 'mobile') {\n mainBoxSx = {\n ...mainBoxSx,\n margin: '32px auto',\n width: 370,\n height: 800,\n boxShadow:\n 'rgba(33, 36, 67, 0.04) 0px 10px 20px, rgba(33, 36, 67, 0.08) 0px 2px 4px',\n borderRadius: '16px',\n };\n }\n\n const handleScreenSizeChange = (_: unknown, value: unknown) => {\n switch (value) {\n case 'mobile':\n case 'desktop':\n setSelectedScreenSize(value);\n return;\n default:\n setSelectedScreenSize('desktop');\n }\n };\n\n const renderMainPanel = () => {\n switch (selectedMainTab) {\n case 'editor':\n return (\n <Box sx={mainBoxSx}>\n <EditorBlock id=\"root\" />\n </Box>\n );\n case 'preview': {\n const rootBlock = document.root;\n const layoutData =\n rootBlock && rootBlock.type === 'EmailLayout' ? (rootBlock.data as any) : undefined;\n const samples = buildSampleValueMap(\n (layoutData?.variables ?? []) as TemplateVariable[]\n );\n const previewDoc = applySampleValuesToDocument(document, samples);\n return (\n <Box sx={mainBoxSx}>\n <Reader document={previewDoc} rootBlockId=\"root\" />\n </Box>\n );\n }\n case 'html':\n return <HtmlPanel />;\n case 'text':\n return <TextPanel />;\n case 'json':\n return <JsonPanel />;\n }\n };\n\n const showSaveButtons = persistenceEnabled;\n\n return (\n <>\n <Stack\n sx={{\n height: 49,\n borderBottom: 1,\n borderColor: 'divider',\n backgroundColor: 'white',\n position: 'sticky',\n top: 0,\n zIndex: 'appBar',\n px: 1,\n }}\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n {samplesDrawerEnabled && <ToggleSamplesPanelButton />}\n <Stack px={2} direction=\"row\" gap={2} width=\"100%\" justifyContent=\"space-between\" alignItems=\"center\">\n <Stack direction=\"row\" spacing={2}>\n <MainTabsGroup />\n </Stack>\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n {selectedMainTab === 'editor' && <UndoRedoButtons />}\n <ToggleButtonGroup value={selectedScreenSize} exclusive size=\"small\" onChange={handleScreenSizeChange}>\n <ToggleButton value=\"desktop\">\n <Tooltip title={t('canvas.desktop-view', 'Desktop view')}>\n <MonitorOutlined fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n <ToggleButton value=\"mobile\">\n <Tooltip title={t('canvas.mobile-view', 'Mobile view')}>\n <PhoneIphoneOutlined fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n </ToggleButtonGroup>\n </Stack>\n </Stack>\n <ToggleInspectorPanelButton />\n </Stack>\n {selectedMainTab === 'editor' && <SubjectInput />}\n {selectedMainTab === 'preview' && <SubjectPreview />}\n <ImageDropPasteHandler enabled={selectedMainTab === 'editor'}>\n <Box\n sx={{\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n paddingBottom: '16px',\n minWidth: 370,\n // Fills to the bottom of the viewport in editor mode so the\n // workspace gray doesn't end midway under a short email.\n // 49px toolbar + 49px subject bar = 98px fixed chrome above.\n minHeight: selectedMainTab === 'editor' ? 'calc(100vh - 98px)' : undefined,\n background:\n selectedMainTab === 'editor'\n ? workspaceBackground === 'checkerboard'\n ? WORKSPACE_CHECKERBOARD\n : WORKSPACE_SOLID\n : undefined,\n }}\n >\n <Box sx={{ flexGrow: 1 }}>{renderMainPanel()}</Box>\n {showSaveButtons && selectedMainTab === 'editor' && (\n <SaveBar loadTemplates={loadTemplates} saveAs={saveAs} />\n )}\n </Box>\n </ImageDropPasteHandler>\n </>\n );\n}\n","import React, { forwardRef, useImperativeHandle, useEffect, useMemo, useRef } from 'react';\nimport { I18nProvider } from '@lingui/react';\nimport { Stack, useTheme, ThemeProvider } from '@mui/material';\nimport { Theme } from '@mui/material/styles';\nimport defaultTheme from '../theme';\nimport { CssBaseline } from '@mui/material';\nimport { activateLocale, i18n, type SupportedLocale } from '../i18n';\n\nimport { TEditorConfiguration } from '@editor/core';\nimport {\n useDocument,\n getDocument,\n resetDocument,\n useInspectorDrawerOpen,\n useSamplesDrawerOpen,\n setPersistenceEnabled\n} from '@editor/editor-context';\nimport { EmailEditorProvider, useEmailEditor, EmailEditorContextType, EmailEditorProviderProps } from './context';\nimport { ImageCallbacksProvider, type ImageCallbacks, type LibraryImage, type UploadedImage } from './image-context';\nimport type { SavePayload } from './save-payload';\nimport InspectorDrawer, { INSPECTOR_DRAWER_WIDTH } from './inspector-drawer';\nimport SamplesDrawer, { SAMPLES_DRAWER_WIDTH } from './templates-drawer';\nimport TemplatePanel from './email-canvas';\nimport { SnackbarProvider } from './email-canvas/snackbar-provider';\n\n/**\n * Wraps a raw HTML string in an editor config with an EmailLayout root + one Html block.\n */\nfunction htmlToEditorConfig(html: string): TEditorConfiguration {\n return {\n root: {\n type: 'EmailLayout',\n data: {\n backdropColor: '#F5F5F5',\n canvasColor: '#FFFFFF',\n textColor: '#262626',\n fontFamily: 'MODERN_SANS',\n childrenIds: ['block-html-import'],\n },\n },\n 'block-html-import': {\n type: 'Html',\n data: {\n style: {\n padding: { top: 0, bottom: 0, right: 0, left: 0 },\n },\n props: {\n contents: html,\n },\n },\n },\n };\n}\n\nexport type TemplateKind = 'template' | 'sample';\n\n// List-endpoint contract for templates and samples. Kept intentionally lean —\n// `loadTemplate(id)` is what fetches the heavy `TEditorConfiguration`.\nexport interface TemplateListItem {\n id: string;\n slug: string;\n kind: TemplateKind;\n description?: string;\n subject?: string;\n variables?: Array<{ name: string; description?: string }>;\n tags?: string[];\n thumbnailUrl?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\n// The ref interface for imperative controls\nexport interface EmailEditorRef {\n saveTemplate: () => TEditorConfiguration;\n loadTemplate: (template: TEditorConfiguration) => void;\n getTemplate: () => TEditorConfiguration;\n}\n\n// Props for the EmailEditor component\nexport interface EmailEditorProps {\n /**\n * Initial template to load. Can be either:\n * - A `TEditorConfiguration` object (the native editor format)\n * - A raw HTML string, which will be auto-wrapped in an Html block\n */\n initialTemplate?: TEditorConfiguration | string;\n initialTemplateId?: string;\n initialTemplateName?: string;\n /**\n * Called when the user saves the current template. Receives a `SavePayload`\n * containing the source `editorConfig` plus pre-rendered `bodyHtml` /\n * `bodyText` and the editor-managed `subject` / `variables` metadata.\n */\n onSave?: (payload: SavePayload) => void | Promise<void>;\n onChange?: (template: TEditorConfiguration) => void;\n /**\n * Duration for drawer enter transition in milliseconds. Set to 0 for instant.\n * @default 225\n */\n drawerEnterDuration?: number;\n /**\n * Duration for drawer exit transition in milliseconds. Set to 0 for instant.\n * @default 225\n */\n drawerExitDuration?: number;\n /**\n * Whether to show the samples drawer.\n * @default true\n */\n samplesDrawerEnabled?: boolean;\n /**\n * Whether to enable template persistence functionality and show save buttons.\n * When false (default), save functionality and related UI elements will be hidden.\n * When true, make sure to provide the necessary callbacks (onSave, saveAs, etc.).\n * \n * IMPORTANT: If you set this to true, you must provide callbacks to handle persistence\n * operations (onSave, saveAs, etc.). Otherwise, the save buttons will appear but won't\n * be functional.\n * @default false\n */\n persistenceEnabled?: boolean;\n /**\n * Minimum height of the editor container.\n * @default '100vh'\n */\n minHeight?: string;\n /**\n * Callback to load samples dynamically.\n * This will be called when the samples drawer is opened.\n */\n loadSamples?: () => Promise<TemplateListItem[]>;\n /**\n * Callback to load existing templates dynamically.\n * This will be called when the samples drawer is opened.\n */\n loadTemplates?: () => Promise<TemplateListItem[]>;\n /**\n * Callback to load a specific template by ID.\n * This will be called when a sample is selected from the drawer.\n */\n loadTemplate?: (templateId: string) => Promise<TEditorConfiguration | null>;\n /**\n * Callback to delete a template by ID.\n */\n deleteTemplate?: (templateId: string) => void;\n /**\n * Callback to copy a template with a new name.\n */\n copyTemplate?: (templateName: string, content: any) => void;\n /**\n * Callback to update a template's details. Receives the new slug and an\n * optional options bag with the full new tag list. Called from the\n * drawer's Edit-details dialog — the `tags` array replaces the existing\n * tag list when provided.\n */\n renameTemplate?: (\n templateId: string,\n newSlug: string,\n opts?: { tags?: string[] },\n ) => void | Promise<void>;\n /**\n * Callback to promote/demote a row between `template` and `sample`.\n * When omitted, promote/demote menu items are hidden.\n */\n setTemplateKind?: (templateId: string, kind: TemplateKind) => void | Promise<void>;\n /**\n * Callback to save a template with a new name. Receives the same\n * `SavePayload` shape as `onSave`. Returns the new row's `id` and `slug`.\n */\n saveAs?: (templateName: string, payload: SavePayload) => Promise<{ id: string; slug: string }>;\n /**\n * Uploads a single image file and returns its public URL plus optional\n * intrinsic dimensions. When omitted, upload UI (button, drag-drop,\n * paste-to-insert) is hidden; URL paste still works.\n */\n uploadImage?: (file: File) => Promise<UploadedImage>;\n /**\n * Returns previously uploaded images for the library picker. When omitted,\n * the \"Pick from library\" button is hidden.\n */\n loadImages?: () => Promise<LibraryImage[]>;\n /**\n * Deletes an image from the library by URL. When omitted, the delete button\n * on library rows is hidden.\n */\n deleteImage?: (url: string) => Promise<void>;\n /**\n * Optional theme override. If not provided, the default theme will be used.\n * This allows for easy styling without requiring a separate ThemeProvider.\n */\n theme?: Theme;\n /**\n * UI language. One of \"en\", \"sv\", or \"fi\". Unknown values fall back to \"en\"\n * with a console.warn. Defaults to \"en\". Applies to editor chrome only —\n * email content and user data are never translated.\n */\n locale?: SupportedLocale | string;\n}\n\nfunction useDrawerTransition(cssProperty: 'margin-left' | 'margin-right', open: boolean) {\n const { transitions } = useTheme();\n return transitions.create(cssProperty, {\n easing: !open ? transitions.easing.sharp : transitions.easing.easeOut,\n duration: !open ? transitions.duration.leavingScreen : transitions.duration.enteringScreen,\n });\n}\n\n// Internal component that connects the App with the EmailEditor context\nconst EmailEditorInternal = forwardRef<EmailEditorRef, Omit<EmailEditorProps, 'initialTemplate' | 'initialTemplateId' | 'initialTemplateName' | 'onSave' | 'persistenceEnabled'>>((props, ref) => {\n const { \n drawerEnterDuration = 225,\n drawerExitDuration = 225,\n samplesDrawerEnabled = true,\n minHeight = '100vh',\n loadSamples,\n loadTemplates,\n loadTemplate,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n onChange,\n } = props;\n const { saveTemplate, loadTemplate: contextLoadTemplate, currentTemplateId } = useEmailEditor();\n const currentDocument = useDocument();\n const inspectorDrawerOpen = useInspectorDrawerOpen();\n const samplesDrawerOpen = useSamplesDrawerOpen();\n\n const marginLeftTransition = useDrawerTransition('margin-left', samplesDrawerOpen);\n const marginRightTransition = useDrawerTransition('margin-right', inspectorDrawerOpen);\n\n // Notify the consuming app of changes without triggering React state updates\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const prevDocJsonRef = useRef<string>('');\n useEffect(() => {\n const docJson = JSON.stringify(currentDocument);\n if (docJson !== prevDocJsonRef.current) {\n prevDocJsonRef.current = docJson;\n onChangeRef.current?.(currentDocument);\n }\n }, [currentDocument]);\n\n // Expose the API via ref\n useImperativeHandle(ref, () => ({\n saveTemplate: () => {\n return saveTemplate();\n },\n loadTemplate: (newTemplate) => {\n contextLoadTemplate(newTemplate);\n resetDocument(newTemplate);\n },\n getTemplate: () => {\n return getDocument();\n }\n }));\n\n return (\n <Stack position=\"relative\" id=\"drawer-container\" sx={{ minHeight }}>\n <InspectorDrawer\n enterDuration={drawerEnterDuration}\n exitDuration={drawerExitDuration}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n />\n <SamplesDrawer\n enterDuration={drawerEnterDuration}\n exitDuration={drawerExitDuration}\n enabled={samplesDrawerEnabled}\n loadSamples={loadSamples}\n loadTemplates={loadTemplates}\n loadTemplate={loadTemplate}\n currentTemplateId={currentTemplateId}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n setTemplateKind={setTemplateKind}\n saveAs={saveAs}\n />\n\n <Stack\n sx={{\n marginRight: inspectorDrawerOpen ? `${INSPECTOR_DRAWER_WIDTH}px` : 0,\n marginLeft: samplesDrawerOpen && samplesDrawerEnabled ? `${SAMPLES_DRAWER_WIDTH}px` : 0,\n transition: [marginLeftTransition, marginRightTransition].join(', '),\n }}\n >\n <TemplatePanel loadTemplates={loadTemplates} saveAs={saveAs} samplesDrawerEnabled={samplesDrawerEnabled} />\n </Stack>\n </Stack>\n );\n});\n\n// The main EmailEditor component that external apps will use\nconst EmailEditor = forwardRef<EmailEditorRef, EmailEditorProps>((props, ref) => {\n const {\n initialTemplate: initialTemplateProp,\n initialTemplateId,\n initialTemplateName,\n onSave,\n onChange,\n drawerEnterDuration,\n drawerExitDuration,\n samplesDrawerEnabled,\n persistenceEnabled = false,\n minHeight = '100vh',\n loadSamples,\n loadTemplates,\n loadTemplate,\n deleteTemplate,\n copyTemplate,\n renameTemplate,\n setTemplateKind,\n saveAs,\n uploadImage,\n loadImages,\n deleteImage,\n theme,\n locale,\n } = props;\n\n // Activate the requested locale before any UI renders. Subsequent prop\n // changes re-activate on render.\n activateLocale(locale);\n\n // Resolve: if it's a raw HTML string, wrap it in an editor config.\n // Memoize so a string prop doesn't create a new object every render.\n const resolvedTemplate = useMemo(\n () => typeof initialTemplateProp === 'string'\n ? htmlToEditorConfig(initialTemplateProp)\n : initialTemplateProp,\n [initialTemplateProp],\n );\n\n // Reset the editor synchronously during render (not in an effect) so the\n // Zustand store is up-to-date before child components mount / effects fire.\n // This prevents the onChange callback from emitting a stale empty document.\n const prevTemplateRef = useRef<TEditorConfiguration | undefined>(undefined);\n if (resolvedTemplate && resolvedTemplate !== prevTemplateRef.current) {\n prevTemplateRef.current = resolvedTemplate;\n resetDocument(resolvedTemplate);\n }\n\n // Update persistence mode when it changes\n useEffect(() => {\n setPersistenceEnabled(persistenceEnabled);\n }, [persistenceEnabled]);\n\n const imageCallbacks = useMemo<ImageCallbacks>(\n () => ({ uploadImage, loadImages, deleteImage }),\n [uploadImage, loadImages, deleteImage]\n );\n\n return (\n <I18nProvider i18n={i18n}>\n <ThemeProvider theme={theme || defaultTheme}>\n <CssBaseline />\n <div style={{ height: '100%', overflow: 'auto' }}>\n <SnackbarProvider>\n <ImageCallbacksProvider callbacks={imageCallbacks}>\n <EmailEditorProvider\n initialTemplate={resolvedTemplate}\n initialTemplateId={initialTemplateId}\n initialTemplateName={initialTemplateName}\n onSave={onSave}\n onChange={onChange}\n >\n <EmailEditorInternal\n ref={ref}\n drawerEnterDuration={drawerEnterDuration}\n drawerExitDuration={drawerExitDuration}\n samplesDrawerEnabled={samplesDrawerEnabled}\n minHeight={minHeight}\n loadSamples={loadSamples}\n loadTemplates={loadTemplates}\n loadTemplate={loadTemplate}\n deleteTemplate={deleteTemplate}\n copyTemplate={copyTemplate}\n renameTemplate={renameTemplate}\n setTemplateKind={setTemplateKind}\n saveAs={saveAs}\n onChange={onChange}\n />\n </EmailEditorProvider>\n </ImageCallbacksProvider>\n </SnackbarProvider>\n </div>\n </ThemeProvider>\n </I18nProvider>\n );\n});\n\nEmailEditor.displayName = 'EmailEditor';\nEmailEditorInternal.displayName = 'EmailEditorInternal';\n\n// Export both as default and named\nexport default EmailEditor;\nexport { EmailEditor };\n\n// Export context and hooks\nexport {\n EmailEditorProvider,\n useEmailEditor,\n type EmailEditorContextType,\n type EmailEditorProviderProps\n};\n\n// Export utility\nexport { htmlToEditorConfig };\n\n// Re-export the save payload type so consumers typing their callbacks have one import path.\nexport type { SavePayload, TemplateVariable } from './save-payload';\n\n// Image-callback types so consumers can type their handlers directly.\nexport type { ImageCallbacks, LibraryImage, UploadedImage } from './image-context'; "]}