@grandaniel/vue-markdown-editor 1.1.3-dev.df4d480 → 1.1.3-dev.ed12560

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.
Files changed (20) hide show
  1. package/dist/components/MarkdownEditor/ContextMenu/MarkdownEditorContextMenu.vue.d.ts +3 -1
  2. package/dist/components/MarkdownEditor/ContextMenu/MarkdownEditorFileContextMenu.vue.d.ts +19 -0
  3. package/dist/components/MarkdownEditor/ContextMenu/MarkdownEditorImageContextMenu.vue.d.ts +2 -0
  4. package/dist/components/MarkdownEditor/Factory/MarkdownNodeFactory.d.ts +2 -0
  5. package/dist/components/MarkdownEditor/MarkdownComponentRegistry.d.ts +2 -1
  6. package/dist/components/MarkdownEditor/MarkdownEditor.vue.d.ts +8 -0
  7. package/dist/components/MarkdownEditor/MarkdownEditorModule.vue.d.ts +2 -2
  8. package/dist/components/MarkdownEditor/Modules/MarkdownModuleFile.vue.d.ts +16 -0
  9. package/dist/components/MarkdownEditor/Modules/MarkdownModuleFileState.d.ts +8 -0
  10. package/dist/components/MarkdownEditor/Modules/MarkdownModuleHeadline1.vue.d.ts +2 -2
  11. package/dist/components/MarkdownEditor/Modules/MarkdownModuleHeadline2.vue.d.ts +2 -2
  12. package/dist/components/MarkdownEditor/Modules/MarkdownModuleHeadline3.vue.d.ts +2 -2
  13. package/dist/components/MarkdownEditor/Modules/MarkdownModuleParagraph.vue.d.ts +2 -2
  14. package/dist/components/MarkdownEditor/Types/MarkdownAstNode.d.ts +2 -0
  15. package/dist/components/MarkdownEditor/Types/MarkdownAstNodeType.d.ts +2 -1
  16. package/dist/components/MarkdownEditor/index.d.ts +2 -1
  17. package/dist/components/MarkdownRenderer/RenderModules/MarkdownModuleFileRender.vue.d.ts +7 -0
  18. package/dist/vue-markdown-editor.css +1 -1
  19. package/dist/vue-markdown-editor.mjs +4659 -4356
  20. package/package.json +1 -1
@@ -7,7 +7,9 @@ declare var __VLS_7: {};
7
7
  type __VLS_Slots = {} & {
8
8
  default?: (props: typeof __VLS_7) => any;
9
9
  };
10
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
11
+ rootEl: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
12
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
14
  declare const _default: typeof __VLS_export;
