@marlinjai/email-editor 0.2.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/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/chunk-EFHKH3BN.mjs +47 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +173 -0
- package/dist/index.mjs +112 -0
- package/dist/react.d.mts +51 -0
- package/dist/react.d.ts +51 -0
- package/dist/react.js +125 -0
- package/dist/react.mjs +62 -0
- package/dist/styles.css +3 -0
- package/dist/types-BoNyjNFe.d.mts +42 -0
- package/dist/types-BoNyjNFe.d.ts +42 -0
- package/dist/types-G7Ak2dWQ.d.mts +117 -0
- package/dist/types-G7Ak2dWQ.d.ts +117 -0
- package/package.json +79 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import {
|
|
2
|
+
assertSupportedBlocks,
|
|
3
|
+
registerSavedSections,
|
|
4
|
+
themeToStyle
|
|
5
|
+
} from "./chunk-EFHKH3BN.mjs";
|
|
6
|
+
|
|
7
|
+
// src/createEditor.ts
|
|
8
|
+
import { createRoot } from "react-dom/client";
|
|
9
|
+
import { createElement } from "react";
|
|
10
|
+
import {
|
|
11
|
+
CURRENT_TEMPLATE_VERSION,
|
|
12
|
+
createPrebuiltTemplateRegistry,
|
|
13
|
+
withTemplateId
|
|
14
|
+
} from "@marlinjai/email-editor-core";
|
|
15
|
+
import { createStandardBlockRegistry, createStandardPrebuiltRegistry } from "@marlinjai/email-editor-blocks";
|
|
16
|
+
import { EmailEditor } from "@marlinjai/email-editor-ui";
|
|
17
|
+
function emptyTemplate() {
|
|
18
|
+
return {
|
|
19
|
+
version: CURRENT_TEMPLATE_VERSION,
|
|
20
|
+
metadata: { title: "New Email", subject: "", previewText: "" },
|
|
21
|
+
sections: []
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function openable(template) {
|
|
25
|
+
return withTemplateId(template ?? emptyTemplate());
|
|
26
|
+
}
|
|
27
|
+
function createEditor(options) {
|
|
28
|
+
const {
|
|
29
|
+
container,
|
|
30
|
+
initialValue,
|
|
31
|
+
theme,
|
|
32
|
+
blocks = [],
|
|
33
|
+
onChange,
|
|
34
|
+
onSave,
|
|
35
|
+
onRequestImage,
|
|
36
|
+
savedSections = [],
|
|
37
|
+
onSaveSection,
|
|
38
|
+
builtInSections = true,
|
|
39
|
+
placeholderBase
|
|
40
|
+
} = options;
|
|
41
|
+
assertSupportedBlocks(blocks);
|
|
42
|
+
const registry = createStandardBlockRegistry({ placeholderBase });
|
|
43
|
+
blocks.forEach((block) => {
|
|
44
|
+
registry.unregister(block.type);
|
|
45
|
+
registry.register(block);
|
|
46
|
+
});
|
|
47
|
+
const prebuiltRegistry = builtInSections ? createStandardPrebuiltRegistry({ placeholderBase }) : createPrebuiltTemplateRegistry();
|
|
48
|
+
registerSavedSections(prebuiltRegistry, savedSections);
|
|
49
|
+
let currentTemplate = openable(initialValue);
|
|
50
|
+
let generation = 0;
|
|
51
|
+
const handleChange = (snapshot) => {
|
|
52
|
+
currentTemplate = snapshot;
|
|
53
|
+
onChange?.(currentTemplate);
|
|
54
|
+
};
|
|
55
|
+
const handleSave = () => {
|
|
56
|
+
onSave?.(currentTemplate);
|
|
57
|
+
};
|
|
58
|
+
let root = null;
|
|
59
|
+
const render = () => {
|
|
60
|
+
if (!root) {
|
|
61
|
+
root = createRoot(container);
|
|
62
|
+
}
|
|
63
|
+
root.render(
|
|
64
|
+
createElement(EmailEditor, {
|
|
65
|
+
key: generation,
|
|
66
|
+
initialTemplate: currentTemplate,
|
|
67
|
+
onChange: handleChange,
|
|
68
|
+
blockRegistry: registry,
|
|
69
|
+
prebuiltRegistry,
|
|
70
|
+
onSave: handleSave,
|
|
71
|
+
onRequestImage,
|
|
72
|
+
onSaveSection,
|
|
73
|
+
savedSectionNames: savedSections.map((s) => s.name),
|
|
74
|
+
style: themeToStyle(theme)
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
render();
|
|
79
|
+
return {
|
|
80
|
+
getValue() {
|
|
81
|
+
return currentTemplate;
|
|
82
|
+
},
|
|
83
|
+
setValue(template) {
|
|
84
|
+
currentTemplate = openable(template);
|
|
85
|
+
generation += 1;
|
|
86
|
+
render();
|
|
87
|
+
},
|
|
88
|
+
getHTML() {
|
|
89
|
+
console.warn("getHTML() requires a server-side compiler");
|
|
90
|
+
return "";
|
|
91
|
+
},
|
|
92
|
+
getMJML() {
|
|
93
|
+
console.warn("getMJML() requires a server-side compiler");
|
|
94
|
+
return "";
|
|
95
|
+
},
|
|
96
|
+
undo() {
|
|
97
|
+
console.warn("Undo via API not yet implemented");
|
|
98
|
+
},
|
|
99
|
+
redo() {
|
|
100
|
+
console.warn("Redo via API not yet implemented");
|
|
101
|
+
},
|
|
102
|
+
destroy() {
|
|
103
|
+
if (root) {
|
|
104
|
+
root.unmount();
|
|
105
|
+
root = null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
createEditor
|
|
112
|
+
};
|
package/dist/react.d.mts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { TemplateSnapshotIn, TemplateSnapshotOut, BlockDefinition } from '@marlinjai/email-editor-core';
|
|
3
|
+
export { BlockDefinition, TemplateSnapshotIn, TemplateSnapshotOut } from '@marlinjai/email-editor-core';
|
|
4
|
+
import { OnRequestImage, OnSaveSection } from '@marlinjai/email-editor-ui';
|
|
5
|
+
export { ImageRequest, OnRequestImage, OnSaveSection, RequestedImage } from '@marlinjai/email-editor-ui';
|
|
6
|
+
import { b as EditorTheme, S as SavedSectionInput } from './types-G7Ak2dWQ.mjs';
|
|
7
|
+
|
|
8
|
+
interface EmailEditorReactProps {
|
|
9
|
+
/** Initial template data (uncontrolled) */
|
|
10
|
+
initialTemplate?: TemplateSnapshotIn;
|
|
11
|
+
/** Called when template changes */
|
|
12
|
+
onChange?: (template: TemplateSnapshotOut) => void;
|
|
13
|
+
/** Editor theme */
|
|
14
|
+
theme?: EditorTheme;
|
|
15
|
+
/** Redefine standard block types (label, icon, category, default props). New types are refused. */
|
|
16
|
+
blocks?: BlockDefinition[];
|
|
17
|
+
/** Called when save button is clicked */
|
|
18
|
+
onSave?: () => void;
|
|
19
|
+
/** Called when export is requested */
|
|
20
|
+
onExport?: (template: TemplateSnapshotOut) => void;
|
|
21
|
+
/** Called when back button is clicked to navigate away from editor */
|
|
22
|
+
onNavigateBack?: () => void;
|
|
23
|
+
/**
|
|
24
|
+
* Supply images from your own picker or uploader. Resolve with
|
|
25
|
+
* `{ url, alt? }`, or `null` when the user cancels (the block is left
|
|
26
|
+
* unchanged). A rejected promise is shown inline in the image inspector.
|
|
27
|
+
* Without it, the image inspector shows a plain URL field.
|
|
28
|
+
*/
|
|
29
|
+
onRequestImage?: OnRequestImage;
|
|
30
|
+
/** The sections this workspace has saved, offered in the picker under their own group. */
|
|
31
|
+
savedSections?: SavedSectionInput[];
|
|
32
|
+
/**
|
|
33
|
+
* Whether to offer the 35 sections that ship with this package. True by
|
|
34
|
+
* default; false offers only `savedSections`, for a host with its own library.
|
|
35
|
+
*/
|
|
36
|
+
builtInSections?: boolean;
|
|
37
|
+
/** Where placeholder images are served from, e.g. `https://mail.example.com`. See `EditorOptions`. */
|
|
38
|
+
placeholderBase?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Keep a section for reuse. When set, a section's controls carry a "Save as a
|
|
41
|
+
* section" action. Without it no action appears, rather than one that fails.
|
|
42
|
+
*/
|
|
43
|
+
onSaveSection?: OnSaveSection;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* React wrapper for email editor
|
|
47
|
+
* Convenience component for React applications
|
|
48
|
+
*/
|
|
49
|
+
declare function EmailEditorReact({ initialTemplate, onChange, theme, blocks, onSave, onExport, onNavigateBack, onRequestImage, savedSections, onSaveSection, builtInSections, placeholderBase, }: EmailEditorReactProps): react.JSX.Element;
|
|
50
|
+
|
|
51
|
+
export { EditorTheme, EmailEditorReact, SavedSectionInput };
|
package/dist/react.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { TemplateSnapshotIn, TemplateSnapshotOut, BlockDefinition } from '@marlinjai/email-editor-core';
|
|
3
|
+
export { BlockDefinition, TemplateSnapshotIn, TemplateSnapshotOut } from '@marlinjai/email-editor-core';
|
|
4
|
+
import { OnRequestImage, OnSaveSection } from '@marlinjai/email-editor-ui';
|
|
5
|
+
export { ImageRequest, OnRequestImage, OnSaveSection, RequestedImage } from '@marlinjai/email-editor-ui';
|
|
6
|
+
import { b as EditorTheme, S as SavedSectionInput } from './types-G7Ak2dWQ.js';
|
|
7
|
+
|
|
8
|
+
interface EmailEditorReactProps {
|
|
9
|
+
/** Initial template data (uncontrolled) */
|
|
10
|
+
initialTemplate?: TemplateSnapshotIn;
|
|
11
|
+
/** Called when template changes */
|
|
12
|
+
onChange?: (template: TemplateSnapshotOut) => void;
|
|
13
|
+
/** Editor theme */
|
|
14
|
+
theme?: EditorTheme;
|
|
15
|
+
/** Redefine standard block types (label, icon, category, default props). New types are refused. */
|
|
16
|
+
blocks?: BlockDefinition[];
|
|
17
|
+
/** Called when save button is clicked */
|
|
18
|
+
onSave?: () => void;
|
|
19
|
+
/** Called when export is requested */
|
|
20
|
+
onExport?: (template: TemplateSnapshotOut) => void;
|
|
21
|
+
/** Called when back button is clicked to navigate away from editor */
|
|
22
|
+
onNavigateBack?: () => void;
|
|
23
|
+
/**
|
|
24
|
+
* Supply images from your own picker or uploader. Resolve with
|
|
25
|
+
* `{ url, alt? }`, or `null` when the user cancels (the block is left
|
|
26
|
+
* unchanged). A rejected promise is shown inline in the image inspector.
|
|
27
|
+
* Without it, the image inspector shows a plain URL field.
|
|
28
|
+
*/
|
|
29
|
+
onRequestImage?: OnRequestImage;
|
|
30
|
+
/** The sections this workspace has saved, offered in the picker under their own group. */
|
|
31
|
+
savedSections?: SavedSectionInput[];
|
|
32
|
+
/**
|
|
33
|
+
* Whether to offer the 35 sections that ship with this package. True by
|
|
34
|
+
* default; false offers only `savedSections`, for a host with its own library.
|
|
35
|
+
*/
|
|
36
|
+
builtInSections?: boolean;
|
|
37
|
+
/** Where placeholder images are served from, e.g. `https://mail.example.com`. See `EditorOptions`. */
|
|
38
|
+
placeholderBase?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Keep a section for reuse. When set, a section's controls carry a "Save as a
|
|
41
|
+
* section" action. Without it no action appears, rather than one that fails.
|
|
42
|
+
*/
|
|
43
|
+
onSaveSection?: OnSaveSection;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* React wrapper for email editor
|
|
47
|
+
* Convenience component for React applications
|
|
48
|
+
*/
|
|
49
|
+
declare function EmailEditorReact({ initialTemplate, onChange, theme, blocks, onSave, onExport, onNavigateBack, onRequestImage, savedSections, onSaveSection, builtInSections, placeholderBase, }: EmailEditorReactProps): react.JSX.Element;
|
|
50
|
+
|
|
51
|
+
export { EditorTheme, EmailEditorReact, SavedSectionInput };
|
package/dist/react.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/react.tsx
|
|
21
|
+
var react_exports = {};
|
|
22
|
+
__export(react_exports, {
|
|
23
|
+
EmailEditorReact: () => EmailEditorReact
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(react_exports);
|
|
26
|
+
var import_react = require("react");
|
|
27
|
+
var import_email_editor_core2 = require("@marlinjai/email-editor-core");
|
|
28
|
+
var import_email_editor_blocks = require("@marlinjai/email-editor-blocks");
|
|
29
|
+
var import_email_editor_ui = require("@marlinjai/email-editor-ui");
|
|
30
|
+
|
|
31
|
+
// src/savedSections.ts
|
|
32
|
+
var savedSectionId = (id) => `saved:${id}`;
|
|
33
|
+
function registerSavedSections(registry, sections) {
|
|
34
|
+
for (const saved of sections) {
|
|
35
|
+
if (typeof saved?.section !== "object" || saved.section === null) continue;
|
|
36
|
+
registry.register({
|
|
37
|
+
id: savedSectionId(saved.id),
|
|
38
|
+
name: saved.name,
|
|
39
|
+
category: "saved",
|
|
40
|
+
description: saved.description,
|
|
41
|
+
section: saved.section
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/theme.ts
|
|
47
|
+
function themeToStyle(theme) {
|
|
48
|
+
const style = {};
|
|
49
|
+
const set = (token, value) => {
|
|
50
|
+
if (typeof value === "string" && value.trim()) style[token] = value.trim();
|
|
51
|
+
};
|
|
52
|
+
set("--ee-accent", theme?.colors?.primary);
|
|
53
|
+
set("--ee-accent-hover", theme?.colors?.primaryHover ?? theme?.colors?.primary);
|
|
54
|
+
set("--ee-canvas-2", theme?.colors?.surface);
|
|
55
|
+
set("--ee-text-dark", theme?.colors?.text);
|
|
56
|
+
set("--ee-border-light", theme?.colors?.border);
|
|
57
|
+
set("--ee-font-sans", theme?.fonts?.body);
|
|
58
|
+
return style;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// src/blocks.ts
|
|
62
|
+
var import_email_editor_core = require("@marlinjai/email-editor-core");
|
|
63
|
+
var STANDARD_TYPES = new Set(Object.values(import_email_editor_core.BlockType));
|
|
64
|
+
function assertSupportedBlocks(blocks) {
|
|
65
|
+
const unsupported = blocks.map((block) => block?.type).filter((type) => !STANDARD_TYPES.has(type));
|
|
66
|
+
if (unsupported.length > 0) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
`Unsupported block type${unsupported.length > 1 ? "s" : ""}: ${unsupported.map((type) => JSON.stringify(type)).join(", ")}. The blocks option can only redefine a standard block type (${[...STANDARD_TYPES].join(", ")}).`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/react.tsx
|
|
74
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
75
|
+
function EmailEditorReact({
|
|
76
|
+
initialTemplate,
|
|
77
|
+
onChange,
|
|
78
|
+
theme,
|
|
79
|
+
blocks = [],
|
|
80
|
+
onSave,
|
|
81
|
+
onExport,
|
|
82
|
+
onNavigateBack,
|
|
83
|
+
onRequestImage,
|
|
84
|
+
savedSections,
|
|
85
|
+
onSaveSection,
|
|
86
|
+
builtInSections = true,
|
|
87
|
+
placeholderBase
|
|
88
|
+
}) {
|
|
89
|
+
const [registry] = (0, import_react.useState)(() => {
|
|
90
|
+
assertSupportedBlocks(blocks);
|
|
91
|
+
const reg = (0, import_email_editor_blocks.createStandardBlockRegistry)({ placeholderBase });
|
|
92
|
+
blocks.forEach((block) => {
|
|
93
|
+
reg.unregister(block.type);
|
|
94
|
+
reg.register(block);
|
|
95
|
+
});
|
|
96
|
+
return reg;
|
|
97
|
+
});
|
|
98
|
+
const [prebuiltRegistry] = (0, import_react.useState)(() => {
|
|
99
|
+
const reg = builtInSections ? (0, import_email_editor_blocks.createStandardPrebuiltRegistry)({ placeholderBase }) : (0, import_email_editor_core2.createPrebuiltTemplateRegistry)();
|
|
100
|
+
registerSavedSections(reg, savedSections ?? []);
|
|
101
|
+
return reg;
|
|
102
|
+
});
|
|
103
|
+
const savedSectionNames = (0, import_react.useMemo)(() => (savedSections ?? []).map((s) => s.name), [savedSections]);
|
|
104
|
+
const style = (0, import_react.useMemo)(() => themeToStyle(theme), [theme]);
|
|
105
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
106
|
+
import_email_editor_ui.EmailEditor,
|
|
107
|
+
{
|
|
108
|
+
initialTemplate,
|
|
109
|
+
onChange,
|
|
110
|
+
blockRegistry: registry,
|
|
111
|
+
prebuiltRegistry,
|
|
112
|
+
onSave,
|
|
113
|
+
onExport,
|
|
114
|
+
onNavigateBack,
|
|
115
|
+
onRequestImage,
|
|
116
|
+
onSaveSection,
|
|
117
|
+
savedSectionNames,
|
|
118
|
+
style
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
EmailEditorReact
|
|
125
|
+
});
|
package/dist/react.mjs
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
assertSupportedBlocks,
|
|
3
|
+
registerSavedSections,
|
|
4
|
+
themeToStyle
|
|
5
|
+
} from "./chunk-EFHKH3BN.mjs";
|
|
6
|
+
|
|
7
|
+
// src/react.tsx
|
|
8
|
+
import { useMemo, useState } from "react";
|
|
9
|
+
import { createPrebuiltTemplateRegistry } from "@marlinjai/email-editor-core";
|
|
10
|
+
import { createStandardBlockRegistry, createStandardPrebuiltRegistry } from "@marlinjai/email-editor-blocks";
|
|
11
|
+
import { EmailEditor } from "@marlinjai/email-editor-ui";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
function EmailEditorReact({
|
|
14
|
+
initialTemplate,
|
|
15
|
+
onChange,
|
|
16
|
+
theme,
|
|
17
|
+
blocks = [],
|
|
18
|
+
onSave,
|
|
19
|
+
onExport,
|
|
20
|
+
onNavigateBack,
|
|
21
|
+
onRequestImage,
|
|
22
|
+
savedSections,
|
|
23
|
+
onSaveSection,
|
|
24
|
+
builtInSections = true,
|
|
25
|
+
placeholderBase
|
|
26
|
+
}) {
|
|
27
|
+
const [registry] = useState(() => {
|
|
28
|
+
assertSupportedBlocks(blocks);
|
|
29
|
+
const reg = createStandardBlockRegistry({ placeholderBase });
|
|
30
|
+
blocks.forEach((block) => {
|
|
31
|
+
reg.unregister(block.type);
|
|
32
|
+
reg.register(block);
|
|
33
|
+
});
|
|
34
|
+
return reg;
|
|
35
|
+
});
|
|
36
|
+
const [prebuiltRegistry] = useState(() => {
|
|
37
|
+
const reg = builtInSections ? createStandardPrebuiltRegistry({ placeholderBase }) : createPrebuiltTemplateRegistry();
|
|
38
|
+
registerSavedSections(reg, savedSections ?? []);
|
|
39
|
+
return reg;
|
|
40
|
+
});
|
|
41
|
+
const savedSectionNames = useMemo(() => (savedSections ?? []).map((s) => s.name), [savedSections]);
|
|
42
|
+
const style = useMemo(() => themeToStyle(theme), [theme]);
|
|
43
|
+
return /* @__PURE__ */ jsx(
|
|
44
|
+
EmailEditor,
|
|
45
|
+
{
|
|
46
|
+
initialTemplate,
|
|
47
|
+
onChange,
|
|
48
|
+
blockRegistry: registry,
|
|
49
|
+
prebuiltRegistry,
|
|
50
|
+
onSave,
|
|
51
|
+
onExport,
|
|
52
|
+
onNavigateBack,
|
|
53
|
+
onRequestImage,
|
|
54
|
+
onSaveSection,
|
|
55
|
+
savedSectionNames,
|
|
56
|
+
style
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
EmailEditorReact
|
|
62
|
+
};
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
.ee-root *,.ee-root :after,.ee-root :before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.ee-root ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
|
|
2
|
+
|
|
3
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/.ee-root *,.ee-root :after,.ee-root :before{box-sizing:border-box;border:0 solid #e5e7eb}.ee-root :after,.ee-root :before{--tw-content:""}.ee-root{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--ee-font-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}.ee-root{margin:0;line-height:inherit}.ee-root hr{height:0;color:inherit;border-top-width:1px}.ee-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.ee-root h1,.ee-root h2,.ee-root h3,.ee-root h4,.ee-root h5,.ee-root h6{font-size:inherit;font-weight:inherit}.ee-root a{color:inherit;text-decoration:inherit}.ee-root b,.ee-root strong{font-weight:bolder}.ee-root code,.ee-root kbd,.ee-root pre,.ee-root samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}.ee-root small{font-size:80%}.ee-root sub,.ee-root sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.ee-root sub{bottom:-.25em}.ee-root sup{top:-.5em}.ee-root table{text-indent:0;border-color:inherit;border-collapse:collapse}.ee-root button,.ee-root input,.ee-root optgroup,.ee-root select,.ee-root textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}.ee-root button,.ee-root select{text-transform:none}.ee-root button,.ee-root input:where([type=button]),.ee-root input:where([type=reset]),.ee-root input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.ee-root :-moz-focusring{outline:auto}.ee-root :-moz-ui-invalid{box-shadow:none}.ee-root progress{vertical-align:baseline}.ee-root ::-webkit-inner-spin-button,.ee-root ::-webkit-outer-spin-button{height:auto}.ee-root [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.ee-root ::-webkit-search-decoration{-webkit-appearance:none}.ee-root ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.ee-root summary{display:list-item}.ee-root blockquote,.ee-root dd,.ee-root dl,.ee-root figure,.ee-root h1,.ee-root h2,.ee-root h3,.ee-root h4,.ee-root h5,.ee-root h6,.ee-root hr,.ee-root p,.ee-root pre{margin:0}.ee-root fieldset{margin:0;padding:0}.ee-root legend{padding:0}.ee-root menu,.ee-root ol,.ee-root ul{list-style:none;margin:0;padding:0}.ee-root dialog{padding:0}.ee-root textarea{resize:vertical}.ee-root input::-moz-placeholder,.ee-root textarea::-moz-placeholder{opacity:1;color:#9ca3af}.ee-root input::placeholder,.ee-root textarea::placeholder{opacity:1;color:#9ca3af}.ee-root [role=button],.ee-root button{cursor:pointer}.ee-root :disabled{cursor:default}.ee-root audio,.ee-root canvas,.ee-root embed,.ee-root iframe,.ee-root img,.ee-root object,.ee-root svg,.ee-root video{display:block;vertical-align:middle}.ee-root img,.ee-root video{max-width:100%;height:auto}.ee-root [hidden]:where(:not([hidden=until-found])){display:none}.ee-root *{border-color:var(--ee-border-light)}.ee-root{font-family:var(--ee-font-sans);color:var(--ee-text-dark)}.ee-root .container{width:100%}@media (min-width:640px){.ee-root .container{max-width:640px}}@media (min-width:768px){.ee-root .container{max-width:768px}}@media (min-width:1024px){.ee-root .container{max-width:1024px}}@media (min-width:1280px){.ee-root .container{max-width:1280px}}@media (min-width:1536px){.ee-root .container{max-width:1536px}}.ee-root .pointer-events-none{pointer-events:none}.ee-root .visible{visibility:visible}.ee-root .collapse{visibility:collapse}.ee-root .fixed{position:fixed}.ee-root .absolute{position:absolute}.ee-root .relative{position:relative}.ee-root .inset-0{inset:0}.ee-root .inset-x-0{left:0;right:0}.ee-root .-top-5{top:-1.25rem}.ee-root .bottom-0{bottom:0}.ee-root .bottom-3{bottom:.75rem}.ee-root .left-0{left:0}.ee-root .left-1\/2{left:50%}.ee-root .right-0{right:0}.ee-root .right-1{right:.25rem}.ee-root .right-3{right:.75rem}.ee-root .top-0{top:0}.ee-root .top-1{top:.25rem}.ee-root .top-1\/2{top:50%}.ee-root .z-10{z-index:10}.ee-root .z-20{z-index:20}.ee-root .z-30{z-index:30}.ee-root .z-50{z-index:50}.ee-root .z-\[5\]{z-index:5}.ee-root .m-4{margin:1rem}.ee-root .mx-1{margin-left:.25rem;margin-right:.25rem}.ee-root .mx-4{margin-left:1rem;margin-right:1rem}.ee-root .my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.ee-root .my-1{margin-top:.25rem;margin-bottom:.25rem}.ee-root .my-2{margin-top:.5rem;margin-bottom:.5rem}.ee-root .my-4{margin-top:1rem;margin-bottom:1rem}.ee-root .mb-1{margin-bottom:.25rem}.ee-root .mb-1\.5{margin-bottom:.375rem}.ee-root .mb-2{margin-bottom:.5rem}.ee-root .mb-3{margin-bottom:.75rem}.ee-root .mb-4{margin-bottom:1rem}.ee-root .ml-1{margin-left:.25rem}.ee-root .ml-2{margin-left:.5rem}.ee-root .ml-3{margin-left:.75rem}.ee-root .ml-4{margin-left:1rem}.ee-root .ml-6{margin-left:1.5rem}.ee-root .ml-auto{margin-left:auto}.ee-root .mt-0\.5{margin-top:.125rem}.ee-root .mt-1{margin-top:.25rem}.ee-root .mt-2{margin-top:.5rem}.ee-root .mt-3{margin-top:.75rem}.ee-root .mt-4{margin-top:1rem}.ee-root .mt-6{margin-top:1.5rem}.ee-root .\!block{display:block!important}.ee-root .block{display:block}.ee-root .inline-block{display:inline-block}.ee-root .inline{display:inline}.ee-root .flex{display:flex}.ee-root .inline-flex{display:inline-flex}.ee-root .table{display:table}.ee-root .grid{display:grid}.ee-root .contents{display:contents}.ee-root .hidden{display:none}.ee-root .h-1{height:.25rem}.ee-root .h-16{height:4rem}.ee-root .h-2{height:.5rem}.ee-root .h-6{height:1.5rem}.ee-root .h-7{height:1.75rem}.ee-root .h-8{height:2rem}.ee-root .h-\[min\(880px\2c 92vh\)\]{height:min(880px,92vh)}.ee-root .h-full{height:100%}.ee-root .min-h-\[20px\]{min-height:20px}.ee-root .min-h-\[400px\]{min-height:400px}.ee-root .min-h-\[80px\]{min-height:80px}.ee-root .w-10{width:2.5rem}.ee-root .w-12{width:3rem}.ee-root .w-16{width:4rem}.ee-root .w-4{width:1rem}.ee-root .w-6{width:1.5rem}.ee-root .w-64{width:16rem}.ee-root .w-7{width:1.75rem}.ee-root .w-72{width:18rem}.ee-root .w-8{width:2rem}.ee-root .w-\[min\(1280px\2c 95vw\)\]{width:min(1280px,95vw)}.ee-root .w-\[min\(440px\2c 92vw\)\]{width:min(440px,92vw)}.ee-root .w-full{width:100%}.ee-root .w-px{width:1px}.ee-root .min-w-0{min-width:0}.ee-root .min-w-\[140px\]{min-width:140px}.ee-root .max-w-md{max-width:28rem}.ee-root .flex-1{flex:1 1 0%}.ee-root .flex-shrink-0,.ee-root .shrink-0{flex-shrink:0}.ee-root .-translate-x-1\/2{--tw-translate-x:-50%}.ee-root .-translate-x-1\/2,.ee-root .-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ee-root .-translate-y-1\/2{--tw-translate-y:-50%}.ee-root .translate-y-1{--tw-translate-y:0.25rem}.ee-root .rotate-90,.ee-root .translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ee-root .rotate-90{--tw-rotate:90deg}.ee-root .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ee-spin{to{transform:rotate(1turn)}}.ee-root .animate-spin{animation:ee-spin 1s linear infinite}.ee-root .cursor-grab{cursor:grab}.ee-root .cursor-not-allowed{cursor:not-allowed}.ee-root .cursor-pointer{cursor:pointer}.ee-root .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ee-root .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ee-root .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ee-root .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ee-root .flex-col{flex-direction:column}.ee-root .flex-wrap{flex-wrap:wrap}.ee-root .items-start{align-items:flex-start}.ee-root .items-center{align-items:center}.ee-root .items-baseline{align-items:baseline}.ee-root .justify-end{justify-content:flex-end}.ee-root .justify-center{justify-content:center}.ee-root .justify-between{justify-content:space-between}.ee-root .gap-1{gap:.25rem}.ee-root .gap-1\.5{gap:.375rem}.ee-root .gap-2{gap:.5rem}.ee-root .gap-3{gap:.75rem}.ee-root .gap-4{gap:1rem}.ee-root .gap-6{gap:1.5rem}.ee-root .space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.ee-root .space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.ee-root .space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.ee-root .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.ee-root .overflow-auto{overflow:auto}.ee-root .overflow-hidden{overflow:hidden}.ee-root .overflow-y-auto{overflow-y:auto}.ee-root .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ee-root .rounded{border-radius:.25rem}.ee-root .rounded-2xl{border-radius:1rem}.ee-root .rounded-full{border-radius:9999px}.ee-root .rounded-lg{border-radius:.5rem}.ee-root .rounded-md{border-radius:.375rem}.ee-root .rounded-sm{border-radius:.125rem}.ee-root .rounded-xl{border-radius:.75rem}.ee-root .rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.ee-root .rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.ee-root .rounded-bl{border-bottom-left-radius:.25rem}.ee-root .rounded-br{border-bottom-right-radius:.25rem}.ee-root .border{border-width:1px}.ee-root .border-2{border-width:2px}.ee-root .border-b{border-bottom-width:1px}.ee-root .border-b-2{border-bottom-width:2px}.ee-root .border-l{border-left-width:1px}.ee-root .border-l-2{border-left-width:2px}.ee-root .border-r{border-right-width:1px}.ee-root .border-t{border-top-width:1px}.ee-root .border-dashed{border-style:dashed}.ee-root .border-accent{border-color:var(--ee-accent)}.ee-root .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.ee-root .border-black\/\[0\.04\]{border-color:rgba(0,0,0,.04)}.ee-root .border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.ee-root .border-border-default{border-color:var(--ee-border-default)}.ee-root .border-border-light,.ee-root .border-brand-border{border-color:var(--ee-border-light)}.ee-root .border-brand-primary{border-color:var(--ee-accent)}.ee-root .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.ee-root .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.ee-root .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.ee-root .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.ee-root .border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.ee-root .border-violet-200{--tw-border-opacity:1;border-color:rgb(221 214 254/var(--tw-border-opacity,1))}.ee-root .border-violet-300{--tw-border-opacity:1;border-color:rgb(196 181 253/var(--tw-border-opacity,1))}.ee-root .border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.ee-root .bg-\[\#fafaf7\]{--tw-bg-opacity:1;background-color:rgb(250 250 247/var(--tw-bg-opacity,1))}.ee-root .bg-accent{background-color:var(--ee-accent)}.ee-root .bg-accent-muted{background-color:var(--ee-accent-muted)}.ee-root .bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.ee-root .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.ee-root .bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.ee-root .bg-black\/50{background-color:rgba(0,0,0,.5)}.ee-root .bg-black\/60{background-color:rgba(0,0,0,.6)}.ee-root .bg-black\/\[0\.04\]{background-color:rgba(0,0,0,.04)}.ee-root .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.ee-root .bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))}.ee-root .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.ee-root .bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.ee-root .bg-canvas-1{background-color:var(--ee-canvas-1)}.ee-root .bg-canvas-2{background-color:var(--ee-canvas-2)}.ee-root .bg-canvas-3{background-color:var(--ee-canvas-3)}.ee-root .bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.ee-root .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.ee-root .bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.ee-root .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.ee-root .bg-midnight-2{background-color:var(--ee-midnight-2)}.ee-root .bg-midnight-3{background-color:var(--ee-midnight-3)}.ee-root .bg-midnight-4{background-color:var(--ee-midnight-4)}.ee-root .bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.ee-root .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.ee-root .bg-transparent{background-color:transparent}.ee-root .bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.ee-root .bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity,1))}.ee-root .bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity,1))}.ee-root .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.ee-root .bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.ee-root .bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.ee-root .from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.ee-root .to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.ee-root .p-0\.5{padding:.125rem}.ee-root .p-1{padding:.25rem}.ee-root .p-1\.5{padding:.375rem}.ee-root .p-12{padding:3rem}.ee-root .p-2{padding:.5rem}.ee-root .p-3{padding:.75rem}.ee-root .p-4{padding:1rem}.ee-root .p-6{padding:1.5rem}.ee-root .p-8{padding:2rem}.ee-root .px-1{padding-left:.25rem;padding-right:.25rem}.ee-root .px-1\.5{padding-left:.375rem;padding-right:.375rem}.ee-root .px-2{padding-left:.5rem;padding-right:.5rem}.ee-root .px-3{padding-left:.75rem;padding-right:.75rem}.ee-root .px-4{padding-left:1rem;padding-right:1rem}.ee-root .px-8{padding-left:2rem;padding-right:2rem}.ee-root .py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.ee-root .py-1{padding-top:.25rem;padding-bottom:.25rem}.ee-root .py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.ee-root .py-16{padding-top:4rem;padding-bottom:4rem}.ee-root .py-2{padding-top:.5rem;padding-bottom:.5rem}.ee-root .py-3{padding-top:.75rem;padding-bottom:.75rem}.ee-root .py-8{padding-top:2rem;padding-bottom:2rem}.ee-root .pb-1{padding-bottom:.25rem}.ee-root .pb-5{padding-bottom:1.25rem}.ee-root .pb-8{padding-bottom:2rem}.ee-root .pl-1{padding-left:.25rem}.ee-root .pt-3{padding-top:.75rem}.ee-root .pt-7{padding-top:1.75rem}.ee-root .text-left{text-align:left}.ee-root .text-center{text-align:center}.ee-root .text-right{text-align:right}.ee-root .align-top{vertical-align:top}.ee-root .align-middle{vertical-align:middle}.ee-root .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.ee-root .font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.ee-root .text-4xl{font-size:2.25rem;line-height:2.5rem}.ee-root .text-\[10px\]{font-size:10px}.ee-root .text-\[11px\]{font-size:11px}.ee-root .text-\[15px\]{font-size:15px}.ee-root .text-\[28px\]{font-size:28px}.ee-root .text-base{font-size:1rem;line-height:1.5rem}.ee-root .text-lg{font-size:1.125rem;line-height:1.75rem}.ee-root .text-sm{font-size:.875rem;line-height:1.25rem}.ee-root .text-xs{font-size:.75rem;line-height:1rem}.ee-root .font-medium{font-weight:500}.ee-root .font-semibold{font-weight:600}.ee-root .uppercase{text-transform:uppercase}.ee-root .capitalize{text-transform:capitalize}.ee-root .italic{font-style:italic}.ee-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.ee-root .leading-none{line-height:1}.ee-root .leading-snug{line-height:1.375}.ee-root .tracking-\[0\.12em\]{letter-spacing:.12em}.ee-root .tracking-\[0\.18em\]{letter-spacing:.18em}.ee-root .tracking-wide{letter-spacing:.025em}.ee-root .tracking-wider{letter-spacing:.05em}.ee-root .text-accent{color:var(--ee-accent)}.ee-root .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.ee-root .text-amber-700\/80{color:rgba(180,83,9,.8)}.ee-root .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.ee-root .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.ee-root .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.ee-root .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.ee-root .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.ee-root .text-danger{color:var(--ee-danger)}.ee-root .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.ee-root .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.ee-root .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.ee-root .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.ee-root .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ee-root .text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity,1))}.ee-root .text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.ee-root .text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.ee-root .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.ee-root .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.ee-root .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.ee-root .text-text-dark{color:var(--ee-text-dark)}.ee-root .text-text-dark-muted{color:var(--ee-text-dark-muted)}.ee-root .text-text-primary{color:var(--ee-text-primary)}.ee-root .text-text-secondary{color:var(--ee-text-secondary)}.ee-root .text-violet-800{--tw-text-opacity:1;color:rgb(91 33 182/var(--tw-text-opacity,1))}.ee-root .text-violet-900{--tw-text-opacity:1;color:rgb(76 29 149/var(--tw-text-opacity,1))}.ee-root .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.ee-root .text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.ee-root .underline{text-decoration-line:underline}.ee-root .opacity-0{opacity:0}.ee-root .opacity-100{opacity:1}.ee-root .opacity-30{opacity:.3}.ee-root .opacity-50{opacity:.5}.ee-root .opacity-60{opacity:.6}.ee-root .opacity-75{opacity:.75}.ee-root .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.ee-root .shadow-2xl,.ee-root .shadow-\[0_1px_2px_rgba\(0\2c 0\2c 0\2c 0\.04\)\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ee-root .shadow-\[0_1px_2px_rgba\(0\2c 0\2c 0\2c 0\.04\)\]{--tw-shadow:0 1px 2px rgba(0,0,0,.04);--tw-shadow-colored:0 1px 2px var(--tw-shadow-color)}.ee-root .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.ee-root .shadow-lg,.ee-root .shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ee-root .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.ee-root .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.ee-root .shadow-sm,.ee-root .shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ee-root .shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.ee-root .outline-none{outline:2px solid transparent;outline-offset:2px}.ee-root .outline{outline-style:solid}.ee-root .outline-1{outline-width:1px}.ee-root .outline-2{outline-width:2px}.ee-root .-outline-offset-1{outline-offset:-1px}.ee-root .-outline-offset-2{outline-offset:-2px}.ee-root .outline-violet-300{outline-color:#c4b5fd}.ee-root .outline-violet-500{outline-color:#8b5cf6}.ee-root .ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ee-root .ring,.ee-root .ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ee-root .ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ee-root .ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ee-root .ring-inset{--tw-ring-inset:inset}.ee-root .ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity,1))}.ee-root .ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity,1))}.ee-root .ring-black\/10{--tw-ring-color:rgba(0,0,0,.1)}.ee-root .ring-black\/\[0\.04\]{--tw-ring-color:rgba(0,0,0,.04)}.ee-root .ring-black\/\[0\.06\]{--tw-ring-color:rgba(0,0,0,.06)}.ee-root .ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.ee-root .ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ee-root .ring-violet-500{--tw-ring-opacity:1;--tw-ring-color:rgb(139 92 246/var(--tw-ring-opacity,1))}.ee-root .ring-offset-1{--tw-ring-offset-width:1px}.ee-root .blur{--tw-blur:blur(8px)}.ee-root .blur,.ee-root .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.ee-root .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.ee-root .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ee-root .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ee-root .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ee-root .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ee-root .transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ee-root .duration-150{transition-duration:.15s}.ee-root .duration-200{transition-duration:.2s}.ee-root .ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ee-root{--ee-midnight-1:#0b0b10;--ee-midnight-2:#111118;--ee-midnight-3:#171720;--ee-midnight-4:#1e1e2a;--ee-canvas-1:#f8f8fa;--ee-canvas-2:#fff;--ee-canvas-3:#f1f1f5;--ee-border-default:#252530;--ee-border-subtle:#1c1c28;--ee-border-light:#e2e2ea;--ee-text-primary:#e8e6f0;--ee-text-secondary:#8886a0;--ee-text-tertiary:#5c5a72;--ee-text-dark:#1a1a2e;--ee-text-dark-muted:#6b6b80;--ee-accent:#6366f1;--ee-accent-hover:#818cf8;--ee-accent-muted:rgba(99,102,241,.12);--ee-success:#34d399;--ee-success-muted:rgba(52,211,153,.12);--ee-danger:#ef4444;--ee-danger-muted:rgba(239,68,68,.12);--ee-font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.ee-root .placeholder\:text-text-secondary::-moz-placeholder{color:var(--ee-text-secondary)}.ee-root .placeholder\:text-text-secondary::placeholder{color:var(--ee-text-secondary)}.ee-root .hover\:h-2:hover{height:.5rem}.ee-root .hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem}.ee-root .hover\:-translate-y-0\.5:hover,.ee-root .hover\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ee-root .hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}.ee-root .hover\:border-accent:hover,.ee-root .hover\:border-brand-primary:hover{border-color:var(--ee-accent)}.ee-root .hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgb(167 139 250/var(--tw-border-opacity,1))}.ee-root .hover\:bg-accent-hover:hover{background-color:var(--ee-accent-hover)}.ee-root .hover\:bg-accent-muted:hover{background-color:var(--ee-accent-muted)}.ee-root .hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-black\/5:hover{background-color:rgba(0,0,0,.05)}.ee-root .hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-canvas-1:hover{background-color:var(--ee-canvas-1)}.ee-root .hover\:bg-canvas-3:hover{background-color:var(--ee-canvas-3)}.ee-root .hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-midnight-3:hover{background-color:var(--ee-midnight-3)}.ee-root .hover\:bg-midnight-4:hover{background-color:var(--ee-midnight-4)}.ee-root .hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-violet-50:hover{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity,1))}.ee-root .hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity,1))}.ee-root .hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.ee-root .hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.ee-root .hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(64 64 64/var(--tw-text-opacity,1))}.ee-root .hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity,1))}.ee-root .hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.ee-root .hover\:text-text-dark:hover{color:var(--ee-text-dark)}.ee-root .hover\:text-text-primary:hover{color:var(--ee-text-primary)}.ee-root .hover\:underline:hover{text-decoration-line:underline}.ee-root .hover\:opacity-100:hover{opacity:1}.ee-root .hover\:shadow-\[0_8px_24px_-4px_rgba\(0\2c 0\2c 0\2c 0\.12\)\]:hover{--tw-shadow:0 8px 24px -4px rgba(0,0,0,.12);--tw-shadow-colored:0 8px 24px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ee-root .hover\:ring-amber-400\/40:hover{--tw-ring-color:rgba(251,191,36,.4)}.ee-root .focus\:opacity-100:focus{opacity:1}.ee-root .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.ee-root .focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ee-root .focus\:ring-1:focus,.ee-root .focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ee-root .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ee-root .focus\:ring-accent:focus{--tw-ring-color:var(--ee-accent)}.ee-root .focus\:ring-amber-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity,1))}.ee-root .focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ee-root .active\:cursor-grabbing:active{cursor:grabbing}.ee-root .disabled\:cursor-wait:disabled{cursor:wait}.ee-root .disabled\:opacity-30:disabled{opacity:.3}.ee-root .disabled\:opacity-50:disabled{opacity:.5}.ee-root .disabled\:opacity-60:disabled{opacity:.6}.ee-root .group:hover .group-hover\:translate-y-0{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ee-root .group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.ee-root .sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.ee-root .lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EmailTemplate, BlockDefinition } from '@marlinjai/email-editor-core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Editor theme configuration
|
|
5
|
+
*/
|
|
6
|
+
interface EditorTheme {
|
|
7
|
+
colors?: {
|
|
8
|
+
primary?: string;
|
|
9
|
+
surface?: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
border?: string;
|
|
12
|
+
};
|
|
13
|
+
fonts?: {
|
|
14
|
+
heading?: string;
|
|
15
|
+
body?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Editor configuration options
|
|
20
|
+
*/
|
|
21
|
+
interface EditorOptions {
|
|
22
|
+
container: HTMLElement;
|
|
23
|
+
initialValue?: EmailTemplate;
|
|
24
|
+
theme?: EditorTheme;
|
|
25
|
+
blocks?: BlockDefinition[];
|
|
26
|
+
onChange?: (template: EmailTemplate) => void;
|
|
27
|
+
onSave?: (template: EmailTemplate) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Editor instance API
|
|
31
|
+
*/
|
|
32
|
+
interface EditorInstance {
|
|
33
|
+
getValue(): EmailTemplate;
|
|
34
|
+
setValue(template: EmailTemplate): void;
|
|
35
|
+
getHTML(): string;
|
|
36
|
+
getMJML(): string;
|
|
37
|
+
undo(): void;
|
|
38
|
+
redo(): void;
|
|
39
|
+
destroy(): void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type { EditorOptions as E, EditorInstance as a, EditorTheme as b };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EmailTemplate, BlockDefinition } from '@marlinjai/email-editor-core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Editor theme configuration
|
|
5
|
+
*/
|
|
6
|
+
interface EditorTheme {
|
|
7
|
+
colors?: {
|
|
8
|
+
primary?: string;
|
|
9
|
+
surface?: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
border?: string;
|
|
12
|
+
};
|
|
13
|
+
fonts?: {
|
|
14
|
+
heading?: string;
|
|
15
|
+
body?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Editor configuration options
|
|
20
|
+
*/
|
|
21
|
+
interface EditorOptions {
|
|
22
|
+
container: HTMLElement;
|
|
23
|
+
initialValue?: EmailTemplate;
|
|
24
|
+
theme?: EditorTheme;
|
|
25
|
+
blocks?: BlockDefinition[];
|
|
26
|
+
onChange?: (template: EmailTemplate) => void;
|
|
27
|
+
onSave?: (template: EmailTemplate) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Editor instance API
|
|
31
|
+
*/
|
|
32
|
+
interface EditorInstance {
|
|
33
|
+
getValue(): EmailTemplate;
|
|
34
|
+
setValue(template: EmailTemplate): void;
|
|
35
|
+
getHTML(): string;
|
|
36
|
+
getMJML(): string;
|
|
37
|
+
undo(): void;
|
|
38
|
+
redo(): void;
|
|
39
|
+
destroy(): void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type { EditorOptions as E, EditorInstance as a, EditorTheme as b };
|