@lapismd/mira-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/CHANGELOG.md +7 -0
- package/LICENSE.md +4 -0
- package/README.md +70 -0
- package/dist/assets/logo.png +0 -0
- package/dist/assets.d.ts +4 -0
- package/dist/features.d.ts +164 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +348 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +179 -0
- package/dist/mira-editor-about-dialog.svelte +28 -0
- package/dist/mira-editor-about-dialog.svelte.d.ts +7 -0
- package/dist/mira-editor-about-dialog.svelte.d.ts.map +1 -0
- package/dist/mira-editor-toolbar.svelte +805 -0
- package/dist/mira-editor-toolbar.svelte.d.ts +6 -0
- package/dist/mira-editor-toolbar.svelte.d.ts.map +1 -0
- package/dist/mira-editor-toolbar.test.d.ts +2 -0
- package/dist/mira-editor-toolbar.test.d.ts.map +1 -0
- package/dist/mira-editor-toolbar.test.js +199 -0
- package/dist/mira-editor.svelte +492 -0
- package/dist/mira-editor.svelte.d.ts +24 -0
- package/dist/mira-editor.svelte.d.ts.map +1 -0
- package/dist/mira-editor.test.d.ts +2 -0
- package/dist/mira-editor.test.d.ts.map +1 -0
- package/dist/mira-editor.test.js +208 -0
- package/dist/styles.css +165 -0
- package/dist/test-setup.d.ts +8 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +31 -0
- package/dist/toolbar-model.d.ts +32 -0
- package/dist/toolbar-model.d.ts.map +1 -0
- package/dist/toolbar-model.js +148 -0
- package/dist/toolbar-model.test.d.ts +2 -0
- package/dist/toolbar-model.test.d.ts.map +1 -0
- package/dist/toolbar-model.test.js +46 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/package.json +56 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { isMiraEditMode, markdownActionForMiraToolbarItem, miraEditorToolbarItemLabels, miraViewToggleLabel, resolveMiraModeAfterSplit, resolveMiraViewModeMenuItems, resolveMiraViewToggleMode, templateForMiraToolbarItem, } from "./toolbar-model";
|
|
3
|
+
describe("toolbar model", () => {
|
|
4
|
+
it("resolves view menu items for edit and preview modes", () => {
|
|
5
|
+
expect(resolveMiraViewModeMenuItems({
|
|
6
|
+
mode: "live-preview",
|
|
7
|
+
modeOptions: ["source", "live-preview", "preview", "split"],
|
|
8
|
+
resolvedDefaultEditMode: "live-preview",
|
|
9
|
+
})).toEqual([
|
|
10
|
+
{ mode: "preview", label: "Reading view", checked: false },
|
|
11
|
+
{ mode: "source", label: "Source mode", checked: false },
|
|
12
|
+
]);
|
|
13
|
+
expect(resolveMiraViewModeMenuItems({
|
|
14
|
+
mode: "preview",
|
|
15
|
+
modeOptions: ["source", "live-preview", "preview", "split"],
|
|
16
|
+
resolvedDefaultEditMode: "live-preview",
|
|
17
|
+
})).toEqual([
|
|
18
|
+
{ mode: "live-preview", label: "Live edit", checked: false },
|
|
19
|
+
{ mode: "source", label: "Source mode", checked: false },
|
|
20
|
+
]);
|
|
21
|
+
});
|
|
22
|
+
it("resolves split fallback and view toggle behavior", () => {
|
|
23
|
+
expect(resolveMiraModeAfterSplit({
|
|
24
|
+
lastNonSplitMode: "source",
|
|
25
|
+
modeOptions: ["source", "live-preview", "preview", "split"],
|
|
26
|
+
resolvedDefaultEditMode: "live-preview",
|
|
27
|
+
})).toBe("source");
|
|
28
|
+
expect(resolveMiraViewToggleMode("preview", "live-preview")).toBe("live-preview");
|
|
29
|
+
expect(resolveMiraViewToggleMode("live-preview", "live-preview")).toBe("preview");
|
|
30
|
+
expect(miraViewToggleLabel("preview")).toBe("Edit");
|
|
31
|
+
});
|
|
32
|
+
it("exposes labels and templates for framework renderers", () => {
|
|
33
|
+
expect(isMiraEditMode("source")).toBe(true);
|
|
34
|
+
expect(miraEditorToolbarItemLabels.bold).toBe("Bold");
|
|
35
|
+
expect(miraEditorToolbarItemLabels.strikethrough).toBe("Strikethrough");
|
|
36
|
+
expect(miraEditorToolbarItemLabels.inlineCode).toBe("Inline code");
|
|
37
|
+
expect(miraEditorToolbarItemLabels.numberedList).toBe("Numbered list");
|
|
38
|
+
expect(templateForMiraToolbarItem("bold")).toBe("**strong**");
|
|
39
|
+
expect(templateForMiraToolbarItem("strikethrough")).toBe("~~strikethrough~~");
|
|
40
|
+
expect(templateForMiraToolbarItem("inlineCode")).toBe("`code`");
|
|
41
|
+
expect(templateForMiraToolbarItem("numberedList")).toBe("1. List item");
|
|
42
|
+
expect(markdownActionForMiraToolbarItem("bold")).toBe("bold");
|
|
43
|
+
expect(markdownActionForMiraToolbarItem("code")).toBeNull();
|
|
44
|
+
expect(templateForMiraToolbarItem("gridTable")).toContain("+========+");
|
|
45
|
+
});
|
|
46
|
+
});
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { MiraEditorSelection, MiraMarkdownActionId } from "@lapismd/mira/core";
|
|
2
|
+
import type { MiraAssetResolver, MiraCommand, MiraExtension, MiraFileAdapter, MiraImageConfig, MiraLinkResolver, MiraMarkdownAuthoringConfig, MiraMode, MiraColorMode, MiraTheme, MiraTemplateSelection } from "@lapismd/mira/extensions";
|
|
3
|
+
import type { MiraEditorFeatureConfigs, MiraEditorToolbarAction, MiraEditorToolbarActionContext, MiraEditorToolbarDefinition, MiraEditorEditMode, MiraFeatureFlags } from "./features";
|
|
4
|
+
import type { MiraFrontmatterConfig, MiraOutlineVariant } from "@lapismd/mira";
|
|
5
|
+
export type { MiraEditorEditMode } from "./features";
|
|
6
|
+
export type { MiraFrontmatterConfig, MiraOutlineVariant } from "@lapismd/mira";
|
|
7
|
+
export type MiraEditorProps = {
|
|
8
|
+
value?: string;
|
|
9
|
+
mode?: MiraMode;
|
|
10
|
+
defaultEditMode?: MiraEditorEditMode;
|
|
11
|
+
readonly?: boolean;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
lineWrapping?: boolean;
|
|
14
|
+
spellcheck?: boolean;
|
|
15
|
+
indentGuides?: boolean;
|
|
16
|
+
indentWithTabs?: boolean;
|
|
17
|
+
indentWidth?: number;
|
|
18
|
+
theme?: MiraTheme;
|
|
19
|
+
colorMode?: MiraColorMode;
|
|
20
|
+
sourcePath?: string;
|
|
21
|
+
class?: string;
|
|
22
|
+
editorClass?: string;
|
|
23
|
+
features?: MiraFeatureFlags;
|
|
24
|
+
featureConfigs?: MiraEditorFeatureConfigs;
|
|
25
|
+
toolbarActions?: MiraEditorToolbarAction[];
|
|
26
|
+
toolbars?: MiraEditorToolbarDefinition[];
|
|
27
|
+
extensions?: MiraExtension[];
|
|
28
|
+
linkResolver?: MiraLinkResolver;
|
|
29
|
+
assetResolver?: MiraAssetResolver;
|
|
30
|
+
fileAdapter?: MiraFileAdapter;
|
|
31
|
+
imageConfig?: MiraImageConfig;
|
|
32
|
+
authoring?: MiraMarkdownAuthoringConfig;
|
|
33
|
+
frontmatterOpen?: boolean;
|
|
34
|
+
frontmatterConfig?: MiraFrontmatterConfig;
|
|
35
|
+
headingIds?: boolean;
|
|
36
|
+
headingIdPrefix?: string;
|
|
37
|
+
htmlPolicy?: "trusted" | "safe";
|
|
38
|
+
emoji?: boolean;
|
|
39
|
+
outline?: boolean;
|
|
40
|
+
outlineVariant?: MiraOutlineVariant;
|
|
41
|
+
onChange?: (value: string) => void;
|
|
42
|
+
onModeChange?: (mode: MiraMode) => void;
|
|
43
|
+
onReadonlyChange?: (readonly: boolean) => void;
|
|
44
|
+
onIndentGuidesChange?: (enabled: boolean) => void;
|
|
45
|
+
onIndentWidthChange?: (width: number) => void;
|
|
46
|
+
onIndentWithTabsChange?: (enabled: boolean) => void;
|
|
47
|
+
onFrontmatterChange?: (nextYaml: string, nextValue: string) => void;
|
|
48
|
+
};
|
|
49
|
+
export type MiraEditorToolbarProps = {
|
|
50
|
+
value?: string;
|
|
51
|
+
mode?: MiraMode;
|
|
52
|
+
defaultEditMode?: MiraEditorEditMode;
|
|
53
|
+
readonly?: boolean;
|
|
54
|
+
class?: string;
|
|
55
|
+
features?: MiraFeatureFlags;
|
|
56
|
+
featureConfigs?: MiraEditorFeatureConfigs;
|
|
57
|
+
toolbarActions?: MiraEditorToolbarAction[];
|
|
58
|
+
toolbars?: MiraEditorToolbarDefinition[];
|
|
59
|
+
modeOptions?: MiraMode[];
|
|
60
|
+
showModeSwitch?: boolean;
|
|
61
|
+
indentGuides?: boolean;
|
|
62
|
+
indentWithTabs?: boolean;
|
|
63
|
+
indentWidth?: number;
|
|
64
|
+
context?: MiraEditorToolbarActionContext;
|
|
65
|
+
onModeChange?: (mode: MiraMode) => void;
|
|
66
|
+
onInsertMarkdown?: (markdown: string) => void;
|
|
67
|
+
onInsertImage?: () => void;
|
|
68
|
+
onIndentGuidesChange?: (enabled: boolean) => void;
|
|
69
|
+
onIndentWidthChange?: (width: number) => void;
|
|
70
|
+
onIndentWithTabsChange?: (enabled: boolean) => void;
|
|
71
|
+
};
|
|
72
|
+
export type MiraEditorHandle = {
|
|
73
|
+
applyMarkdownAction: (action: MiraMarkdownActionId) => boolean;
|
|
74
|
+
executeCommand: (commandId: string) => boolean;
|
|
75
|
+
focus: () => void;
|
|
76
|
+
getCommands: () => readonly MiraCommand[];
|
|
77
|
+
getMarkdown: () => string;
|
|
78
|
+
getMode: () => MiraMode;
|
|
79
|
+
getSelection: () => MiraEditorSelection | null;
|
|
80
|
+
insertImage: () => void;
|
|
81
|
+
insertMarkdown: (markdown: string, selection?: MiraTemplateSelection) => void;
|
|
82
|
+
isCommandEnabled: (commandId: string) => boolean;
|
|
83
|
+
setMarkdown: (markdown: string) => void;
|
|
84
|
+
setMode: (mode: MiraMode) => void;
|
|
85
|
+
setReadonly: (readonly: boolean) => void;
|
|
86
|
+
setSelection: (selection: MiraEditorSelection) => void;
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,UAAU,CAAC"}
|
package/dist/version.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lapismd/mira-editor",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Batteries-included Svelte Markdown editor, toolbar, features, and default styling for Mira.",
|
|
5
|
+
"author": "Steve Juma <help@lapis.md>",
|
|
6
|
+
"license": "AGPL-3.0-or-later",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/lapismd/mira-mde.git",
|
|
10
|
+
"directory": "packages/mira-editor"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"sideEffects": [
|
|
14
|
+
"*.css"
|
|
15
|
+
],
|
|
16
|
+
"svelte": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"files": [
|
|
19
|
+
"CHANGELOG.md",
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"svelte": "./dist/index.js",
|
|
26
|
+
"import": "./dist/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./styles.css": "./dist/styles.css"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@lucide/svelte": "^0.525.0",
|
|
32
|
+
"@lapismd/mira": "~0.0.1",
|
|
33
|
+
"@lapismd/mira-plugin-mermaid": "~0.0.1"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"svelte": "^5.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
|
40
|
+
"svelte": "^5.46.1",
|
|
41
|
+
"vitest": "^4.1.0"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public",
|
|
45
|
+
"registry": "https://registry.npmjs.org"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "svelte-package --input src --output dist && publint",
|
|
49
|
+
"check": "pnpm check:format && pnpm check:svelte && pnpm check:types",
|
|
50
|
+
"check:format": "prettier --ignore-path ../../.prettierignore . --check",
|
|
51
|
+
"check:types": "tsc -p tsconfig.json --noEmit",
|
|
52
|
+
"check:svelte": "svelte-check --tsconfig tsconfig.json --fail-on-warnings",
|
|
53
|
+
"lint": "eslint src --ext .ts",
|
|
54
|
+
"test": "vitest run"
|
|
55
|
+
}
|
|
56
|
+
}
|