13
15
  export default _default;
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ x: number;
3
+ y: number;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ click: () => any;
7
+ editAttributes: () => any;
8
+ download: () => any;
9
+ retry: () => any;
10
+ close: () => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ onClick?: (() => any) | undefined;
13
+ onEditAttributes?: (() => any) | undefined;
14
+ onDownload?: (() => any) | undefined;
15
+ onRetry?: (() => any) | undefined;
16
+ onClose?: (() => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
@@ -3,9 +3,11 @@ type __VLS_Props = {
3
3
  y: number;
4
4
  };
5
5
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ click: () => any;
6
7
  editAttributes: () => any;
7
8
  close: () => any;
8
9
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ onClick?: (() => any) | undefined;
9
11
  onEditAttributes?: (() => any) | undefined;
10
12
  onClose?: (() => any) | undefined;
11
13
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,3 +1,4 @@
1
+ import type MarkdownModuleFileState from "../Modules/MarkdownModuleFileState";
1
2
  import type MarkdownModuleImageState from "../Modules/MarkdownModuleImageState";
2
3
  import type MarkdownModuleListState from "../Modules/MarkdownModuleListState";
3
4
  import MarkdownModuleTextState from "../Modules/MarkdownModuleTextState";
@@ -9,6 +10,7 @@ declare class MarkdownNodeFactory {
9
10
  createImageNode(src: string, alt: string, caption?: string): MarkdownAstNode<MarkdownModuleImageState>;
10
11
  createListNode(items: string[]): MarkdownAstNode<MarkdownModuleListState>;
11
12
  createBlankParagraph(): MarkdownAstNode<MarkdownModuleTextState>;
13
+ createFileNode(url: string, fileName: string, fileSize: number, mimeType: string, uploadError?: string): MarkdownAstNode<MarkdownModuleFileState>;
12
14
  }
13
15
  declare const _default: MarkdownNodeFactory;
14
16
  export default _default;
@@ -1,4 +1,5 @@
1
1
  import type { Component } from "vue";
2
+ import MarkdownModuleFileState from "./Modules/MarkdownModuleFileState";
2
3
  import MarkdownModuleImageState from "./Modules/MarkdownModuleImageState";
3
4
  import MarkdownModuleListState from "./Modules/MarkdownModuleListState";
4
5
  import MarkdownModuleTextState from "./Modules/MarkdownModuleTextState";
@@ -6,7 +7,7 @@ import type { MarkdownAstNode } from "./Types/MarkdownAstNode";
6
7
  import MarkdownNodeType from "./Types/MarkdownAstNodeType";
7
8
  type MarkdownComponentRegistryEntry = {
8
9
  component: Component;
9
- stateType: typeof MarkdownModuleTextState | typeof MarkdownModuleImageState | typeof MarkdownModuleListState;
10
+ stateType: typeof MarkdownModuleTextState | typeof MarkdownModuleImageState | typeof MarkdownModuleListState | typeof MarkdownModuleFileState;
10
11
  };
11
12
  declare const registry: Record<MarkdownNodeType, MarkdownComponentRegistryEntry>;
12
13
  export declare function isTextNodeState(state: MarkdownAstNode): state is MarkdownAstNode & {
@@ -19,6 +19,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
19
19
  type: PropType<(file: File) => Promise<string>>;
20
20
  required: false;
21
21
  };
22
+ fileUploadFunction: {
23
+ type: PropType<(file: File) => Promise<string>>;
24
+ required: false;
25
+ };
22
26
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
23
27
  "update:focused-node": (value: MarkdownAstNode<object> | null) => any;
24
28
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -35,6 +39,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
35
39
  type: PropType<(file: File) => Promise<string>>;
36
40
  required: false;
37
41
  };
42
+ fileUploadFunction: {
43
+ type: PropType<(file: File) => Promise<string>>;
44
+ required: false;
45
+ };
38
46
  }>> & Readonly<{
39
47
  "onUpdate:focused-node"?: ((value: MarkdownAstNode<object> | null) => any) | undefined;
40
48
  }>, {
@@ -16,9 +16,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
16
16
  required: true;
17
17
  };
18
18
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ focus: () => any;
19
20
  "update:cursor-position": (args_0: number) => any;
20
21
  "change-type": (args_0: MarkdownAstNode<object>, args_1: number) => any;
21
- focus: () => any;
22
22
  "update:node": (args_0: Record<string, unknown>) => any;
23
23
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
24
24
  node: {
@@ -30,9 +30,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
30
30
  required: true;
31
31
  };
