@lax-wp/editor 0.0.1
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/README.md +724 -0
- package/dist/components/Editor.d.ts +6 -0
- package/dist/components/EditorShell.d.ts +1 -0
- package/dist/components/PresentationControls.d.ts +6 -0
- package/dist/components/base/Button.d.ts +14 -0
- package/dist/components/base/Button1.d.ts +24 -0
- package/dist/components/base/ColorPicker.d.ts +14 -0
- package/dist/components/base/index.d.ts +1 -0
- package/dist/components/common/ScrollbarWrapper.d.ts +5 -0
- package/dist/components/common/SkeletonLine.d.ts +6 -0
- package/dist/components/common/SvgIcon.d.ts +15 -0
- package/dist/components/footer/index.d.ts +5 -0
- package/dist/components/menubar/BubbleMenuContent.d.ts +6 -0
- package/dist/components/menubar/bubble-menu/DefaultBubbleMenuContent.d.ts +1 -0
- package/dist/components/menubar/bubble-menu/ImageMenuContent.d.ts +1 -0
- package/dist/components/menubar/bubble-menu/LinkActions.d.ts +4 -0
- package/dist/components/menubar/bubble-menu/LinkMenuContent.d.ts +1 -0
- package/dist/components/menubar/bubble-menu/index.d.ts +4 -0
- package/dist/components/node/ImageNode.d.ts +5 -0
- package/dist/components/shared/BasicFontStyleOptions.d.ts +1 -0
- package/dist/components/shared/ClearTextFormatButton.d.ts +1 -0
- package/dist/components/shared/FontSizeStepper.d.ts +1 -0
- package/dist/components/shared/InsertLinkButton.d.ts +4 -0
- package/dist/components/shared/ParagraphAlignmentOptions.d.ts +1 -0
- package/dist/components/toolbar/ClassicToolbar.d.ts +8 -0
- package/dist/components/toolbar/Divider.d.ts +1 -0
- package/dist/components/toolbar/FontStyleOptions.d.ts +4 -0
- package/dist/components/toolbar/HeadingOptions.d.ts +6 -0
- package/dist/components/toolbar/HomeOptions.d.ts +6 -0
- package/dist/components/toolbar/InsertOptions.d.ts +6 -0
- package/dist/components/toolbar/ItemGroup.d.ts +6 -0
- package/dist/components/toolbar/LinkActionsModal.d.ts +14 -0
- package/dist/components/toolbar/LinkModal.d.ts +16 -0
- package/dist/components/toolbar/OrderedListTypeDropdownContent.d.ts +7 -0
- package/dist/components/toolbar/ParagraphStyleOption.d.ts +6 -0
- package/dist/components/toolbar/ProfessionalToolbar.d.ts +8 -0
- package/dist/components/toolbar/RenderToolbarTabContent.d.ts +6 -0
- package/dist/components/toolbar/ScrollableContent.d.ts +14 -0
- package/dist/components/toolbar/Toolbar.d.ts +10 -0
- package/dist/components/toolbar/ToolbarButtonItem.d.ts +15 -0
- package/dist/components/toolbar/ToolbarDropdown.d.ts +5 -0
- package/dist/components/toolbar/UnorderedListTypeDropdownContent.d.ts +7 -0
- package/dist/components/toolbar/export/index.d.ts +1 -0
- package/dist/components/toolbar/home/FontStyleOptions.d.ts +1 -0
- package/dist/components/toolbar/home/HeadingOptions.d.ts +1 -0
- package/dist/components/toolbar/home/OrderedListTypeDropdownContent.d.ts +5 -0
- package/dist/components/toolbar/home/ParagraphStyleOption.d.ts +1 -0
- package/dist/components/toolbar/home/UnorderedListTypeDropdownContent.d.ts +5 -0
- package/dist/components/toolbar/home/index.d.ts +1 -0
- package/dist/components/toolbar/index.d.ts +11 -0
- package/dist/components/toolbar/insert/CodeBlockToolbar.d.ts +8 -0
- package/dist/components/toolbar/insert/DividerDropdownContent.d.ts +5 -0
- package/dist/components/toolbar/insert/ImageUploadForm.d.ts +6 -0
- package/dist/components/toolbar/insert/LinkForm.d.ts +10 -0
- package/dist/components/toolbar/insert/index.d.ts +1 -0
- package/dist/components/toolbar/page/PageBackgroundColorPicker.d.ts +8 -0
- package/dist/components/toolbar/page/PageMarginPicker.d.ts +8 -0
- package/dist/components/toolbar/page/PageOrientationSelector.d.ts +8 -0
- package/dist/components/toolbar/page/PageSizeSelector.d.ts +13 -0
- package/dist/components/toolbar/page/index.d.ts +1 -0
- package/dist/components/toolbar/table/TableSelector.d.ts +8 -0
- package/dist/components/toolbar/table/index.d.ts +1 -0
- package/dist/config/editorConfig.d.ts +43 -0
- package/dist/constants/AI.d.ts +2 -0
- package/dist/constants/CodeBlock.d.ts +8 -0
- package/dist/constants/Common.d.ts +8 -0
- package/dist/constants/DividerLineTypes.d.ts +4 -0
- package/dist/constants/Fonts.d.ts +8 -0
- package/dist/constants/Footer.d.ts +1 -0
- package/dist/constants/Heading.d.ts +42 -0
- package/dist/constants/Image.d.ts +15 -0
- package/dist/constants/LinkConstants.d.ts +4 -0
- package/dist/constants/PageBackground.d.ts +4 -0
- package/dist/constants/Paragraphs.d.ts +12 -0
- package/dist/constants/TinkConstants.d.ts +4 -0
- package/dist/constants/Toolbar.d.ts +25 -0
- package/dist/constants/base.d.ts +1 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/contexts/EditorShellContext.d.ts +15 -0
- package/dist/contexts/ToolbarContext.d.ts +25 -0
- package/dist/editor.css +1 -0
- package/dist/extensions/AIAutoCompletion.d.ts +38 -0
- package/dist/extensions/CodeBlockWithToolbar.d.ts +28 -0
- package/dist/extensions/CustomImageExtension.d.ts +15 -0
- package/dist/extensions/HorizontalRuleWithStyle.d.ts +10 -0
- package/dist/extensions/Indent.d.ts +15 -0
- package/dist/extensions/ListItemWithDepthLimit.d.ts +4 -0
- package/dist/extensions/OnBlurHighlight.d.ts +2 -0
- package/dist/extensions/OrderedListWithType.d.ts +9 -0
- package/dist/extensions/PageBackground.d.ts +20 -0
- package/dist/extensions/PageBreak.d.ts +16 -0
- package/dist/extensions/PageMargin.d.ts +79 -0
- package/dist/extensions/UnorderedListWithType.d.ts +9 -0
- package/dist/extensions/VariableTable.d.ts +4 -0
- package/dist/extensions/VariableText.d.ts +39 -0
- package/dist/extensions/index.d.ts +2 -0
- package/dist/hooks/useCodeEditor.d.ts +25 -0
- package/dist/hooks/useExport.d.ts +7 -0
- package/dist/hooks/useFontStyleMethods.d.ts +19 -0
- package/dist/hooks/useHeadingStyleMethods.d.ts +3 -0
- package/dist/hooks/useHomeOptionMethods.d.ts +13 -0
- package/dist/hooks/useHorizontalScroll.d.ts +13 -0
- package/dist/hooks/useImageAlignment.d.ts +12 -0
- package/dist/hooks/useImageResize.d.ts +17 -0
- package/dist/hooks/useImageUpload.d.ts +17 -0
- package/dist/hooks/useInsertOptionMethods.d.ts +4 -0
- package/dist/hooks/useLinks.d.ts +15 -0
- package/dist/hooks/usePageMethods.d.ts +56 -0
- package/dist/hooks/useParagraphStyleMethods.d.ts +16 -0
- package/dist/hooks/usePresentationMode.d.ts +7 -0
- package/dist/hooks/useTableMethods.d.ts +12 -0
- package/dist/hooks/useTiptapEditorState.d.ts +40 -0
- package/dist/hooks/useZoom.d.ts +7 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.es.js +64287 -0
- package/dist/index.umd.js +196 -0
- package/dist/lax-wp-editor.css +1 -0
- package/dist/utils/Common.d.ts +1 -0
- package/dist/utils/svgIconRegistry.d.ts +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export declare const DROPDOWN_OFFSET = 6;
|
|
2
|
+
export declare const VIEWPORT_BUFFER = 20;
|
|
3
|
+
export declare const HEADING_OPTIONS: {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}[];
|
|
7
|
+
export declare const HEADING_STYLES: {
|
|
8
|
+
readonly h1: {
|
|
9
|
+
readonly fontSize: "1rem";
|
|
10
|
+
readonly fontWeight: "bold";
|
|
11
|
+
readonly lineHeight: "1";
|
|
12
|
+
};
|
|
13
|
+
readonly h2: {
|
|
14
|
+
readonly fontSize: "0.9rem";
|
|
15
|
+
readonly fontWeight: "bold";
|
|
16
|
+
readonly lineHeight: "1";
|
|
17
|
+
};
|
|
18
|
+
readonly h3: {
|
|
19
|
+
readonly fontSize: "0.8rem";
|
|
20
|
+
readonly fontWeight: "bold";
|
|
21
|
+
readonly lineHeight: "1";
|
|
22
|
+
};
|
|
23
|
+
readonly h4: {
|
|
24
|
+
readonly fontSize: "0.75rem";
|
|
25
|
+
readonly fontWeight: "bold";
|
|
26
|
+
readonly lineHeight: "1";
|
|
27
|
+
};
|
|
28
|
+
readonly h5: {
|
|
29
|
+
readonly fontSize: "0.7rem";
|
|
30
|
+
readonly fontWeight: "bold";
|
|
31
|
+
readonly lineHeight: "1";
|
|
32
|
+
};
|
|
33
|
+
readonly h6: {
|
|
34
|
+
readonly fontSize: "0.65rem";
|
|
35
|
+
readonly fontWeight: "bold";
|
|
36
|
+
readonly lineHeight: "1";
|
|
37
|
+
};
|
|
38
|
+
readonly paragraph: {
|
|
39
|
+
readonly fontSize: "0.7rem";
|
|
40
|
+
readonly lineHeight: "1";
|
|
41
|
+
};
|
|
42
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const RESIZE_CURSOR_POSITION_OPTIONS: {
|
|
2
|
+
TOP_LEFT: string;
|
|
3
|
+
TOP_RIGHT: string;
|
|
4
|
+
BOTTOM_LEFT: string;
|
|
5
|
+
BOTTOM_RIGHT: string;
|
|
6
|
+
};
|
|
7
|
+
export type ResizeCursorPositionType = (typeof RESIZE_CURSOR_POSITION_OPTIONS)[keyof typeof RESIZE_CURSOR_POSITION_OPTIONS];
|
|
8
|
+
export declare const IMAGE_MIN_WIDTH = 50;
|
|
9
|
+
export declare const IMAGE_MAX_WIDTH = 1200;
|
|
10
|
+
export declare const IMAGE_DEFAULT_WIDTH = 300;
|
|
11
|
+
export declare const RESIZE_MULTIPLIERS: Record<ResizeCursorPositionType, {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const HANDLE_CURSORS: Record<ResizeCursorPositionType, string>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const LIST_TYPE_OPTIONS: {
|
|
2
|
+
key: string;
|
|
3
|
+
main: string[];
|
|
4
|
+
nested: string[];
|
|
5
|
+
deepNested: string[];
|
|
6
|
+
}[][];
|
|
7
|
+
export declare const BULLET_TYPE_OPTIONS: {
|
|
8
|
+
key: string;
|
|
9
|
+
main: string[];
|
|
10
|
+
nested: string[];
|
|
11
|
+
deepNested: string[];
|
|
12
|
+
}[][];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const TABS: readonly ["Home", "Insert", "Table", "Page", "Export"];
|
|
2
|
+
export type TTabKey = (typeof TABS)[number];
|
|
3
|
+
export declare const TOOLBAR_TYPES_ENUM: {
|
|
4
|
+
CLASSIC: string;
|
|
5
|
+
PROFESSIONAL: string;
|
|
6
|
+
HIDE_TOOLBAR: string;
|
|
7
|
+
};
|
|
8
|
+
export type TToolbarType = (typeof TOOLBAR_TYPES_ENUM)[keyof typeof TOOLBAR_TYPES_ENUM];
|
|
9
|
+
export declare const TOOLBAR_TYPES: {
|
|
10
|
+
CLASSIC: {
|
|
11
|
+
name: string;
|
|
12
|
+
label: string;
|
|
13
|
+
height: number;
|
|
14
|
+
};
|
|
15
|
+
PROFESSIONAL: {
|
|
16
|
+
name: string;
|
|
17
|
+
label: string;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
NONE: {
|
|
21
|
+
name: string;
|
|
22
|
+
label: string;
|
|
23
|
+
height: number;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DEFAULT_DEBOUNCE_TIME_FOR_CONTENT_CHANGE = 3000;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { Editor } from "@tiptap/react";
|
|
3
|
+
import type { EditorConfig } from "@/config/editorConfig";
|
|
4
|
+
export interface EditorShellContextType {
|
|
5
|
+
editor: Editor;
|
|
6
|
+
editorConfig: EditorConfig;
|
|
7
|
+
}
|
|
8
|
+
interface EditorShellProviderProps {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
editor: Editor;
|
|
11
|
+
editorConfig: EditorConfig;
|
|
12
|
+
}
|
|
13
|
+
export declare const EditorShellProvider: ({ children, editor, editorConfig }: EditorShellProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare const useEditorShell: () => EditorShellContextType;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { PageConfig } from "@/components/toolbar/page/PageSizeSelector";
|
|
3
|
+
import type { EditorConfig } from "@/config/editorConfig";
|
|
4
|
+
export interface ToolbarContextType {
|
|
5
|
+
currentToolbar: string;
|
|
6
|
+
setCurrentToolbar: (toolbar: string) => void;
|
|
7
|
+
lastVisibleToolbar: string;
|
|
8
|
+
setLastVisibleToolbar: (toolbar: string) => void;
|
|
9
|
+
handleToolbarChange: (toolbarType: string) => void;
|
|
10
|
+
handleShowToolbar: () => void;
|
|
11
|
+
onPresentationModeToggle: () => void;
|
|
12
|
+
pageConfig: PageConfig;
|
|
13
|
+
setPageConfig: (config: PageConfig) => void;
|
|
14
|
+
editorConfig: EditorConfig;
|
|
15
|
+
}
|
|
16
|
+
interface ToolbarProviderProps {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
editorConfig: EditorConfig;
|
|
19
|
+
onPresentationModeToggle: () => void;
|
|
20
|
+
pageConfig: PageConfig;
|
|
21
|
+
setPageConfig: (config: PageConfig) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare const ToolbarProvider: ({ editorConfig, children, onPresentationModeToggle, pageConfig, setPageConfig }: ToolbarProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare const useToolbar: () => ToolbarContextType;
|
|
25
|
+
export {};
|
package/dist/editor.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-a4{width:210mm;min-height:297mm}.page-a4-landscape{width:297mm;min-height:210mm}.page-a3{width:297mm;min-height:420mm}.page-a3-landscape{width:420mm;min-height:297mm}.page-letter{width:8.5in;min-height:11in}.page-letter-landscape{width:11in;min-height:8.5in}.page-legal{width:8.5in;min-height:14in}.page-legal-landscape{width:14in;min-height:8.5in}.page-tabloid{width:11in;min-height:17in}.page-tabloid-landscape{width:17in;min-height:11in}.tiptap :first-child{margin-top:0}.tiptap p,.tiptap h1,.tiptap h2,.tiptap h3,.tiptap h4,.tiptap h5,.tiptap h6,.tiptap blockquote{max-width:100%;word-wrap:break-word;overflow-wrap:break-word}.tiptap ul,.tiptap ol{padding:0!important;margin:0 0 0 .35in!important}:is(.tiptap ul,.tiptap ol) li{list-style-position:outside;padding-left:.15in;margin-left:0}:is(.tiptap ul,.tiptap ol) li p{display:inline;margin:0}:is(.tiptap ul,.tiptap ol) li::marker{margin-right:.1in}.tiptap ul[data-type=taskList]{list-style:none;margin-left:0;padding:0}.tiptap ul[data-type=taskList] li{align-items:flex-start;display:flex}.tiptap ul[data-type=taskList] li>label{flex:0 0 auto;margin-right:.5rem;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tiptap ul[data-type=taskList] li>div{flex:1 1 auto}.tiptap ul[data-type=taskList] input[type=checkbox]{cursor:pointer}.tiptap ul[data-type=taskList] ul[data-type=taskList]{margin:0}.tiptap ul:not([data-type=taskList]) li::marker{content:"⬤ "}.tiptap ul:not([data-type=taskList]) ul li::marker{content:"○ "}.tiptap ul:not([data-type=taskList]) ul ul li::marker{content:"■ "}.tiptap ul:not([data-type=taskList]) ul ul ul li::marker{content:"⬤ "}.tiptap ul:not([data-type=taskList]) ul ul ul ul li::marker{content:"○ "}.tiptap ul:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"■ "}.tiptap ul:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"⬤ "}.tiptap ul:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"○ "}.tiptap ul:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) li::marker{content:"⬤ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul li::marker{content:"○ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul li::marker{content:"⬤ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"⬤ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=default]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) li::marker{content:"❖ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul li::marker{content:"➤ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul li::marker{content:"❖ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul ul li::marker{content:"➤ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"❖ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"➤ "}.tiptap ul[data-list-type=diamondArrow]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=square]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"☐ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) li::marker{content:"➔ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul li::marker{content:"◆ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul li::marker{content:"⬤ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul li::marker{content:"➔ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul ul li::marker{content:"◆ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"⬤ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"➔ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"◆ "}.tiptap ul[data-list-type=arrowDiamond]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"⬤ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) li::marker{content:"★ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul li::marker{content:"○ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul li::marker{content:"★ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"★ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=star]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) li::marker{content:"➤ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul li::marker{content:"○ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul li::marker{content:"➤ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul ul ul li::marker{content:"■ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul ul ul ul li::marker{content:"➤ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul ul ul ul ul li::marker{content:"○ "}.tiptap ul[data-list-type=arrowCircle]:not([data-type=taskList]) ul ul ul ul ul ul ul ul li::marker{content:"■ "}.tiptap ol{list-style-type:decimal}.tiptap ol ol{list-style-type:lower-alpha}.tiptap ol ol ol{list-style-type:lower-roman}.tiptap ol ol ol ol{list-style-type:decimal}.tiptap ol ol ol ol ol{list-style-type:lower-alpha}.tiptap ol ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol ol ol ol ol ol ol{list-style-type:decimal}.tiptap ol ol ol ol ol ol ol ol{list-style-type:lower-alpha}.tiptap ol ol ol ol ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-parenthesis]{list-style-type:decimal}.tiptap ol[data-list-type=decimal-parenthesis] li::marker{content:counter(list-item) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-parenthesis] ol li::marker{content:counter(list-item,lower-alpha) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-parenthesis] ol ol li::marker{content:counter(list-item,lower-roman) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol{list-style-type:decimal}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol li::marker{content:counter(list-item) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol li::marker{content:counter(list-item,lower-alpha) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol li::marker{content:counter(list-item,lower-roman) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol{list-style-type:decimal}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol li::marker{content:counter(list-item) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol ol li::marker{content:counter(list-item,lower-alpha) ") "}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-parenthesis] ol ol ol ol ol ol ol ol li::marker{content:counter(list-item,lower-roman) ") "}.tiptap ol[data-list-type=decimal-nested]{counter-reset:level1}.tiptap ol[data-list-type=decimal-nested]>li{counter-increment:level1}.tiptap ol[data-list-type=decimal-nested]>li::marker{content:counter(level1) ". "}.tiptap ol[data-list-type=decimal-nested] ol{counter-reset:level2}.tiptap ol[data-list-type=decimal-nested] ol>li{counter-increment:level2}.tiptap ol[data-list-type=decimal-nested] ol>li::marker{content:counter(level1) "." counter(level2) " "}.tiptap ol[data-list-type=decimal-nested] ol ol{counter-reset:level3}.tiptap ol[data-list-type=decimal-nested] ol ol>li{counter-increment:level3}.tiptap ol[data-list-type=decimal-nested] ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol{counter-reset:level4}.tiptap ol[data-list-type=decimal-nested] ol ol ol>li{counter-increment:level4}.tiptap ol[data-list-type=decimal-nested] ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol{counter-reset:level5}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol>li{counter-increment:level5}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) "." counter(level5) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol{counter-reset:level6}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol>li{counter-increment:level6}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) "." counter(level5) "." counter(level6) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol{counter-reset:level7}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol>li{counter-increment:level7}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) "." counter(level5) "." counter(level6) "." counter(level7) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol{counter-reset:level8}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol>li{counter-increment:level8}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) "." counter(level5) "." counter(level6) "." counter(level7) "." counter(level8) " "}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol ol{counter-reset:level9}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol ol>li{counter-increment:level9}.tiptap ol[data-list-type=decimal-nested] ol ol ol ol ol ol ol ol>li::marker{content:counter(level1) "." counter(level2) "." counter(level3) "." counter(level4) "." counter(level5) "." counter(level6) "." counter(level7) "." counter(level8) "." counter(level9) " "}.tiptap ol[data-list-type=upper-alpha-mixed]{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol ol ol ol{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=upper-alpha-mixed] ol ol ol ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=upper-roman-mixed]{list-style-type:upper-roman}.tiptap ol[data-list-type=upper-roman-mixed] ol{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-roman-mixed] ol ol{list-style-type:decimal}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol{list-style-type:upper-roman}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol ol{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol ol ol{list-style-type:decimal}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol ol ol ol{list-style-type:upper-roman}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol ol ol ol ol{list-style-type:upper-alpha}.tiptap ol[data-list-type=upper-roman-mixed] ol ol ol ol ol ol ol ol{list-style-type:decimal}.tiptap ol[data-list-type=decimal-leading-zero-mixed]{list-style-type:decimal-leading-zero}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol{list-style-type:decimal-leading-zero}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol ol ol{list-style-type:lower-roman}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol ol ol ol{list-style-type:decimal-leading-zero}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol ol ol ol ol{list-style-type:lower-alpha}.tiptap ol[data-list-type=decimal-leading-zero-mixed] ol ol ol ol ol ol ol ol{list-style-type:lower-roman}.tiptap blockquote{border-left:3px solid #0f172a;padding-left:1em;padding-top:2px;padding-bottom:2px;margin-left:0;margin-right:0;background-color:#f8fafc;font-style:italic}.tiptap blockquote>p{margin:4px}.tiptap blockquote>*{background-color:inherit!important}.tiptap h1,.tiptap h2,.tiptap h3,.tiptap h4,.tiptap h5,.tiptap h6{font-weight:700}.tiptap h1{font-size:32px;line-height:41px}.tiptap h2{font-size:27px;line-height:35px}.tiptap h3{font-size:21px;line-height:28px}.tiptap h4{font-size:18px;line-height:24px}.tiptap h5{font-size:16px;line-height:21px}.tiptap h6{font-size:15px;line-height:17px}.ProseMirror{height:100%}.ProseMirror-focused{border:none;outline:none;box-shadow:none;background-color:transparent;padding:0;margin:0}.ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:#adb5bd;pointer-events:none;height:0}.tiptap .blur-highlight{background-color:#d4d4d4cc;padding:2px 0}.tiptap .variable-text{display:inline-block;padding:0 2px;margin:0;background-color:#e3f2fd;border:1px solid #90caf9;border-radius:4px;color:inherit;font-family:inherit;font-size:inherit;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;scale:.95}.tiptap .variable-text:hover{background-color:#bbdefb;border-color:#64b5f6}.tiptap .editor-page-break{position:relative;display:block;width:100%;margin:1.5rem 0;text-align:center;cursor:default;page-break-after:always;-moz-column-break-after:page;break-after:page}.tiptap .editor-page-break:before{content:"PAGE BREAK";display:inline-block;font-size:.75rem;font-weight:600;color:#6b7280;background-color:#f3f4f6;padding:.125rem .5rem;border-radius:.25rem;border:1px dashed #d1d5db;position:relative;z-index:1}.tiptap .editor-page-break-line{border:none;height:1px;background-color:#d1d5db;margin:0;position:absolute;top:50%;left:0;right:0;z-index:0}.editor-presentation-mode .variable-text{background-color:transparent!important;border:none!important;padding:0;scale:1;-webkit-user-select:text;-moz-user-select:text;user-select:text}.editor-presentation-mode .variable-text:hover{background-color:transparent;border:none!important}.editor-laser-pointer{position:fixed;width:12px;height:12px;background:radial-gradient(circle,#fff,#fffc,#ff0000e6 40%,#f009,#f003);border-radius:50%;pointer-events:none;z-index:9999;box-shadow:0 0 8px #f009,0 0 15px #ff00004d;display:block}.laser-active,.laser-active *{cursor:none!important}:fullscreen.laser-active,:fullscreen.laser-active *,:-webkit-full-screen.laser-active,:-webkit-full-screen.laser-active *,:-moz-full-screen.laser-active,:-moz-full-screen.laser-active *{cursor:none!important}.tiptap table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden;page-break-inside:auto;margin:0 auto}.tiptap table tr{page-break-inside:avoid;page-break-after:auto}.tiptap table td,.tiptap table th{min-width:1em;border:1px solid #626262!important}.tiptap table td>*,.tiptap table th>*{margin-bottom:0}.tiptap table td p,.tiptap table th p{padding:4px}.tiptap table td[align=left-top],.tiptap table th[align=left-top]{vertical-align:top;text-align:left}.tiptap table td[align=center-top],.tiptap table th[align=center-top]{vertical-align:top;text-align:center}.tiptap table td[align=right-top],.tiptap table th[align=right-top]{vertical-align:middle;text-align:right}.tiptap table td[align=justify-top],.tiptap table th[align=justify-top]{vertical-align:middle;text-align:justify}.tiptap table td[align=left-middle],.tiptap table th[align=left-middle]{vertical-align:middle;text-align:left}.tiptap table td[align=center-middle],.tiptap table th[align=center-middle]{vertical-align:middle;text-align:center}.tiptap table td[align=right-middle],.tiptap table th[align=right-middle]{vertical-align:middle;text-align:right}.tiptap table td[align=justify-middle],.tiptap table th[align=justify-middle]{vertical-align:middle;text-align:justify}.tiptap table td[align=left-bottom],.tiptap table th[align=left-bottom]{vertical-align:bottom;text-align:left}.tiptap table td[align=center-bottom],.tiptap table th[align=center-bottom]{vertical-align:middle;text-align:center}.tiptap table td[align=right-bottom],.tiptap table th[align=right-bottom]{vertical-align:bottom;text-align:right}.tiptap table td[align=justify-bottom],.tiptap table th[align=justify-bottom]{vertical-align:bottom;text-align:justify}.tiptap table th{font-weight:700;text-align:left;background-color:#e1e1e1}.tiptap table .selectedCell:after{z-index:2;position:absolute;content:"";inset:0;background:#56a2ff5e;pointer-events:none}.tiptap table .column-resize-handle{position:absolute;right:-1px;top:0;bottom:-1px;width:3px;background-color:#3757fb;pointer-events:none}.tiptap table p{margin:0}@media print{.tiptap table{border-collapse:collapse!important;border:1px solid #626262!important}}@media print{.tiptap table th{background-color:#e1e1e1!important;font-weight:700!important}}@media print{.tiptap table td,.tiptap table th{border:1px solid #626262!important}}.tiptap a{color:#0077e3;text-decoration:underline}hr.hr--single-line{border:none;border-top:2px solid #000000;margin:1rem 0}hr.hr--thick-single-line{border:none;border-top:4px solid #000000;margin:1rem 0}hr.hr--double-line{border:none;border-top:5px double #000000;margin:1rem 0}hr.hr--dotted-line{border:none;border-top:2px dotted #000000;margin:1rem 0}hr.hr--dashed-line{border:none;border-top:2px dashed #000000;margin:1rem 0}hr.hr--double-dashed-line{border:none;border-top:2px dashed #000000;border-bottom:2px dashed #000000;height:4px;margin:1rem 0}hr.hr--thick-and-thick-line-top{border:none;border-top:4px solid #000000;border-bottom:1px solid #000000;height:4px;margin:1rem 0}hr.hr--thick-and-thick-line-bottom{border:none;border-top:1px solid #000000;border-bottom:4px solid #000000;height:4px;margin:1rem 0}hr.hr--wavy-line{border:none;height:12px;margin:1rem 0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 12' preserveAspectRatio='none'%3E%3Cpath d='M0,6 Q5,0 10,6 T20,6 T30,6 T40,6 T50,6 T60,6 T70,6 T80,6 T90,6 T100,6 T110,6 T120,6 T130,6 T140,6 T150,6 T160,6 T170,6 T180,6 T190,6 T200,6 T210,6 T220,6 T230,6 T240,6 T250,6 T260,6 T270,6 T280,6 T290,6 T300,6 T310,6 T320,6 T330,6 T340,6 T350,6 T360,6 T370,6 T380,6 T390,6 T400,6 T410,6 T420,6 T430,6 T440,6 T450,6 T460,6 T470,6 T480,6 T490,6 T500,6 T510,6 T520,6 T530,6 T540,6 T550,6 T560,6 T570,6 T580,6 T590,6 T600,6 T610,6 T620,6 T630,6 T640,6 T650,6 T660,6 T670,6 T680,6 T690,6 T700,6 T710,6 T720,6 T730,6 T740,6 T750,6 T760,6 T770,6 T780,6 T790,6 T800,6 T810,6 T820,6 T830,6 T840,6 T850,6 T860,6 T870,6 T880,6 T890,6 T900,6 T910,6 T920,6 T930,6 T940,6 T950,6 T960,6 T970,6 T980,6 T990,6 T1000,6 T1010,6 T1020,6 T1030,6 T1040,6 T1050,6 T1060,6 T1070,6 T1080,6 T1090,6 T1100,6 T1110,6 T1120,6 T1130,6 T1140,6 T1150,6 T1160,6 T1170,6 T1180,6 T1190,6 T1200,6' stroke='%23000000' stroke-width='3' fill='none'/%3E%3C/svg%3E");background-repeat:repeat-x;background-size:100% 8px;background-position:center}.tiptap .code-block-wrapper{margin:1rem 0;border-radius:8px;overflow:hidden;position:relative}.tiptap .code-block-wrapper:has(.theme-dark){border:1px solid #333;background:#1e1e1e}.tiptap .code-block-wrapper:has(.theme-light){border:1px solid #e0e0e0;background:#f5f5f5}.tiptap .code-block-wrapper .code-block-toolbar{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.tiptap .code-block-wrapper .code-block-toolbar-left{display:flex;gap:8px;align-items:center}.tiptap .code-block-wrapper .code-block-toolbar-actions{display:flex;gap:4px;align-items:center}.tiptap .code-block-wrapper .code-block-toolbar.theme-dark{background:#2d2d2d;border-bottom:1px solid #3d3d3d}.tiptap .code-block-wrapper .code-block-toolbar.theme-light{background:#f5f5f5;border-bottom:1px solid #e0e0e0}.tiptap .code-block-wrapper .code-block-action-btn{display:flex;align-items:center;justify-content:center;padding:4px 8px;background:transparent;border-radius:4px;cursor:pointer;transition:all .2s}.tiptap .code-block-wrapper .code-block-toolbar.theme-dark .code-block-action-btn{border:1px solid #555;color:#e0e0e0}.tiptap .code-block-wrapper .code-block-toolbar.theme-dark .code-block-action-btn:hover{background:#3d3d3d;border-color:#777}.tiptap .code-block-wrapper .code-block-toolbar.theme-light .code-block-action-btn{border:1px solid #d0d0d0;color:#333}.tiptap .code-block-wrapper .code-block-toolbar.theme-light .code-block-action-btn:hover{background:#e8e8e8;border-color:#999}.tiptap .code-block-wrapper .code-block-delete-btn:hover{color:#d32f2f;border-color:#d32f2f}.tiptap .code-block-wrapper .code-block-toolbar.theme-dark .ant-select-selector{background:#1e1e1e!important;border:1px solid #555!important;color:#e0e0e0!important}.tiptap .code-block-wrapper .code-block-toolbar.theme-dark .ant-select-arrow,.tiptap .code-block-wrapper .code-block-toolbar.theme-dark .ant-select-selection-item{color:#e0e0e0!important}.tiptap .code-block-wrapper .code-block-toolbar.theme-light .ant-select-selector{background:#fff!important;border:1px solid #d0d0d0!important;color:#333!important}.tiptap .code-block-wrapper .code-block-toolbar.theme-light .ant-select-arrow,.tiptap .code-block-wrapper .code-block-toolbar.theme-light .ant-select-selection-item{color:#333!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-dropdown{background:#3a3a3a!important;border:1px solid #3d3d3d!important;z-index:9999!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-item-option-content{color:#e0e0e0!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-item-option-selected{color:#d9ff00!important;background:#3a3a3a!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-item-option-active{color:#d9ff00!important;background:#4b4b4b!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-selector{color:#e0e0e0!important;background:#4b4b4b!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .editor-select-arrow{color:#e0e0e0!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .ant-select-dropdown .ant-select-item{color:#e0e0e0!important;background:transparent!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .ant-select-dropdown .ant-select-item:hover{background:#2d2d2d!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-dark) .ant-select-dropdown .ant-select-item-option-selecte{background:#2d2d2d!important;color:#1890ff!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-light) .ant-select-dropdown{background:#fff!important;border:1px solid #e0e0e0!important;z-index:9999!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-light) .ant-select-dropdown .ant-select-item{color:#333!important;background:transparent!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-light) .ant-select-dropdown .ant-select-item:hover{background:#f5f5f5!important}.tiptap body:has(.code-block-wrapper .code-block-toolbar.theme-light) .ant-select-dropdown .ant-select-item-option-selected{background:#e6f7ff!important;color:#1890ff!important}.tiptap .code-block-wrapper .code-block-content{margin:0;padding:16px;overflow-x:auto;font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.6;position:relative}.tiptap .code-block-wrapper .code-block-content code{display:block;background:transparent;padding:0;color:inherit;font-family:inherit;white-space:pre}.tiptap .code-block-wrapper .code-block-content.wrapped{overflow-x:hidden}.tiptap .code-block-wrapper .code-block-content.wrapped code{white-space:pre-wrap;word-break:break-word}.tiptap .code-block-wrapper .code-block-content.theme-dark{background:#1e1e1e;color:#d4d4d4}.tiptap .code-block-wrapper .theme-dark .hljs-comment,.tiptap .code-block-wrapper .theme-dark .hljs-quote{color:#6a9955;font-style:italic}.tiptap .code-block-wrapper .theme-dark .hljs-keyword,.tiptap .code-block-wrapper .theme-dark .hljs-selector-tag,.tiptap .code-block-wrapper .theme-dark .hljs-literal,.tiptap .code-block-wrapper .theme-dark .hljs-type{color:#569cd6}.tiptap .code-block-wrapper .theme-dark .hljs-string,.tiptap .code-block-wrapper .theme-dark .hljs-title,.tiptap .code-block-wrapper .theme-dark .hljs-name{color:#ce9178}.tiptap .code-block-wrapper .theme-dark .hljs-number,.tiptap .code-block-wrapper .theme-dark .hljs-symbol,.tiptap .code-block-wrapper .theme-dark .hljs-bullet{color:#b5cea8}.tiptap .code-block-wrapper .theme-dark .hljs-function,.tiptap .code-block-wrapper .theme-dark .hljs-params{color:#dcdcaa}.tiptap .code-block-wrapper .theme-dark .hljs-attr,.tiptap .code-block-wrapper .theme-dark .hljs-variable,.tiptap .code-block-wrapper .theme-dark .hljs-property{color:#9cdcfe}.tiptap .code-block-wrapper .theme-dark .hljs-built_in,.tiptap .code-block-wrapper .theme-dark .hljs-class{color:#4ec9b0}.tiptap .code-block-wrapper .theme-dark .hljs-tag{color:gray}.tiptap .code-block-wrapper .theme-dark .hljs-meta{color:#d7ba7d}.tiptap .code-block-wrapper .code-block-content.theme-light{background:#fff;color:#000}.tiptap .code-block-wrapper .theme-light .hljs-comment,.tiptap .code-block-wrapper .theme-light .hljs-quote{color:green;font-style:italic}.tiptap .code-block-wrapper .theme-light .hljs-keyword,.tiptap .code-block-wrapper .theme-light .hljs-selector-tag,.tiptap .code-block-wrapper .theme-light .hljs-literal,.tiptap .code-block-wrapper .theme-light .hljs-type{color:#00f}.tiptap .code-block-wrapper .theme-light .hljs-string,.tiptap .code-block-wrapper .theme-light .hljs-title,.tiptap .code-block-wrapper .theme-light .hljs-name{color:#a31515}.tiptap .code-block-wrapper .theme-light .hljs-number,.tiptap .code-block-wrapper .theme-light .hljs-symbol,.tiptap .code-block-wrapper .theme-light .hljs-bullet{color:#098658}.tiptap .code-block-wrapper .theme-light .hljs-function,.tiptap .code-block-wrapper .theme-light .hljs-params{color:#795e26}.tiptap .code-block-wrapper .theme-light .hljs-attr,.tiptap .code-block-wrapper .theme-light .hljs-variable,.tiptap .code-block-wrapper .theme-light .hljs-property{color:#001080}.tiptap .code-block-wrapper .theme-light .hljs-built_in,.tiptap .code-block-wrapper .theme-light .hljs-class{color:#267f99}.tiptap .code-block-wrapper .code-block-content .hljs{display:block;overflow-x:auto}.tiptap .code-block-wrapper .code-block-content ::-moz-selection{background:#80cbc44d}.tiptap .code-block-wrapper .code-block-content ::selection{background:#80cbc44d}.tiptap .code-block-wrapper .code-block-content::-webkit-scrollbar{height:8px}.tiptap .code-block-wrapper .code-block-content::-webkit-scrollbar-track{background:#0003}.tiptap .code-block-wrapper .code-block-content::-webkit-scrollbar-thumb{background:#ffffff4d;border-radius:4px}.tiptap .code-block-wrapper .code-block-content::-webkit-scrollbar-thumb:hover{background:#ffffff80}*,:before,:after{--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: rgb(0 119 227 / .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: }::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: rgb(0 119 227 / .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: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{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}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,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}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-6{right:1.5rem}.top-1{top:.25rem}.top-2{top:.5rem}.z-10{z-index:10}.z-50{z-index:50}.\!m-0{margin:0!important}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.\!ml-4{margin-left:1rem!important}.\!mr-2{margin-right:.5rem!important}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-10{margin-left:2.5rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-20{height:5rem}.h-28{height:7rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-\[28px\]{height:28px}.h-\[2px\]{height:2px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-96{max-height:24rem}.min-h-full{min-height:100%}.w-0{width:0px}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-80{width:20rem}.w-\[100px\]{width:100px}.w-\[26px\]{width:26px}.w-\[28px\]{width:28px}.w-\[300px\]{width:300px}.w-\[calc\(100\%_-_20px\)\]{width:calc(100% - 20px)}.w-\[calc\(100\%_-_40px\)\]{width:calc(100% - 40px)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-\[200px\]{min-width:200px}.min-w-\[320px\]{min-width:320px}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-\[200px\]{max-width:200px}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[-90deg\]{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-\[2px\]{gap:2px}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.\!border-primary-400{--tw-border-opacity: 1 !important;border-color:rgb(51 146 233 / var(--tw-border-opacity, 1))!important}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(0 119 227 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-neutral-200{--tw-border-opacity: 1;border-color:rgb(234 236 240 / var(--tw-border-opacity, 1))}.border-neutral-300{--tw-border-opacity: 1;border-color:rgb(208 213 221 / var(--tw-border-opacity, 1))}.border-primary-300{--tw-border-opacity: 1;border-color:rgb(84 164 236 / var(--tw-border-opacity, 1))}.border-primary-500{--tw-border-opacity: 1;border-color:rgb(0 119 227 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.\!bg-transparent{background-color:transparent!important}.bg-black-100{--tw-bg-opacity: 1;background-color:rgb(217 217 217 / var(--tw-bg-opacity, 1))}.bg-black-700{--tw-bg-opacity: 1;background-color:rgb(31 31 31 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(1 109 207 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-neutral-200{--tw-bg-opacity: 1;background-color:rgb(234 236 240 / var(--tw-bg-opacity, 1))}.bg-neutral-300{--tw-bg-opacity: 1;background-color:rgb(208 213 221 / var(--tw-bg-opacity, 1))}.bg-neutral-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-primary-100{--tw-bg-opacity: 1;background-color:rgb(198 225 249 / var(--tw-bg-opacity, 1))}.bg-primary-50{--tw-bg-opacity: 1;background-color:rgb(230 241 252 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/30{background-color:#ffffff4d}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.\!p-2{padding:.5rem!important}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[4px\]{padding-left:4px;padding-right:4px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-px{padding-top:1px;padding-bottom:1px}.pb-0\.5{padding-bottom:.125rem}.pb-2{padding-bottom:.5rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-\[8px\]{font-size:8px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity, 1))!important}.text-blue-600{--tw-text-opacity: 1;color:rgb(1 109 207 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(148 189 147 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(110 157 109 / var(--tw-text-opacity, 1))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(102 112 133 / var(--tw-text-opacity, 1))}.text-neutral-600{--tw-text-opacity: 1;color:rgb(71 84 103 / var(--tw-text-opacity, 1))}.text-neutral-700{--tw-text-opacity: 1;color:rgb(52 64 84 / var(--tw-text-opacity, 1))}.text-neutral-900{--tw-text-opacity: 1;color:rgb(16 24 40 / var(--tw-text-opacity, 1))}.text-primary-400{--tw-text-opacity: 1;color:rgb(51 146 233 / var(--tw-text-opacity, 1))}.text-primary-500{--tw-text-opacity: 1;color:rgb(0 119 227 / var(--tw-text-opacity, 1))}.text-primary-600{--tw-text-opacity: 1;color:rgb(1 109 207 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.accent-neutral-700{accent-color:#344054}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -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)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.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)}.ring-blue-200{--tw-ring-opacity: 1;--tw-ring-color: rgb(138 192 242 / var(--tw-ring-opacity, 1))}.ring-blue-500{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 119 227 / var(--tw-ring-opacity, 1))}.ring-primary-200{--tw-ring-opacity: 1;--tw-ring-color: rgb(138 192 242 / var(--tw-ring-opacity, 1))}.blur{--tw-blur: blur(8px);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)}.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)}.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}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.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}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.scrollbar-none::-webkit-scrollbar{display:none}.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}.file\:mr-4::file-selector-button{margin-right:1rem}.file\:rounded::file-selector-button{border-radius:.25rem}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-blue-50::file-selector-button{--tw-bg-opacity: 1;background-color:rgb(230 241 252 / var(--tw-bg-opacity, 1))}.file\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.file\:py-1::file-selector-button{padding-top:.25rem;padding-bottom:.25rem}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-semibold::file-selector-button{font-weight:600}.file\:text-blue-700::file-selector-button{--tw-text-opacity: 1;color:rgb(0 84 161 / var(--tw-text-opacity, 1))}.last\:mb-0:last-child{margin-bottom:0}.hover\:scale-\[1\.2\]:hover{--tw-scale-x: 1.2;--tw-scale-y: 1.2;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-neutral-300:hover{--tw-border-opacity: 1;border-color:rgb(208 213 221 / var(--tw-border-opacity, 1))}.hover\:border-primary-300:hover{--tw-border-opacity: 1;border-color:rgb(84 164 236 / var(--tw-border-opacity, 1))}.hover\:border-primary-400:hover{--tw-border-opacity: 1;border-color:rgb(51 146 233 / var(--tw-border-opacity, 1))}.hover\:border-primary-600:hover{--tw-border-opacity: 1;border-color:rgb(1 109 207 / var(--tw-border-opacity, 1))}.hover\:\!bg-red-500\/20:hover{background-color:#e32d3533!important}.hover\:\!bg-white\/10:hover{background-color:#ffffff1a!important}.hover\:bg-black-100:hover{--tw-bg-opacity: 1;background-color:rgb(217 217 217 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-neutral-200:hover{--tw-bg-opacity: 1;background-color:rgb(234 236 240 / var(--tw-bg-opacity, 1))}.hover\:bg-primary-50:hover{--tw-bg-opacity: 1;background-color:rgb(230 241 252 / var(--tw-bg-opacity, 1))}.hover\:bg-primary-600:hover{--tw-bg-opacity: 1;background-color:rgb(1 109 207 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-primary-400:hover{--tw-text-opacity: 1;color:rgb(51 146 233 / var(--tw-text-opacity, 1))}.hover\:text-primary-600:hover{--tw-text-opacity: 1;color:rgb(1 109 207 / var(--tw-text-opacity, 1))}.hover\:text-primary-700:hover{--tw-text-opacity: 1;color:rgb(0 84 161 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:duration-300:hover{transition-duration:.3s}.hover\:file\:bg-blue-100::file-selector-button:hover{--tw-bg-opacity: 1;background-color:rgb(198 225 249 / var(--tw-bg-opacity, 1))}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import { PluginKey } from "@tiptap/pm/state";
|
|
3
|
+
import { DecorationSet } from "@tiptap/pm/view";
|
|
4
|
+
export interface AIAutocompletionOptions {
|
|
5
|
+
minWordsToTriggerAutoCompletion: number;
|
|
6
|
+
debounceTime: number;
|
|
7
|
+
isEnabled: boolean;
|
|
8
|
+
/** Custom fetch function - required for AI autocompletion to work */
|
|
9
|
+
fetchCompletion?: (text: string) => Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
declare module "@tiptap/core" {
|
|
12
|
+
interface Commands<ReturnType> {
|
|
13
|
+
aiAutocompletion: {
|
|
14
|
+
acceptSuggestion: () => ReturnType;
|
|
15
|
+
dismissSuggestion: () => ReturnType;
|
|
16
|
+
enableAutocompletion: () => ReturnType;
|
|
17
|
+
disableAutocompletion: () => ReturnType;
|
|
18
|
+
toggleAutocompletion: () => ReturnType;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
declare module "@tiptap/core" {
|
|
23
|
+
interface Storage {
|
|
24
|
+
aiAutoCompletion: AIAutocompletionOptions;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
interface SuggestionData {
|
|
28
|
+
from: number;
|
|
29
|
+
to: number;
|
|
30
|
+
text: string;
|
|
31
|
+
}
|
|
32
|
+
interface PluginState {
|
|
33
|
+
decorationSet: DecorationSet;
|
|
34
|
+
suggestion: SuggestionData | null;
|
|
35
|
+
}
|
|
36
|
+
export declare const aiAutocompletionKey: PluginKey<PluginState>;
|
|
37
|
+
export declare const AIAutocompletion: Extension<AIAutocompletionOptions, any>;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Node } from '@tiptap/core';
|
|
2
|
+
import { createLowlight } from 'lowlight';
|
|
3
|
+
export interface CodeBlockWithToolbarOptions {
|
|
4
|
+
lowlight: ReturnType<typeof createLowlight>;
|
|
5
|
+
defaultLanguage: string | null | undefined;
|
|
6
|
+
HTMLAttributes: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
declare module '@tiptap/core' {
|
|
9
|
+
interface Commands<ReturnType> {
|
|
10
|
+
codeBlockWithToolbar: {
|
|
11
|
+
/**
|
|
12
|
+
* Set a code block with toolbar
|
|
13
|
+
*/
|
|
14
|
+
setCodeBlock: (attributes?: {
|
|
15
|
+
language: string;
|
|
16
|
+
theme?: string;
|
|
17
|
+
}) => ReturnType;
|
|
18
|
+
/**
|
|
19
|
+
* Toggle a code block with toolbar
|
|
20
|
+
*/
|
|
21
|
+
toggleCodeBlock: (attributes?: {
|
|
22
|
+
language: string;
|
|
23
|
+
theme?: string;
|
|
24
|
+
}) => ReturnType;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export declare const CodeBlockWithToolbar: Node<CodeBlockWithToolbarOptions, any>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type AlignType } from "@/constants";
|
|
2
|
+
export interface CustomImageExtensionOptions {
|
|
3
|
+
inline: boolean;
|
|
4
|
+
allowBase64: boolean;
|
|
5
|
+
HTMLAttributes: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface CustomImageExtensionAttributes {
|
|
8
|
+
src: string;
|
|
9
|
+
alt?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
align?: AlignType;
|
|
13
|
+
}
|
|
14
|
+
export declare const CustomImageExtension: import("@tiptap/core").Node<CustomImageExtensionOptions, any>;
|
|
15
|
+
export default CustomImageExtension;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const HorizontalRuleWithStyle: import("@tiptap/core").Node<import("@tiptap/extension-horizontal-rule").HorizontalRuleOptions, any>;
|
|
2
|
+
declare module "@tiptap/core" {
|
|
3
|
+
interface Commands<ReturnType> {
|
|
4
|
+
horizontalRuleWithStyle: {
|
|
5
|
+
setHorizontalRule: (attributes?: {
|
|
6
|
+
styleType?: string;
|
|
7
|
+
}) => ReturnType;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
export interface IndentOptions {
|
|
3
|
+
types: string[];
|
|
4
|
+
minLevel: number;
|
|
5
|
+
maxLevel: number;
|
|
6
|
+
}
|
|
7
|
+
declare module "@tiptap/core" {
|
|
8
|
+
interface Commands<ReturnType> {
|
|
9
|
+
indent: {
|
|
10
|
+
indent: () => ReturnType;
|
|
11
|
+
outdent: () => ReturnType;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export declare const Indent: Extension<IndentOptions, any>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type OrderedListType = "decimal" | "decimal-parenthesis" | "decimal-nested" | "upper-alpha-mixed" | "upper-roman-mixed" | "decimal-leading-zero-mixed";
|
|
2
|
+
export declare const OrderedListWithType: import("@tiptap/core").Node<import("@tiptap/extension-list").OrderedListOptions, any>;
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
orderedListWithType: {
|
|
6
|
+
setOrderedListType: (listType: OrderedListType) => ReturnType;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Extension } from '@tiptap/core';
|
|
2
|
+
export interface PageBackgroundOptions {
|
|
3
|
+
defaultColor: string;
|
|
4
|
+
}
|
|
5
|
+
declare module '@tiptap/core' {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
7
|
+
pageBackground: {
|
|
8
|
+
/**
|
|
9
|
+
* Set the background color of the page
|
|
10
|
+
*/
|
|
11
|
+
setPageBackgroundColor: (color: string) => ReturnType;
|
|
12
|
+
/**
|
|
13
|
+
* Remove the background color from the page
|
|
14
|
+
*/
|
|
15
|
+
unsetPageBackgroundColor: () => ReturnType;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export declare const PageBackground: Extension<PageBackgroundOptions, any>;
|
|
20
|
+
export default PageBackground;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Node } from '@tiptap/core';
|
|
2
|
+
export interface PageBreakOptions {
|
|
3
|
+
HTMLAttributes: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
declare module '@tiptap/core' {
|
|
6
|
+
interface Commands<ReturnType> {
|
|
7
|
+
pageBreak: {
|
|
8
|
+
/**
|
|
9
|
+
* Add a page break
|
|
10
|
+
*/
|
|
11
|
+
setPageBreak: () => ReturnType;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export declare const PageBreak: Node<PageBreakOptions, any>;
|
|
16
|
+
export default PageBreak;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Extension } from '@tiptap/core';
|
|
2
|
+
export interface MarginValues {
|
|
3
|
+
top: number;
|
|
4
|
+
right: number;
|
|
5
|
+
bottom: number;
|
|
6
|
+
left: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PageMarginOptions {
|
|
9
|
+
defaultMargins: MarginValues;
|
|
10
|
+
unit: 'in' | 'mm' | 'cm' | 'px';
|
|
11
|
+
presetMargins?: Record<string, MarginValues>;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_MARGINS: MarginValues;
|
|
14
|
+
export declare const PRESET_MARGINS: {
|
|
15
|
+
Normal: {
|
|
16
|
+
top: number;
|
|
17
|
+
right: number;
|
|
18
|
+
bottom: number;
|
|
19
|
+
left: number;
|
|
20
|
+
};
|
|
21
|
+
Narrow: {
|
|
22
|
+
top: number;
|
|
23
|
+
right: number;
|
|
24
|
+
bottom: number;
|
|
25
|
+
left: number;
|
|
26
|
+
};
|
|
27
|
+
Moderate: {
|
|
28
|
+
top: number;
|
|
29
|
+
right: number;
|
|
30
|
+
bottom: number;
|
|
31
|
+
left: number;
|
|
32
|
+
};
|
|
33
|
+
Wide: {
|
|
34
|
+
top: number;
|
|
35
|
+
right: number;
|
|
36
|
+
bottom: number;
|
|
37
|
+
left: number;
|
|
38
|
+
};
|
|
39
|
+
Mirrored: {
|
|
40
|
+
top: number;
|
|
41
|
+
right: number;
|
|
42
|
+
bottom: number;
|
|
43
|
+
left: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export declare const UNIT_CONVERSION: {
|
|
47
|
+
in: number;
|
|
48
|
+
cm: number;
|
|
49
|
+
mm: number;
|
|
50
|
+
px: number;
|
|
51
|
+
};
|
|
52
|
+
declare module '@tiptap/core' {
|
|
53
|
+
interface Commands<ReturnType> {
|
|
54
|
+
pageMargin: {
|
|
55
|
+
/**
|
|
56
|
+
* Set the margins of the page
|
|
57
|
+
*/
|
|
58
|
+
setPageMargins: (margins: MarginValues) => ReturnType;
|
|
59
|
+
/**
|
|
60
|
+
* Set a preset margin configuration
|
|
61
|
+
*/
|
|
62
|
+
setPresetMargins: (presetName: string) => ReturnType;
|
|
63
|
+
/**
|
|
64
|
+
* Reset margins to default values
|
|
65
|
+
*/
|
|
66
|
+
resetPageMargins: () => ReturnType;
|
|
67
|
+
/**
|
|
68
|
+
* Update a single margin value
|
|
69
|
+
*/
|
|
70
|
+
updateMargin: (side: keyof MarginValues, value: number) => ReturnType;
|
|
71
|
+
/**
|
|
72
|
+
* Change the unit used for margins
|
|
73
|
+
*/
|
|
74
|
+
setMarginUnit: (unit: 'in' | 'mm' | 'cm' | 'px') => ReturnType;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export declare const PageMargin: Extension<PageMarginOptions, any>;
|
|
79
|
+
export default PageMargin;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type UnorderedListType = "disc" | "circle" | "square" | "dash" | "arrow" | "checkmark";
|
|
2
|
+
export declare const UnorderedListWithType: import("@tiptap/core").Node<import("@tiptap/extension-list").BulletListOptions, any>;
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
unorderedListWithType: {
|
|
6
|
+
setBulletListType: (listType: UnorderedListType) => ReturnType;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const VariableTable: import("@tiptap/core").Node<import("@tiptap/extension-table").TableOptions, any>;
|
|
2
|
+
export declare const VariableTableRow: import("@tiptap/core").Node<import("@tiptap/extension-table").TableRowOptions, any>;
|
|
3
|
+
export declare const VariableTableHeader: import("@tiptap/core").Node<import("@tiptap/extension-table").TableHeaderOptions, any>;
|
|
4
|
+
export declare const VariableTableCell: import("@tiptap/core").Node<import("@tiptap/extension-table").TableCellOptions, any>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Node } from '@tiptap/core';
|
|
2
|
+
export interface VariableOptions {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
variableValues: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
declare module '@tiptap/core' {
|
|
7
|
+
interface Commands<ReturnType> {
|
|
8
|
+
variable: {
|
|
9
|
+
/**
|
|
10
|
+
* Insert a variable node at the current cursor position
|
|
11
|
+
* @param variableName - The name/key of the variable
|
|
12
|
+
*/
|
|
13
|
+
insertVariable: (variableName: string, value?: string) => ReturnType;
|
|
14
|
+
/**
|
|
15
|
+
* Update all variable nodes with new values
|
|
16
|
+
* @param values - Record mapping variable names to their new values
|
|
17
|
+
*/
|
|
18
|
+
updateVariableValues: (values: Record<string, string>) => ReturnType;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* VariableText Extension
|
|
24
|
+
*
|
|
25
|
+
* Allows insertion and management of variable text nodes that can be dynamically updated.
|
|
26
|
+
* Variables are displayed as {{variableName}} when no value is set, or as their actual value when set.
|
|
27
|
+
*
|
|
28
|
+
* Features:
|
|
29
|
+
* - Auto-conversion of {{variableName}} syntax when enabled
|
|
30
|
+
* - Dynamic value updates via updateVariableValues command
|
|
31
|
+
* - Inline, atomic nodes that can be deleted with backspace
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* editor.commands.insertVariable('userName');
|
|
36
|
+
* editor.commands.updateVariableValues({ userName: 'John Doe' });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const VariableText: Node<VariableOptions, any>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { EditorConfig } from "@/config/editorConfig";
|
|
2
|
+
export declare const EditorExtensions: (config?: EditorConfig) => (import("@tiptap/core").Node<import("@tiptap/extension-list").OrderedListOptions, any> | import("@tiptap/core").Extension<import("@/extensions/AIAutoCompletion").AIAutocompletionOptions, any> | import("@tiptap/core").Extension<any, any> | import("@tiptap/core").Extension<import("./Indent").IndentOptions, any> | import("@tiptap/core").Node<import("./ListItemWithDepthLimit").ListItemOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-table").TableOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-table").TableRowOptions, any> | import("@tiptap/core").Node<import("./VariableText").VariableOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-horizontal-rule").HorizontalRuleOptions, any> | import("@tiptap/core").Node<import("./CodeBlockWithToolbar").CodeBlockWithToolbarOptions, any> | import("@tiptap/core").Extension<import("./PageMargin").PageMarginOptions, any> | import("@tiptap/core").Extension<import("./PageBackground").PageBackgroundOptions, any> | import("@tiptap/core").Node<import("./PageBreak").PageBreakOptions, any> | import("@tiptap/core").Node<any, any> | import("@tiptap/core").Node<import("./CustomImageExtension").CustomImageExtensionOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extensions").UndoRedoOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extensions").CharacterCountOptions, import("@tiptap/extensions").CharacterCountStorage> | import("@tiptap/core").Extension<import("@tiptap/extensions").PlaceholderOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-typography").TypographyOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-text-style").FontSizeOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-superscript").SuperscriptExtensionOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-highlight").HighlightOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-list").TaskListOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-list").TaskItemOptions, any> | import("@tiptap/core").Extension<import("@tiptap/extension-text-align").TextAlignOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-heading").HeadingOptions, any> | import("@tiptap/core").Mark<import("@tiptap/extension-link").LinkOptions, any> | import("@tiptap/core").Node<import("@tiptap/extension-hard-break").HardBreakOptions, any>)[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Node as ProseMirrorNode } from "@tiptap/pm/model";
|
|
2
|
+
interface CodeBlockAttributes {
|
|
3
|
+
selectedLanguage: string;
|
|
4
|
+
selectedTheme: string;
|
|
5
|
+
isCodeCopied: boolean;
|
|
6
|
+
syntaxHighlightedCode: string;
|
|
7
|
+
}
|
|
8
|
+
interface UseCodeEditorProps {
|
|
9
|
+
node: ProseMirrorNode;
|
|
10
|
+
updateAttributes: (attributes: Record<string, unknown>) => void;
|
|
11
|
+
deleteNode: () => void;
|
|
12
|
+
}
|
|
13
|
+
interface UseCodeEditorReturn extends CodeBlockAttributes {
|
|
14
|
+
updateCodeLanguage: (language: string) => void;
|
|
15
|
+
updateCodeTheme: (theme: string) => void;
|
|
16
|
+
copyCodeToClipboard: () => void;
|
|
17
|
+
deleteCodeBlock: () => void;
|
|
18
|
+
handleEditorEditableState: (isOpen: boolean) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Custom hook to manage code block editor functionality
|
|
22
|
+
* Handles language selection, theme, syntax highlighting, copy, and delete operations
|
|
23
|
+
*/
|
|
24
|
+
export declare const useCodeEditor: ({ node, updateAttributes, deleteNode, }: UseCodeEditorProps) => UseCodeEditorReturn;
|
|
25
|
+
export {};
|