notra-editor 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/code-block-view/code-block-shell.cjs +41 -0
- package/dist/components/code-block-view/code-block-shell.cjs.map +1 -0
- package/dist/components/code-block-view/code-block-shell.d.cts +11 -0
- package/dist/components/code-block-view/code-block-shell.d.ts +11 -0
- package/dist/components/code-block-view/code-block-shell.mjs +17 -0
- package/dist/components/code-block-view/code-block-shell.mjs.map +1 -0
- package/dist/components/{code-block-view.cjs → code-block-view/code-block-view.cjs} +16 -8
- package/dist/components/code-block-view/code-block-view.cjs.map +1 -0
- package/dist/components/code-block-view/code-block-view.d.cts +6 -0
- package/dist/components/code-block-view/code-block-view.d.ts +6 -0
- package/dist/components/code-block-view/code-block-view.mjs +26 -0
- package/dist/components/code-block-view/code-block-view.mjs.map +1 -0
- package/dist/components/code-block-view/language-select.cjs +91 -0
- package/dist/components/code-block-view/language-select.cjs.map +1 -0
- package/dist/components/code-block-view/language-select.d.cts +11 -0
- package/dist/components/code-block-view/language-select.d.ts +11 -0
- package/dist/components/code-block-view/language-select.mjs +74 -0
- package/dist/components/code-block-view/language-select.mjs.map +1 -0
- package/dist/components/image-popover/image-popover.cjs +161 -0
- package/dist/components/image-popover/image-popover.cjs.map +1 -0
- package/dist/components/image-popover/image-popover.d.cts +9 -0
- package/dist/components/image-popover/image-popover.d.ts +9 -0
- package/dist/components/image-popover/image-popover.mjs +137 -0
- package/dist/components/image-popover/image-popover.mjs.map +1 -0
- package/dist/components/image-popover/use-image-popover.cjs +88 -0
- package/dist/components/image-popover/use-image-popover.cjs.map +1 -0
- package/dist/components/image-popover/use-image-popover.d.cts +19 -0
- package/dist/components/image-popover/use-image-popover.d.ts +19 -0
- package/dist/components/image-popover/use-image-popover.mjs +64 -0
- package/dist/components/image-popover/use-image-popover.mjs.map +1 -0
- package/dist/components/link-popover/link-popover.cjs +12 -3
- package/dist/components/link-popover/link-popover.cjs.map +1 -1
- package/dist/components/link-popover/link-popover.mjs +12 -3
- package/dist/components/link-popover/link-popover.mjs.map +1 -1
- package/dist/components/link-popover/use-link-popover.cjs +17 -2
- package/dist/components/link-popover/use-link-popover.cjs.map +1 -1
- package/dist/components/link-popover/use-link-popover.d.cts +1 -0
- package/dist/components/link-popover/use-link-popover.d.ts +1 -0
- package/dist/components/link-popover/use-link-popover.mjs +17 -2
- package/dist/components/link-popover/use-link-popover.mjs.map +1 -1
- package/dist/components/ui/command.cjs +144 -0
- package/dist/components/ui/command.cjs.map +1 -0
- package/dist/components/ui/command.d.cts +12 -0
- package/dist/components/ui/command.d.ts +12 -0
- package/dist/components/ui/command.mjs +115 -0
- package/dist/components/ui/command.mjs.map +1 -0
- package/dist/extensions/code-block.cjs +76 -19
- package/dist/extensions/code-block.cjs.map +1 -1
- package/dist/extensions/code-block.d.cts +7 -3
- package/dist/extensions/code-block.d.ts +7 -3
- package/dist/extensions/code-block.mjs +73 -8
- package/dist/extensions/code-block.mjs.map +1 -1
- package/dist/extensions/editor.cjs +2 -0
- package/dist/extensions/editor.cjs.map +1 -1
- package/dist/extensions/editor.d.cts +4 -3
- package/dist/extensions/editor.d.ts +4 -3
- package/dist/extensions/editor.mjs +2 -0
- package/dist/extensions/editor.mjs.map +1 -1
- package/dist/extensions/index.d.cts +2 -1
- package/dist/extensions/index.d.ts +2 -1
- package/dist/extensions/shared.cjs +8 -2
- package/dist/extensions/shared.cjs.map +1 -1
- package/dist/extensions/shared.d.cts +3 -1
- package/dist/extensions/shared.d.ts +3 -1
- package/dist/extensions/shared.mjs +8 -2
- package/dist/extensions/shared.mjs.map +1 -1
- package/dist/index.cjs +23 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.mjs +18 -1
- package/dist/index.mjs.map +1 -1
- package/dist/lib/highlight-code-to-html.cjs +38 -0
- package/dist/lib/highlight-code-to-html.cjs.map +1 -0
- package/dist/lib/highlight-code-to-html.d.cts +6 -0
- package/dist/lib/highlight-code-to-html.d.ts +6 -0
- package/dist/lib/highlight-code-to-html.mjs +14 -0
- package/dist/lib/highlight-code-to-html.mjs.map +1 -0
- package/dist/lib/languages.cjs +181 -0
- package/dist/lib/languages.cjs.map +1 -0
- package/dist/lib/languages.d.cts +24 -0
- package/dist/lib/languages.d.ts +24 -0
- package/dist/lib/languages.mjs +155 -0
- package/dist/lib/languages.mjs.map +1 -0
- package/dist/notra-editor.cjs +3 -1
- package/dist/notra-editor.cjs.map +1 -1
- package/dist/notra-editor.mjs +3 -1
- package/dist/notra-editor.mjs.map +1 -1
- package/dist/notra-reader.cjs +32 -3
- package/dist/notra-reader.cjs.map +1 -1
- package/dist/notra-reader.d.cts +11 -1
- package/dist/notra-reader.d.ts +11 -1
- package/dist/notra-reader.mjs +32 -3
- package/dist/notra-reader.mjs.map +1 -1
- package/dist/styles/globals.css +112 -0
- package/dist/themes/default/shared.css +150 -5
- package/package.json +6 -1
- package/dist/components/code-block-view.cjs.map +0 -1
- package/dist/components/code-block-view.d.cts +0 -12
- package/dist/components/code-block-view.d.ts +0 -12
- package/dist/components/code-block-view.mjs +0 -17
- package/dist/components/code-block-view.mjs.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface Language {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
/**
|
|
5
|
+
* Aliases recognized by highlight.js for this language. Used by
|
|
6
|
+
* `normalizeLanguage` so the markdown input rule (e.g. ```js + Enter)
|
|
7
|
+
* stores the canonical `value` instead of the raw alias. Only canonical
|
|
8
|
+
* values are listed in this table; an alias that already exists as a
|
|
9
|
+
* canonical `value` (e.g. `html` for `xml`) is intentionally excluded
|
|
10
|
+
* to preserve the existing UI label.
|
|
11
|
+
*/
|
|
12
|
+
aliases?: string[];
|
|
13
|
+
}
|
|
14
|
+
declare const LANGUAGES: Language[];
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a user-supplied language identifier to a canonical LANGUAGES.value.
|
|
17
|
+
* Aliases (e.g. `js`, `ts`, `py`) collapse to their canonical form
|
|
18
|
+
* (`javascript`, `typescript`, `python`); unknown identifiers and canonical
|
|
19
|
+
* values pass through unchanged. Empty / undefined input returns ''.
|
|
20
|
+
*/
|
|
21
|
+
declare function normalizeLanguage(input: string | undefined | null): string;
|
|
22
|
+
declare function getLanguageLabel(value: string | null | undefined): string;
|
|
23
|
+
|
|
24
|
+
export { LANGUAGES, type Language, getLanguageLabel, normalizeLanguage };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface Language {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
/**
|
|
5
|
+
* Aliases recognized by highlight.js for this language. Used by
|
|
6
|
+
* `normalizeLanguage` so the markdown input rule (e.g. ```js + Enter)
|
|
7
|
+
* stores the canonical `value` instead of the raw alias. Only canonical
|
|
8
|
+
* values are listed in this table; an alias that already exists as a
|
|
9
|
+
* canonical `value` (e.g. `html` for `xml`) is intentionally excluded
|
|
10
|
+
* to preserve the existing UI label.
|
|
11
|
+
*/
|
|
12
|
+
aliases?: string[];
|
|
13
|
+
}
|
|
14
|
+
declare const LANGUAGES: Language[];
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a user-supplied language identifier to a canonical LANGUAGES.value.
|
|
17
|
+
* Aliases (e.g. `js`, `ts`, `py`) collapse to their canonical form
|
|
18
|
+
* (`javascript`, `typescript`, `python`); unknown identifiers and canonical
|
|
19
|
+
* values pass through unchanged. Empty / undefined input returns ''.
|
|
20
|
+
*/
|
|
21
|
+
declare function normalizeLanguage(input: string | undefined | null): string;
|
|
22
|
+
declare function getLanguageLabel(value: string | null | undefined): string;
|
|
23
|
+
|
|
24
|
+
export { LANGUAGES, type Language, getLanguageLabel, normalizeLanguage };
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
const LANGUAGES = [
|
|
2
|
+
{ label: "Auto", value: "auto" },
|
|
3
|
+
{ label: "Plain Text", value: "plaintext" },
|
|
4
|
+
{ label: "ABAP", value: "abap" },
|
|
5
|
+
{ label: "Agda", value: "agda" },
|
|
6
|
+
{ label: "Arduino", value: "arduino", aliases: ["ino"] },
|
|
7
|
+
{ label: "ASCII Art", value: "ascii" },
|
|
8
|
+
{ label: "Assembly", value: "x86asm" },
|
|
9
|
+
{ label: "Bash", value: "bash", aliases: ["sh", "zsh"] },
|
|
10
|
+
{ label: "BASIC", value: "basic" },
|
|
11
|
+
{ label: "BNF", value: "bnf" },
|
|
12
|
+
{ label: "C", value: "c", aliases: ["h"] },
|
|
13
|
+
{ label: "C#", value: "csharp", aliases: ["cs", "c#"] },
|
|
14
|
+
{
|
|
15
|
+
label: "C++",
|
|
16
|
+
value: "cpp",
|
|
17
|
+
aliases: ["cc", "c++", "h++", "hpp", "hh", "hxx", "cxx"]
|
|
18
|
+
},
|
|
19
|
+
{ label: "Clojure", value: "clojure", aliases: ["clj", "edn"] },
|
|
20
|
+
{
|
|
21
|
+
label: "CoffeeScript",
|
|
22
|
+
value: "coffeescript",
|
|
23
|
+
aliases: ["coffee", "cson", "iced"]
|
|
24
|
+
},
|
|
25
|
+
{ label: "Coq", value: "coq" },
|
|
26
|
+
{ label: "CSS", value: "css" },
|
|
27
|
+
{ label: "Dart", value: "dart" },
|
|
28
|
+
{ label: "Dhall", value: "dhall" },
|
|
29
|
+
{ label: "Diff", value: "diff", aliases: ["patch"] },
|
|
30
|
+
{ label: "Docker", value: "dockerfile", aliases: ["docker"] },
|
|
31
|
+
{ label: "EBNF", value: "ebnf" },
|
|
32
|
+
{ label: "Elixir", value: "elixir", aliases: ["ex", "exs"] },
|
|
33
|
+
{ label: "Elm", value: "elm" },
|
|
34
|
+
{ label: "Erlang", value: "erlang", aliases: ["erl"] },
|
|
35
|
+
{ label: "F#", value: "fsharp", aliases: ["fs", "f#"] },
|
|
36
|
+
{ label: "Flow", value: "flow" },
|
|
37
|
+
{ label: "Fortran", value: "fortran", aliases: ["f90", "f95"] },
|
|
38
|
+
{ label: "Gherkin", value: "gherkin", aliases: ["feature"] },
|
|
39
|
+
{ label: "GLSL", value: "glsl" },
|
|
40
|
+
{ label: "Go", value: "go", aliases: ["golang"] },
|
|
41
|
+
{ label: "GraphQL", value: "graphql", aliases: ["gql"] },
|
|
42
|
+
{ label: "Groovy", value: "groovy" },
|
|
43
|
+
{ label: "Haskell", value: "haskell", aliases: ["hs"] },
|
|
44
|
+
{ label: "HCL", value: "hcl" },
|
|
45
|
+
{ label: "HTML", value: "html" },
|
|
46
|
+
{ label: "Idris", value: "idris" },
|
|
47
|
+
{ label: "Java", value: "java", aliases: ["jsp"] },
|
|
48
|
+
{
|
|
49
|
+
label: "JavaScript",
|
|
50
|
+
value: "javascript",
|
|
51
|
+
aliases: ["js", "jsx", "mjs", "cjs"]
|
|
52
|
+
},
|
|
53
|
+
{ label: "JSON", value: "json", aliases: ["jsonc"] },
|
|
54
|
+
{ label: "Julia", value: "julia" },
|
|
55
|
+
{ label: "Kotlin", value: "kotlin", aliases: ["kt", "kts"] },
|
|
56
|
+
{ label: "LaTeX", value: "latex", aliases: ["tex"] },
|
|
57
|
+
{ label: "Less", value: "less" },
|
|
58
|
+
{ label: "Lisp", value: "lisp" },
|
|
59
|
+
{ label: "LiveScript", value: "livescript", aliases: ["ls"] },
|
|
60
|
+
{ label: "LLVM IR", value: "llvm" },
|
|
61
|
+
{ label: "Lua", value: "lua", aliases: ["pluto"] },
|
|
62
|
+
{ label: "Makefile", value: "makefile", aliases: ["mk", "mak", "make"] },
|
|
63
|
+
{ label: "Markdown", value: "markdown", aliases: ["md", "mkdown", "mkd"] },
|
|
64
|
+
{ label: "Markup", value: "markup" },
|
|
65
|
+
{ label: "MATLAB", value: "matlab" },
|
|
66
|
+
{ label: "Mathematica", value: "mathematica", aliases: ["mma", "wl"] },
|
|
67
|
+
{ label: "Mermaid", value: "mermaid" },
|
|
68
|
+
{ label: "Nix", value: "nix", aliases: ["nixos"] },
|
|
69
|
+
{ label: "Notion Formula", value: "notion" },
|
|
70
|
+
{
|
|
71
|
+
label: "Objective-C",
|
|
72
|
+
value: "objectivec",
|
|
73
|
+
aliases: ["mm", "objc", "obj-c", "obj-c++", "objective-c++"]
|
|
74
|
+
},
|
|
75
|
+
{ label: "OCaml", value: "ocaml", aliases: ["ml"] },
|
|
76
|
+
{ label: "Pascal", value: "pascal" },
|
|
77
|
+
{ label: "Perl", value: "perl", aliases: ["pl", "pm"] },
|
|
78
|
+
{ label: "PHP", value: "php" },
|
|
79
|
+
{ label: "PowerShell", value: "powershell", aliases: ["pwsh", "ps", "ps1"] },
|
|
80
|
+
{ label: "Prolog", value: "prolog" },
|
|
81
|
+
{ label: "Protocol Buffers", value: "protobuf", aliases: ["proto"] },
|
|
82
|
+
{ label: "PureScript", value: "purescript" },
|
|
83
|
+
{ label: "Python", value: "python", aliases: ["py", "gyp", "ipython"] },
|
|
84
|
+
{ label: "R", value: "r" },
|
|
85
|
+
{ label: "Racket", value: "racket" },
|
|
86
|
+
{ label: "Reason", value: "reasonml", aliases: ["re"] },
|
|
87
|
+
{
|
|
88
|
+
label: "Ruby",
|
|
89
|
+
value: "ruby",
|
|
90
|
+
aliases: ["rb", "gemspec", "podspec", "thor", "irb"]
|
|
91
|
+
},
|
|
92
|
+
{ label: "Rust", value: "rust", aliases: ["rs"] },
|
|
93
|
+
{ label: "Sass", value: "sass" },
|
|
94
|
+
{ label: "Scala", value: "scala" },
|
|
95
|
+
{ label: "Scheme", value: "scheme", aliases: ["scm"] },
|
|
96
|
+
{ label: "SCSS", value: "scss" },
|
|
97
|
+
{ label: "Shell", value: "shell", aliases: ["console", "shellsession"] },
|
|
98
|
+
{ label: "Smalltalk", value: "smalltalk", aliases: ["st"] },
|
|
99
|
+
{ label: "Solidity", value: "solidity" },
|
|
100
|
+
{ label: "SQL", value: "sql" },
|
|
101
|
+
{ label: "Swift", value: "swift" },
|
|
102
|
+
{ label: "TOML", value: "toml" },
|
|
103
|
+
{
|
|
104
|
+
label: "TypeScript",
|
|
105
|
+
value: "typescript",
|
|
106
|
+
aliases: ["ts", "tsx", "mts", "cts"]
|
|
107
|
+
},
|
|
108
|
+
{ label: "VB.Net", value: "vbnet", aliases: ["vb"] },
|
|
109
|
+
{ label: "Verilog", value: "verilog", aliases: ["v", "sv", "svh"] },
|
|
110
|
+
{ label: "VHDL", value: "vhdl" },
|
|
111
|
+
{ label: "Visual Basic", value: "visualbasic" },
|
|
112
|
+
{ label: "WebAssembly", value: "wasm" },
|
|
113
|
+
{
|
|
114
|
+
label: "XML",
|
|
115
|
+
value: "xml",
|
|
116
|
+
// Note: highlight.js also lists "html" here, but `html` is its own
|
|
117
|
+
// canonical entry above; including it would rewrite html → xml.
|
|
118
|
+
aliases: [
|
|
119
|
+
"xhtml",
|
|
120
|
+
"rss",
|
|
121
|
+
"atom",
|
|
122
|
+
"xjb",
|
|
123
|
+
"xsd",
|
|
124
|
+
"xsl",
|
|
125
|
+
"plist",
|
|
126
|
+
"wsf",
|
|
127
|
+
"svg"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
{ label: "YAML", value: "yaml", aliases: ["yml"] }
|
|
131
|
+
];
|
|
132
|
+
const ALIAS_TO_CANONICAL = (() => {
|
|
133
|
+
const map = /* @__PURE__ */ new Map();
|
|
134
|
+
for (const lang of LANGUAGES) {
|
|
135
|
+
for (const alias of lang.aliases ?? []) {
|
|
136
|
+
map.set(alias, lang.value);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return map;
|
|
140
|
+
})();
|
|
141
|
+
function normalizeLanguage(input) {
|
|
142
|
+
if (!input) return "";
|
|
143
|
+
return ALIAS_TO_CANONICAL.get(input) ?? input;
|
|
144
|
+
}
|
|
145
|
+
function getLanguageLabel(value) {
|
|
146
|
+
if (!value) return "Auto";
|
|
147
|
+
const found = LANGUAGES.find((l) => l.value === value);
|
|
148
|
+
return found?.label ?? value;
|
|
149
|
+
}
|
|
150
|
+
export {
|
|
151
|
+
LANGUAGES,
|
|
152
|
+
getLanguageLabel,
|
|
153
|
+
normalizeLanguage
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=languages.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/languages.ts"],"sourcesContent":["export interface Language {\n\tlabel: string;\n\tvalue: string;\n\t/**\n\t * Aliases recognized by highlight.js for this language. Used by\n\t * `normalizeLanguage` so the markdown input rule (e.g. ```js + Enter)\n\t * stores the canonical `value` instead of the raw alias. Only canonical\n\t * values are listed in this table; an alias that already exists as a\n\t * canonical `value` (e.g. `html` for `xml`) is intentionally excluded\n\t * to preserve the existing UI label.\n\t */\n\taliases?: string[];\n}\n\n// Curated set transcribed from demo/notra/components/editor/ui/language-select.tsx.\n// Keep the order: auto and plaintext first, then alphabetical by label.\n// `aliases` mirror the `aliases` field of the corresponding highlight.js\n// language module (highlight.js@11). Entries missing from highlight.js's\n// shipped languages have no aliases.\nexport const LANGUAGES: Language[] = [\n\t{ label: 'Auto', value: 'auto' },\n\t{ label: 'Plain Text', value: 'plaintext' },\n\t{ label: 'ABAP', value: 'abap' },\n\t{ label: 'Agda', value: 'agda' },\n\t{ label: 'Arduino', value: 'arduino', aliases: ['ino'] },\n\t{ label: 'ASCII Art', value: 'ascii' },\n\t{ label: 'Assembly', value: 'x86asm' },\n\t{ label: 'Bash', value: 'bash', aliases: ['sh', 'zsh'] },\n\t{ label: 'BASIC', value: 'basic' },\n\t{ label: 'BNF', value: 'bnf' },\n\t{ label: 'C', value: 'c', aliases: ['h'] },\n\t{ label: 'C#', value: 'csharp', aliases: ['cs', 'c#'] },\n\t{\n\t\tlabel: 'C++',\n\t\tvalue: 'cpp',\n\t\taliases: ['cc', 'c++', 'h++', 'hpp', 'hh', 'hxx', 'cxx']\n\t},\n\t{ label: 'Clojure', value: 'clojure', aliases: ['clj', 'edn'] },\n\t{\n\t\tlabel: 'CoffeeScript',\n\t\tvalue: 'coffeescript',\n\t\taliases: ['coffee', 'cson', 'iced']\n\t},\n\t{ label: 'Coq', value: 'coq' },\n\t{ label: 'CSS', value: 'css' },\n\t{ label: 'Dart', value: 'dart' },\n\t{ label: 'Dhall', value: 'dhall' },\n\t{ label: 'Diff', value: 'diff', aliases: ['patch'] },\n\t{ label: 'Docker', value: 'dockerfile', aliases: ['docker'] },\n\t{ label: 'EBNF', value: 'ebnf' },\n\t{ label: 'Elixir', value: 'elixir', aliases: ['ex', 'exs'] },\n\t{ label: 'Elm', value: 'elm' },\n\t{ label: 'Erlang', value: 'erlang', aliases: ['erl'] },\n\t{ label: 'F#', value: 'fsharp', aliases: ['fs', 'f#'] },\n\t{ label: 'Flow', value: 'flow' },\n\t{ label: 'Fortran', value: 'fortran', aliases: ['f90', 'f95'] },\n\t{ label: 'Gherkin', value: 'gherkin', aliases: ['feature'] },\n\t{ label: 'GLSL', value: 'glsl' },\n\t{ label: 'Go', value: 'go', aliases: ['golang'] },\n\t{ label: 'GraphQL', value: 'graphql', aliases: ['gql'] },\n\t{ label: 'Groovy', value: 'groovy' },\n\t{ label: 'Haskell', value: 'haskell', aliases: ['hs'] },\n\t{ label: 'HCL', value: 'hcl' },\n\t{ label: 'HTML', value: 'html' },\n\t{ label: 'Idris', value: 'idris' },\n\t{ label: 'Java', value: 'java', aliases: ['jsp'] },\n\t{\n\t\tlabel: 'JavaScript',\n\t\tvalue: 'javascript',\n\t\taliases: ['js', 'jsx', 'mjs', 'cjs']\n\t},\n\t{ label: 'JSON', value: 'json', aliases: ['jsonc'] },\n\t{ label: 'Julia', value: 'julia' },\n\t{ label: 'Kotlin', value: 'kotlin', aliases: ['kt', 'kts'] },\n\t{ label: 'LaTeX', value: 'latex', aliases: ['tex'] },\n\t{ label: 'Less', value: 'less' },\n\t{ label: 'Lisp', value: 'lisp' },\n\t{ label: 'LiveScript', value: 'livescript', aliases: ['ls'] },\n\t{ label: 'LLVM IR', value: 'llvm' },\n\t{ label: 'Lua', value: 'lua', aliases: ['pluto'] },\n\t{ label: 'Makefile', value: 'makefile', aliases: ['mk', 'mak', 'make'] },\n\t{ label: 'Markdown', value: 'markdown', aliases: ['md', 'mkdown', 'mkd'] },\n\t{ label: 'Markup', value: 'markup' },\n\t{ label: 'MATLAB', value: 'matlab' },\n\t{ label: 'Mathematica', value: 'mathematica', aliases: ['mma', 'wl'] },\n\t{ label: 'Mermaid', value: 'mermaid' },\n\t{ label: 'Nix', value: 'nix', aliases: ['nixos'] },\n\t{ label: 'Notion Formula', value: 'notion' },\n\t{\n\t\tlabel: 'Objective-C',\n\t\tvalue: 'objectivec',\n\t\taliases: ['mm', 'objc', 'obj-c', 'obj-c++', 'objective-c++']\n\t},\n\t{ label: 'OCaml', value: 'ocaml', aliases: ['ml'] },\n\t{ label: 'Pascal', value: 'pascal' },\n\t{ label: 'Perl', value: 'perl', aliases: ['pl', 'pm'] },\n\t{ label: 'PHP', value: 'php' },\n\t{ label: 'PowerShell', value: 'powershell', aliases: ['pwsh', 'ps', 'ps1'] },\n\t{ label: 'Prolog', value: 'prolog' },\n\t{ label: 'Protocol Buffers', value: 'protobuf', aliases: ['proto'] },\n\t{ label: 'PureScript', value: 'purescript' },\n\t{ label: 'Python', value: 'python', aliases: ['py', 'gyp', 'ipython'] },\n\t{ label: 'R', value: 'r' },\n\t{ label: 'Racket', value: 'racket' },\n\t{ label: 'Reason', value: 'reasonml', aliases: ['re'] },\n\t{\n\t\tlabel: 'Ruby',\n\t\tvalue: 'ruby',\n\t\taliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb']\n\t},\n\t{ label: 'Rust', value: 'rust', aliases: ['rs'] },\n\t{ label: 'Sass', value: 'sass' },\n\t{ label: 'Scala', value: 'scala' },\n\t{ label: 'Scheme', value: 'scheme', aliases: ['scm'] },\n\t{ label: 'SCSS', value: 'scss' },\n\t{ label: 'Shell', value: 'shell', aliases: ['console', 'shellsession'] },\n\t{ label: 'Smalltalk', value: 'smalltalk', aliases: ['st'] },\n\t{ label: 'Solidity', value: 'solidity' },\n\t{ label: 'SQL', value: 'sql' },\n\t{ label: 'Swift', value: 'swift' },\n\t{ label: 'TOML', value: 'toml' },\n\t{\n\t\tlabel: 'TypeScript',\n\t\tvalue: 'typescript',\n\t\taliases: ['ts', 'tsx', 'mts', 'cts']\n\t},\n\t{ label: 'VB.Net', value: 'vbnet', aliases: ['vb'] },\n\t{ label: 'Verilog', value: 'verilog', aliases: ['v', 'sv', 'svh'] },\n\t{ label: 'VHDL', value: 'vhdl' },\n\t{ label: 'Visual Basic', value: 'visualbasic' },\n\t{ label: 'WebAssembly', value: 'wasm' },\n\t{\n\t\tlabel: 'XML',\n\t\tvalue: 'xml',\n\t\t// Note: highlight.js also lists \"html\" here, but `html` is its own\n\t\t// canonical entry above; including it would rewrite html → xml.\n\t\taliases: [\n\t\t\t'xhtml',\n\t\t\t'rss',\n\t\t\t'atom',\n\t\t\t'xjb',\n\t\t\t'xsd',\n\t\t\t'xsl',\n\t\t\t'plist',\n\t\t\t'wsf',\n\t\t\t'svg'\n\t\t]\n\t},\n\t{ label: 'YAML', value: 'yaml', aliases: ['yml'] }\n];\n\nconst ALIAS_TO_CANONICAL = (() => {\n\tconst map = new Map<string, string>();\n\n\tfor (const lang of LANGUAGES) {\n\t\tfor (const alias of lang.aliases ?? []) {\n\t\t\tmap.set(alias, lang.value);\n\t\t}\n\t}\n\n\treturn map;\n})();\n\n/**\n * Resolve a user-supplied language identifier to a canonical LANGUAGES.value.\n * Aliases (e.g. `js`, `ts`, `py`) collapse to their canonical form\n * (`javascript`, `typescript`, `python`); unknown identifiers and canonical\n * values pass through unchanged. Empty / undefined input returns ''.\n */\nexport function normalizeLanguage(input: string | undefined | null): string {\n\tif (!input) return '';\n\n\treturn ALIAS_TO_CANONICAL.get(input) ?? input;\n}\n\nexport function getLanguageLabel(value: string | null | undefined): string {\n\tif (!value) return 'Auto';\n\n\tconst found = LANGUAGES.find((l) => l.value === value);\n\n\treturn found?.label ?? value;\n}\n"],"mappings":"AAmBO,MAAM,YAAwB;AAAA,EACpC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,cAAc,OAAO,YAAY;AAAA,EAC1C,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,KAAK,EAAE;AAAA,EACvD,EAAE,OAAO,aAAa,OAAO,QAAQ;AAAA,EACrC,EAAE,OAAO,YAAY,OAAO,SAAS;AAAA,EACrC,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,MAAM,KAAK,EAAE;AAAA,EACvD,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,KAAK,OAAO,KAAK,SAAS,CAAC,GAAG,EAAE;AAAA,EACzC,EAAE,OAAO,MAAM,OAAO,UAAU,SAAS,CAAC,MAAM,IAAI,EAAE;AAAA,EACtD;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK;AAAA,EACxD;AAAA,EACA,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,OAAO,KAAK,EAAE;AAAA,EAC9D;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,UAAU,QAAQ,MAAM;AAAA,EACnC;AAAA,EACA,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,OAAO,EAAE;AAAA,EACnD,EAAE,OAAO,UAAU,OAAO,cAAc,SAAS,CAAC,QAAQ,EAAE;AAAA,EAC5D,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,MAAM,KAAK,EAAE;AAAA,EAC3D,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE;AAAA,EACrD,EAAE,OAAO,MAAM,OAAO,UAAU,SAAS,CAAC,MAAM,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,OAAO,KAAK,EAAE;AAAA,EAC9D,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,SAAS,EAAE;AAAA,EAC3D,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,MAAM,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE;AAAA,EAChD,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,KAAK,EAAE;AAAA,EACvD,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,KAAK,EAAE;AAAA,EACjD;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,OAAO,OAAO,KAAK;AAAA,EACpC;AAAA,EACA,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,OAAO,EAAE;AAAA,EACnD,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,MAAM,KAAK,EAAE;AAAA,EAC3D,EAAE,OAAO,SAAS,OAAO,SAAS,SAAS,CAAC,KAAK,EAAE;AAAA,EACnD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,cAAc,OAAO,cAAc,SAAS,CAAC,IAAI,EAAE;AAAA,EAC5D,EAAE,OAAO,WAAW,OAAO,OAAO;AAAA,EAClC,EAAE,OAAO,OAAO,OAAO,OAAO,SAAS,CAAC,OAAO,EAAE;AAAA,EACjD,EAAE,OAAO,YAAY,OAAO,YAAY,SAAS,CAAC,MAAM,OAAO,MAAM,EAAE;AAAA,EACvE,EAAE,OAAO,YAAY,OAAO,YAAY,SAAS,CAAC,MAAM,UAAU,KAAK,EAAE;AAAA,EACzE,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,eAAe,OAAO,eAAe,SAAS,CAAC,OAAO,IAAI,EAAE;AAAA,EACrE,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,OAAO,OAAO,OAAO,SAAS,CAAC,OAAO,EAAE;AAAA,EACjD,EAAE,OAAO,kBAAkB,OAAO,SAAS;AAAA,EAC3C;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,QAAQ,SAAS,WAAW,eAAe;AAAA,EAC5D;AAAA,EACA,EAAE,OAAO,SAAS,OAAO,SAAS,SAAS,CAAC,IAAI,EAAE;AAAA,EAClD,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,MAAM,IAAI,EAAE;AAAA,EACtD,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,cAAc,OAAO,cAAc,SAAS,CAAC,QAAQ,MAAM,KAAK,EAAE;AAAA,EAC3E,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,oBAAoB,OAAO,YAAY,SAAS,CAAC,OAAO,EAAE;AAAA,EACnE,EAAE,OAAO,cAAc,OAAO,aAAa;AAAA,EAC3C,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,MAAM,OAAO,SAAS,EAAE;AAAA,EACtE,EAAE,OAAO,KAAK,OAAO,IAAI;AAAA,EACzB,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,UAAU,OAAO,YAAY,SAAS,CAAC,IAAI,EAAE;AAAA,EACtD;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,WAAW,WAAW,QAAQ,KAAK;AAAA,EACpD;AAAA,EACA,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,IAAI,EAAE;AAAA,EAChD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,UAAU,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE;AAAA,EACrD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,SAAS,OAAO,SAAS,SAAS,CAAC,WAAW,cAAc,EAAE;AAAA,EACvE,EAAE,OAAO,aAAa,OAAO,aAAa,SAAS,CAAC,IAAI,EAAE;AAAA,EAC1D,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,EAC7B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,OAAO,OAAO,KAAK;AAAA,EACpC;AAAA,EACA,EAAE,OAAO,UAAU,OAAO,SAAS,SAAS,CAAC,IAAI,EAAE;AAAA,EACnD,EAAE,OAAO,WAAW,OAAO,WAAW,SAAS,CAAC,KAAK,MAAM,KAAK,EAAE;AAAA,EAClE,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,gBAAgB,OAAO,cAAc;AAAA,EAC9C,EAAE,OAAO,eAAe,OAAO,OAAO;AAAA,EACtC;AAAA,IACC,OAAO;AAAA,IACP,OAAO;AAAA;AAAA;AAAA,IAGP,SAAS;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,CAAC,KAAK,EAAE;AAClD;AAEA,MAAM,sBAAsB,MAAM;AACjC,QAAM,MAAM,oBAAI,IAAoB;AAEpC,aAAW,QAAQ,WAAW;AAC7B,eAAW,SAAS,KAAK,WAAW,CAAC,GAAG;AACvC,UAAI,IAAI,OAAO,KAAK,KAAK;AAAA,IAC1B;AAAA,EACD;AAEA,SAAO;AACR,GAAG;AAQI,SAAS,kBAAkB,OAA0C;AAC3E,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,mBAAmB,IAAI,KAAK,KAAK;AACzC;AAEO,SAAS,iBAAiB,OAA0C;AAC1E,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,QAAQ,UAAU,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AAErD,SAAO,OAAO,SAAS;AACxB;","names":[]}
|
package/dist/notra-editor.cjs
CHANGED
|
@@ -27,6 +27,7 @@ var import_react = require("@tiptap/react");
|
|
|
27
27
|
var import_blockquote_button = require("./components/blockquote-button/blockquote-button");
|
|
28
28
|
var import_code_block_button = require("./components/code-block-button/code-block-button");
|
|
29
29
|
var import_heading_dropdown_menu = require("./components/heading-dropdown-menu/heading-dropdown-menu");
|
|
30
|
+
var import_image_popover = require("./components/image-popover/image-popover");
|
|
30
31
|
var import_link_popover = require("./components/link-popover/link-popover");
|
|
31
32
|
var import_list_dropdown_menu = require("./components/list-dropdown-menu/list-dropdown-menu");
|
|
32
33
|
var import_mark_button = require("./components/mark-button/mark-button");
|
|
@@ -74,7 +75,8 @@ function NotraEditor({
|
|
|
74
75
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_mark_button.MarkButton, { editor, type: "italic" }),
|
|
75
76
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_mark_button.MarkButton, { editor, type: "strike" }),
|
|
76
77
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_mark_button.MarkButton, { editor, type: "code" }),
|
|
77
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link_popover.LinkPopover, { editor })
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link_popover.LinkPopover, { editor }),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_image_popover.ImagePopover, { editor })
|
|
78
80
|
] }),
|
|
79
81
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_spacer.Spacer, {})
|
|
80
82
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/notra-editor.tsx"],"sourcesContent":["'use client';\n\nimport { EditorContent } from '@tiptap/react';\n\nimport { BlockquoteButton } from './components/blockquote-button/blockquote-button';\nimport { CodeBlockButton } from './components/code-block-button/code-block-button';\nimport { HeadingDropdownMenu } from './components/heading-dropdown-menu/heading-dropdown-menu';\nimport { LinkPopover } from './components/link-popover/link-popover';\nimport { ListDropdownMenu } from './components/list-dropdown-menu/list-dropdown-menu';\nimport { MarkButton } from './components/mark-button/mark-button';\nimport {\n\tToolbar,\n\tToolbarGroup,\n\tToolbarSeparator\n} from './components/toolbar/toolbar';\nimport { Spacer } from './components/ui/spacer';\nimport { UndoRedoButton } from './components/undo-redo-button/undo-redo-button';\nimport { useMarkdownEditor } from './hooks/use-markdown-editor';\n\nexport interface NotraEditorProps {\n\t/** Markdown content (source of truth) */\n\tvalue: string;\n\t/** Called when content changes, receives updated Markdown */\n\tonChange: (value: string) => void;\n\t/** Placeholder text shown when editor is empty */\n\tplaceholder?: string;\n\t/** Disable editing */\n\treadOnly?: boolean;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraEditor({\n\tvalue,\n\tonChange,\n\tplaceholder,\n\treadOnly = false,\n\tclassName\n}: NotraEditorProps) {\n\tconst { editor } = useMarkdownEditor({\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\teditable: !readOnly\n\t});\n\n\tconst classNames = ['notra', 'notra-editor', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div className={classNames}>\n\t\t\t<Toolbar variant=\"fixed\">\n\t\t\t\t<Spacer />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<UndoRedoButton action=\"undo\" editor={editor} />\n\t\t\t\t\t<UndoRedoButton action=\"redo\" editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<HeadingDropdownMenu editor={editor} levels={[1, 2, 3, 4]} />\n\t\t\t\t\t<ListDropdownMenu\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\ttypes={['bulletList', 'orderedList', 'taskList']}\n\t\t\t\t\t/>\n\t\t\t\t\t<BlockquoteButton editor={editor} />\n\t\t\t\t\t<CodeBlockButton editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<MarkButton editor={editor} type=\"bold\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"italic\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"strike\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"code\" />\n\t\t\t\t\t<LinkPopover editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<Spacer />\n\t\t\t</Toolbar>\n\t\t\t<EditorContent className=\"notra-editor-content\" editor={editor} />\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../src/notra-editor.tsx"],"sourcesContent":["'use client';\n\nimport { EditorContent } from '@tiptap/react';\n\nimport { BlockquoteButton } from './components/blockquote-button/blockquote-button';\nimport { CodeBlockButton } from './components/code-block-button/code-block-button';\nimport { HeadingDropdownMenu } from './components/heading-dropdown-menu/heading-dropdown-menu';\nimport { ImagePopover } from './components/image-popover/image-popover';\nimport { LinkPopover } from './components/link-popover/link-popover';\nimport { ListDropdownMenu } from './components/list-dropdown-menu/list-dropdown-menu';\nimport { MarkButton } from './components/mark-button/mark-button';\nimport {\n\tToolbar,\n\tToolbarGroup,\n\tToolbarSeparator\n} from './components/toolbar/toolbar';\nimport { Spacer } from './components/ui/spacer';\nimport { UndoRedoButton } from './components/undo-redo-button/undo-redo-button';\nimport { useMarkdownEditor } from './hooks/use-markdown-editor';\n\nexport interface NotraEditorProps {\n\t/** Markdown content (source of truth) */\n\tvalue: string;\n\t/** Called when content changes, receives updated Markdown */\n\tonChange: (value: string) => void;\n\t/** Placeholder text shown when editor is empty */\n\tplaceholder?: string;\n\t/** Disable editing */\n\treadOnly?: boolean;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraEditor({\n\tvalue,\n\tonChange,\n\tplaceholder,\n\treadOnly = false,\n\tclassName\n}: NotraEditorProps) {\n\tconst { editor } = useMarkdownEditor({\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\teditable: !readOnly\n\t});\n\n\tconst classNames = ['notra', 'notra-editor', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div className={classNames}>\n\t\t\t<Toolbar variant=\"fixed\">\n\t\t\t\t<Spacer />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<UndoRedoButton action=\"undo\" editor={editor} />\n\t\t\t\t\t<UndoRedoButton action=\"redo\" editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<HeadingDropdownMenu editor={editor} levels={[1, 2, 3, 4]} />\n\t\t\t\t\t<ListDropdownMenu\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\ttypes={['bulletList', 'orderedList', 'taskList']}\n\t\t\t\t\t/>\n\t\t\t\t\t<BlockquoteButton editor={editor} />\n\t\t\t\t\t<CodeBlockButton editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<MarkButton editor={editor} type=\"bold\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"italic\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"strike\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"code\" />\n\t\t\t\t\t<LinkPopover editor={editor} />\n\t\t\t\t\t<ImagePopover editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<Spacer />\n\t\t\t</Toolbar>\n\t\t\t<EditorContent className=\"notra-editor-content\" editor={editor} />\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDI;AApDJ,mBAA8B;AAE9B,+BAAiC;AACjC,+BAAgC;AAChC,mCAAoC;AACpC,2BAA6B;AAC7B,0BAA4B;AAC5B,gCAAiC;AACjC,yBAA2B;AAC3B,qBAIO;AACP,oBAAuB;AACvB,8BAA+B;AAC/B,iCAAkC;AAe3B,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACD,GAAqB;AACpB,QAAM,EAAE,OAAO,QAAI,8CAAkB;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,EACZ,CAAC;AAED,QAAM,aAAa,CAAC,SAAS,gBAAgB,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG;AAEV,SACC,6CAAC,SAAI,WAAW,YACf;AAAA,iDAAC,0BAAQ,SAAQ,SAChB;AAAA,kDAAC,wBAAO;AAAA,MACR,6CAAC,+BACA;AAAA,oDAAC,0CAAe,QAAO,QAAO,QAAgB;AAAA,QAC9C,4CAAC,0CAAe,QAAO,QAAO,QAAgB;AAAA,SAC/C;AAAA,MACA,4CAAC,mCAAiB;AAAA,MAClB,6CAAC,+BACA;AAAA,oDAAC,oDAAoB,QAAgB,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAAA,QAC3D;AAAA,UAAC;AAAA;AAAA,YACA;AAAA,YACA,OAAO,CAAC,cAAc,eAAe,UAAU;AAAA;AAAA,QAChD;AAAA,QACA,4CAAC,6CAAiB,QAAgB;AAAA,QAClC,4CAAC,4CAAgB,QAAgB;AAAA,SAClC;AAAA,MACA,4CAAC,mCAAiB;AAAA,MAClB,6CAAC,+BACA;AAAA,oDAAC,iCAAW,QAAgB,MAAK,QAAO;AAAA,QACxC,4CAAC,iCAAW,QAAgB,MAAK,UAAS;AAAA,QAC1C,4CAAC,iCAAW,QAAgB,MAAK,UAAS;AAAA,QAC1C,4CAAC,iCAAW,QAAgB,MAAK,QAAO;AAAA,QACxC,4CAAC,mCAAY,QAAgB;AAAA,QAC7B,4CAAC,qCAAa,QAAgB;AAAA,SAC/B;AAAA,MACA,4CAAC,wBAAO;AAAA,OACT;AAAA,IACA,4CAAC,8BAAc,WAAU,wBAAuB,QAAgB;AAAA,KACjE;AAEF;","names":[]}
|
package/dist/notra-editor.mjs
CHANGED
|
@@ -4,6 +4,7 @@ import { EditorContent } from "@tiptap/react";
|
|
|
4
4
|
import { BlockquoteButton } from "./components/blockquote-button/blockquote-button";
|
|
5
5
|
import { CodeBlockButton } from "./components/code-block-button/code-block-button";
|
|
6
6
|
import { HeadingDropdownMenu } from "./components/heading-dropdown-menu/heading-dropdown-menu";
|
|
7
|
+
import { ImagePopover } from "./components/image-popover/image-popover";
|
|
7
8
|
import { LinkPopover } from "./components/link-popover/link-popover";
|
|
8
9
|
import { ListDropdownMenu } from "./components/list-dropdown-menu/list-dropdown-menu";
|
|
9
10
|
import { MarkButton } from "./components/mark-button/mark-button";
|
|
@@ -55,7 +56,8 @@ function NotraEditor({
|
|
|
55
56
|
/* @__PURE__ */ jsx(MarkButton, { editor, type: "italic" }),
|
|
56
57
|
/* @__PURE__ */ jsx(MarkButton, { editor, type: "strike" }),
|
|
57
58
|
/* @__PURE__ */ jsx(MarkButton, { editor, type: "code" }),
|
|
58
|
-
/* @__PURE__ */ jsx(LinkPopover, { editor })
|
|
59
|
+
/* @__PURE__ */ jsx(LinkPopover, { editor }),
|
|
60
|
+
/* @__PURE__ */ jsx(ImagePopover, { editor })
|
|
59
61
|
] }),
|
|
60
62
|
/* @__PURE__ */ jsx(Spacer, {})
|
|
61
63
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/notra-editor.tsx"],"sourcesContent":["'use client';\n\nimport { EditorContent } from '@tiptap/react';\n\nimport { BlockquoteButton } from './components/blockquote-button/blockquote-button';\nimport { CodeBlockButton } from './components/code-block-button/code-block-button';\nimport { HeadingDropdownMenu } from './components/heading-dropdown-menu/heading-dropdown-menu';\nimport { LinkPopover } from './components/link-popover/link-popover';\nimport { ListDropdownMenu } from './components/list-dropdown-menu/list-dropdown-menu';\nimport { MarkButton } from './components/mark-button/mark-button';\nimport {\n\tToolbar,\n\tToolbarGroup,\n\tToolbarSeparator\n} from './components/toolbar/toolbar';\nimport { Spacer } from './components/ui/spacer';\nimport { UndoRedoButton } from './components/undo-redo-button/undo-redo-button';\nimport { useMarkdownEditor } from './hooks/use-markdown-editor';\n\nexport interface NotraEditorProps {\n\t/** Markdown content (source of truth) */\n\tvalue: string;\n\t/** Called when content changes, receives updated Markdown */\n\tonChange: (value: string) => void;\n\t/** Placeholder text shown when editor is empty */\n\tplaceholder?: string;\n\t/** Disable editing */\n\treadOnly?: boolean;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraEditor({\n\tvalue,\n\tonChange,\n\tplaceholder,\n\treadOnly = false,\n\tclassName\n}: NotraEditorProps) {\n\tconst { editor } = useMarkdownEditor({\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\teditable: !readOnly\n\t});\n\n\tconst classNames = ['notra', 'notra-editor', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div className={classNames}>\n\t\t\t<Toolbar variant=\"fixed\">\n\t\t\t\t<Spacer />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<UndoRedoButton action=\"undo\" editor={editor} />\n\t\t\t\t\t<UndoRedoButton action=\"redo\" editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<HeadingDropdownMenu editor={editor} levels={[1, 2, 3, 4]} />\n\t\t\t\t\t<ListDropdownMenu\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\ttypes={['bulletList', 'orderedList', 'taskList']}\n\t\t\t\t\t/>\n\t\t\t\t\t<BlockquoteButton editor={editor} />\n\t\t\t\t\t<CodeBlockButton editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<MarkButton editor={editor} type=\"bold\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"italic\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"strike\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"code\" />\n\t\t\t\t\t<LinkPopover editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<Spacer />\n\t\t\t</Toolbar>\n\t\t\t<EditorContent className=\"notra-editor-content\" editor={editor} />\n\t\t</div>\n\t);\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/notra-editor.tsx"],"sourcesContent":["'use client';\n\nimport { EditorContent } from '@tiptap/react';\n\nimport { BlockquoteButton } from './components/blockquote-button/blockquote-button';\nimport { CodeBlockButton } from './components/code-block-button/code-block-button';\nimport { HeadingDropdownMenu } from './components/heading-dropdown-menu/heading-dropdown-menu';\nimport { ImagePopover } from './components/image-popover/image-popover';\nimport { LinkPopover } from './components/link-popover/link-popover';\nimport { ListDropdownMenu } from './components/list-dropdown-menu/list-dropdown-menu';\nimport { MarkButton } from './components/mark-button/mark-button';\nimport {\n\tToolbar,\n\tToolbarGroup,\n\tToolbarSeparator\n} from './components/toolbar/toolbar';\nimport { Spacer } from './components/ui/spacer';\nimport { UndoRedoButton } from './components/undo-redo-button/undo-redo-button';\nimport { useMarkdownEditor } from './hooks/use-markdown-editor';\n\nexport interface NotraEditorProps {\n\t/** Markdown content (source of truth) */\n\tvalue: string;\n\t/** Called when content changes, receives updated Markdown */\n\tonChange: (value: string) => void;\n\t/** Placeholder text shown when editor is empty */\n\tplaceholder?: string;\n\t/** Disable editing */\n\treadOnly?: boolean;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraEditor({\n\tvalue,\n\tonChange,\n\tplaceholder,\n\treadOnly = false,\n\tclassName\n}: NotraEditorProps) {\n\tconst { editor } = useMarkdownEditor({\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\teditable: !readOnly\n\t});\n\n\tconst classNames = ['notra', 'notra-editor', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn (\n\t\t<div className={classNames}>\n\t\t\t<Toolbar variant=\"fixed\">\n\t\t\t\t<Spacer />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<UndoRedoButton action=\"undo\" editor={editor} />\n\t\t\t\t\t<UndoRedoButton action=\"redo\" editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<HeadingDropdownMenu editor={editor} levels={[1, 2, 3, 4]} />\n\t\t\t\t\t<ListDropdownMenu\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\ttypes={['bulletList', 'orderedList', 'taskList']}\n\t\t\t\t\t/>\n\t\t\t\t\t<BlockquoteButton editor={editor} />\n\t\t\t\t\t<CodeBlockButton editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<ToolbarSeparator />\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<MarkButton editor={editor} type=\"bold\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"italic\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"strike\" />\n\t\t\t\t\t<MarkButton editor={editor} type=\"code\" />\n\t\t\t\t\t<LinkPopover editor={editor} />\n\t\t\t\t\t<ImagePopover editor={editor} />\n\t\t\t\t</ToolbarGroup>\n\t\t\t\t<Spacer />\n\t\t\t</Toolbar>\n\t\t\t<EditorContent className=\"notra-editor-content\" editor={editor} />\n\t\t</div>\n\t);\n}\n"],"mappings":";AAsDI,cACA,YADA;AApDJ,SAAS,qBAAqB;AAE9B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,kBAAkB;AAC3B;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAe3B,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACD,GAAqB;AACpB,QAAM,EAAE,OAAO,IAAI,kBAAkB;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,EACZ,CAAC;AAED,QAAM,aAAa,CAAC,SAAS,gBAAgB,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG;AAEV,SACC,qBAAC,SAAI,WAAW,YACf;AAAA,yBAAC,WAAQ,SAAQ,SAChB;AAAA,0BAAC,UAAO;AAAA,MACR,qBAAC,gBACA;AAAA,4BAAC,kBAAe,QAAO,QAAO,QAAgB;AAAA,QAC9C,oBAAC,kBAAe,QAAO,QAAO,QAAgB;AAAA,SAC/C;AAAA,MACA,oBAAC,oBAAiB;AAAA,MAClB,qBAAC,gBACA;AAAA,4BAAC,uBAAoB,QAAgB,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG;AAAA,QAC3D;AAAA,UAAC;AAAA;AAAA,YACA;AAAA,YACA,OAAO,CAAC,cAAc,eAAe,UAAU;AAAA;AAAA,QAChD;AAAA,QACA,oBAAC,oBAAiB,QAAgB;AAAA,QAClC,oBAAC,mBAAgB,QAAgB;AAAA,SAClC;AAAA,MACA,oBAAC,oBAAiB;AAAA,MAClB,qBAAC,gBACA;AAAA,4BAAC,cAAW,QAAgB,MAAK,QAAO;AAAA,QACxC,oBAAC,cAAW,QAAgB,MAAK,UAAS;AAAA,QAC1C,oBAAC,cAAW,QAAgB,MAAK,UAAS;AAAA,QAC1C,oBAAC,cAAW,QAAgB,MAAK,QAAO;AAAA,QACxC,oBAAC,eAAY,QAAgB;AAAA,QAC7B,oBAAC,gBAAa,QAAgB;AAAA,SAC/B;AAAA,MACA,oBAAC,UAAO;AAAA,OACT;AAAA,IACA,oBAAC,iBAAc,WAAU,wBAAuB,QAAgB;AAAA,KACjE;AAEF;","names":[]}
|
package/dist/notra-reader.cjs
CHANGED
|
@@ -23,17 +23,46 @@ __export(notra_reader_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(notra_reader_exports);
|
|
24
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
25
|
var import_react = require("@tiptap/static-renderer/pm/react");
|
|
26
|
-
var
|
|
26
|
+
var import_code_block_shell = require("./components/code-block-view/code-block-shell");
|
|
27
27
|
var import_extensions = require("./extensions");
|
|
28
|
+
var import_code_block = require("./extensions/code-block");
|
|
29
|
+
var import_highlight_code_to_html = require("./lib/highlight-code-to-html");
|
|
30
|
+
var import_languages = require("./lib/languages");
|
|
28
31
|
var import_markdown_to_json = require("./utils/markdown-to-json");
|
|
29
|
-
function NotraReader({
|
|
32
|
+
function NotraReader({
|
|
33
|
+
content,
|
|
34
|
+
className,
|
|
35
|
+
lowlight = import_code_block.defaultLowlight
|
|
36
|
+
}) {
|
|
30
37
|
const json = (0, import_markdown_to_json.markdownToJSON)(content);
|
|
31
38
|
const rendered = (0, import_react.renderToReactElement)({
|
|
32
39
|
extensions: import_extensions.sharedExtensions,
|
|
33
40
|
content: json,
|
|
34
41
|
options: {
|
|
35
42
|
nodeMapping: {
|
|
36
|
-
codeBlock: ({ node
|
|
43
|
+
codeBlock: ({ node }) => {
|
|
44
|
+
const language = node.attrs.language ?? "";
|
|
45
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
46
|
+
import_code_block_shell.CodeBlockShell,
|
|
47
|
+
{
|
|
48
|
+
languageSlot: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: (0, import_languages.getLanguageLabel)(language) }),
|
|
49
|
+
value: node.textContent,
|
|
50
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
51
|
+
"code",
|
|
52
|
+
{
|
|
53
|
+
dangerouslySetInnerHTML: {
|
|
54
|
+
__html: (0, import_highlight_code_to_html.highlightCodeToHtml)(
|
|
55
|
+
node.textContent,
|
|
56
|
+
language,
|
|
57
|
+
lowlight
|
|
58
|
+
)
|
|
59
|
+
},
|
|
60
|
+
className: "hljs"
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
37
66
|
}
|
|
38
67
|
}
|
|
39
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/notra-reader.tsx"],"sourcesContent":["import { renderToReactElement } from '@tiptap/static-renderer/pm/react';\n\nimport { CodeBlockShell } from './components/code-block-view';\nimport { sharedExtensions } from './extensions';\nimport { markdownToJSON } from './utils/markdown-to-json';\n\nexport interface NotraReaderProps {\n\t/** Markdown content to render */\n\tcontent: string;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraReader({
|
|
1
|
+
{"version":3,"sources":["../src/notra-reader.tsx"],"sourcesContent":["import { renderToReactElement } from '@tiptap/static-renderer/pm/react';\nimport { type createLowlight } from 'lowlight';\n\nimport { CodeBlockShell } from './components/code-block-view/code-block-shell';\nimport { sharedExtensions } from './extensions';\nimport { defaultLowlight } from './extensions/code-block';\nimport { highlightCodeToHtml } from './lib/highlight-code-to-html';\nimport { getLanguageLabel } from './lib/languages';\nimport { markdownToJSON } from './utils/markdown-to-json';\n\ntype Lowlight = ReturnType<typeof createLowlight>;\n\nexport interface NotraReaderProps {\n\t/** Markdown content to render */\n\tcontent: string;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n\t/**\n\t * Optional lowlight instance for syntax highlighting. Defaults to the same\n\t * `defaultLowlight` (createLowlight(common)) used by `CodeBlockExtension`.\n\t * Pass a custom instance if you configured the editor with\n\t * `createCodeBlockExtension(myLowlight)` and want the reader to highlight\n\t * the same superset of languages.\n\t */\n\tlowlight?: Lowlight;\n}\n\nexport function NotraReader({\n\tcontent,\n\tclassName,\n\tlowlight = defaultLowlight\n}: NotraReaderProps) {\n\tconst json = markdownToJSON(content);\n\n\tconst rendered = renderToReactElement({\n\t\textensions: sharedExtensions,\n\t\tcontent: json,\n\t\toptions: {\n\t\t\tnodeMapping: {\n\t\t\t\tcodeBlock: ({ node }) => {\n\t\t\t\t\tconst language = (node.attrs.language as string) ?? '';\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CodeBlockShell\n\t\t\t\t\t\t\tlanguageSlot={<span>{getLanguageLabel(language)}</span>}\n\t\t\t\t\t\t\tvalue={node.textContent}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<code\n\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t__html: highlightCodeToHtml(\n\t\t\t\t\t\t\t\t\t\tnode.textContent,\n\t\t\t\t\t\t\t\t\t\tlanguage,\n\t\t\t\t\t\t\t\t\t\tlowlight\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"hljs\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</CodeBlockShell>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tconst classNames = ['notra', 'notra-reader', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn <div className={classNames}>{rendered}</div>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4CqB;AA5CrB,mBAAqC;AAGrC,8BAA+B;AAC/B,wBAAiC;AACjC,wBAAgC;AAChC,oCAAoC;AACpC,uBAAiC;AACjC,8BAA+B;AAmBxB,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AACZ,GAAqB;AACpB,QAAM,WAAO,wCAAe,OAAO;AAEnC,QAAM,eAAW,mCAAqB;AAAA,IACrC,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,MACR,aAAa;AAAA,QACZ,WAAW,CAAC,EAAE,KAAK,MAAM;AACxB,gBAAM,WAAY,KAAK,MAAM,YAAuB;AAEpD,iBACC;AAAA,YAAC;AAAA;AAAA,cACA,cAAc,4CAAC,UAAM,iDAAiB,QAAQ,GAAE;AAAA,cAChD,OAAO,KAAK;AAAA,cAEZ;AAAA,gBAAC;AAAA;AAAA,kBACA,yBAAyB;AAAA,oBACxB,YAAQ;AAAA,sBACP,KAAK;AAAA,sBACL;AAAA,sBACA;AAAA,oBACD;AAAA,kBACD;AAAA,kBACA,WAAU;AAAA;AAAA,cACX;AAAA;AAAA,UACD;AAAA,QAEF;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AAED,QAAM,aAAa,CAAC,SAAS,gBAAgB,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG;AAEV,SAAO,4CAAC,SAAI,WAAW,YAAa,oBAAS;AAC9C;","names":[]}
|
package/dist/notra-reader.d.cts
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { createLowlight } from 'lowlight';
|
|
2
3
|
|
|
4
|
+
type Lowlight = ReturnType<typeof createLowlight>;
|
|
3
5
|
interface NotraReaderProps {
|
|
4
6
|
/** Markdown content to render */
|
|
5
7
|
content: string;
|
|
6
8
|
/** Additional CSS class on the wrapper element */
|
|
7
9
|
className?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional lowlight instance for syntax highlighting. Defaults to the same
|
|
12
|
+
* `defaultLowlight` (createLowlight(common)) used by `CodeBlockExtension`.
|
|
13
|
+
* Pass a custom instance if you configured the editor with
|
|
14
|
+
* `createCodeBlockExtension(myLowlight)` and want the reader to highlight
|
|
15
|
+
* the same superset of languages.
|
|
16
|
+
*/
|
|
17
|
+
lowlight?: Lowlight;
|
|
8
18
|
}
|
|
9
|
-
declare function NotraReader({ content, className }: NotraReaderProps): react_jsx_runtime.JSX.Element;
|
|
19
|
+
declare function NotraReader({ content, className, lowlight }: NotraReaderProps): react_jsx_runtime.JSX.Element;
|
|
10
20
|
|
|
11
21
|
export { NotraReader, type NotraReaderProps };
|
package/dist/notra-reader.d.ts
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { createLowlight } from 'lowlight';
|
|
2
3
|
|
|
4
|
+
type Lowlight = ReturnType<typeof createLowlight>;
|
|
3
5
|
interface NotraReaderProps {
|
|
4
6
|
/** Markdown content to render */
|
|
5
7
|
content: string;
|
|
6
8
|
/** Additional CSS class on the wrapper element */
|
|
7
9
|
className?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional lowlight instance for syntax highlighting. Defaults to the same
|
|
12
|
+
* `defaultLowlight` (createLowlight(common)) used by `CodeBlockExtension`.
|
|
13
|
+
* Pass a custom instance if you configured the editor with
|
|
14
|
+
* `createCodeBlockExtension(myLowlight)` and want the reader to highlight
|
|
15
|
+
* the same superset of languages.
|
|
16
|
+
*/
|
|
17
|
+
lowlight?: Lowlight;
|
|
8
18
|
}
|
|
9
|
-
declare function NotraReader({ content, className }: NotraReaderProps): react_jsx_runtime.JSX.Element;
|
|
19
|
+
declare function NotraReader({ content, className, lowlight }: NotraReaderProps): react_jsx_runtime.JSX.Element;
|
|
10
20
|
|
|
11
21
|
export { NotraReader, type NotraReaderProps };
|
package/dist/notra-reader.mjs
CHANGED
|
@@ -1,16 +1,45 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { renderToReactElement } from "@tiptap/static-renderer/pm/react";
|
|
3
|
-
import { CodeBlockShell } from "./components/code-block-view";
|
|
3
|
+
import { CodeBlockShell } from "./components/code-block-view/code-block-shell";
|
|
4
4
|
import { sharedExtensions } from "./extensions";
|
|
5
|
+
import { defaultLowlight } from "./extensions/code-block";
|
|
6
|
+
import { highlightCodeToHtml } from "./lib/highlight-code-to-html";
|
|
7
|
+
import { getLanguageLabel } from "./lib/languages";
|
|
5
8
|
import { markdownToJSON } from "./utils/markdown-to-json";
|
|
6
|
-
function NotraReader({
|
|
9
|
+
function NotraReader({
|
|
10
|
+
content,
|
|
11
|
+
className,
|
|
12
|
+
lowlight = defaultLowlight
|
|
13
|
+
}) {
|
|
7
14
|
const json = markdownToJSON(content);
|
|
8
15
|
const rendered = renderToReactElement({
|
|
9
16
|
extensions: sharedExtensions,
|
|
10
17
|
content: json,
|
|
11
18
|
options: {
|
|
12
19
|
nodeMapping: {
|
|
13
|
-
codeBlock: ({ node
|
|
20
|
+
codeBlock: ({ node }) => {
|
|
21
|
+
const language = node.attrs.language ?? "";
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
CodeBlockShell,
|
|
24
|
+
{
|
|
25
|
+
languageSlot: /* @__PURE__ */ jsx("span", { children: getLanguageLabel(language) }),
|
|
26
|
+
value: node.textContent,
|
|
27
|
+
children: /* @__PURE__ */ jsx(
|
|
28
|
+
"code",
|
|
29
|
+
{
|
|
30
|
+
dangerouslySetInnerHTML: {
|
|
31
|
+
__html: highlightCodeToHtml(
|
|
32
|
+
node.textContent,
|
|
33
|
+
language,
|
|
34
|
+
lowlight
|
|
35
|
+
)
|
|
36
|
+
},
|
|
37
|
+
className: "hljs"
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
14
43
|
}
|
|
15
44
|
}
|
|
16
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/notra-reader.tsx"],"sourcesContent":["import { renderToReactElement } from '@tiptap/static-renderer/pm/react';\n\nimport { CodeBlockShell } from './components/code-block-view';\nimport { sharedExtensions } from './extensions';\nimport { markdownToJSON } from './utils/markdown-to-json';\n\nexport interface NotraReaderProps {\n\t/** Markdown content to render */\n\tcontent: string;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n}\n\nexport function NotraReader({
|
|
1
|
+
{"version":3,"sources":["../src/notra-reader.tsx"],"sourcesContent":["import { renderToReactElement } from '@tiptap/static-renderer/pm/react';\nimport { type createLowlight } from 'lowlight';\n\nimport { CodeBlockShell } from './components/code-block-view/code-block-shell';\nimport { sharedExtensions } from './extensions';\nimport { defaultLowlight } from './extensions/code-block';\nimport { highlightCodeToHtml } from './lib/highlight-code-to-html';\nimport { getLanguageLabel } from './lib/languages';\nimport { markdownToJSON } from './utils/markdown-to-json';\n\ntype Lowlight = ReturnType<typeof createLowlight>;\n\nexport interface NotraReaderProps {\n\t/** Markdown content to render */\n\tcontent: string;\n\t/** Additional CSS class on the wrapper element */\n\tclassName?: string;\n\t/**\n\t * Optional lowlight instance for syntax highlighting. Defaults to the same\n\t * `defaultLowlight` (createLowlight(common)) used by `CodeBlockExtension`.\n\t * Pass a custom instance if you configured the editor with\n\t * `createCodeBlockExtension(myLowlight)` and want the reader to highlight\n\t * the same superset of languages.\n\t */\n\tlowlight?: Lowlight;\n}\n\nexport function NotraReader({\n\tcontent,\n\tclassName,\n\tlowlight = defaultLowlight\n}: NotraReaderProps) {\n\tconst json = markdownToJSON(content);\n\n\tconst rendered = renderToReactElement({\n\t\textensions: sharedExtensions,\n\t\tcontent: json,\n\t\toptions: {\n\t\t\tnodeMapping: {\n\t\t\t\tcodeBlock: ({ node }) => {\n\t\t\t\t\tconst language = (node.attrs.language as string) ?? '';\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<CodeBlockShell\n\t\t\t\t\t\t\tlanguageSlot={<span>{getLanguageLabel(language)}</span>}\n\t\t\t\t\t\t\tvalue={node.textContent}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<code\n\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t__html: highlightCodeToHtml(\n\t\t\t\t\t\t\t\t\t\tnode.textContent,\n\t\t\t\t\t\t\t\t\t\tlanguage,\n\t\t\t\t\t\t\t\t\t\tlowlight\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"hljs\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</CodeBlockShell>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tconst classNames = ['notra', 'notra-reader', className]\n\t\t.filter(Boolean)\n\t\t.join(' ');\n\n\treturn <div className={classNames}>{rendered}</div>;\n}\n"],"mappings":"AA4CqB;AA5CrB,SAAS,4BAA4B;AAGrC,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAmBxB,SAAS,YAAY;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AACZ,GAAqB;AACpB,QAAM,OAAO,eAAe,OAAO;AAEnC,QAAM,WAAW,qBAAqB;AAAA,IACrC,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,MACR,aAAa;AAAA,QACZ,WAAW,CAAC,EAAE,KAAK,MAAM;AACxB,gBAAM,WAAY,KAAK,MAAM,YAAuB;AAEpD,iBACC;AAAA,YAAC;AAAA;AAAA,cACA,cAAc,oBAAC,UAAM,2BAAiB,QAAQ,GAAE;AAAA,cAChD,OAAO,KAAK;AAAA,cAEZ;AAAA,gBAAC;AAAA;AAAA,kBACA,yBAAyB;AAAA,oBACxB,QAAQ;AAAA,sBACP,KAAK;AAAA,sBACL;AAAA,sBACA;AAAA,oBACD;AAAA,kBACD;AAAA,kBACA,WAAU;AAAA;AAAA,cACX;AAAA;AAAA,UACD;AAAA,QAEF;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AAED,QAAM,aAAa,CAAC,SAAS,gBAAgB,SAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG;AAEV,SAAO,oBAAC,SAAI,WAAW,YAAa,oBAAS;AAC9C;","names":[]}
|