32
32
  }>> & Readonly<{
33
+ onFocus?: (() => any) | undefined;
33
34
  "onUpdate:cursor-position"?: ((args_0: number) => any) | undefined;
34
35
  "onChange-type"?: ((args_0: MarkdownAstNode<object>, args_1: number) => any) | undefined;
35
- onFocus?: (() => any) | undefined;
36
36
  "onUpdate:node"?: ((args_0: Record<string, unknown>) => any) | undefined;
37
37
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
38
38
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -0,0 +1,16 @@
1
+ import type MarkdownModuleFileState from "./MarkdownModuleFileState";
2
+ declare function focus(): void;
3
+ type __VLS_ModelProps = {
4
+ modelValue: MarkdownModuleFileState;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {
7
+ focus: typeof focus;
8
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "retry-upload": (fileState: MarkdownModuleFileState) => any;
10
+ "update:modelValue": (value: MarkdownModuleFileState) => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
12
+ "onRetry-upload"?: ((fileState: MarkdownModuleFileState) => any) | undefined;
13
+ "onUpdate:modelValue"?: ((value: MarkdownModuleFileState) => any) | undefined;
14
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
@@ -0,0 +1,8 @@
1
+ export default class MarkdownModuleFileState {
2
+ url: string;
3
+ fileName: string;
4
+ fileSize: number;
5
+ mimeType: string;
6
+ uploadError: string;
7
+ constructor(object: MarkdownModuleFileState);
8
+ }
@@ -6,15 +6,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {
6
6
  editor: import("vue").ShallowRef<import("@tiptap/vue-3").Editor | undefined, import("@tiptap/vue-3").Editor | undefined>;
7
7
  focus: () => void;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "update:modelValue": (value: MarkdownModuleTextState) => any;
9
10
  "update:model-value": (componentState: MarkdownModuleTextState) => any;
10
11
  "update:cursor-position": (cursorPosition: number) => any;
11
12
  "change-type": (newType: import("..").MarkdownAstNodeType) => any;
12
- "update:modelValue": (value: MarkdownModuleTextState) => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
14
15
  "onUpdate:model-value"?: ((componentState: MarkdownModuleTextState) => any) | undefined;
15
16
  "onUpdate:cursor-position"?: ((cursorPosition: number) => any) | undefined;
16
17
  "onChange-type"?: ((newType: import("..").MarkdownAstNodeType) => any) | undefined;
17
- "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
18
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -6,15 +6,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {
6
6
  editor: import("vue").ShallowRef<import("@tiptap/vue-3").Editor | undefined, import("@tiptap/vue-3").Editor | undefined>;
7
7
  focus: () => void;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "update:modelValue": (value: MarkdownModuleTextState) => any;
9
10
  "update:model-value": (componentState: MarkdownModuleTextState) => any;
10
11
  "update:cursor-position": (cursorPosition: number) => any;
11
12
  "change-type": (newType: import("..").MarkdownAstNodeType) => any;
12
- "update:modelValue": (value: MarkdownModuleTextState) => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
14
15
  "onUpdate:model-value"?: ((componentState: MarkdownModuleTextState) => any) | undefined;
15
16
  "onUpdate:cursor-position"?: ((cursorPosition: number) => any) | undefined;
16
17
  "onChange-type"?: ((newType: import("..").MarkdownAstNodeType) => any) | undefined;
17
- "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
18
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -6,15 +6,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {
6
6
  editor: import("vue").ShallowRef<import("@tiptap/vue-3").Editor | undefined, import("@tiptap/vue-3").Editor | undefined>;
7
7
  focus: () => void;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "update:modelValue": (value: MarkdownModuleTextState) => any;
9
10
  "update:model-value": (componentState: MarkdownModuleTextState) => any;
10
11
  "update:cursor-position": (cursorPosition: number) => any;
11
12
  "change-type": (newType: import("..").MarkdownAstNodeType) => any;
12
- "update:modelValue": (value: MarkdownModuleTextState) => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
14
15
  "onUpdate:model-value"?: ((componentState: MarkdownModuleTextState) => any) | undefined;
15
16
  "onUpdate:cursor-position"?: ((cursorPosition: number) => any) | undefined;
16
17
  "onChange-type"?: ((newType: import("..").MarkdownAstNodeType) => any) | undefined;
17
- "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
18
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -6,15 +6,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {
6
6
  editor: import("vue").ShallowRef<import("@tiptap/vue-3").Editor | undefined, import("@tiptap/vue-3").Editor | undefined>;
7
7
  focus: () => void;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ "update:modelValue": (value: MarkdownModuleTextState) => any;
9
10
  "update:model-value": (componentState: MarkdownModuleTextState) => any;
10
11
  "update:cursor-position": (cursorPosition: number) => any;
11
12
  "change-type": (newType: import("..").MarkdownAstNodeType) => any;
12
- "update:modelValue": (value: MarkdownModuleTextState) => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
14
+ "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
14
15
  "onUpdate:model-value"?: ((componentState: MarkdownModuleTextState) => any) | undefined;
15
16
  "onUpdate:cursor-position"?: ((cursorPosition: number) => any) | undefined;
16
17
  "onChange-type"?: ((newType: import("..").MarkdownAstNodeType) => any) | undefined;
17
- "onUpdate:modelValue"?: ((value: MarkdownModuleTextState) => any) | undefined;
18
18
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -1,3 +1,4 @@
1
+ import type MarkdownModuleFileState from "../Modules/MarkdownModuleFileState";
1
2
  import type MarkdownModuleImageState from "../Modules/MarkdownModuleImageState";
2
3
  import type MarkdownModuleTextState from "../Modules/MarkdownModuleTextState";
3
4
  import type MarkdownNodeType from "./MarkdownAstNodeType";
@@ -12,3 +13,4 @@ export declare class MarkdownAstNode<TState extends object = object> {
12
13
  }
13
14
  export type TextNode = MarkdownAstNode<MarkdownModuleTextState>;
14
15
  export type ImageNode = MarkdownAstNode<MarkdownModuleImageState>;
16
+ export type FileNode = MarkdownAstNode<MarkdownModuleFileState>;
@@ -4,7 +4,8 @@ declare enum MarkdownNodeType {
4
4
  HEADLINE2 = 2,
5
5
  HEADLINE3 = 3,
6
6
  IMAGE = 4,
7
- LIST = 5
7
+ LIST = 5,
8
+ FILE = 6
8
9
  }
9
10
  export type TextishNodeType = MarkdownNodeType.PARAGRAPH | MarkdownNodeType.LIST | MarkdownNodeType.HEADLINE1 | MarkdownNodeType.HEADLINE2 | MarkdownNodeType.HEADLINE3;
10
11
  export declare function isTextNodeType(type: MarkdownNodeType): type is TextishNodeType;
@@ -1,5 +1,6 @@
1
1
  export { default as MarkdownEditor } from './MarkdownEditor.vue';
2
2
  export { useMarkdownEditor, type MarkdownEditorInstance } from "./Composable/useMarkdownEditor";
3
3
  export { isTextNodeState } from "./MarkdownComponentRegistry";
4
- export { MarkdownAstNode, type ImageNode, type TextNode } from "./Types/MarkdownAstNode";
4
+ export { MarkdownAstNode, type FileNode, type ImageNode, type TextNode } from "./Types/MarkdownAstNode";
5
5
  export { default as MarkdownAstNodeType, isTextNodeType, type TextishNodeType } from "./Types/MarkdownAstNodeType";
6
+ export { default as MarkdownModuleFileState } from "./Modules/MarkdownModuleFileState";
@@ -0,0 +1,7 @@
1
+ import type MarkdownModuleFileState from "../../MarkdownEditor/Modules/MarkdownModuleFileState";
2
+ type __VLS_Props = {
3
+ state: MarkdownModuleFileState;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -1,2 +1,2 @@
1
- .markdown-editor-context-menu[data-v-05f519e0]{z-index:1000;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;gap:.25rem;padding:.25rem;display:flex;position:fixed;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.markdown-editor-context-menu-inline-item[data-v-7dc94914]{cursor:pointer;color:#374151;background:0 0;border:none;border-radius:.375rem;justify-content:center;align-items:center;min-width:2rem;min-height:2rem;padding:.5rem;font-size:.875rem;font-weight:500;transition:all .15s;display:flex}.markdown-editor-context-menu-inline-item[data-v-7dc94914]:hover{background:#f3f4f6}.markdown-editor-context-menu-inline-item.is-active[data-v-7dc94914]{color:#1e40af;background:#dbeafe}.markdown-editor-context-menu-inline-item[data-v-7dc94914]:active{transform:scale(.95)}.markdown-editor-focus-controls[data-v-ce3a9e83]{flex-direction:row;align-items:center;height:100%;display:flex}.markdown-editor-focus-controls .drag-handle[data-v-ce3a9e83]{cursor:grab;-webkit-user-select:none;user-select:none;opacity:.4;padding:0 .2rem;font-size:1rem;line-height:1}.markdown-editor-focus-controls .drag-handle[data-v-ce3a9e83]:active{cursor:grabbing}.markdown-editor-focus-controls .focus-control-btn[data-v-ce3a9e83]{cursor:pointer;opacity:.6;background:0 0;border:none;border-radius:3px;justify-content:center;align-items:center;width:1.4rem;height:1.4rem;padding:0;font-size:.75rem;line-height:1;transition:opacity .1s,background .1s;display:inline-flex}.markdown-editor-focus-controls .focus-control-btn[data-v-ce3a9e83]:hover{opacity:1;background:#00000012}[data-v-cf2b20ee],[data-v-6cb21ae4]{background:0 0;border:none;outline:none}.markdown-editor-context-menu-block-item[data-v-770b13bc]{cursor:pointer;color:#374151;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:.375rem;align-items:center;gap:.5rem;width:100%;padding:.625rem .875rem;font-size:.875rem;font-weight:500;transition:all .15s;display:flex}.markdown-editor-context-menu-block-item[data-v-770b13bc]:hover{background:#f3f4f6}.markdown-editor-context-menu-block-item[data-v-770b13bc]:active{transform:scale(.98)}.markdown-editor-image-context-menu-content[data-v-fbe7317c]{flex-direction:column;gap:.125rem;min-width:10rem;display:flex}.markdown-editor-modal-overlay[data-v-3e773d7f]{z-index:9999;background:#00000080;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.markdown-editor-modal[data-v-3e773d7f]{background:#fff;border-radius:.75rem;flex-direction:column;width:100%;max-width:32rem;max-height:90vh;display:flex;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.markdown-editor-modal-header[data-v-3e773d7f]{border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;display:flex}.markdown-editor-modal-title[data-v-3e773d7f]{color:#111827;margin:0;font-size:1.125rem;font-weight:600}.markdown-editor-modal-close[data-v-3e773d7f]{color:#6b7280;cursor:pointer;background:0 0;border:none;border-radius:.375rem;justify-content:center;align-items:center;width:2rem;height:2rem;padding:0;font-size:1.75rem;line-height:1;transition:all .15s;display:flex}.markdown-editor-modal-close[data-v-3e773d7f]:hover{color:#111827;background:#f3f4f6}.markdown-editor-modal-body[data-v-3e773d7f]{flex:1;padding:1.5rem;overflow-y:auto}.markdown-editor-modal-footer[data-v-3e773d7f]{border-top:1px solid #e5e7eb;justify-content:flex-end;gap:.75rem;padding:1.25rem 1.5rem;display:flex}.markdown-editor-modal-button[data-v-3e773d7f]{cursor:pointer;border:none;border-radius:.5rem;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;transition:all .15s}.markdown-editor-modal-button[data-v-3e773d7f]:active{transform:scale(.98)}.markdown-editor-modal-button-secondary[data-v-3e773d7f]{color:#374151;background:#f3f4f6}.markdown-editor-modal-button-secondary[data-v-3e773d7f]:hover{background:#e5e7eb}.markdown-editor-modal-button-primary[data-v-3e773d7f]{color:#fff;background:#3b82f6}.markdown-editor-modal-button-primary[data-v-3e773d7f]:hover{background:#2563eb}.markdown-module-image[data-v-9489f41b]{cursor:pointer;text-align:center;position:relative}.markdown-module-image img[data-v-9489f41b]{max-width:100%;height:auto}.markdown-module-image span[data-v-9489f41b]{color:#6b7280;margin-top:.25rem;font-size:.875rem;display:block}.markdown-module-image-form[data-v-9489f41b]{flex-direction:column;gap:1.25rem;display:flex}.markdown-module-image-form-field[data-v-9489f41b]{flex-direction:column;gap:.5rem;display:flex}.markdown-module-image-form-field label[data-v-9489f41b]{color:#374151;font-size:.875rem;font-weight:500}.markdown-module-image-form-field input[data-v-9489f41b]{color:#111827;background:#fff;border:1px solid #d1d5db;border-radius:.5rem;padding:.625rem .875rem;font-size:.875rem;transition:all .15s}.markdown-module-image-form-field input[data-v-9489f41b]:focus{border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f61a}.markdown-module-image-form-field input[data-v-9489f41b]::placeholder{color:#9ca3af}[data-v-9489f41b]{background:0 0;border:none;outline:none}[data-v-2f49655e] .tiptap ul{margin:0;padding-left:1.5rem}.markdown-editor-module[data-v-965b9a8c]{flex-direction:row;display:flex}.markdown-editor-module[data-v-965b9a8c] .tiptap{outline:none}.markdown-editor-module .markdown-editor-module-content[data-v-965b9a8c]{outline:none;width:100%}.markdown-editor-module .markdown-editor-module-controls[data-v-965b9a8c]{visibility:hidden;min-width:5rem;max-width:5rem}.markdown-editor-module[data-v-965b9a8c]:hover{background:#9e95950d}.markdown-editor-module:hover .markdown-editor-module-controls[data-v-965b9a8c],.markdown-editor-module.is-focused .markdown-editor-module-controls[data-v-965b9a8c]{visibility:visible}.markdown-editor-module .markdown-editor-module-content-focused[data-v-965b9a8c]{background-color:#9e95950d}.markdown-editor[data-v-1f5fcb46]{padding-left:6rem}.markdown-editor[data-v-1f5fcb46] p{margin:.5rem 0}.markdown-editor[data-v-1f5fcb46] strong,.markdown-editor[data-v-1f5fcb46] b{font-weight:700}.markdown-editor[data-v-1f5fcb46] em,.markdown-editor[data-v-1f5fcb46] i{font-style:italic}.markdown-editor[data-v-1f5fcb46] code{color:green;background:#7f7f7f26;border-radius:3px;padding:.1em .3em;font-family:monospace;font-size:.9em}.markdown-editor[data-v-1f5fcb46] h1{margin:0;font-size:2em}.markdown-editor[data-v-1f5fcb46] h2{margin:0;font-size:1.5em}.markdown-editor[data-v-1f5fcb46] h3{margin:0;font-size:1.17em}
1
+ .markdown-editor-context-menu[data-v-6e2e4100]{z-index:1000;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;gap:.25rem;padding:.25rem;display:flex;position:fixed;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.markdown-editor-context-menu-inline-item[data-v-7dc94914]{cursor:pointer;color:#374151;background:0 0;border:none;border-radius:.375rem;justify-content:center;align-items:center;min-width:2rem;min-height:2rem;padding:.5rem;font-size:.875rem;font-weight:500;transition:all .15s;display:flex}.markdown-editor-context-menu-inline-item[data-v-7dc94914]:hover{background:#f3f4f6}.markdown-editor-context-menu-inline-item.is-active[data-v-7dc94914]{color:#1e40af;background:#dbeafe}.markdown-editor-context-menu-inline-item[data-v-7dc94914]:active{transform:scale(.95)}.markdown-editor-focus-controls[data-v-ce3a9e83]{flex-direction:row;align-items:center;height:100%;display:flex}.markdown-editor-focus-controls .drag-handle[data-v-ce3a9e83]{cursor:grab;-webkit-user-select:none;user-select:none;opacity:.4;padding:0 .2rem;font-size:1rem;line-height:1}.markdown-editor-focus-controls .drag-handle[data-v-ce3a9e83]:active{cursor:grabbing}.markdown-editor-focus-controls .focus-control-btn[data-v-ce3a9e83]{cursor:pointer;opacity:.6;background:0 0;border:none;border-radius:3px;justify-content:center;align-items:center;width:1.4rem;height:1.4rem;padding:0;font-size:.75rem;line-height:1;transition:opacity .1s,background .1s;display:inline-flex}.markdown-editor-focus-controls .focus-control-btn[data-v-ce3a9e83]:hover{opacity:1;background:#00000012}.markdown-editor-context-menu-block-item[data-v-770b13bc]{cursor:pointer;color:#374151;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:.375rem;align-items:center;gap:.5rem;width:100%;padding:.625rem .875rem;font-size:.875rem;font-weight:500;transition:all .15s;display:flex}.markdown-editor-context-menu-block-item[data-v-770b13bc]:hover{background:#f3f4f6}.markdown-editor-context-menu-block-item[data-v-770b13bc]:active{transform:scale(.98)}.markdown-editor-file-context-menu-content[data-v-601706ab]{flex-direction:column;gap:.125rem;min-width:10rem;display:flex}.markdown-editor-modal-overlay[data-v-3e773d7f]{z-index:9999;background:#00000080;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.markdown-editor-modal[data-v-3e773d7f]{background:#fff;border-radius:.75rem;flex-direction:column;width:100%;max-width:32rem;max-height:90vh;display:flex;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.markdown-editor-modal-header[data-v-3e773d7f]{border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;display:flex}.markdown-editor-modal-title[data-v-3e773d7f]{color:#111827;margin:0;font-size:1.125rem;font-weight:600}.markdown-editor-modal-close[data-v-3e773d7f]{color:#6b7280;cursor:pointer;background:0 0;border:none;border-radius:.375rem;justify-content:center;align-items:center;width:2rem;height:2rem;padding:0;font-size:1.75rem;line-height:1;transition:all .15s;display:flex}.markdown-editor-modal-close[data-v-3e773d7f]:hover{color:#111827;background:#f3f4f6}.markdown-editor-modal-body[data-v-3e773d7f]{flex:1;padding:1.5rem;overflow-y:auto}.markdown-editor-modal-footer[data-v-3e773d7f]{border-top:1px solid #e5e7eb;justify-content:flex-end;gap:.75rem;padding:1.25rem 1.5rem;display:flex}.markdown-editor-modal-button[data-v-3e773d7f]{cursor:pointer;border:none;border-radius:.5rem;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;transition:all .15s}.markdown-editor-modal-button[data-v-3e773d7f]:active{transform:scale(.98)}.markdown-editor-modal-button-secondary[data-v-3e773d7f]{color:#374151;background:#f3f4f6}.markdown-editor-modal-button-secondary[data-v-3e773d7f]:hover{background:#e5e7eb}.markdown-editor-modal-button-primary[data-v-3e773d7f]{color:#fff;background:#3b82f6}.markdown-editor-modal-button-primary[data-v-3e773d7f]:hover{background:#2563eb}.markdown-module-file[data-v-e00fd9f4]{cursor:pointer;position:relative}.markdown-module-file[data-v-e00fd9f4]:focus{outline:none}.markdown-module-file-card[data-v-e00fd9f4]{background:#f9fafb;border:1px solid #e5e7eb;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem 1rem;transition:border-color .15s;display:flex}.markdown-module-file-card[data-v-e00fd9f4]:hover{border-color:#3b82f6}.markdown-module-file-card--error[data-v-e00fd9f4]{background:#fef2f2;border-color:#fecaca}.markdown-module-file-card--loading[data-v-e00fd9f4]{cursor:default;background:#f9fafb;border-color:#e5e7eb}.markdown-module-file-icon[data-v-e00fd9f4]{flex-shrink:0;font-size:1.5rem;line-height:1}.markdown-module-file-info[data-v-e00fd9f4]{flex-direction:column;gap:.125rem;min-width:0;display:flex}.markdown-module-file-name[data-v-e00fd9f4]{color:#111827;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:500;text-decoration:none;overflow:hidden}.markdown-module-file-name[data-v-e00fd9f4]:hover{color:#3b82f6;text-decoration:underline}.markdown-module-file-size[data-v-e00fd9f4]{color:#6b7280;font-size:.75rem}.markdown-module-file-error-text[data-v-e00fd9f4]{color:#dc2626;font-size:.75rem}.markdown-module-file-loading-text[data-v-e00fd9f4]{color:#6b7280;font-size:.875rem}.markdown-module-file-retry-btn[data-v-e00fd9f4]{color:#dc2626;cursor:pointer;background:0 0;border:1px solid #fca5a5;border-radius:.375rem;width:fit-content;margin-top:.25rem;padding:.25rem .75rem;font-size:.75rem;font-weight:500;transition:all .15s}.markdown-module-file-retry-btn[data-v-e00fd9f4]:hover{background:#fef2f2;border-color:#f87171}.markdown-module-file-spinner[data-v-e00fd9f4]{border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;flex-shrink:0;width:1.25rem;height:1.25rem;animation:.6s linear infinite markdown-module-file-spin-e00fd9f4}@keyframes markdown-module-file-spin-e00fd9f4{to{transform:rotate(360deg)}}.markdown-module-file-form[data-v-e00fd9f4]{flex-direction:column;gap:1.25rem;display:flex}.markdown-module-file-form-field[data-v-e00fd9f4]{flex-direction:column;gap:.5rem;display:flex}.markdown-module-file-form-field label[data-v-e00fd9f4]{color:#374151;font-size:.875rem;font-weight:500}.markdown-module-file-form-field input[data-v-e00fd9f4]{color:#111827;background:#fff;border:1px solid #d1d5db;border-radius:.5rem;padding:.625rem .875rem;font-size:.875rem;transition:all .15s}.markdown-module-file-form-field input[data-v-e00fd9f4]:focus{border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f61a}.markdown-module-file-form-field input[data-v-e00fd9f4]::placeholder{color:#9ca3af}[data-v-e00fd9f4],[data-v-cf2b20ee],[data-v-6cb21ae4]{background:0 0;border:none;outline:none}.markdown-editor-image-context-menu-content[data-v-01e43c72]{flex-direction:column;gap:.125rem;min-width:10rem;display:flex}.markdown-module-image[data-v-9489f41b]{cursor:pointer;text-align:center;position:relative}.markdown-module-image img[data-v-9489f41b]{max-width:100%;height:auto}.markdown-module-image span[data-v-9489f41b]{color:#6b7280;margin-top:.25rem;font-size:.875rem;display:block}.markdown-module-image-form[data-v-9489f41b]{flex-direction:column;gap:1.25rem;display:flex}.markdown-module-image-form-field[data-v-9489f41b]{flex-direction:column;gap:.5rem;display:flex}.markdown-module-image-form-field label[data-v-9489f41b]{color:#374151;font-size:.875rem;font-weight:500}.markdown-module-image-form-field input[data-v-9489f41b]{color:#111827;background:#fff;border:1px solid #d1d5db;border-radius:.5rem;padding:.625rem .875rem;font-size:.875rem;transition:all .15s}.markdown-module-image-form-field input[data-v-9489f41b]:focus{border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f61a}.markdown-module-image-form-field input[data-v-9489f41b]::placeholder{color:#9ca3af}[data-v-9489f41b]{background:0 0;border:none;outline:none}[data-v-2f49655e] .tiptap ul{margin:0;padding-left:1.5rem}.markdown-editor-module[data-v-965b9a8c]{flex-direction:row;display:flex}.markdown-editor-module[data-v-965b9a8c] .tiptap{outline:none}.markdown-editor-module .markdown-editor-module-content[data-v-965b9a8c]{outline:none;width:100%}.markdown-editor-module .markdown-editor-module-controls[data-v-965b9a8c]{visibility:hidden;min-width:5rem;max-width:5rem}.markdown-editor-module[data-v-965b9a8c]:hover{background:#9e95950d}.markdown-editor-module:hover .markdown-editor-module-controls[data-v-965b9a8c],.markdown-editor-module.is-focused .markdown-editor-module-controls[data-v-965b9a8c]{visibility:visible}.markdown-editor-module .markdown-editor-module-content-focused[data-v-965b9a8c]{background-color:#9e95950d}.markdown-editor[data-v-e7071c84]{padding-left:6rem}.markdown-editor[data-v-e7071c84] p{margin:.5rem 0}.markdown-editor[data-v-e7071c84] strong,.markdown-editor[data-v-e7071c84] b{font-weight:700}.markdown-editor[data-v-e7071c84] em,.markdown-editor[data-v-e7071c84] i{font-style:italic}.markdown-editor[data-v-e7071c84] code{color:green;background:#7f7f7f26;border-radius:3px;padding:.1em .3em;font-family:monospace;font-size:.9em}.markdown-editor[data-v-e7071c84] h1{margin:0;font-size:2em}.markdown-editor[data-v-e7071c84] h2{margin:0;font-size:1.5em}.markdown-editor[data-v-e7071c84] h3{margin:0;font-size:1.17em}.markdown-module-file-render[data-v-c47f1152]{background:#f9fafb;border:1px solid #e5e7eb;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem 1rem;display:flex}.markdown-module-file-render-icon[data-v-c47f1152]{flex-shrink:0;font-size:1.5rem;line-height:1}.markdown-module-file-render-info[data-v-c47f1152]{flex-direction:column;gap:.125rem;min-width:0;display:flex}.markdown-module-file-render-name[data-v-c47f1152]{color:#111827;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;font-weight:500;text-decoration:none;overflow:hidden}.markdown-module-file-render-name[data-v-c47f1152]:hover{color:#3b82f6;text-decoration:underline}.markdown-module-file-render-size[data-v-c47f1152]{color:#6b7280;font-size:.75rem}
2
2
  /*$vite$:1*/