@blue-patterns/richtext 0.0.0-stage → 0.7.18
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 +275 -0
- package/LICENSE +22 -0
- package/README.md +88 -2
- package/astryx.integration.mjs +11 -0
- package/blocks/RichTextEditorShowcase.template.mjs +13 -0
- package/blocks/RichTextEditorShowcase.tsx +19 -0
- package/dist/RichTextEditor.d.ts +282 -0
- package/dist/RichTextEditor.d.ts.map +1 -0
- package/dist/RichTextEditor.js +657 -0
- package/dist/RichTextEditorAutoLinkPlugin.d.ts +83 -0
- package/dist/RichTextEditorAutoLinkPlugin.d.ts.map +1 -0
- package/dist/RichTextEditorAutoLinkPlugin.js +99 -0
- package/dist/RichTextEditorToolbar.d.ts +186 -0
- package/dist/RichTextEditorToolbar.d.ts.map +1 -0
- package/dist/RichTextEditorToolbar.js +688 -0
- package/dist/RichTextView.d.ts +92 -0
- package/dist/RichTextView.d.ts.map +1 -0
- package/dist/RichTextView.js +267 -0
- package/dist/codeLanguages.d.ts +14 -0
- package/dist/codeLanguages.d.ts.map +1 -0
- package/dist/codeLanguages.js +34 -0
- package/dist/codeLineTokens.d.ts +53 -0
- package/dist/codeLineTokens.d.ts.map +1 -0
- package/dist/codeLineTokens.js +188 -0
- package/dist/editorNodes.d.ts +8 -0
- package/dist/editorNodes.d.ts.map +1 -0
- package/dist/editorNodes.js +30 -0
- package/dist/editorTheme.d.ts +7 -0
- package/dist/editorTheme.d.ts.map +1 -0
- package/dist/editorTheme.js +328 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/internal/CodeBackspacePlugin.d.ts +2 -0
- package/dist/internal/CodeBackspacePlugin.d.ts.map +1 -0
- package/dist/internal/CodeBackspacePlugin.js +70 -0
- package/dist/internal/CodeBlockHeaderPlugin.d.ts +11 -0
- package/dist/internal/CodeBlockHeaderPlugin.d.ts.map +1 -0
- package/dist/internal/CodeBlockHeaderPlugin.js +204 -0
- package/dist/internal/CodePastePlugin.d.ts +5 -0
- package/dist/internal/CodePastePlugin.d.ts.map +1 -0
- package/dist/internal/CodePastePlugin.js +104 -0
- package/dist/internal/CodeSyntaxPlugin.d.ts +8 -0
- package/dist/internal/CodeSyntaxPlugin.d.ts.map +1 -0
- package/dist/internal/CodeSyntaxPlugin.js +397 -0
- package/dist/internal/CodeTabPlugin.d.ts +2 -0
- package/dist/internal/CodeTabPlugin.d.ts.map +1 -0
- package/dist/internal/CodeTabPlugin.js +256 -0
- package/dist/internal/DisabledLinkGuardPlugin.d.ts +4 -0
- package/dist/internal/DisabledLinkGuardPlugin.d.ts.map +1 -0
- package/dist/internal/DisabledLinkGuardPlugin.js +93 -0
- package/dist/internal/ImageSourceCaretPlugin.d.ts +3 -0
- package/dist/internal/ImageSourceCaretPlugin.d.ts.map +1 -0
- package/dist/internal/ImageSourceCaretPlugin.js +105 -0
- package/dist/internal/ListItemShortcutsPlugin.d.ts +6 -0
- package/dist/internal/ListItemShortcutsPlugin.d.ts.map +1 -0
- package/dist/internal/ListItemShortcutsPlugin.js +314 -0
- package/dist/internal/MarkdownExtensionsPlugin.d.ts +17 -0
- package/dist/internal/MarkdownExtensionsPlugin.d.ts.map +1 -0
- package/dist/internal/MarkdownExtensionsPlugin.js +185 -0
- package/dist/internal/SelectAllScopePlugin.d.ts +2 -0
- package/dist/internal/SelectAllScopePlugin.d.ts.map +1 -0
- package/dist/internal/SelectAllScopePlugin.js +67 -0
- package/dist/internal/TableColumnFloorPlugin.d.ts +12 -0
- package/dist/internal/TableColumnFloorPlugin.d.ts.map +1 -0
- package/dist/internal/TableColumnFloorPlugin.js +84 -0
- package/dist/internal/TablePastePlugin.d.ts +9 -0
- package/dist/internal/TablePastePlugin.d.ts.map +1 -0
- package/dist/internal/TablePastePlugin.js +183 -0
- package/dist/internal/TableScrollRegionPlugin.d.ts +9 -0
- package/dist/internal/TableScrollRegionPlugin.d.ts.map +1 -0
- package/dist/internal/TableScrollRegionPlugin.js +95 -0
- package/dist/internal/TaskCheckboxPlugin.d.ts +7 -0
- package/dist/internal/TaskCheckboxPlugin.d.ts.map +1 -0
- package/dist/internal/TaskCheckboxPlugin.js +193 -0
- package/dist/internal/ToolbarLinkPopover.d.ts +74 -0
- package/dist/internal/ToolbarLinkPopover.d.ts.map +1 -0
- package/dist/internal/ToolbarLinkPopover.js +292 -0
- package/dist/linkEditing.d.ts +6 -0
- package/dist/linkEditing.d.ts.map +1 -0
- package/dist/linkEditing.js +20 -0
- package/dist/linkForm.d.ts +28 -0
- package/dist/linkForm.d.ts.map +1 -0
- package/dist/linkForm.js +137 -0
- package/dist/linkUtils.d.ts +27 -0
- package/dist/linkUtils.d.ts.map +1 -0
- package/dist/linkUtils.js +101 -0
- package/dist/markdown.d.ts +17 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +17 -0
- package/dist/markdownCharacterReferences.d.ts +135 -0
- package/dist/markdownCharacterReferences.d.ts.map +1 -0
- package/dist/markdownCharacterReferences.js +1127 -0
- package/dist/markdownCodeFence.d.ts +4 -0
- package/dist/markdownCodeFence.d.ts.map +1 -0
- package/dist/markdownCodeFence.js +167 -0
- package/dist/markdownExtensionNode.d.ts +88 -0
- package/dist/markdownExtensionNode.d.ts.map +1 -0
- package/dist/markdownExtensionNode.js +248 -0
- package/dist/markdownExtensions.d.ts +115 -0
- package/dist/markdownExtensions.d.ts.map +1 -0
- package/dist/markdownExtensions.js +392 -0
- package/dist/markdownHardLineBreak.d.ts +25 -0
- package/dist/markdownHardLineBreak.d.ts.map +1 -0
- package/dist/markdownHardLineBreak.js +59 -0
- package/dist/markdownHeading.d.ts +20 -0
- package/dist/markdownHeading.d.ts.map +1 -0
- package/dist/markdownHeading.js +30 -0
- package/dist/markdownLink.d.ts +5 -0
- package/dist/markdownLink.d.ts.map +1 -0
- package/dist/markdownLink.js +80 -0
- package/dist/markdownListExport.d.ts +3 -0
- package/dist/markdownListExport.d.ts.map +1 -0
- package/dist/markdownListExport.js +68 -0
- package/dist/markdownListIndentation.d.ts +8 -0
- package/dist/markdownListIndentation.d.ts.map +1 -0
- package/dist/markdownListIndentation.js +101 -0
- package/dist/markdownOrderedList.d.ts +3 -0
- package/dist/markdownOrderedList.d.ts.map +1 -0
- package/dist/markdownOrderedList.js +51 -0
- package/dist/markdownQuote.d.ts +22 -0
- package/dist/markdownQuote.d.ts.map +1 -0
- package/dist/markdownQuote.js +32 -0
- package/dist/markdownSerializers.d.ts +49 -0
- package/dist/markdownSerializers.d.ts.map +1 -0
- package/dist/markdownSerializers.js +83 -0
- package/dist/markdownSource.d.ts +71 -0
- package/dist/markdownSource.d.ts.map +1 -0
- package/dist/markdownSource.js +804 -0
- package/dist/markdownSpaceRuns.d.ts +24 -0
- package/dist/markdownSpaceRuns.d.ts.map +1 -0
- package/dist/markdownSpaceRuns.js +147 -0
- package/dist/markdownTable.d.ts +35 -0
- package/dist/markdownTable.d.ts.map +1 -0
- package/dist/markdownTable.js +227 -0
- package/dist/markdownTaskList.d.ts +48 -0
- package/dist/markdownTaskList.d.ts.map +1 -0
- package/dist/markdownTaskList.js +166 -0
- package/dist/markdownThematicBreak.d.ts +3 -0
- package/dist/markdownThematicBreak.d.ts.map +1 -0
- package/dist/markdownThematicBreak.js +55 -0
- package/dist/privateAttributes/layerPortalBoundary.stylex.d.ts +12 -0
- package/dist/privateAttributes/layerPortalBoundary.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/layerPortalBoundary.stylex.js +16 -0
- package/dist/richtext.css +213 -0
- package/dist/textSemantics.d.ts +3 -0
- package/dist/textSemantics.d.ts.map +1 -0
- package/dist/textSemantics.js +87 -0
- package/package.json +158 -3
- package/src/RichTextEditor.doc.mjs +308 -0
- package/src/RichTextEditor.tsx +1109 -0
- package/src/RichTextEditorAutoLinkPlugin.doc.mjs +43 -0
- package/src/RichTextEditorAutoLinkPlugin.tsx +126 -0
- package/src/RichTextEditorToolbar.doc.mjs +92 -0
- package/src/RichTextEditorToolbar.tsx +871 -0
- package/src/RichTextView.doc.mjs +101 -0
- package/src/RichTextView.tsx +351 -0
- package/src/codeLanguages.ts +42 -0
- package/src/codeLineTokens.ts +241 -0
- package/src/doc-mjs.d.ts +23 -0
- package/src/editorNodes.ts +44 -0
- package/src/editorTheme.ts +550 -0
- package/src/index.ts +59 -0
- package/src/internal/CodeBackspacePlugin.tsx +96 -0
- package/src/internal/CodeBlockHeaderPlugin.tsx +282 -0
- package/src/internal/CodePastePlugin.tsx +144 -0
- package/src/internal/CodeSyntaxPlugin.tsx +493 -0
- package/src/internal/CodeTabPlugin.tsx +298 -0
- package/src/internal/DisabledLinkGuardPlugin.tsx +93 -0
- package/src/internal/ImageSourceCaretPlugin.tsx +159 -0
- package/src/internal/ListItemShortcutsPlugin.tsx +404 -0
- package/src/internal/MarkdownExtensionsPlugin.tsx +289 -0
- package/src/internal/SelectAllScopePlugin.tsx +86 -0
- package/src/internal/TableColumnFloorPlugin.tsx +99 -0
- package/src/internal/TablePastePlugin.tsx +223 -0
- package/src/internal/TableScrollRegionPlugin.tsx +107 -0
- package/src/internal/TaskCheckboxPlugin.tsx +246 -0
- package/src/internal/ToolbarLinkPopover.tsx +392 -0
- package/src/linkEditing.ts +20 -0
- package/src/linkForm.tsx +156 -0
- package/src/linkUtils.ts +106 -0
- package/src/markdown.ts +25 -0
- package/src/markdownCharacterReferences.ts +1137 -0
- package/src/markdownCodeFence.ts +216 -0
- package/src/markdownExtensionNode.ts +339 -0
- package/src/markdownExtensions.ts +496 -0
- package/src/markdownHardLineBreak.ts +73 -0
- package/src/markdownHeading.ts +33 -0
- package/src/markdownLink.ts +86 -0
- package/src/markdownListExport.ts +85 -0
- package/src/markdownListIndentation.ts +105 -0
- package/src/markdownOrderedList.ts +60 -0
- package/src/markdownQuote.ts +35 -0
- package/src/markdownSerializers.ts +108 -0
- package/src/markdownSource.ts +1045 -0
- package/src/markdownSpaceRuns.ts +164 -0
- package/src/markdownTable.ts +309 -0
- package/src/markdownTaskList.ts +222 -0
- package/src/markdownThematicBreak.ts +66 -0
- package/src/privateAttributes/layerPortalBoundary.stylex.ts +18 -0
- package/src/textSemantics.ts +104 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file editorNodes.ts
|
|
5
|
+
* @input Imports the default Lexical node classes registered by the editor.
|
|
6
|
+
* @output Exports DEFAULT_NODES — the base OSS node set.
|
|
7
|
+
* @position Shared by RichTextEditor.tsx (editor config) and
|
|
8
|
+
* markdownSerializers.ts (headless conversion), so both register the same
|
|
9
|
+
* nodes and Markdown round-trips consistently.
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When the default node set changes, both consumers pick it up here.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { ListNode, ListItemNode } from '@lexical/list';
|
|
15
|
+
import { HeadingNode, QuoteNode } from '@lexical/rich-text';
|
|
16
|
+
import { LinkNode, AutoLinkNode } from '@lexical/link';
|
|
17
|
+
import { CodeNode, CodeHighlightNode } from '@lexical/code';
|
|
18
|
+
import { TableNode, TableRowNode, TableCellNode } from '@lexical/table';
|
|
19
|
+
import { HorizontalRuleNode } from '@lexical/extension';
|
|
20
|
+
import { RichTextExtensionNode } from "./markdownExtensionNode.js";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The default OSS node set registered with the editor: headings, quotes,
|
|
24
|
+
* lists, links, code, and tables. Extend via the `nodes` prop / option rather
|
|
25
|
+
* than editing this list.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_NODES = [HeadingNode, QuoteNode, ListNode, ListItemNode, LinkNode, AutoLinkNode, CodeNode, CodeHighlightNode, TableNode, TableRowNode, TableCellNode, HorizontalRuleNode,
|
|
28
|
+
// Markdown plugin nodes (spec:AST-064): registered everywhere so stored
|
|
29
|
+
// state that holds them always loads.
|
|
30
|
+
RichTextExtensionNode];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EditorThemeClasses } from 'lexical';
|
|
2
|
+
/**
|
|
3
|
+
* Builds the Lexical EditorThemeClasses object. Lexical expects plain
|
|
4
|
+
* class-name strings, which `stylex.props(...).className` yields.
|
|
5
|
+
*/
|
|
6
|
+
export declare function sharedEditorTheme(): EditorThemeClasses;
|
|
7
|
+
//# sourceMappingURL=editorTheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorTheme.d.ts","sourceRoot":"","sources":["../src/editorTheme.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAschD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAgEtD"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file editorTheme.ts
|
|
5
|
+
* @input Uses StyleX + Astryx design tokens
|
|
6
|
+
* @output Exports sharedEditorTheme(), which builds a Lexical EditorThemeClasses
|
|
7
|
+
* object mapping Lexical's theme slots to StyleX-generated class names, with
|
|
8
|
+
* document blocks styled like core Markdown (spec:AST-061 FR2–FR4).
|
|
9
|
+
* @position Shared by RichTextEditor.tsx and RichTextView.tsx so editor and
|
|
10
|
+
* read-only view render identically.
|
|
11
|
+
*
|
|
12
|
+
* SYNC: When modified, keep RichTextEditor.tsx and RichTextView.tsx in sync.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import * as stylex from '@stylexjs/stylex';
|
|
16
|
+
import '@blue-patterns/core/theme/tokens.stylex';
|
|
17
|
+
import { colorVars, spacingVars, radiusVars, typographyVars, typeScaleVars, fontWeightVars, borderVars, focusVars, sizeVars } from '@blue-patterns/core/theme/tokens.stylex';
|
|
18
|
+
import { CODE_SYNTAX_CLASS } from "./internal/CodeSyntaxPlugin.js";
|
|
19
|
+
// Document blocks follow core Markdown's typography, spacing, and measure
|
|
20
|
+
// (spec:AST-061 FR2–FR4): type-scale tokens for text, one block spacing table
|
|
21
|
+
// with no margin before the first block or after the last, and prose capped
|
|
22
|
+
// at Markdown's default content width while code and tables span the editor.
|
|
23
|
+
const PROSE_MEASURE = '680px';
|
|
24
|
+
|
|
25
|
+
// Block margins wrap their spacing tokens in calc(). The value is unique to
|
|
26
|
+
// these rules, so its atomic class never matches a margin declared by other
|
|
27
|
+
// code; a stylesheet in a later cascade layer therefore cannot outrank the
|
|
28
|
+
// :first-child and :last-child rules that remove the outer margins.
|
|
29
|
+
const MAJOR_HEADING_BEFORE = `calc(${spacingVars['--spacing-6']})`;
|
|
30
|
+
const MAJOR_HEADING_AFTER = `calc(${spacingVars['--spacing-3']})`;
|
|
31
|
+
const MINOR_HEADING_BEFORE = `calc(${spacingVars['--spacing-4']})`;
|
|
32
|
+
const MINOR_HEADING_AFTER = `calc(${spacingVars['--spacing-2']})`;
|
|
33
|
+
const TEXT_BLOCK_SPACE = `calc(${spacingVars['--spacing-3']})`;
|
|
34
|
+
const WIDE_BLOCK_SPACE = `calc(${spacingVars['--spacing-4']})`;
|
|
35
|
+
const LIST_ITEM_SPACE = `calc(${spacingVars['--spacing-1']})`;
|
|
36
|
+
const TASK_BOX_SIZE = '20px';
|
|
37
|
+
const LIST_ROW_GAP = `calc(${spacingVars['--spacing-0-5']})`;
|
|
38
|
+
const LIST_ROW_FLUSH = `calc(${spacingVars['--spacing-0']})`;
|
|
39
|
+
const NESTED_LIST_SPACE = `calc(${spacingVars['--spacing-2']})`;
|
|
40
|
+
const RULE_SPACE = `calc(${spacingVars['--spacing-6']})`;
|
|
41
|
+
const CODE_SPACE = `calc(${spacingVars['--spacing-3']})`;
|
|
42
|
+
// Core CodeBlock's header (8px, a small control, 8px) overlaps the code's
|
|
43
|
+
// 12px top padding by 8px, so its code starts 8px + control + 12px down.
|
|
44
|
+
const CODE_HEADER_SPACE = `calc(${spacingVars['--spacing-2']} + ${sizeVars['--size-element-sm']} + ${spacingVars['--spacing-3']})`;
|
|
45
|
+
// A block that names no language has no header: core CodeBlock puts its copy
|
|
46
|
+
// button in a column of its own at the inline end (8px, a small control, 8px),
|
|
47
|
+
// beside the code rather than over it, so the code ends that much earlier.
|
|
48
|
+
const CODE_CORNER_SPACE = `calc(${spacingVars['--spacing-4']} + ${sizeVars['--size-element-sm']} + 2 * ${spacingVars['--spacing-2']})`;
|
|
49
|
+
const editorTheme = {
|
|
50
|
+
providerDirection: {
|
|
51
|
+
ksoyAI: "x1epdd7z",
|
|
52
|
+
$$css: true
|
|
53
|
+
},
|
|
54
|
+
paragraph: {
|
|
55
|
+
keoZOQ: "x1ftnraw xnhvf09 xe66n16",
|
|
56
|
+
k1K539: "x18pneqc xfo59cc x1vugyqv",
|
|
57
|
+
ks0D6T: "x7ep2pv",
|
|
58
|
+
k63SB2: "x1pd3egz",
|
|
59
|
+
kMwMTN: "x1heor9g",
|
|
60
|
+
$$css: true
|
|
61
|
+
},
|
|
62
|
+
h1: {
|
|
63
|
+
kMv6JI: "x1g81bgm",
|
|
64
|
+
kGuDYH: "xcg7oai",
|
|
65
|
+
k63SB2: "x1v68xuy",
|
|
66
|
+
kLWn49: "xfmsba7",
|
|
67
|
+
keoZOQ: "x13xmvwt xnhvf09",
|
|
68
|
+
k1K539: "x18pneqc xfo59cc",
|
|
69
|
+
ks0D6T: "x7ep2pv",
|
|
70
|
+
$$css: true
|
|
71
|
+
},
|
|
72
|
+
h2: {
|
|
73
|
+
kMv6JI: "x1g81bgm",
|
|
74
|
+
kGuDYH: "x1xvnhcw",
|
|
75
|
+
k63SB2: "x12yy4cs",
|
|
76
|
+
kLWn49: "x1cpk1wn",
|
|
77
|
+
keoZOQ: "x13xmvwt xnhvf09",
|
|
78
|
+
k1K539: "x18pneqc xfo59cc",
|
|
79
|
+
ks0D6T: "x7ep2pv",
|
|
80
|
+
$$css: true
|
|
81
|
+
},
|
|
82
|
+
h3: {
|
|
83
|
+
kMv6JI: "x1g81bgm",
|
|
84
|
+
kGuDYH: "xii13ha",
|
|
85
|
+
k63SB2: "x1jcxfy8",
|
|
86
|
+
kLWn49: "xwjzt0u",
|
|
87
|
+
keoZOQ: "x13xmvwt xnhvf09",
|
|
88
|
+
k1K539: "x18pneqc xfo59cc",
|
|
89
|
+
ks0D6T: "x7ep2pv",
|
|
90
|
+
$$css: true
|
|
91
|
+
},
|
|
92
|
+
h4: {
|
|
93
|
+
kMv6JI: "x1g81bgm",
|
|
94
|
+
kGuDYH: "x8tkxat",
|
|
95
|
+
k63SB2: "x2hcmsi",
|
|
96
|
+
kLWn49: "xqerer",
|
|
97
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
98
|
+
k1K539: "x1hws3vx xfo59cc",
|
|
99
|
+
ks0D6T: "x7ep2pv",
|
|
100
|
+
$$css: true
|
|
101
|
+
},
|
|
102
|
+
h5: {
|
|
103
|
+
kMv6JI: "x1g81bgm",
|
|
104
|
+
kGuDYH: "xsgqta0",
|
|
105
|
+
k63SB2: "xno150v",
|
|
106
|
+
kLWn49: "xo3gurs",
|
|
107
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
108
|
+
k1K539: "x1hws3vx xfo59cc",
|
|
109
|
+
ks0D6T: "x7ep2pv",
|
|
110
|
+
$$css: true
|
|
111
|
+
},
|
|
112
|
+
h6: {
|
|
113
|
+
kMv6JI: "x1g81bgm",
|
|
114
|
+
kGuDYH: "xw5ohdf",
|
|
115
|
+
k63SB2: "x1pw4frv",
|
|
116
|
+
kLWn49: "xeixjfn",
|
|
117
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
118
|
+
k1K539: "x1hws3vx xfo59cc",
|
|
119
|
+
ks0D6T: "x7ep2pv",
|
|
120
|
+
$$css: true
|
|
121
|
+
},
|
|
122
|
+
quote: {
|
|
123
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
124
|
+
k1K539: "x1u2y747 xfo59cc",
|
|
125
|
+
kUOVxO: "xrxpjvj",
|
|
126
|
+
ks0D6T: "x7ep2pv",
|
|
127
|
+
kZCmMZ: "x1rey3nv",
|
|
128
|
+
k2ei4v: "xyumdvf",
|
|
129
|
+
kVhnKS: "x1t7ytsu",
|
|
130
|
+
kGJrpR: "x14ydlgx",
|
|
131
|
+
kMwMTN: "xv1l7n4",
|
|
132
|
+
$$css: true
|
|
133
|
+
},
|
|
134
|
+
ul: {
|
|
135
|
+
keoZOQ: "x1ftnraw xnhvf09",
|
|
136
|
+
k1K539: "x18pneqc xfo59cc",
|
|
137
|
+
ks0D6T: "x7ep2pv",
|
|
138
|
+
kZCmMZ: "x31w388",
|
|
139
|
+
kpqbRz: "x43c9pm",
|
|
140
|
+
$$css: true
|
|
141
|
+
},
|
|
142
|
+
ol: {
|
|
143
|
+
keoZOQ: "x1ftnraw xnhvf09",
|
|
144
|
+
k1K539: "x18pneqc xfo59cc",
|
|
145
|
+
ks0D6T: "x7ep2pv",
|
|
146
|
+
kZCmMZ: "x31w388",
|
|
147
|
+
kpqbRz: "x43c9pm",
|
|
148
|
+
$$css: true
|
|
149
|
+
},
|
|
150
|
+
ulMarker0: {
|
|
151
|
+
kH6xsr: "xtaz4m5",
|
|
152
|
+
$$css: true
|
|
153
|
+
},
|
|
154
|
+
ulMarker1: {
|
|
155
|
+
kH6xsr: "xrylv2j",
|
|
156
|
+
$$css: true
|
|
157
|
+
},
|
|
158
|
+
ulMarker2: {
|
|
159
|
+
kH6xsr: "x152237o",
|
|
160
|
+
$$css: true
|
|
161
|
+
},
|
|
162
|
+
olMarker0: {
|
|
163
|
+
kH6xsr: "x3yw8vx",
|
|
164
|
+
$$css: true
|
|
165
|
+
},
|
|
166
|
+
olMarker1: {
|
|
167
|
+
kH6xsr: "x1rrqm6h",
|
|
168
|
+
$$css: true
|
|
169
|
+
},
|
|
170
|
+
olMarker2: {
|
|
171
|
+
kH6xsr: "x19k9dhg",
|
|
172
|
+
$$css: true
|
|
173
|
+
},
|
|
174
|
+
tableScrollableWrapper: {
|
|
175
|
+
kXHlph: "xw2csxc",
|
|
176
|
+
ks0D6T: "x193iq5w",
|
|
177
|
+
k1xSpc: "xrvj5dj",
|
|
178
|
+
kumcoG: "x1mkdm3x",
|
|
179
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
180
|
+
k1K539: "x1u2y747 xfo59cc",
|
|
181
|
+
$$css: true
|
|
182
|
+
},
|
|
183
|
+
table: {
|
|
184
|
+
kLvRdT: "x1mwwwfo",
|
|
185
|
+
kzqmXN: "xh8yej3",
|
|
186
|
+
kMzoRj: "x1litavf",
|
|
187
|
+
ksu8eU: "x1y0btm7",
|
|
188
|
+
kVAM5u: "x14i3s5s",
|
|
189
|
+
$$css: true
|
|
190
|
+
},
|
|
191
|
+
tableRow: {
|
|
192
|
+
kt9PQ7: "xso031l",
|
|
193
|
+
kfdmCh: "x1q0q8m5",
|
|
194
|
+
kL6WhQ: "xw8gpjh x1bta2m4",
|
|
195
|
+
$$css: true
|
|
196
|
+
},
|
|
197
|
+
tableCell: {
|
|
198
|
+
kB7OPa: "x1afcbsf",
|
|
199
|
+
k8WAf4: "xce4md1",
|
|
200
|
+
kg3NbH: "xf314gf",
|
|
201
|
+
k9WMMc: "x1yc453h",
|
|
202
|
+
kXLuUW: "xxymvpz",
|
|
203
|
+
kHjlTd: "x1mzt3pk",
|
|
204
|
+
ke9TFa: "xw8tdv1 x1qlsc9e",
|
|
205
|
+
k8ry5P: "x18b5jzi",
|
|
206
|
+
kBCPoo: "x1gejf6u",
|
|
207
|
+
$$css: true
|
|
208
|
+
},
|
|
209
|
+
tableCellHeader: {
|
|
210
|
+
k63SB2: "x2mo6ok",
|
|
211
|
+
kMwMTN: "xv1l7n4",
|
|
212
|
+
$$css: true
|
|
213
|
+
},
|
|
214
|
+
tableCellSelected: {
|
|
215
|
+
kMeerF: "xak0ai5",
|
|
216
|
+
k3XXqK: "x9ssot5",
|
|
217
|
+
kjBf7l: "x19bwoy8",
|
|
218
|
+
kInvED: "x1c097ug",
|
|
219
|
+
$$css: true
|
|
220
|
+
},
|
|
221
|
+
code: {
|
|
222
|
+
k1xSpc: "x1lliihq",
|
|
223
|
+
kMv6JI: "x9m5x89",
|
|
224
|
+
kGuDYH: "xp03k98",
|
|
225
|
+
kLWn49: "x17iicif",
|
|
226
|
+
kWkggS: "xzyc27v",
|
|
227
|
+
kMzoRj: "x1litavf",
|
|
228
|
+
ksu8eU: "x1y0btm7",
|
|
229
|
+
kVAM5u: "x14i3s5s",
|
|
230
|
+
kaIpWk: "xh6dtrn",
|
|
231
|
+
kLKAdn: "xekneqv x2w4pp4",
|
|
232
|
+
kGO01o: "xvmdzux",
|
|
233
|
+
kZCmMZ: "x1rey3nv",
|
|
234
|
+
kwRFfy: "xza90q5 x18crcbm",
|
|
235
|
+
kB7OPa: "x9f619",
|
|
236
|
+
kzqmXN: "xeq5yr9",
|
|
237
|
+
k7Eaqz: "xejm5pw",
|
|
238
|
+
ks0D6T: "x193iq5w",
|
|
239
|
+
keoZOQ: "x1w2a574 xnhvf09",
|
|
240
|
+
k1K539: "x1u2y747 xfo59cc",
|
|
241
|
+
khDVqt: "x126k92a",
|
|
242
|
+
kTgw9: "x1yn0g08",
|
|
243
|
+
kHjlTd: "x1mzt3pk",
|
|
244
|
+
$$css: true
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Builds the Lexical EditorThemeClasses object. Lexical expects plain
|
|
250
|
+
* class-name strings, which `stylex.props(...).className` yields.
|
|
251
|
+
*/
|
|
252
|
+
export function sharedEditorTheme() {
|
|
253
|
+
// A class for a block Lexical may mark `dir="auto"`.
|
|
254
|
+
const block = (...styles) => stylex.props(...styles, editorTheme.providerDirection).className ?? '';
|
|
255
|
+
const className = style => stylex.props(style).className ?? '';
|
|
256
|
+
return {
|
|
257
|
+
paragraph: block(editorTheme.paragraph),
|
|
258
|
+
// A Markdown plugin's block node is spaced and measured as a paragraph,
|
|
259
|
+
// as core Markdown spaces its block (RichTextExtensionNode reads it).
|
|
260
|
+
markdownExtensionBlock: block(editorTheme.paragraph),
|
|
261
|
+
heading: {
|
|
262
|
+
h1: block(editorTheme.h1),
|
|
263
|
+
h2: block(editorTheme.h2),
|
|
264
|
+
h3: block(editorTheme.h3),
|
|
265
|
+
h4: block(editorTheme.h4),
|
|
266
|
+
h5: block(editorTheme.h5),
|
|
267
|
+
h6: block(editorTheme.h6)
|
|
268
|
+
},
|
|
269
|
+
quote: block(editorTheme.quote),
|
|
270
|
+
list: {
|
|
271
|
+
ul: block(editorTheme.ul),
|
|
272
|
+
ol: block(editorTheme.ol),
|
|
273
|
+
listitem: {
|
|
274
|
+
className: "x1f3mx8c xmvvslv x1uerj9w x13xdy6z x1wqhfsw xkuhcwz xsgnyjk x10j6jf0 xfo59cc x1sle589 x81k3mc xovwveo x2i8j16 x8yim9t x1pvqllw xbj1ybn x1kuvm45"
|
|
275
|
+
}.className,
|
|
276
|
+
nested: {
|
|
277
|
+
listitem: {
|
|
278
|
+
className: "x1f3mx8c xmvvslv x1uerj9w x13xdy6z x1wqhfsw xkuhcwz xsgnyjk x10j6jf0 xfo59cc x1sle589 x81k3mc xovwveo x2i8j16 x8yim9t x1pvqllw xbj1ybn x1kuvm45"
|
|
279
|
+
}.className
|
|
280
|
+
},
|
|
281
|
+
// Lexical picks the class at `depth % 3` (spec:AST-061 DEC-6).
|
|
282
|
+
ulDepth: [className(editorTheme.ulMarker0), className(editorTheme.ulMarker1), className(editorTheme.ulMarker2)],
|
|
283
|
+
olDepth: [className(editorTheme.olMarker0), className(editorTheme.olMarker1), className(editorTheme.olMarker2)]
|
|
284
|
+
},
|
|
285
|
+
link: {
|
|
286
|
+
className: "xjse4m1 x1bvjpef x1ypdohk x16khyan"
|
|
287
|
+
}.className,
|
|
288
|
+
text: {
|
|
289
|
+
bold: {
|
|
290
|
+
className: "x2mo6ok"
|
|
291
|
+
}.className,
|
|
292
|
+
italic: {
|
|
293
|
+
className: "x1k4tb9n"
|
|
294
|
+
}.className,
|
|
295
|
+
underline: {
|
|
296
|
+
className: "x1bvjpef"
|
|
297
|
+
}.className,
|
|
298
|
+
strikethrough: {
|
|
299
|
+
className: "xmqliwb"
|
|
300
|
+
}.className,
|
|
301
|
+
code: {
|
|
302
|
+
className: "x9m5x89 xwmxj5m x7a5moj xx3sua9"
|
|
303
|
+
}.className
|
|
304
|
+
},
|
|
305
|
+
// The plain class lets CodeSyntaxPlugin's highlight rules find code blocks.
|
|
306
|
+
code: `${block(editorTheme.code)} ${CODE_SYNTAX_CLASS}`,
|
|
307
|
+
hr: {
|
|
308
|
+
className: "xc342km x11xkdxz x13fuv20 x1pc3f07 x13xmvwt xnhvf09 xe66n16 x1qaki06 xfo59cc x1vugyqv"
|
|
309
|
+
}.className,
|
|
310
|
+
hrSelected: {
|
|
311
|
+
className: "xak0ai5 x9ssot5 x19bwoy8 x1eqjuhu"
|
|
312
|
+
}.className,
|
|
313
|
+
// MarkdownExtensionsPlugin puts it on a selected plugin node.
|
|
314
|
+
markdownExtensionSelected: {
|
|
315
|
+
className: "xak0ai5 x9ssot5 x19bwoy8 x1eqjuhu"
|
|
316
|
+
}.className,
|
|
317
|
+
table: block(editorTheme.table),
|
|
318
|
+
// Lexical stamps rows and cells `dir="auto"` too, which would set a cell
|
|
319
|
+
// of English text left-to-right inside a right-to-left document.
|
|
320
|
+
tableRow: block(editorTheme.tableRow),
|
|
321
|
+
tableCell: block(editorTheme.tableCell),
|
|
322
|
+
tableCellHeader: block(editorTheme.tableCellHeader),
|
|
323
|
+
// Added on top of the cell's own class by Lexical while the cell is in a
|
|
324
|
+
// table selection, so it carries no direction of its own.
|
|
325
|
+
tableCellSelected: className(editorTheme.tableCellSelected),
|
|
326
|
+
tableScrollableWrapper: block(editorTheme.tableScrollableWrapper)
|
|
327
|
+
};
|
|
328
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @input Imports RichTextEditor and RichTextView components and their types
|
|
4
|
+
* @output Public API surface for @blue-patterns/richtext
|
|
5
|
+
* @position Package entry point (barrel) for @blue-patterns/richtext — the
|
|
6
|
+
* Lexical-based rich text editor and viewer, promoted out of
|
|
7
|
+
* @blue-patterns/lab so it can be canaried independently.
|
|
8
|
+
*
|
|
9
|
+
* Exports only what a caller builds with (spec:AST-061/DEC-8): the generated
|
|
10
|
+
* editor theme classes and the autolink regular expressions stay internal,
|
|
11
|
+
* and Lexical's `Transformer` type comes from `@lexical/markdown`.
|
|
12
|
+
* `publicSurface.test.ts` holds the runtime list.
|
|
13
|
+
*
|
|
14
|
+
* SYNC: When modified, update this header, /packages/richtext/README.md,
|
|
15
|
+
* /packages/richtext/src/publicSurface.test.ts, and the editor component doc
|
|
16
|
+
* files.
|
|
17
|
+
*/
|
|
18
|
+
export { RichTextEditor } from './RichTextEditor.js';
|
|
19
|
+
export type { RichTextEditorProps, RichTextEditorRef, RichTextEditorStatus, RichTextEditorStatusType, RichTextEditorSize, } from './RichTextEditor.js';
|
|
20
|
+
export { RichTextView } from './RichTextView.js';
|
|
21
|
+
export type { RichTextViewProps } from './RichTextView.js';
|
|
22
|
+
export { markdownToEditorStateJSON, editorStateJSONToMarkdown, } from './markdownSerializers.js';
|
|
23
|
+
export type { MarkdownSerializerOptions } from './markdownSerializers.js';
|
|
24
|
+
export { createRichTextExtension, RichTextExtensionError, } from './markdownExtensions.js';
|
|
25
|
+
export type { RichTextMarkdownExtension } from './markdownExtensions.js';
|
|
26
|
+
export { RichTextEditorToolbar, RICHTEXT_ICON_KEYS, } from './RichTextEditorToolbar.js';
|
|
27
|
+
export type { RichTextEditorToolbarProps } from './RichTextEditorToolbar.js';
|
|
28
|
+
export { RichTextEditorAutoLinkPlugin, DEFAULT_LINK_MATCHERS, NEW_TAB_LINK_ATTRIBUTES, } from './RichTextEditorAutoLinkPlugin.js';
|
|
29
|
+
export type { RichTextEditorAutoLinkPluginProps } from './RichTextEditorAutoLinkPlugin.js';
|
|
30
|
+
export { sanitizeUrl, validateUrl } from './linkUtils.js';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAC,yBAAyB,EAAC,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAC,yBAAyB,EAAC,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAC,0BAA0B,EAAC,MAAM,yBAAyB,CAAC;AAExE,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAC,iCAAiC,EAAC,MAAM,gCAAgC,CAAC;AAEtF,OAAO,EAAC,WAAW,EAAE,WAAW,EAAC,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file index.ts
|
|
7
|
+
* @input Imports RichTextEditor and RichTextView components and their types
|
|
8
|
+
* @output Public API surface for @blue-patterns/richtext
|
|
9
|
+
* @position Package entry point (barrel) for @blue-patterns/richtext — the
|
|
10
|
+
* Lexical-based rich text editor and viewer, promoted out of
|
|
11
|
+
* @blue-patterns/lab so it can be canaried independently.
|
|
12
|
+
*
|
|
13
|
+
* Exports only what a caller builds with (spec:AST-061/DEC-8): the generated
|
|
14
|
+
* editor theme classes and the autolink regular expressions stay internal,
|
|
15
|
+
* and Lexical's `Transformer` type comes from `@lexical/markdown`.
|
|
16
|
+
* `publicSurface.test.ts` holds the runtime list.
|
|
17
|
+
*
|
|
18
|
+
* SYNC: When modified, update this header, /packages/richtext/README.md,
|
|
19
|
+
* /packages/richtext/src/publicSurface.test.ts, and the editor component doc
|
|
20
|
+
* files.
|
|
21
|
+
*/
|
|
22
|
+
export { RichTextEditor } from "./RichTextEditor.js";
|
|
23
|
+
export { RichTextView } from "./RichTextView.js";
|
|
24
|
+
export { markdownToEditorStateJSON, editorStateJSONToMarkdown } from "./markdownSerializers.js";
|
|
25
|
+
export { createRichTextExtension, RichTextExtensionError } from "./markdownExtensions.js";
|
|
26
|
+
export { RichTextEditorToolbar, RICHTEXT_ICON_KEYS } from "./RichTextEditorToolbar.js";
|
|
27
|
+
export { RichTextEditorAutoLinkPlugin, DEFAULT_LINK_MATCHERS, NEW_TAB_LINK_ATTRIBUTES } from "./RichTextEditorAutoLinkPlugin.js";
|
|
28
|
+
export { sanitizeUrl, validateUrl } from "./linkUtils.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBackspacePlugin.d.ts","sourceRoot":"","sources":["../../src/internal/CodeBackspacePlugin.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,mBAAmB,IAAI,IAAI,CAyB1C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file CodeBackspacePlugin.tsx
|
|
7
|
+
* @input Uses @lexical/react (composer context), @lexical/code (CodeNode), and
|
|
8
|
+
* lexical.
|
|
9
|
+
* @output Exports CodeBackspacePlugin, which makes Backspace at the very start
|
|
10
|
+
* of a code block turn the block into a paragraph holding its lines.
|
|
11
|
+
* @position Rendered by RichTextEditor; always on, not exported. Lexical's
|
|
12
|
+
* own Backspace there merges the code into the block above, and a heading
|
|
13
|
+
* above reads back as a longer heading and a stray paragraph.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect } from 'react';
|
|
16
|
+
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
17
|
+
import { $isCodeNode } from '@lexical/code';
|
|
18
|
+
import { $createLineBreakNode, $createParagraphNode, $createTextNode, $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW, DELETE_CHARACTER_COMMAND } from 'lexical';
|
|
19
|
+
|
|
20
|
+
/** Start is offset 0 of the block or of its first child, not the start of a later line. */
|
|
21
|
+
function $codeBlockAtCaretStart() {
|
|
22
|
+
const selection = $getSelection();
|
|
23
|
+
if (!$isRangeSelection(selection) || !selection.isCollapsed() || selection.anchor.offset !== 0) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const node = selection.anchor.getNode();
|
|
27
|
+
const code = $isCodeNode(node) ? node : node.getParent();
|
|
28
|
+
if (!$isCodeNode(code)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return node.is(code) || node.is(code.getFirstChild()) ? code : null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A newline inside text exports as a soft break, and the lines read back as
|
|
36
|
+
* one. A line break node exports as a hard break. Empty lines at the end of
|
|
37
|
+
* the code are dropped: a hard break that ends a paragraph reads back as a
|
|
38
|
+
* literal backslash.
|
|
39
|
+
*/
|
|
40
|
+
function $paragraphOfLines(code) {
|
|
41
|
+
const paragraph = $createParagraphNode();
|
|
42
|
+
code.getTextContent().replace(/\n+$/, '').split('\n').forEach((line, index) => {
|
|
43
|
+
if (index > 0) {
|
|
44
|
+
paragraph.append($createLineBreakNode());
|
|
45
|
+
}
|
|
46
|
+
if (line !== '') {
|
|
47
|
+
paragraph.append($createTextNode(line));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return paragraph;
|
|
51
|
+
}
|
|
52
|
+
export function CodeBackspacePlugin() {
|
|
53
|
+
const [editor] = useLexicalComposerContext();
|
|
54
|
+
useEffect(() => editor.registerCommand(DELETE_CHARACTER_COMMAND, isBackward => {
|
|
55
|
+
if (!isBackward || !editor.isEditable()) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const code = $codeBlockAtCaretStart();
|
|
59
|
+
if (code == null) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
const paragraph = $paragraphOfLines(code);
|
|
63
|
+
code.replace(paragraph);
|
|
64
|
+
paragraph.selectStart();
|
|
65
|
+
return true;
|
|
66
|
+
},
|
|
67
|
+
// Ahead of the rich-text deletion, which would do the merge.
|
|
68
|
+
COMMAND_PRIORITY_LOW), [editor]);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type JSX } from 'react';
|
|
2
|
+
import type { CodeLanguage } from '@blue-patterns/core/CodeBlock';
|
|
3
|
+
/**
|
|
4
|
+
* Draws a header over each top-level code block and keeps it there as the
|
|
5
|
+
* document, the editor's size, or the window changes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function CodeBlockHeaderPlugin({ codeLanguages, }?: {
|
|
8
|
+
/** Language values a fence may name; a matched fence shows the value's name. */
|
|
9
|
+
codeLanguages?: ReadonlyArray<CodeLanguage>;
|
|
10
|
+
}): JSX.Element;
|
|
11
|
+
//# sourceMappingURL=CodeBlockHeaderPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockHeaderPlugin.d.ts","sourceRoot":"","sources":["../../src/internal/CodeBlockHeaderPlugin.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAsB,KAAK,GAAG,EAAC,MAAM,OAAO,CAAC;AAQpD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AA4JhE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,aAAa,GACd,GAAE;IACD,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACxC,GAAG,GAAG,CAAC,OAAO,CAyFnB"}
|