@haklex/rich-editor 0.10.0 → 0.12.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.
Files changed (40) hide show
  1. package/dist/{AlertQuoteEditNode-DjObnJI6.js → AlertQuoteEditNode-DHQD6Hnp.js} +7 -2
  2. package/dist/{KaTeXRenderer-CqnhvDmj.js → KaTeXRenderer-v5qDPxDO.js} +1 -1
  3. package/dist/{MermaidPlugin-_gPgU34D.js → MermaidPlugin-Dn7ABeA5.js} +2 -2
  4. package/dist/{PresentDialogContext-DKNicgia.js → PresentDialogContext-B11Y-NJ5.js} +2 -2
  5. package/dist/{RubyRenderer-jOkydJHg.js → RubyRenderer-C3x1kf4k.js} +1 -1
  6. package/dist/{SubmitShortcutPlugin-vSiGZdqf.js → SubmitShortcutPlugin-Bj7djTO0.js} +7 -7
  7. package/dist/commands-entry.mjs +2 -2
  8. package/dist/components/RichEditorShell.d.ts +2 -2
  9. package/dist/components/RichEditorShell.d.ts.map +1 -1
  10. package/dist/{config-ayEp2yVZ.js → config-Dxr6eH6Z.js} +9 -4
  11. package/dist/config-edit.d.ts +3 -3
  12. package/dist/config-edit.d.ts.map +1 -1
  13. package/dist/config.d.ts +4 -4
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/{grid.css-CJCkLTZc.js → grid.css-BxRbo20q.js} +1 -1
  16. package/dist/index.mjs +14 -10
  17. package/dist/{katex.css-CIOEOXyd.js → katex.css-D77BtjJi.js} +29 -27
  18. package/dist/{node-registry-jA2ieiI5.js → node-registry-BvWtlw0M.js} +6 -6
  19. package/dist/node-registry.d.ts +5 -3
  20. package/dist/node-registry.d.ts.map +1 -1
  21. package/dist/nodes/RichQuoteNode.d.ts +18 -0
  22. package/dist/nodes/RichQuoteNode.d.ts.map +1 -0
  23. package/dist/nodes/shared.d.ts +2 -2
  24. package/dist/nodes/shared.d.ts.map +1 -1
  25. package/dist/nodes-entry.d.ts +2 -0
  26. package/dist/nodes-entry.d.ts.map +1 -1
  27. package/dist/nodes-entry.mjs +5 -5
  28. package/dist/{normalizeSerializedEditorState-B-1wmGzd.js → normalizeSerializedEditorState-CdUhnqss.js} +45 -3
  29. package/dist/plugins-entry.mjs +2 -2
  30. package/dist/renderers-entry.mjs +3 -3
  31. package/dist/rich-editor.css +1 -1
  32. package/dist/static-entry.mjs +8 -8
  33. package/dist/styles/grid.css.d.ts.map +1 -1
  34. package/dist/styles/shared.css.d.ts +3 -0
  35. package/dist/styles/shared.css.d.ts.map +1 -1
  36. package/dist/styles-entry.mjs +2 -2
  37. package/dist/{theme-DG7I1YM5.js → theme-BYSEh-ew.js} +47 -3
  38. package/dist/transformers/code-block.d.ts.map +1 -1
  39. package/dist/utils/normalizeSerializedEditorState.d.ts.map +1 -1
  40. package/package.json +5 -5
@@ -1,5 +1,5 @@
1
- import { A as AlertQuoteNode, D as $isAlertQuoteNode, E as FootnoteNode, N as AlertRenderer, _ as KaTeXInlineNode, c as SpoilerNode, i as TagNode, j as _defineProperty, m as MentionNode, t as editorTheme } from "./theme-DG7I1YM5.js";
2
- import { h as ALERT_NODE_KEY, l as RendererWrapper } from "./KaTeXRenderer-CqnhvDmj.js";
1
+ import { A as $isAlertQuoteNode, I as AlertRenderer, N as AlertQuoteNode, P as _defineProperty, _ as MentionNode, b as KaTeXInlineNode, c as SpoilerNode, d as RichQuoteNode, i as TagNode, k as FootnoteNode, t as editorTheme } from "./theme-BYSEh-ew.js";
2
+ import { h as ALERT_NODE_KEY, l as RendererWrapper } from "./KaTeXRenderer-v5qDPxDO.js";
3
3
  import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
4
4
  import { ListPlugin } from "@lexical/react/LexicalListPlugin";
5
5
  import { AutoLinkNode, LinkNode } from "@lexical/link";
@@ -138,6 +138,11 @@ function AlertEditDecorator({ nodeKey, alertType, contentEditor }) {
138
138
  var NESTED_EDITOR_NODES = [
139
139
  HeadingNode,
140
140
  QuoteNode,
141
+ RichQuoteNode,
142
+ {
143
+ replace: QuoteNode,
144
+ with: () => new RichQuoteNode()
145
+ },
141
146
  ListNode,
142
147
  ListItemNode,
143
148
  LinkNode,
@@ -1,4 +1,4 @@
1
- import { l as semanticClassNames, n as katexStyles, r as clsx, t as katexClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
1
+ import { l as semanticClassNames, n as katexStyles, r as clsx, t as katexClassNames, u as sharedStyles } from "./katex.css-D77BtjJi.js";
2
2
  import { createContext, createElement, use, useCallback, useEffect, useMemo, useState } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { rgbaToThumbHash, thumbHashToDataURL } from "thumbhash";
@@ -1,5 +1,5 @@
1
- import { h as $createKaTeXInlineNode, l as $createMermaidNode, v as $createKaTeXBlockNode, x as $createImageNode } from "./theme-DG7I1YM5.js";
2
- import { t as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DjObnJI6.js";
1
+ import { f as $createMermaidNode, v as $createKaTeXInlineNode, w as $createImageNode, x as $createKaTeXBlockNode } from "./theme-BYSEh-ew.js";
2
+ import { t as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DHQD6Hnp.js";
3
3
  import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
4
4
  import { useEffect } from "react";
5
5
  import { $insertNodes, COMMAND_PRIORITY_EDITOR, createCommand } from "lexical";
@@ -1,5 +1,5 @@
1
- import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
2
- import { n as getHostname, r as probeFavicon } from "./normalizeSerializedEditorState-B-1wmGzd.js";
1
+ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-D77BtjJi.js";
2
+ import { n as getHostname, r as probeFavicon } from "./normalizeSerializedEditorState-CdUhnqss.js";
3
3
  import { createContext, use, useEffect, useMemo, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { Globe, Mail } from "lucide-react";
@@ -1,4 +1,4 @@
1
- import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
1
+ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-D77BtjJi.js";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  //#region src/components/renderers/RubyRenderer.tsx
4
4
  function RubyRenderer({ reading, children }) {
@@ -1,10 +1,10 @@
1
- import { c as setCodeBlockCursorIntent, o as $createCodeBlockEditNode, s as $createBannerEditNode, t as getResolvedEditNodes } from "./node-registry-jA2ieiI5.js";
2
- import { A as AlertQuoteNode, E as FootnoteNode, M as extractTextContent, T as $createFootnoteNode, _ as KaTeXInlineNode, b as KaTeXBlockNode, c as SpoilerNode, f as $createMentionNode, h as $createKaTeXInlineNode, m as MentionNode, o as $createSpoilerNode, v as $createKaTeXBlockNode, w as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, x as $createImageNode } from "./theme-DG7I1YM5.js";
3
- import { a as FootnoteDefinitionsProvider, n as computeImageMeta } from "./KaTeXRenderer-CqnhvDmj.js";
4
- import "./katex.css-CIOEOXyd.js";
5
- import { S as CommentNode, _ as $createDetailsNode, a as $createRubyNode, b as $createCommentPlaceholderNode, f as $isGridContainerNode, g as FootnoteSectionNode, h as $isFootnoteSectionNode, j as BannerNode, m as $createFootnoteSectionNode, s as RubyNode, v as DetailsNode, w as CodeBlockNode, y as $createCommentNode } from "./config-ayEp2yVZ.js";
6
- import { t as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DjObnJI6.js";
7
- import { n as getHostname, r as probeFavicon, t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-B-1wmGzd.js";
1
+ import { c as setCodeBlockCursorIntent, o as $createCodeBlockEditNode, s as $createBannerEditNode, t as getResolvedEditNodes } from "./node-registry-BvWtlw0M.js";
2
+ import { C as KaTeXBlockNode, D as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, F as extractTextContent, N as AlertQuoteNode, O as $createFootnoteNode, _ as MentionNode, b as KaTeXInlineNode, c as SpoilerNode, h as $createMentionNode, k as FootnoteNode, o as $createSpoilerNode, v as $createKaTeXInlineNode, w as $createImageNode, x as $createKaTeXBlockNode } from "./theme-BYSEh-ew.js";
3
+ import { a as FootnoteDefinitionsProvider, n as computeImageMeta } from "./KaTeXRenderer-v5qDPxDO.js";
4
+ import "./katex.css-D77BtjJi.js";
5
+ import { S as CommentNode, _ as $createDetailsNode, a as $createRubyNode, b as $createCommentPlaceholderNode, f as $isGridContainerNode, g as FootnoteSectionNode, h as $isFootnoteSectionNode, j as BannerNode, m as $createFootnoteSectionNode, s as RubyNode, v as DetailsNode, w as CodeBlockNode, y as $createCommentNode } from "./config-Dxr6eH6Z.js";
6
+ import { t as $createAlertQuoteEditNode } from "./AlertQuoteEditNode-DHQD6Hnp.js";
7
+ import { n as getHostname, r as probeFavicon, t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-CdUhnqss.js";
8
8
  import { CheckListPlugin } from "@lexical/react/LexicalCheckListPlugin";
9
9
  import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
10
10
  import { ListPlugin } from "@lexical/react/LexicalListPlugin";
@@ -1,5 +1,5 @@
1
- import { M as extractTextContent, o as $createSpoilerNode, s as $isSpoilerNode, w as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND } from "./theme-DG7I1YM5.js";
2
- import { i as INSERT_KATEX_INLINE_COMMAND, l as INSERT_ALERT_COMMAND, o as INSERT_IMAGE_COMMAND, r as INSERT_KATEX_BLOCK_COMMAND, t as INSERT_MERMAID_COMMAND } from "./MermaidPlugin-_gPgU34D.js";
1
+ import { D as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, F as extractTextContent, o as $createSpoilerNode, s as $isSpoilerNode } from "./theme-BYSEh-ew.js";
2
+ import { i as INSERT_KATEX_INLINE_COMMAND, l as INSERT_ALERT_COMMAND, o as INSERT_IMAGE_COMMAND, r as INSERT_KATEX_BLOCK_COMMAND, t as INSERT_MERMAID_COMMAND } from "./MermaidPlugin-Dn7ABeA5.js";
3
3
  import { $createTextNode, $getSelection, $isRangeSelection } from "lexical";
4
4
  //#region src/utils/collect-command-items.ts
5
5
  function collectCommandItems(editor) {
@@ -1,4 +1,4 @@
1
- import { Klass, LexicalEditor, LexicalNode, SerializedEditorState } from 'lexical';
1
+ import { Klass, LexicalEditor, LexicalNode, LexicalNodeReplacement, SerializedEditorState } from 'lexical';
2
2
  import { ReactNode } from 'react';
3
3
  import { ColorScheme } from '../context/ColorSchemeContext';
4
4
  import { RichEditorVariant } from '../types';
@@ -12,7 +12,7 @@ export interface RichEditorShellProps {
12
12
  debounceMs?: number;
13
13
  header?: ReactNode;
14
14
  initialValue?: SerializedEditorState;
15
- nodes: Array<Klass<LexicalNode>>;
15
+ nodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
16
16
  onChange?: (value: SerializedEditorState) => void;
17
17
  onEditorReady?: (editor: LexicalEditor | null) => void;
18
18
  onSubmit?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"RichEditorShell.d.ts","sourceRoot":"","sources":["../../src/components/RichEditorShell.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAWjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,OAAmB,EACnB,KAAe,EACf,WAAkC,EAClC,QAAQ,EACR,SAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,UAAU,EACV,QAAQ,GACT,EAAE,oBAAoB,+BAsDtB"}
1
+ {"version":3,"file":"RichEditorShell.d.ts","sourceRoot":"","sources":["../../src/components/RichEditorShell.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAWjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK/D,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,OAAmB,EACnB,KAAe,EACf,WAAkC,EAClC,QAAQ,EACR,SAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,UAAU,EACV,QAAQ,GACT,EAAE,oBAAoB,+BA0DtB"}
@@ -1,7 +1,7 @@
1
- import { A as AlertQuoteNode, C as ImageNode, E as FootnoteNode, F as useNestedContentRenderer, M as extractTextContent, _ as KaTeXInlineNode, b as KaTeXBlockNode, c as SpoilerNode, d as MermaidNode, i as TagNode, j as _defineProperty, m as MentionNode } from "./theme-DG7I1YM5.js";
2
- import { D as VIDEO_NODE_KEY, S as LINK_CARD_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, g as BANNER_NODE_KEY, l as RendererWrapper, m as useVariant, s as useFootnoteDefinitions, u as createRendererDecoration, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-CqnhvDmj.js";
3
- import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
4
- import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
1
+ import { C as KaTeXBlockNode, E as ImageNode, F as extractTextContent, N as AlertQuoteNode, P as _defineProperty, R as useNestedContentRenderer, _ as MentionNode, b as KaTeXInlineNode, c as SpoilerNode, d as RichQuoteNode, i as TagNode, k as FootnoteNode, m as MermaidNode } from "./theme-BYSEh-ew.js";
2
+ import { D as VIDEO_NODE_KEY, S as LINK_CARD_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, g as BANNER_NODE_KEY, l as RendererWrapper, m as useVariant, s as useFootnoteDefinitions, u as createRendererDecoration, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-v5qDPxDO.js";
3
+ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-D77BtjJi.js";
4
+ import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-BxRbo20q.js";
5
5
  import { t as LinkCardRenderer } from "./LinkCardRenderer-CigqFwCv.js";
6
6
  import { AutoLinkNode, LinkNode } from "@lexical/link";
7
7
  import { createContext, createElement, use, useCallback, useEffect, useRef, useState } from "react";
@@ -1215,6 +1215,11 @@ function $createVideoNode(payload) {
1215
1215
  var builtinNodes = [
1216
1216
  HeadingNode,
1217
1217
  QuoteNode,
1218
+ RichQuoteNode,
1219
+ {
1220
+ replace: QuoteNode,
1221
+ with: () => new RichQuoteNode()
1222
+ },
1218
1223
  ListNode,
1219
1224
  ListItemNode,
1220
1225
  LinkNode,
@@ -1,4 +1,4 @@
1
- import { Klass, LexicalNode } from 'lexical';
2
- export declare const customEditNodes: Array<Klass<LexicalNode>>;
3
- export declare const allEditNodes: Array<Klass<LexicalNode>>;
1
+ import { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical';
2
+ export declare const customEditNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
3
+ export declare const allEditNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
4
4
  //# sourceMappingURL=config-edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-edit.d.ts","sourceRoot":"","sources":["../src/config-edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBlD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAmBrD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAyC,CAAC"}
1
+ {"version":3,"file":"config-edit.d.ts","sourceRoot":"","sources":["../src/config-edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAsB1E,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAmB9E,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAG3E,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Klass, LexicalNode } from 'lexical';
2
- export declare const builtinNodes: Array<Klass<LexicalNode>>;
3
- export declare const customNodes: Array<Klass<LexicalNode>>;
4
- export declare const allNodes: Array<Klass<LexicalNode>>;
1
+ import { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical';
2
+ export declare const builtinNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
3
+ export declare const customNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
4
+ export declare const allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
5
5
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBlD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAYlD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAmBjD,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAqC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAsB1E,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAc3E,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAmB1E,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAGvE,CAAC"}
@@ -1,4 +1,4 @@
1
- import "./katex.css-CIOEOXyd.js";
1
+ import "./katex.css-D77BtjJi.js";
2
2
  //#region src/styles/details.css.ts
3
3
  var detailsClassNames = {
4
4
  details: "rich-details",
package/dist/index.mjs CHANGED
@@ -1,16 +1,18 @@
1
- import { A as ImageUploadProvider, C as useTextSelectionSnapshot, D as defaultImageUpload, E as ImageUploadPlugin, M as CorePlugins, O as BlockIdPlugin, S as createTextSelectionStore, T as LinkFaviconPlugin, _ as $getTextOffsetInBlock, a as AutoFocusPlugin, b as buildRangeAnchor, c as $captureTextSelectionFromRangeSelection, d as findDOMPointByTextOffset, f as getBlockElementById, g as $getRootBlock, h as TEXT_SELECTION_HIGHLIGHT_NAME, i as EditorRefPlugin, k as blockIdState, l as $restoreTextSelection, m as getTextOffsetFromDOMPoint, n as OnChangePlugin, o as TextSelectionPlugin, p as getDOMRectFromTextSelection, r as FootnotePlugin, s as $captureTextSelection, t as SubmitShortcutPlugin, u as createDOMRangeFromTextSelection, v as $resolveSelectionPoint, w as useTextSelectionStore, x as TextSelectionStoreProvider, y as buildBlockAnchor } from "./SubmitShortcutPlugin-vSiGZdqf.js";
2
- import { n as setResolvedEditNodes, r as allEditNodes } from "./node-registry-jA2ieiI5.js";
3
- import { F as useNestedContentRenderer, I as useOptionalNestedContentRenderer, P as NestedContentRendererProvider, t as editorTheme } from "./theme-DG7I1YM5.js";
4
- import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, a as FootnoteDefinitionsProvider, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, d as RendererConfigProvider, f as useRendererConfig, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, m as useVariant, o as useFootnoteContent, p as useRendererMode, s as useFootnoteDefinitions, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-CqnhvDmj.js";
5
- import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, r as clsx, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
6
- import { D as useColorScheme, E as ColorSchemeProvider } from "./config-ayEp2yVZ.js";
7
- import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
8
- import { a as LinkFavicon, i as useExtraNodes, n as usePresentDialog, r as ExtraNodesProvider, t as PresentDialogProvider } from "./PresentDialogContext-DKNicgia.js";
9
- import { a as KaTeXPlugin, c as AlertPlugin, n as MermaidPlugin, s as ImagePlugin } from "./MermaidPlugin-_gPgU34D.js";
1
+ import { A as ImageUploadProvider, C as useTextSelectionSnapshot, D as defaultImageUpload, E as ImageUploadPlugin, M as CorePlugins, O as BlockIdPlugin, S as createTextSelectionStore, T as LinkFaviconPlugin, _ as $getTextOffsetInBlock, a as AutoFocusPlugin, b as buildRangeAnchor, c as $captureTextSelectionFromRangeSelection, d as findDOMPointByTextOffset, f as getBlockElementById, g as $getRootBlock, h as TEXT_SELECTION_HIGHLIGHT_NAME, i as EditorRefPlugin, k as blockIdState, l as $restoreTextSelection, m as getTextOffsetFromDOMPoint, n as OnChangePlugin, o as TextSelectionPlugin, p as getDOMRectFromTextSelection, r as FootnotePlugin, s as $captureTextSelection, t as SubmitShortcutPlugin, u as createDOMRangeFromTextSelection, v as $resolveSelectionPoint, w as useTextSelectionStore, x as TextSelectionStoreProvider, y as buildBlockAnchor } from "./SubmitShortcutPlugin-Bj7djTO0.js";
2
+ import { n as setResolvedEditNodes, r as allEditNodes } from "./node-registry-BvWtlw0M.js";
3
+ import { L as NestedContentRendererProvider, R as useNestedContentRenderer, t as editorTheme, z as useOptionalNestedContentRenderer } from "./theme-BYSEh-ew.js";
4
+ import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, a as FootnoteDefinitionsProvider, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, d as RendererConfigProvider, f as useRendererConfig, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, m as useVariant, o as useFootnoteContent, p as useRendererMode, s as useFootnoteDefinitions, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-v5qDPxDO.js";
5
+ import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, r as clsx, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-D77BtjJi.js";
6
+ import { D as useColorScheme, E as ColorSchemeProvider } from "./config-Dxr6eH6Z.js";
7
+ import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-BxRbo20q.js";
8
+ import { t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-CdUhnqss.js";
9
+ import { a as LinkFavicon, i as useExtraNodes, n as usePresentDialog, r as ExtraNodesProvider, t as PresentDialogProvider } from "./PresentDialogContext-B11Y-NJ5.js";
10
+ import { a as KaTeXPlugin, c as AlertPlugin, n as MermaidPlugin, s as ImagePlugin } from "./MermaidPlugin-Dn7ABeA5.js";
10
11
  import { jsx, jsxs } from "react/jsx-runtime";
11
12
  import { ContentEditable } from "@lexical/react/LexicalContentEditable";
12
13
  import { LexicalErrorBoundary } from "@lexical/react/LexicalErrorBoundary";
13
14
  import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
15
+ import { QuoteAttributionPlugin } from "@haklex/rich-editor-ui";
14
16
  import { PortalThemeProvider } from "@haklex/rich-style-token";
15
17
  import { LexicalComposer } from "@lexical/react/LexicalComposer";
16
18
  import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin";
@@ -41,6 +43,7 @@ function ContentEditable$1({ className, placeholder: placeholder$1, hasHeader })
41
43
  //#region src/components/RichEditorShell.tsx
42
44
  function RichEditorShell({ nodes, initialValue, onChange, variant = "article", theme = "light", placeholder = "Write something...", onSubmit, autoFocus = false, className, contentClassName, style, actions, header, onEditorReady, rendererConfig, debounceMs, children }) {
43
45
  setResolvedEditNodes(nodes);
46
+ const normalizedInitialValue = initialValue ? normalizeSerializedEditorState(initialValue) : void 0;
44
47
  const initialConfig = {
45
48
  namespace: "RichEditor",
46
49
  theme: editorTheme,
@@ -49,7 +52,7 @@ function RichEditorShell({ nodes, initialValue, onChange, variant = "article", t
49
52
  onError: (error) => {
50
53
  console.error("[RichEditor]", error);
51
54
  },
52
- ...initialValue ? { editorState: JSON.stringify(initialValue) } : {}
55
+ ...normalizedInitialValue ? { editorState: JSON.stringify(normalizedInitialValue) } : {}
53
56
  };
54
57
  const variantClass = getVariantClass(variant);
55
58
  return /* @__PURE__ */ jsx(PortalThemeProvider, {
@@ -88,6 +91,7 @@ function RichEditorShell({ nodes, initialValue, onChange, variant = "article", t
88
91
  }),
89
92
  /* @__PURE__ */ jsx(SubmitShortcutPlugin, { onSubmit }),
90
93
  /* @__PURE__ */ jsx(EditorRefPlugin, { onEditorReady }),
94
+ /* @__PURE__ */ jsx(QuoteAttributionPlugin, {}),
91
95
  autoFocus && /* @__PURE__ */ jsx(AutoFocusPlugin, {}),
92
96
  children,
93
97
  actions && /* @__PURE__ */ jsx("div", {
@@ -26,6 +26,7 @@ var semanticClassNames = {
26
26
  listItemChecked: "rich-list-item-checked",
27
27
  listItemUnchecked: "rich-list-item-unchecked",
28
28
  quote: "rich-quote",
29
+ quoteAttribution: "rich-quote-attribution",
29
30
  hr: "rich-hr",
30
31
  tableScrollableWrapper: "rich-table-scrollable-wrapper",
31
32
  table: "rich-table",
@@ -82,33 +83,34 @@ var sharedStyles = {
82
83
  listItemChecked: "r8uj4tr",
83
84
  listItemUnchecked: "r8uj4tq",
84
85
  quote: "r8uj4ts",
85
- hr: "r8uj4tt",
86
- tableScrollableWrapper: "r8uj4tu",
87
- table: "r8uj4tx",
88
- tableCell: "r8uj4tv",
89
- tableCellHeader: "r8uj4tw",
90
- spoiler: "r8uj4ty",
91
- spoilerRevealed: "r8uj4tz",
92
- tag: "r8uj4t10",
93
- comment: "r8uj4t11",
94
- ruby: "r8uj4t12",
95
- rubyRt: "r8uj4t13",
96
- footnote: "r8uj4t14",
97
- footnoteRef: "r8uj4t15",
98
- footnoteHighlight: "r8uj4t16",
99
- footnoteRefWrapper: "r8uj4t17",
100
- footnoteSection: "r8uj4t18",
101
- footnoteSectionDivider: "r8uj4t19",
102
- footnoteSectionList: "r8uj4t1a",
103
- footnoteSectionItem: "r8uj4t1b",
104
- footnoteBackRef: "r8uj4t1c",
105
- footnoteSectionItemEdit: "r8uj4t1d",
106
- footnoteSectionItemNum: "r8uj4t1e",
107
- footnoteSectionItemInput: "r8uj4t1f",
108
- footnoteSectionItemRemove: "r8uj4t1g",
109
- dragHandle: "r8uj4t1h",
110
- dropIndicator: "r8uj4t1i",
111
- alert: "r8uj4t1j"
86
+ quoteAttribution: "r8uj4tt",
87
+ hr: "r8uj4tu",
88
+ tableScrollableWrapper: "r8uj4tv",
89
+ table: "r8uj4ty",
90
+ tableCell: "r8uj4tw",
91
+ tableCellHeader: "r8uj4tx",
92
+ spoiler: "r8uj4tz",
93
+ spoilerRevealed: "r8uj4t10",
94
+ tag: "r8uj4t11",
95
+ comment: "r8uj4t12",
96
+ ruby: "r8uj4t13",
97
+ rubyRt: "r8uj4t14",
98
+ footnote: "r8uj4t15",
99
+ footnoteRef: "r8uj4t16",
100
+ footnoteHighlight: "r8uj4t17",
101
+ footnoteRefWrapper: "r8uj4t18",
102
+ footnoteSection: "r8uj4t19",
103
+ footnoteSectionDivider: "r8uj4t1a",
104
+ footnoteSectionList: "r8uj4t1b",
105
+ footnoteSectionItem: "r8uj4t1c",
106
+ footnoteBackRef: "r8uj4t1d",
107
+ footnoteSectionItemEdit: "r8uj4t1e",
108
+ footnoteSectionItemNum: "r8uj4t1f",
109
+ footnoteSectionItemInput: "r8uj4t1g",
110
+ footnoteSectionItemRemove: "r8uj4t1h",
111
+ dragHandle: "r8uj4t1i",
112
+ dropIndicator: "r8uj4t1j",
113
+ alert: "r8uj4t1k"
112
114
  };
113
115
  //#endregion
114
116
  //#region src/styles/article.css.ts
@@ -1,9 +1,9 @@
1
- import { C as ImageNode, E as FootnoteNode, _ as KaTeXInlineNode, b as KaTeXBlockNode, c as SpoilerNode, d as MermaidNode, i as TagNode, j as _defineProperty, m as MentionNode, t as editorTheme } from "./theme-DG7I1YM5.js";
2
- import { _ as CODE_BLOCK_NODE_KEY, g as BANNER_NODE_KEY, l as RendererWrapper, s as useFootnoteDefinitions } from "./KaTeXRenderer-CqnhvDmj.js";
3
- import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
4
- import { C as $isCodeBlockNode, M as normalizeBannerType, N as BannerRenderer, O as $isBannerNode, S as CommentNode, T as CodeBlockRenderer, f as $isGridContainerNode, g as FootnoteSectionNode, i as VideoNode, j as BannerNode, n as builtinNodes, p as GridContainerNode, s as RubyNode, u as LinkCardNode, v as DetailsNode, w as CodeBlockNode } from "./config-ayEp2yVZ.js";
5
- import { n as gridStyles, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
6
- import { n as AlertQuoteEditNode, r as NESTED_EDITOR_NODES } from "./AlertQuoteEditNode-DjObnJI6.js";
1
+ import { C as KaTeXBlockNode, E as ImageNode, P as _defineProperty, _ as MentionNode, b as KaTeXInlineNode, c as SpoilerNode, i as TagNode, k as FootnoteNode, m as MermaidNode, t as editorTheme } from "./theme-BYSEh-ew.js";
2
+ import { _ as CODE_BLOCK_NODE_KEY, g as BANNER_NODE_KEY, l as RendererWrapper, s as useFootnoteDefinitions } from "./KaTeXRenderer-v5qDPxDO.js";
3
+ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-D77BtjJi.js";
4
+ import { C as $isCodeBlockNode, M as normalizeBannerType, N as BannerRenderer, O as $isBannerNode, S as CommentNode, T as CodeBlockRenderer, f as $isGridContainerNode, g as FootnoteSectionNode, i as VideoNode, j as BannerNode, n as builtinNodes, p as GridContainerNode, s as RubyNode, u as LinkCardNode, v as DetailsNode, w as CodeBlockNode } from "./config-Dxr6eH6Z.js";
5
+ import { n as gridStyles, t as gridClassNames } from "./grid.css-BxRbo20q.js";
6
+ import { n as AlertQuoteEditNode, r as NESTED_EDITOR_NODES } from "./AlertQuoteEditNode-DHQD6Hnp.js";
7
7
  import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
8
8
  import { ListPlugin } from "@lexical/react/LexicalListPlugin";
9
9
  import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
@@ -1,4 +1,6 @@
1
- import { Klass, LexicalNode } from 'lexical';
2
- export declare function setResolvedEditNodes(nodes: Array<Klass<LexicalNode>>): void;
3
- export declare function getResolvedEditNodes(): Array<Klass<LexicalNode>>;
1
+ import { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical';
2
+ type EditorNodeConfig = Klass<LexicalNode> | LexicalNodeReplacement;
3
+ export declare function setResolvedEditNodes(nodes: Array<EditorNodeConfig>): void;
4
+ export declare function getResolvedEditNodes(): Array<EditorNodeConfig>;
5
+ export {};
4
6
  //# sourceMappingURL=node-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-registry.d.ts","sourceRoot":"","sources":["../src/node-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAMjD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAE3E;AAED,wBAAgB,oBAAoB,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAEhE"}
1
+ {"version":3,"file":"node-registry.d.ts","sourceRoot":"","sources":["../src/node-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAI1E,KAAK,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC;AAIpE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAEzE;AAED,wBAAgB,oBAAoB,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAE9D"}
@@ -0,0 +1,18 @@
1
+ import { QuoteNode, SerializedQuoteNode } from '@lexical/rich-text';
2
+ import { LexicalNode, NodeKey, Spread } from 'lexical';
3
+ export type SerializedRichQuoteNode = Spread<{
4
+ attribution: string | null;
5
+ }, SerializedQuoteNode>;
6
+ export declare class RichQuoteNode extends QuoteNode {
7
+ __attribution: string | null;
8
+ constructor(attribution?: string | null, key?: NodeKey);
9
+ static getType(): string;
10
+ static clone(node: RichQuoteNode): RichQuoteNode;
11
+ static importJSON(serializedNode: SerializedRichQuoteNode): RichQuoteNode;
12
+ exportJSON(): SerializedRichQuoteNode;
13
+ getAttribution(): string | null;
14
+ setAttribution(value: string | null): this;
15
+ }
16
+ export declare function $createRichQuoteNode(attribution?: string | null): RichQuoteNode;
17
+ export declare function $isRichQuoteNode(node: LexicalNode | null | undefined): node is RichQuoteNode;
18
+ //# sourceMappingURL=RichQuoteNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichQuoteNode.d.ts","sourceRoot":"","sources":["../../src/nodes/RichQuoteNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,mBAAmB,CAAC,CAAC;AAQlG,qBAAa,aAAc,SAAQ,SAAS;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEjB,WAAW,GAAE,MAAM,GAAG,IAAW,EAAE,GAAG,CAAC,EAAE,OAAO;IAK5D,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa;IAIhD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,uBAAuB,GAAG,aAAa;IAKzE,UAAU,IAAI,uBAAuB;IAQrC,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;CAK3C;AAED,wBAAgB,oBAAoB,CAAC,WAAW,GAAE,MAAM,GAAG,IAAW,GAAG,aAAa,CAErF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,aAAa,CAE5F"}
@@ -1,3 +1,3 @@
1
- import { Klass, LexicalNode } from 'lexical';
2
- export declare const NESTED_EDITOR_NODES: Array<Klass<LexicalNode>>;
1
+ import { Klass, LexicalNode, LexicalNodeReplacement } from 'lexical';
2
+ export declare const NESTED_EDITOR_NODES: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
3
3
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/nodes/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQlD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAiBzD,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/nodes/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAS1E,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAmBlF,CAAC"}
@@ -27,6 +27,8 @@ export type { SerializedTagNode } from './nodes/TagNode';
27
27
  export { $createTagNode, $isTagNode, TagNode } from './nodes/TagNode';
28
28
  export type { BannerType } from './nodes/BannerNode';
29
29
  export { BANNER_LABELS, BANNER_TYPES } from './nodes/BannerNode';
30
+ export type { SerializedRichQuoteNode } from './nodes/RichQuoteNode';
31
+ export { $createRichQuoteNode, $isRichQuoteNode, RichQuoteNode } from './nodes/RichQuoteNode';
30
32
  export type { SerializedCommentNode } from './nodes/CommentNode';
31
33
  export { $createCommentNode, $isCommentNode, CommentNode } from './nodes/CommentNode';
32
34
  //# sourceMappingURL=nodes-entry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes-entry.d.ts","sourceRoot":"","sources":["../src/nodes-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9E,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG9E,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG1F,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtF,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtF,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG1E,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGtE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"nodes-entry.d.ts","sourceRoot":"","sources":["../src/nodes-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9E,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG9E,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG1F,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtF,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtF,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG1E,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAGtE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG9F,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { a as FootnoteSectionEditNode, i as customEditNodes, n as setResolvedEditNodes, r as allEditNodes, t as getResolvedEditNodes } from "./node-registry-jA2ieiI5.js";
2
- import { C as ImageNode, O as ALERT_LABELS, S as $isImageNode, _ as KaTeXInlineNode, b as KaTeXBlockNode, d as MermaidNode, f as $createMentionNode, g as $isKaTeXInlineNode, i as TagNode, k as ALERT_TYPES, l as $createMermaidNode, m as MentionNode, n as $createTagNode, p as $isMentionNode, r as $isTagNode, u as $isMermaidNode, x as $createImageNode, y as $isKaTeXBlockNode } from "./theme-DG7I1YM5.js";
3
- import { A as BANNER_TYPES, S as CommentNode, a as $createRubyNode, c as $createLinkCardNode, d as $createGridContainerNode, f as $isGridContainerNode, g as FootnoteSectionNode, h as $isFootnoteSectionNode, k as BANNER_LABELS, l as $isLinkCardNode, m as $createFootnoteSectionNode, n as builtinNodes, o as $isRubyNode, p as GridContainerNode, r as customNodes, s as RubyNode, t as allNodes, u as LinkCardNode, x as $isCommentNode, y as $createCommentNode } from "./config-ayEp2yVZ.js";
4
- import { r as NESTED_EDITOR_NODES } from "./AlertQuoteEditNode-DjObnJI6.js";
5
- export { $createCommentNode, $createFootnoteSectionNode, $createGridContainerNode, $createImageNode, $createLinkCardNode, $createMentionNode, $createMermaidNode, $createRubyNode, $createTagNode, $isCommentNode, $isFootnoteSectionNode, $isGridContainerNode, $isImageNode, $isKaTeXBlockNode, $isKaTeXInlineNode, $isLinkCardNode, $isMentionNode, $isMermaidNode, $isRubyNode, $isTagNode, ALERT_LABELS, ALERT_TYPES, BANNER_LABELS, BANNER_TYPES, CommentNode, FootnoteSectionEditNode, FootnoteSectionNode, GridContainerNode, ImageNode, KaTeXBlockNode, KaTeXInlineNode, LinkCardNode, MentionNode, MermaidNode, NESTED_EDITOR_NODES, RubyNode, TagNode, allEditNodes, allNodes, builtinNodes, customEditNodes, customNodes, getResolvedEditNodes, setResolvedEditNodes };
1
+ import { a as FootnoteSectionEditNode, i as customEditNodes, n as setResolvedEditNodes, r as allEditNodes, t as getResolvedEditNodes } from "./node-registry-BvWtlw0M.js";
2
+ import { C as KaTeXBlockNode, E as ImageNode, M as ALERT_TYPES, S as $isKaTeXBlockNode, T as $isImageNode, _ as MentionNode, b as KaTeXInlineNode, d as RichQuoteNode, f as $createMermaidNode, g as $isMentionNode, h as $createMentionNode, i as TagNode, j as ALERT_LABELS, l as $createRichQuoteNode, m as MermaidNode, n as $createTagNode, p as $isMermaidNode, r as $isTagNode, u as $isRichQuoteNode, w as $createImageNode, y as $isKaTeXInlineNode } from "./theme-BYSEh-ew.js";
3
+ import { A as BANNER_TYPES, S as CommentNode, a as $createRubyNode, c as $createLinkCardNode, d as $createGridContainerNode, f as $isGridContainerNode, g as FootnoteSectionNode, h as $isFootnoteSectionNode, k as BANNER_LABELS, l as $isLinkCardNode, m as $createFootnoteSectionNode, n as builtinNodes, o as $isRubyNode, p as GridContainerNode, r as customNodes, s as RubyNode, t as allNodes, u as LinkCardNode, x as $isCommentNode, y as $createCommentNode } from "./config-Dxr6eH6Z.js";
4
+ import { r as NESTED_EDITOR_NODES } from "./AlertQuoteEditNode-DHQD6Hnp.js";
5
+ export { $createCommentNode, $createFootnoteSectionNode, $createGridContainerNode, $createImageNode, $createLinkCardNode, $createMentionNode, $createMermaidNode, $createRichQuoteNode, $createRubyNode, $createTagNode, $isCommentNode, $isFootnoteSectionNode, $isGridContainerNode, $isImageNode, $isKaTeXBlockNode, $isKaTeXInlineNode, $isLinkCardNode, $isMentionNode, $isMermaidNode, $isRichQuoteNode, $isRubyNode, $isTagNode, ALERT_LABELS, ALERT_TYPES, BANNER_LABELS, BANNER_TYPES, CommentNode, FootnoteSectionEditNode, FootnoteSectionNode, GridContainerNode, ImageNode, KaTeXBlockNode, KaTeXInlineNode, LinkCardNode, MentionNode, MermaidNode, NESTED_EDITOR_NODES, RichQuoteNode, RubyNode, TagNode, allEditNodes, allNodes, builtinNodes, customEditNodes, customNodes, getResolvedEditNodes, setResolvedEditNodes };
@@ -49,10 +49,52 @@ var createEmptyParagraphNode = () => ({
49
49
  type: "paragraph",
50
50
  version: 1
51
51
  });
52
+ var boundaryTextContainers = new Set(["root", "quote"]);
53
+ function isRecord(value) {
54
+ return typeof value === "object" && value !== null;
55
+ }
56
+ function isBoundaryNewlineTextNode(node) {
57
+ if (!isRecord(node) || node.type !== "text" || typeof node.text !== "string") return false;
58
+ return node.text.trim() === "" && /[\n\r]/.test(node.text);
59
+ }
60
+ function trimBoundaryTextNodes(children) {
61
+ let start = 0;
62
+ let end = children.length;
63
+ while (start < end && isBoundaryNewlineTextNode(children[start])) start += 1;
64
+ while (end > start && isBoundaryNewlineTextNode(children[end - 1])) end -= 1;
65
+ return start === 0 && end === children.length ? children : children.slice(start, end);
66
+ }
67
+ function normalizeSerializedNode(node) {
68
+ if (!isRecord(node) || !Array.isArray(node.children)) return node;
69
+ let changed = false;
70
+ let children = node.children.map((child) => {
71
+ const normalizedChild = normalizeSerializedNode(child);
72
+ if (normalizedChild !== child) changed = true;
73
+ return normalizedChild;
74
+ });
75
+ if (boundaryTextContainers.has(String(node.type))) {
76
+ const trimmedChildren = trimBoundaryTextNodes(children);
77
+ if (trimmedChildren !== children) {
78
+ changed = true;
79
+ children = trimmedChildren;
80
+ }
81
+ }
82
+ return changed ? {
83
+ ...node,
84
+ children
85
+ } : node;
86
+ }
52
87
  function normalizeSerializedEditorState(state) {
53
88
  const root = state?.root;
54
89
  const children = Array.isArray(root?.children) ? [...root.children] : [];
55
- if (root?.type === "root" && children.length > 0) return state;
90
+ if (root?.type === "root" && children.length > 0) {
91
+ const normalizedRoot = normalizeSerializedNode(root);
92
+ if (normalizedRoot !== root) return {
93
+ ...state,
94
+ root: normalizedRoot
95
+ };
96
+ return state;
97
+ }
56
98
  if (!state) return { root: {
57
99
  children: [createEmptyParagraphNode()],
58
100
  direction: null,
@@ -63,7 +105,7 @@ function normalizeSerializedEditorState(state) {
63
105
  } };
64
106
  return {
65
107
  ...state,
66
- root: {
108
+ root: normalizeSerializedNode({
67
109
  ...root,
68
110
  children: children.length > 0 ? children : [createEmptyParagraphNode()],
69
111
  direction: root?.direction ?? null,
@@ -71,7 +113,7 @@ function normalizeSerializedEditorState(state) {
71
113
  indent: typeof root?.indent === "number" ? root.indent : 0,
72
114
  type: "root",
73
115
  version: typeof root?.version === "number" ? root.version : 1
74
- }
116
+ })
75
117
  };
76
118
  }
77
119
  //#endregion
@@ -1,3 +1,3 @@
1
- import { A as ImageUploadProvider, D as defaultImageUpload, E as ImageUploadPlugin, F as ALL_TRANSFORMERS, I as HorizontalRulePlugin, L as BlockExitPlugin, M as CorePlugins, N as MarkdownShortcutsPlugin, O as BlockIdPlugin, P as MarkdownPastePlugin, R as AutoLinkPlugin, T as LinkFaviconPlugin, a as AutoFocusPlugin, i as EditorRefPlugin, j as useImageUpload, k as blockIdState, n as OnChangePlugin, o as TextSelectionPlugin, r as FootnotePlugin, t as SubmitShortcutPlugin } from "./SubmitShortcutPlugin-vSiGZdqf.js";
2
- import { a as KaTeXPlugin, c as AlertPlugin, n as MermaidPlugin, s as ImagePlugin } from "./MermaidPlugin-_gPgU34D.js";
1
+ import { A as ImageUploadProvider, D as defaultImageUpload, E as ImageUploadPlugin, F as ALL_TRANSFORMERS, I as HorizontalRulePlugin, L as BlockExitPlugin, M as CorePlugins, N as MarkdownShortcutsPlugin, O as BlockIdPlugin, P as MarkdownPastePlugin, R as AutoLinkPlugin, T as LinkFaviconPlugin, a as AutoFocusPlugin, i as EditorRefPlugin, j as useImageUpload, k as blockIdState, n as OnChangePlugin, o as TextSelectionPlugin, r as FootnotePlugin, t as SubmitShortcutPlugin } from "./SubmitShortcutPlugin-Bj7djTO0.js";
2
+ import { a as KaTeXPlugin, c as AlertPlugin, n as MermaidPlugin, s as ImagePlugin } from "./MermaidPlugin-Dn7ABeA5.js";
3
3
  export { ALL_TRANSFORMERS, AlertPlugin, AutoFocusPlugin, AutoLinkPlugin, BlockExitPlugin, BlockIdPlugin, CorePlugins, EditorRefPlugin, FootnotePlugin, HorizontalRulePlugin, ImagePlugin, ImageUploadPlugin, ImageUploadProvider, KaTeXPlugin, LinkFaviconPlugin, MarkdownPastePlugin, MarkdownShortcutsPlugin, MermaidPlugin, OnChangePlugin, SubmitShortcutPlugin, TextSelectionPlugin, blockIdState, defaultImageUpload, useImageUpload };
@@ -1,7 +1,7 @@
1
- import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, i as FootnoteStaticRenderer, l as RendererWrapper, n as computeImageMeta, o as useFootnoteContent, r as decodeThumbHash, t as KaTeXRenderer, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-CqnhvDmj.js";
2
- import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
1
+ import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, i as FootnoteStaticRenderer, l as RendererWrapper, n as computeImageMeta, o as useFootnoteContent, r as decodeThumbHash, t as KaTeXRenderer, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-v5qDPxDO.js";
2
+ import { l as semanticClassNames, r as clsx, u as sharedStyles } from "./katex.css-D77BtjJi.js";
3
3
  import { t as LinkCardRenderer } from "./LinkCardRenderer-CigqFwCv.js";
4
- import { t as RubyRenderer } from "./RubyRenderer-jOkydJHg.js";
4
+ import { t as RubyRenderer } from "./RubyRenderer-C3x1kf4k.js";
5
5
  import { useCallback } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { TooltipContent, TooltipRoot, TooltipTrigger } from "@haklex/rich-editor-ui";
@@ -1,2 +1,2 @@
1
- :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk0{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk1{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.8;--rc-line-height-tight:1.4;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk2{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-line-height:1.5;--rc-line-height-tight:1.3;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.dark ._13h71jk0,[data-theme=dark] ._13h71jk0,.dark._13h71jk0,[data-theme=dark]._13h71jk0,.dark ._13h71jk1,[data-theme=dark] ._13h71jk1,.dark._13h71jk1,[data-theme=dark]._13h71jk1,.dark ._13h71jk2,[data-theme=dark] ._13h71jk2,.dark._13h71jk2,[data-theme=dark]._13h71jk2{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}@keyframes r8uj4t0{to{--rc-hl-highlighted:1}}@keyframes r8uj4t1{0%{background-color:#ef44443d}to{background-color:#0000}}.r8uj4t2{font-family:var(--rc-font-family);font-size:var(--rc-font-size-base);line-height:var(--rc-line-height);color:var(--rc-text);word-wrap:break-word;overflow-wrap:break-word}.r8uj4t3{line-height:var(--rc-line-height);margin:0 0 1em}.r8uj4t4{font-weight:700}.r8uj4t5{font-style:italic}.r8uj4t6{text-decoration:underline}.r8uj4t7{opacity:.65;text-decoration:line-through}.r8uj4t8{vertical-align:super;font-size:.8em}.r8uj4t9{vertical-align:sub;font-size:.8em}.r8uj4ta{font-family:var(--rc-font-mono);background-color:var(--rc-code-bg);color:inherit;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);padding:2px 6px;font-size:.9em}[contenteditable=true] .r8uj4ta{padding-right:0}.r8uj4tb{--rc-hl-lightness:.3;--rc-hl-highlighted:1;--rc-hl-color:oklch(from var(--rc-accent) l c h / var(--rc-hl-lightness));background:linear-gradient(120deg, var(--rc-hl-color,lightblue) 50%, transparent 50%) 110% 0 / 200% 100% no-repeat;background-position:calc((1 - var(--rc-hl-highlighted)) * 110%) 0;color:var(--rc-text);transition:background-position 1s}[contenteditable=true] .r8uj4tb{--rc-hl-highlighted:1;animation:none}[data-theme=dark] .r8uj4tb{--rc-hl-lightness:.35}.r8uj4tc{color:var(--rc-text-secondary);opacity:0;align-items:center;font-size:.8rem;text-decoration:none;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0;left:-1.25rem}.r8uj4td{font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em;position:relative}[contenteditable=true] .r8uj4td:before{content:"H1";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4te{font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em;position:relative}[contenteditable=true] .r8uj4te:before{content:"H2";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tf{font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em;position:relative}[contenteditable=true] .r8uj4tf:before{content:"H3";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tg{font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em;position:relative}[contenteditable=true] .r8uj4tg:before{content:"H4";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4th{font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em;position:relative}[contenteditable=true] .r8uj4th:before{content:"H5";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4ti{font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);color:var(--rc-text);margin-top:1em;margin-bottom:.25em;position:relative}[contenteditable=true] .r8uj4ti:before{content:"H6";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tj{color:var(--rc-link);text-decoration:none;transition:color .2s}.r8uj4tj:hover{text-decoration:underline}.r8uj4tj[data-favicon=loaded]:before{content:"";vertical-align:-.125em;background-image:var(--rc-link-favicon);background-position:50%;background-repeat:no-repeat;background-size:contain;border-radius:2px;width:1em;height:1em;margin-right:.2em;display:inline-block}.r8uj4tk{vertical-align:-.125em;align-items:center;margin-right:.15em;display:inline-flex}.r8uj4tl{padding-left:var(--rc-space-lg);margin-bottom:1em;list-style-type:decimal}.r8uj4tm{padding-left:var(--rc-space-lg);margin-bottom:1em;list-style-type:disc}.r8uj4tn{margin-bottom:.25em}.r8uj4to{list-style-type:none}.r8uj4tp{padding-left:0;list-style-type:none}.r8uj4tq{--rc-cb-size:1.125rem;outline:none;padding-left:2em;list-style-type:none;transition:color .25s;position:relative}.r8uj4tq:before{content:"";left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:#0000;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s;position:absolute}.r8uj4tq:after{content:"";left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;pointer-events:none;transform-origin:50%;opacity:0;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s;display:block;position:absolute;transform:rotate(45deg)scale(0)}[contenteditable=true] .r8uj4tq:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tq:hover:before{border-color:var(--rc-text-tertiary)}.r8uj4tr{--rc-cb-size:1.125rem;color:var(--rc-text-secondary);outline:none;padding-left:2em;list-style-type:none;transition:color .25s;position:relative}.r8uj4tr:before{content:"";left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:var(--rc-accent-light);border-color:var(--rc-accent);transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s;position:absolute}.r8uj4tr:after{content:"";left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;pointer-events:none;transform-origin:50%;opacity:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s;display:block;position:absolute;transform:rotate(45deg)scale(1)}[contenteditable=true] .r8uj4tr:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tr:hover:before{background-color:color-mix(in oklab, var(--rc-accent) 12%, transparent)}.r8uj4ts{background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 4px);color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0;font-style:normal;position:relative}.r8uj4ts:before{content:"";border-radius:var(--rc-radius-sm);background-color:var(--rc-quote-border);width:4px;position:absolute;top:0;bottom:0;left:0}.r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4tu{overflow-x:auto}.r8uj4tv{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:1.25em var(--rc-space-lg);text-align:left;vertical-align:middle;line-height:1.5}.r8uj4tv:last-child{border-right:none}.r8uj4tw{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:var(--rc-space-md) var(--rc-space-lg);text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;z-index:1;font-size:.75em;font-weight:600;line-height:1.5;position:sticky;top:0}.r8uj4tw:last-child{border-right:none}.r8uj4tx{border-collapse:separate;border-spacing:0;width:100%;margin:var(--rc-space-lg) 0;font-size:var(--rc-font-size-small);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);overflow:hidden}.r8uj4ty{background-color:var(--rc-text);color:#0000;border-radius:var(--rc-radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;padding-inline-start:4px;padding-inline-end:4px;transition:background-color .3s,color .3s}[contenteditable=true] .r8uj4ty{background-color:color-mix(in srgb, var(--rc-text) 30%, transparent);color:inherit;-webkit-user-select:auto;user-select:auto;cursor:text}.r8uj4ty:hover{color:inherit;-webkit-user-select:auto;user-select:auto;background-color:#0000}.rich-content .r8uj4ty{background-color:var(--rc-text-tertiary);color:#0000}.rich-content .r8uj4ty:not(:hover):not(.rich-spoiler-revealed) *{color:#0000!important}.rich-content .r8uj4ty:hover,.r8uj4tz{color:inherit;-webkit-user-select:auto;user-select:auto;background-color:#0000}.r8uj4t10{font-size:var(--rc-font-size-small);vertical-align:baseline;border-radius:999px;padding-inline-start:.75em;padding-inline-end:.75em;line-height:1.6;display:inline-block}.r8uj4t11{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);background-color:var(--rc-code-bg);border:1px dashed var(--rc-border);border-radius:var(--rc-radius-sm);white-space:break-spaces;padding:2px 6px;display:inline-block}.r8uj4t11:before{content:"<!--";opacity:.7}.r8uj4t11:after{content:"-->";opacity:.7}.r8uj4t12{ruby-position:over;ruby-align:center}[contenteditable=true] .r8uj4t12[data-ruby]{padding-top:.72em;line-height:1.2;display:inline-block;position:relative}[contenteditable=true] .r8uj4t12[data-ruby]:before{content:attr(data-ruby);text-align:center;color:var(--rc-text-secondary);pointer-events:none;white-space:nowrap;font-size:.58em;line-height:1;position:absolute;top:0;left:0;right:0;transform:translateY(-.68em)}.r8uj4t13{color:var(--rc-text-secondary);-webkit-user-select:none;user-select:none;font-size:.58em;line-height:1}.r8uj4t14{vertical-align:super;font-size:.8em}.r8uj4t15{min-width:1.5em;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;justify-content:center;align-items:center;padding:0 .35em;font-size:.82em;font-weight:600;line-height:1.45;text-decoration:none;transition:filter .15s;display:inline-flex}.r8uj4t15:hover{filter:brightness(.96)}.r8uj4t16{animation:1.2s ease-out r8uj4t1}.r8uj4t17{display:inline;position:relative}.r8uj4t18{margin-top:var(--rc-space-lg)}.r8uj4t19{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t1a{padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6;list-style-type:decimal}.r8uj4t1b{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t1c{margin-left:var(--rc-space-xs);color:var(--rc-accent);font-size:.85em;font-family:var(--rc-font-mono);align-items:center;text-decoration:none;transition:opacity .15s;display:inline-flex}.r8uj4t1c:hover{opacity:.7}.r8uj4t1d{align-items:center;gap:var(--rc-space-sm);list-style-type:none;display:flex}.r8uj4t1e{color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);flex-shrink:0;min-width:1.5em;font-weight:600}.r8uj4t1f{border:1px solid var(--rc-border);border-radius:var(--rc-radius-sm);padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);color:var(--rc-text);background-color:#0000;outline:none;flex:1;transition:border-color .15s}.r8uj4t1f:focus{border-color:var(--rc-accent)}.r8uj4t1g{width:20px;height:20px;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;transition:color .15s,background-color .15s;display:inline-flex}.r8uj4t1g:hover{color:#ef4444;background-color:#ef44441a}.r8uj4t1h{cursor:grab;border-radius:var(--rc-radius-sm);width:20px;height:20px;color:var(--rc-text-secondary);opacity:.4;z-index:10;justify-content:center;align-items:center;transition:opacity .15s,background-color .15s;display:flex;position:absolute}.r8uj4t1h:hover{opacity:1;background-color:var(--rc-fill-secondary)}.r8uj4t1h:active{cursor:grabbing}.r8uj4t1i{background-color:var(--rc-accent);pointer-events:none;z-index:10;border-radius:1px;height:2px;position:absolute}.r8uj4t1j{background-color:#0000;border:none;border-radius:0;margin:2em 0;padding:0 1em}.r8uj4t2 mark{background:0 0}.r8uj4t2 img{border-radius:var(--rc-radius-md);max-width:100%;height:auto}.r8uj4t2>:first-child,.r8uj4t2 .rich-editor__content>:first-child{margin-top:0}.r8uj4t2>:last-child,.r8uj4t2 .rich-editor__content>:last-child{margin-bottom:0}.r8uj4tc svg{flex-shrink:0}.r8uj4td:hover .r8uj4tc{opacity:.5}.r8uj4td:hover .r8uj4tc:hover{opacity:1}.r8uj4te:hover .r8uj4tc{opacity:.5}.r8uj4te:hover .r8uj4tc:hover{opacity:1}.r8uj4tf:hover .r8uj4tc{opacity:.5}.r8uj4tf:hover .r8uj4tc:hover{opacity:1}.r8uj4tg:hover .r8uj4tc{opacity:.5}.r8uj4tg:hover .r8uj4tc:hover{opacity:1}.r8uj4th:hover .r8uj4tc{opacity:.5}.r8uj4th:hover .r8uj4tc:hover{opacity:1}.r8uj4ti:hover .r8uj4tc{opacity:.5}.r8uj4ti:hover .r8uj4tc:hover{opacity:1}.r8uj4tk img{object-fit:contain;border-radius:2px;width:1em;height:1em}.r8uj4tk svg{width:.9em;height:.9em}.r8uj4to .r8uj4tl{list-style-type:lower-alpha}.r8uj4to .r8uj4tm{list-style-type:circle}.r8uj4tr>*,.r8uj4tq>*{background-image:linear-gradient(var(--rc-text-secondary), var(--rc-text-secondary));background-position:0;background-repeat:no-repeat;background-size:0% 1.5px;transition:background-size .35s cubic-bezier(.4,0,.2,1) .15s,opacity .15s}.r8uj4tr>*{opacity:.5;background-size:100% 1.5px}.r8uj4ts>.r8uj4t3:first-child{margin-top:0}.r8uj4ts>.r8uj4t3:last-child{margin-bottom:0}.r8uj4tx tbody tr:last-child .r8uj4tv{border-bottom:none}.r8uj4tv .r8uj4t3{line-height:inherit;margin:0;padding:0}.r8uj4tv>:first-child{margin-top:0}.r8uj4tv>:last-child{margin-bottom:0}.r8uj4tw .r8uj4t3{line-height:inherit;margin:0;padding:0}.r8uj4tw>:first-child{margin-top:0}.r8uj4tw>:last-child{margin-bottom:0}@supports (animation-timeline:view()){.r8uj4tb{--rc-hl-highlighted:0;animation:step-end both r8uj4t0;animation-timeline:view();animation-range:entry 100% cover 10%}}._1o2d5g50{margin:var(--rc-space-md) 0;interpolate-size:allow-keywords;background-color:#0000;border:none}._1o2d5g51{align-items:flex-start;gap:var(--rc-space-sm);cursor:pointer;-webkit-user-select:none;user-select:none;padding:var(--rc-space-xs) 0;color:var(--rc-text);font-size:1em;font-weight:500;line-height:var(--rc-line-height);border-radius:var(--rc-radius-sm);outline:none;list-style:none;transition:opacity .2s,color .2s,box-shadow .2s;display:flex}._1o2d5g51:hover{opacity:.82}._1o2d5g51:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._1o2d5g51::-webkit-details-marker{display:none}._1o2d5g51::marker{content:"";display:none}._1o2d5g52{flex:1;min-width:0}._1o2d5g53{width:1.25rem;height:1.25rem;color:var(--rc-text-tertiary);transform-origin:50%;flex-shrink:0;justify-content:center;align-items:center;transition:transform .35s cubic-bezier(.4,0,.2,1),color .2s;display:inline-flex;position:relative;top:.25rem}._1o2d5g54{margin-top:var(--rc-space-xs);padding:var(--rc-space-sm) var(--rc-space-xl);color:var(--rc-text-secondary);background-color:color-mix(in srgb, var(--rc-accent) 6%, var(--rc-bg-secondary));border-radius:var(--rc-radius-md)}._1o2d5g51:hover ._1o2d5g53{color:var(--rc-text-secondary)}._1o2d5g50[open] ._1o2d5g53{color:var(--rc-accent);transform:rotate(90deg)}._1o2d5g50::details-content{opacity:0;content-visibility:hidden;height:0;transition:height .4s cubic-bezier(.4, 0, .2, 1), opacity .4s cubic-bezier(.4, 0, .2, 1), content-visibility .4s cubic-bezier(.4, 0, .2, 1) allow-discrete;display:block;overflow:hidden}._1o2d5g50[open]::details-content{opacity:1;content-visibility:visible;height:auto}._1o2d5g54>.r8uj4t3:first-child{margin-top:0}._1o2d5g54>.r8uj4t3:last-child{margin-bottom:0}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);color:var(--rc-text);line-height:1.75}.v10dui0 .r8uj4t3{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .r8uj4td{color:var(--rc-text);margin-top:0;margin-bottom:.833333em;font-size:3em;font-weight:800;line-height:1}.v10dui0 .r8uj4te{color:var(--rc-text);margin-top:1.86667em;margin-bottom:1.06667em;font-size:1.875em;font-weight:700;line-height:1.33333}.v10dui0 .r8uj4tf{color:var(--rc-text);margin-top:1.66667em;margin-bottom:.666667em;font-size:1.5em;font-weight:600;line-height:1.5}.v10dui0 .r8uj4tg{color:var(--rc-text);margin-top:2em;margin-bottom:.5em;font-weight:600;line-height:1.5625}.v10dui0 .r8uj4te+*,.v10dui0 .r8uj4tf+*,.v10dui0 .r8uj4tg+*{margin-top:0}.v10dui0 .r8uj4ts{color:var(--rc-text);quotes:"“""”""‘""’";background-color:#0000;border-radius:0;margin-top:2.5em;margin-bottom:2.5em;padding-left:calc(1.5em + 4px);font-style:italic;font-weight:500}.v10dui0 .r8uj4ts:not([data-no-open-quote]) .r8uj4t3:first-of-type:before{content:open-quote}.v10dui0 .r8uj4ts:not([data-no-close-quote]) .r8uj4t3:last-of-type:after{content:close-quote}.v10dui0 .r8uj4ts .r8uj4t3:first-child{margin-top:0}.v10dui0 .r8uj4ts .r8uj4t3:last-child{margin-bottom:0}.v10dui0 .r8uj4ta{color:inherit;background-color:var(--rc-code-bg);border-radius:var(--rc-radius-sm);font-size:.875em;font-weight:600;font-family:var(--rc-font-mono);padding:.2em .4em}.v10dui0 .r8uj4ta:before,.v10dui0 .r8uj4ta:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.v10dui0 [contenteditable=true] .r8uj4ta:before,.v10dui0 [contenteditable=true] .r8uj4ta:after{content:""}.v10dui0 .rich-code-block{color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:.375rem;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.75}.v10dui0 .rich-code-block pre{margin:0;padding:1em 1.5em}.v10dui0 .r8uj4tm,.v10dui0 .r8uj4tl{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .r8uj4tn{margin-top:.75em;margin-bottom:.75em}.v10dui0 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.5em}.v10dui0 .r8uj4tn .r8uj4t3{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tn>.r8uj4t3:first-child{margin-top:1.5em}.v10dui0 .r8uj4tn>.r8uj4t3:last-child{margin-bottom:1.5em}.v10dui0 .r8uj4tm .r8uj4tm,.v10dui0 .r8uj4tm .r8uj4tl,.v10dui0 .r8uj4tl .r8uj4tm,.v10dui0 .r8uj4tl .r8uj4tl{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4tx .r8uj4t3{line-height:inherit;margin:0;padding:0}.v10dui0 .rich-image{margin-top:2em;margin-bottom:2em}.v10dui0 .rich-image>*{margin-top:0;margin-bottom:0}.v10dui0 .rich-image figcaption{color:var(--rc-text-secondary);margin-top:1em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4tt{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .r8uj4tt+*{margin-top:0}.v10dui0 .r8uj4tj{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 ._1o2d5g50{margin:2em 0}.v10dui0>:first-child{margin-top:0}.v10dui0>:last-child{margin-bottom:0}.egstxq0{vertical-align:middle;padding:0 2px;display:inline}.egstxq1{text-align:center;padding:var(--rc-space-md) 0;margin:var(--rc-space-md) 0;display:block;overflow-x:auto}.egstxq2{font-family:var(--rc-font-mono);color:var(--rc-code-text);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-sm);padding:2px 6px;font-size:.9em}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .r8uj4t3{margin-bottom:.6em}._14ko36c0 .r8uj4td{margin-top:.8em;margin-bottom:.3em;font-size:1.35em;font-weight:700}._14ko36c0 .r8uj4te{margin-top:.7em;margin-bottom:.25em;font-size:1.2em;font-weight:700}._14ko36c0 .r8uj4tf{margin-top:.6em;margin-bottom:.2em;font-size:1.1em;font-weight:600}._14ko36c0 .r8uj4tg{margin-top:.5em;margin-bottom:.15em;font-size:1em;font-weight:600}._14ko36c0 .r8uj4th{margin-top:.45em;margin-bottom:.1em;font-size:.9em;font-weight:600}._14ko36c0 .r8uj4ti{margin-top:.4em;margin-bottom:.1em;font-size:.85em;font-weight:600}._14ko36c0 .r8uj4ts{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 3px);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .r8uj4ts:before{width:3px}._14ko36c0 .r8uj4tl,._14ko36c0 .r8uj4tm{padding-left:var(--rc-space-md);margin-bottom:.6em}._14ko36c0 .r8uj4tn{margin-bottom:.1em}._14ko36c0 .rich-code-block{margin:var(--rc-space-sm) 0;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small)}._14ko36c0 .rich-code-block pre{padding:var(--rc-space-sm)}._14ko36c0 .line:before{display:none!important}._14ko36c0 .r8uj4tx{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tv,._14ko36c0 .r8uj4tw{padding:var(--rc-space-xs) var(--rc-space-sm)}._14ko36c0 .rich-image{margin:var(--rc-space-sm) 0}._14ko36c0 .rich-image figcaption{font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .r8uj4t1j{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .egstxq1{padding:var(--rc-space-sm) 0;margin:var(--rc-space-sm) 0}.ys4fw90{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);color:var(--rc-text);line-height:1.8}.ys4fw90 .rich-editor__content>.r8uj4t3,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:not(:first-of-type){text-indent:2em}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type{margin-top:0}.ys4fw90 .rich-editor__content>.r8uj4t3:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2em}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type:first-letter{float:left;margin-right:.2em;font-size:2.4em;line-height:1}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type:first-letter{color:var(--rc-accent);font-size:1.5em;font-weight:700}.ys4fw90 .rich-editor__content>.r8uj4t3:last-child,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:last-child{margin-bottom:0}.ys4fw90 .r8uj4t4{font-family:var(--rc-font-family);color:var(--rc-text);font-weight:600}.ys4fw90 .r8uj4td{letter-spacing:-.025em;color:var(--rc-text);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.ys4fw90 .r8uj4te{letter-spacing:-.025em;color:var(--rc-text);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.ys4fw90 .r8uj4te+*{margin-top:0}.ys4fw90 .r8uj4tf{letter-spacing:-.025em;color:var(--rc-text);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.ys4fw90 .r8uj4tf+*{margin-top:0}.ys4fw90 .r8uj4tg{color:var(--rc-text);margin-top:1.5em;margin-bottom:.5em;font-size:1.125em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4tg+*{margin-top:0}.ys4fw90 .r8uj4th{color:var(--rc-text);margin-top:1.5em;margin-bottom:.5em;font-size:1em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4th+*{margin-top:0}.ys4fw90 .r8uj4ti{color:var(--rc-text);text-transform:uppercase;margin-top:1.5em;margin-bottom:.5em;font-size:.875em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4ti+*{margin-top:0}.ys4fw90 .r8uj4ts{font-family:var(--rc-font-family-kai);color:color-mix(in srgb, var(--rc-accent) 60%, var(--rc-text));background-color:color-mix(in srgb, var(--rc-accent) 12%, var(--rc-bg));text-indent:0;border-radius:2px;margin:1.6em 0;padding:1.2em 1.5em;font-style:normal;line-height:1.75;transform:rotate(-.6deg);box-shadow:2px 3px 8px #00000014,0 1px 2px #0000000a}.ys4fw90 .r8uj4ts:before{content:"";background:repeating-linear-gradient(105deg, transparent, transparent 2px, #ffffff14 2px, #ffffff14 4px), color-mix(in srgb, var(--rc-accent) 20%, #0000000f);opacity:.85;border-radius:1px;width:56px;height:16px;position:absolute;top:-7px;bottom:auto;left:50%;transform:translate(-50%)rotate(1.2deg);box-shadow:0 1px 2px #0000000f}.ys4fw90 .r8uj4ts .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .r8uj4tj{text-underline-offset:2px;font-weight:500;text-decoration:underline;text-decoration-thickness:1px;transition:color .15s}.ys4fw90 .r8uj4tj:hover{text-decoration-thickness:2px}.ys4fw90 .r8uj4ta{font-size:.875em;font-family:var(--rc-font-mono);border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg);padding:.2em .4em;font-weight:500}.ys4fw90 .r8uj4tl,.ys4fw90 .r8uj4tm{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .r8uj4tn{margin-top:.5em;margin-bottom:.5em}.ys4fw90 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.375em}.ys4fw90 .r8uj4tn::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{border-radius:var(--rc-radius-md);margin-top:1.71429em;margin-bottom:1.71429em;font-size:.875em;line-height:1.71429;overflow-x:auto}.ys4fw90 .rich-code-block pre{margin:0;padding:.857143em 1.14286em}.ys4fw90 .r8uj4tx{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.ys4fw90 .r8uj4tx .r8uj4t3{line-height:inherit;margin:0;padding:0}.ys4fw90 .r8uj4tx .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-image{margin-top:2em;margin-bottom:2em}.ys4fw90 .rich-image img{border-radius:var(--rc-radius-md)}.ys4fw90 .rich-image figcaption{color:var(--rc-text-secondary);text-align:center;margin-top:.857143em;font-size:.875em;line-height:1.42857}.ys4fw90 .r8uj4tt{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;width:60px;margin:.5rem auto}.ys4fw90 .egstxq1{margin-top:1.6em;margin-bottom:1.6em;padding:1em 0;overflow-x:auto}.ys4fw90 .r8uj4ty{border-radius:var(--rc-radius-sm);padding-inline-start:.25em;padding-inline-end:.25em}.ys4fw90>:first-child{margin-top:0}.ys4fw90>:last-child{margin-bottom:0}._17ihk870{margin:var(--rc-space-md) 0;position:relative}._17ihk871{border-radius:var(--rc-radius-md);pointer-events:none;background:var(--rc-bg);border:1px solid var(--rc-border);box-shadow:var(--rc-shadow-top-bar);z-index:10;-webkit-user-select:none;user-select:none;white-space:nowrap;opacity:0;align-items:center;gap:2px;padding:4px 6px;transition:opacity .15s;display:flex;position:absolute;top:-36px;left:50%;transform:translate(-50%)}._17ihk872{width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0;justify-content:center;align-items:center;display:flex}._17ihk873{border-radius:var(--rc-radius-sm);cursor:pointer;min-width:24px;height:24px;color:var(--rc-text-secondary);background:0 0;border:none;justify-content:center;align-items:center;padding:0 6px;font-size:12px;font-weight:500;line-height:1;transition:color .15s,background-color .15s;display:flex}._17ihk873:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk874{background:var(--rc-fill);color:var(--rc-text);font-weight:600}._17ihk875{background:var(--rc-border);flex-shrink:0;width:1px;height:16px;margin:0 2px}._17ihk876{border-radius:var(--rc-radius-sm);cursor:pointer;min-width:24px;height:24px;color:var(--rc-text-secondary);background:0 0;border:none;justify-content:center;align-items:center;padding:0 6px;transition:color .15s,background-color .15s;display:flex}._17ihk876:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk877{gap:var(--rc-space-md);display:grid}._17ihk878{min-width:0}._17ihk879{outline:none}._17ihk870:hover ._17ihk871,._17ihk870:focus-within ._17ihk871{opacity:1;pointer-events:auto}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{border-radius:var(--rc-radius-md);background-color:color-mix(in srgb, var(--rc-accent) 6%, transparent);position:relative}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb, var(--rc-accent) 48%, transparent);outline-offset:-2px}._1x58dbf1{z-index:25;pointer-events:none;flex-direction:column;align-items:flex-end;gap:.375rem;display:flex;position:absolute;bottom:.75rem;right:.75rem}._1x58dbf2{border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-bg) 95%, transparent);color:var(--rc-text);font-size:var(--rc-font-size-xs);box-shadow:var(--rc-shadow-top-bar);align-items:center;gap:.375rem;padding:.375rem .625rem;line-height:1.2;animation:.12s ease-out _1x58dbf0;display:inline-flex}._1x58dbf4{border-color:color-mix(in srgb, var(--rc-accent) 35%, transparent)}._1x58dbf5{border-color:color-mix(in srgb, var(--rc-alert-caution) 45%, transparent);color:var(--rc-alert-caution)}._1x58dbf7{border:2px solid color-mix(in srgb, var(--rc-text-secondary) 35%, transparent);border-top-color:color-mix(in srgb, var(--rc-text) 65%, transparent);border-radius:50%;width:12px;height:12px;animation:.75s linear infinite _1x58dbf6}._1x58dbf8._1x58dbf8{gap:0;width:min(560px,100vw - 2rem);padding:0;overflow:hidden}._1x58dbf9{border-bottom:1px solid var(--rc-border);padding:.875rem 1rem .75rem}._1x58dbfa{font-size:var(--rc-font-size-md);color:var(--rc-text);font-weight:600}._1x58dbfb{flex-direction:column;gap:.875rem;padding:.875rem 1rem;display:flex}._1x58dbfc{align-items:center;gap:.5rem;display:flex}._1x58dbfd{border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;color:var(--rc-text-secondary);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:1.2rem;transition:border-color .15s,background-color .15s,color .15s;display:flex}._1x58dbfd:hover{border-color:color-mix(in srgb, var(--rc-accent) 35%, transparent);background-color:color-mix(in srgb, var(--rc-accent) 6%, transparent);color:var(--rc-text)}._1x58dbff{border-color:color-mix(in srgb, var(--rc-accent) 55%, transparent);background-color:color-mix(in srgb, var(--rc-accent) 8%, transparent);color:var(--rc-text);transform:scale(1.01)}._1x58dbfg{cursor:progress;opacity:.9}._1x58dbfh{border-radius:var(--rc-radius-md);background-color:color-mix(in srgb, var(--rc-text) 6%, transparent);justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}._1x58dbfi{font-size:var(--rc-font-size-sm);color:var(--rc-text);font-weight:600}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{flex-direction:column;align-items:center;gap:.5rem;display:flex}._1x58dbfm{font-size:var(--rc-font-size-sm);color:var(--rc-text);align-items:center;gap:.375rem;display:inline-flex}._1x58dbfn{align-items:center;gap:.5rem;display:flex}._1x58dbfo{border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);width:100%;color:var(--rc-text);height:34px;font-size:var(--rc-font-size-sm);outline:none;padding:0 .625rem;transition:border-color .15s}._1x58dbfo:focus{border-color:color-mix(in srgb, var(--rc-accent) 50%, transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-text) 2%, transparent);overflow:hidden}._1x58dbfq{object-fit:cover;width:100%;max-height:220px;display:block}._1x58dbfr{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);align-items:center;gap:.4rem;display:inline-flex}._1x58dbfs{border-top:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-text) 2%, transparent);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem 1rem;display:flex}.gr1ebt0::selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0 ::selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0::-moz-selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0 ::-moz-selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt1::selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1 ::selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1::-moz-selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1 ::-moz-selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}::highlight(rich-editor-text-selection){background-color:var(--rc-accent-light);color:inherit}::highlight(rich-editor-text-selection-inactive){background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.b94s950{max-width:var(--rc-max-width);flex:1;width:100%;min-height:0;margin:0 auto;position:relative}.b94s951{width:100%;min-height:100px;padding:var(--ce-padding-top,12px) var(--rc-space-md) 12px var(--rc-space-md);outline:none}.b94s952{top:var(--ce-padding-top,12px);left:var(--rc-space-md);color:var(--rc-text-secondary);pointer-events:none;-webkit-user-select:none;user-select:none;position:absolute}
1
+ :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk0{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk1{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.8;--rc-line-height-tight:1.4;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._13h71jk2{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-line-height:1.5;--rc-line-height-tight:1.3;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.dark ._13h71jk0,[data-theme=dark] ._13h71jk0,.dark._13h71jk0,[data-theme=dark]._13h71jk0,.dark ._13h71jk1,[data-theme=dark] ._13h71jk1,.dark._13h71jk1,[data-theme=dark]._13h71jk1,.dark ._13h71jk2,[data-theme=dark] ._13h71jk2,.dark._13h71jk2,[data-theme=dark]._13h71jk2{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}@keyframes r8uj4t0{to{--rc-hl-highlighted:1}}@keyframes r8uj4t1{0%{background-color:#ef44443d}to{background-color:#0000}}.r8uj4t2{font-family:var(--rc-font-family);font-size:var(--rc-font-size-base);line-height:var(--rc-line-height);color:var(--rc-text);word-wrap:break-word;overflow-wrap:break-word}.r8uj4t3{line-height:var(--rc-line-height);margin:0 0 1em}.r8uj4t4{font-weight:700}.r8uj4t5{font-style:italic}.r8uj4t6{text-decoration:underline}.r8uj4t7{opacity:.65;text-decoration:line-through}.r8uj4t8{vertical-align:super;font-size:.8em}.r8uj4t9{vertical-align:sub;font-size:.8em}.r8uj4ta{font-family:var(--rc-font-mono);background-color:var(--rc-code-bg);color:inherit;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);padding:2px 6px;font-size:.9em}[contenteditable=true] .r8uj4ta{padding-right:0}.r8uj4tb{--rc-hl-lightness:.3;--rc-hl-highlighted:1;--rc-hl-color:oklch(from var(--rc-accent) l c h / var(--rc-hl-lightness));background:linear-gradient(120deg, var(--rc-hl-color,lightblue) 50%, transparent 50%) 110% 0 / 200% 100% no-repeat;background-position:calc((1 - var(--rc-hl-highlighted)) * 110%) 0;color:var(--rc-text);transition:background-position 1s}[contenteditable=true] .r8uj4tb{--rc-hl-highlighted:1;animation:none}[data-theme=dark] .r8uj4tb{--rc-hl-lightness:.35}.r8uj4tc{color:var(--rc-text-secondary);opacity:0;align-items:center;font-size:.8rem;text-decoration:none;transition:opacity .15s;display:flex;position:absolute;top:0;bottom:0;left:-1.25rem}.r8uj4td{font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em;position:relative}[contenteditable=true] .r8uj4td:before{content:"H1";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4te{font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em;position:relative}[contenteditable=true] .r8uj4te:before{content:"H2";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tf{font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em;position:relative}[contenteditable=true] .r8uj4tf:before{content:"H3";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tg{font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em;position:relative}[contenteditable=true] .r8uj4tg:before{content:"H4";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4th{font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em;position:relative}[contenteditable=true] .r8uj4th:before{content:"H5";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4ti{font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);color:var(--rc-text);margin-top:1em;margin-bottom:.25em;position:relative}[contenteditable=true] .r8uj4ti:before{content:"H6";color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-size:.5rem;font-weight:600;font-family:var(--rc-font-mono);display:flex;position:absolute;bottom:.5rem;left:-1.5rem}.r8uj4tj{color:var(--rc-link);text-decoration:none;transition:color .2s}.r8uj4tj:hover{text-decoration:underline}.r8uj4tj[data-favicon=loaded]:before{content:"";vertical-align:-.125em;background-image:var(--rc-link-favicon);background-position:50%;background-repeat:no-repeat;background-size:contain;border-radius:2px;width:1em;height:1em;margin-right:.2em;display:inline-block}.r8uj4tk{vertical-align:-.125em;align-items:center;margin-right:.15em;display:inline-flex}.r8uj4tl{padding-left:var(--rc-space-lg);margin-bottom:1em;list-style-type:decimal}.r8uj4tm{padding-left:var(--rc-space-lg);margin-bottom:1em;list-style-type:disc}.r8uj4tn{margin-bottom:.25em}.r8uj4to{list-style-type:none}.r8uj4tp{padding-left:0;list-style-type:none}.r8uj4tq{--rc-cb-size:1.125rem;outline:none;padding-left:2em;list-style-type:none;transition:color .25s;position:relative}.r8uj4tq:before{content:"";left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:#0000;transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s;position:absolute}.r8uj4tq:after{content:"";left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;pointer-events:none;transform-origin:50%;opacity:0;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s;display:block;position:absolute;transform:rotate(45deg)scale(0)}[contenteditable=true] .r8uj4tq:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tq:hover:before{border-color:var(--rc-text-tertiary)}.r8uj4tr{--rc-cb-size:1.125rem;color:var(--rc-text-secondary);outline:none;padding-left:2em;list-style-type:none;transition:color .25s;position:relative}.r8uj4tr:before{content:"";left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:1.5px solid var(--rc-text-quaternary);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;background-color:var(--rc-accent-light);border-color:var(--rc-accent);transition:background-color .25s cubic-bezier(.4,0,.2,1),border-color .25s cubic-bezier(.4,0,.2,1),transform .15s;position:absolute}.r8uj4tr:after{content:"";left:calc(var(--rc-cb-size) * .32);top:calc((1lh - var(--rc-cb-size)) / 2 + var(--rc-cb-size) * .14);width:calc(var(--rc-cb-size) * .28);height:calc(var(--rc-cb-size) * .55);border-right:2px solid var(--rc-accent);border-bottom:2px solid var(--rc-accent);box-sizing:border-box;pointer-events:none;transform-origin:50%;opacity:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1) .1s,opacity .15s;display:block;position:absolute;transform:rotate(45deg)scale(1)}[contenteditable=true] .r8uj4tr:active:before{transform:scale(.94)}[contenteditable=true] .r8uj4tr:hover:before{background-color:color-mix(in oklab, var(--rc-accent) 12%, transparent)}.r8uj4ts{background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 4px);color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0;font-style:normal;position:relative}.r8uj4ts:before{content:"";border-radius:var(--rc-radius-sm);background-color:var(--rc-quote-border);width:4px;position:absolute;top:0;bottom:0;left:0}.r8uj4tt{text-align:right;color:var(--rc-text-secondary);margin-top:var(--rc-space-sm);font-size:12px;font-style:normal;display:block}.r8uj4tu{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4tv{overflow-x:auto}.r8uj4tw{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:1.25em var(--rc-space-lg);text-align:left;vertical-align:middle;line-height:1.5}.r8uj4tw:last-child{border-right:none}.r8uj4tx{border:none;border-bottom:1px solid var(--rc-border);border-right:1px solid var(--rc-border);padding:var(--rc-space-md) var(--rc-space-lg);text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;z-index:1;font-size:.75em;font-weight:600;line-height:1.5;position:sticky;top:0}.r8uj4tx:last-child{border-right:none}.r8uj4ty{border-collapse:separate;border-spacing:0;width:100%;margin:var(--rc-space-lg) 0;font-size:var(--rc-font-size-small);border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);overflow:hidden}.r8uj4tz{background-color:var(--rc-text);color:#0000;border-radius:var(--rc-radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;padding-inline-start:4px;padding-inline-end:4px;transition:background-color .3s,color .3s}[contenteditable=true] .r8uj4tz{background-color:color-mix(in srgb, var(--rc-text) 30%, transparent);color:inherit;-webkit-user-select:auto;user-select:auto;cursor:text}.r8uj4tz:hover{color:inherit;-webkit-user-select:auto;user-select:auto;background-color:#0000}.rich-content .r8uj4tz{background-color:var(--rc-text-tertiary);color:#0000}.rich-content .r8uj4tz:not(:hover):not(.rich-spoiler-revealed) *{color:#0000!important}.rich-content .r8uj4tz:hover,.r8uj4t10{color:inherit;-webkit-user-select:auto;user-select:auto;background-color:#0000}.r8uj4t11{font-size:var(--rc-font-size-small);vertical-align:baseline;border-radius:999px;padding-inline-start:.75em;padding-inline-end:.75em;line-height:1.6;display:inline-block}.r8uj4t12{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);background-color:var(--rc-code-bg);border:1px dashed var(--rc-border);border-radius:var(--rc-radius-sm);white-space:break-spaces;padding:2px 6px;display:inline-block}.r8uj4t12:before{content:"<!--";opacity:.7}.r8uj4t12:after{content:"-->";opacity:.7}.r8uj4t13{ruby-position:over;ruby-align:center}[contenteditable=true] .r8uj4t13[data-ruby]{padding-top:.72em;line-height:1.2;display:inline-block;position:relative}[contenteditable=true] .r8uj4t13[data-ruby]:before{content:attr(data-ruby);text-align:center;color:var(--rc-text-secondary);pointer-events:none;white-space:nowrap;font-size:.58em;line-height:1;position:absolute;top:0;left:0;right:0;transform:translateY(-.68em)}.r8uj4t14{color:var(--rc-text-secondary);-webkit-user-select:none;user-select:none;font-size:.58em;line-height:1}.r8uj4t15{vertical-align:super;font-size:.8em}.r8uj4t16{min-width:1.5em;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;justify-content:center;align-items:center;padding:0 .35em;font-size:.82em;font-weight:600;line-height:1.45;text-decoration:none;transition:filter .15s;display:inline-flex}.r8uj4t16:hover{filter:brightness(.96)}.r8uj4t17{animation:1.2s ease-out r8uj4t1}.r8uj4t18{display:inline;position:relative}.r8uj4t19{margin-top:var(--rc-space-lg)}.r8uj4t1a{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t1b{padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6;list-style-type:decimal}.r8uj4t1c{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t1d{margin-left:var(--rc-space-xs);color:var(--rc-accent);font-size:.85em;font-family:var(--rc-font-mono);align-items:center;text-decoration:none;transition:opacity .15s;display:inline-flex}.r8uj4t1d:hover{opacity:.7}.r8uj4t1e{align-items:center;gap:var(--rc-space-sm);list-style-type:none;display:flex}.r8uj4t1f{color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);flex-shrink:0;min-width:1.5em;font-weight:600}.r8uj4t1g{border:1px solid var(--rc-border);border-radius:var(--rc-radius-sm);padding:var(--rc-space-xs) var(--rc-space-sm);font-size:var(--rc-font-size-small);color:var(--rc-text);background-color:#0000;outline:none;flex:1;transition:border-color .15s}.r8uj4t1g:focus{border-color:var(--rc-accent)}.r8uj4t1h{width:20px;height:20px;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;transition:color .15s,background-color .15s;display:inline-flex}.r8uj4t1h:hover{color:#ef4444;background-color:#ef44441a}.r8uj4t1i{cursor:grab;border-radius:var(--rc-radius-sm);width:20px;height:20px;color:var(--rc-text-secondary);opacity:.4;z-index:10;justify-content:center;align-items:center;transition:opacity .15s,background-color .15s;display:flex;position:absolute}.r8uj4t1i:hover{opacity:1;background-color:var(--rc-fill-secondary)}.r8uj4t1i:active{cursor:grabbing}.r8uj4t1j{background-color:var(--rc-accent);pointer-events:none;z-index:10;border-radius:1px;height:2px;position:absolute}.r8uj4t1k{background-color:#0000;border:none;border-radius:0;margin:2em 0;padding:0 1em}.r8uj4t2 mark{background:0 0}.r8uj4t2 img{border-radius:var(--rc-radius-md);max-width:100%;height:auto}.r8uj4t2>:first-child,.r8uj4t2 .rich-editor__content>:first-child{margin-top:0}.r8uj4t2>:last-child,.r8uj4t2 .rich-editor__content>:last-child{margin-bottom:0}.r8uj4tc svg{flex-shrink:0}.r8uj4td:hover .r8uj4tc{opacity:.5}.r8uj4td:hover .r8uj4tc:hover{opacity:1}.r8uj4te:hover .r8uj4tc{opacity:.5}.r8uj4te:hover .r8uj4tc:hover{opacity:1}.r8uj4tf:hover .r8uj4tc{opacity:.5}.r8uj4tf:hover .r8uj4tc:hover{opacity:1}.r8uj4tg:hover .r8uj4tc{opacity:.5}.r8uj4tg:hover .r8uj4tc:hover{opacity:1}.r8uj4th:hover .r8uj4tc{opacity:.5}.r8uj4th:hover .r8uj4tc:hover{opacity:1}.r8uj4ti:hover .r8uj4tc{opacity:.5}.r8uj4ti:hover .r8uj4tc:hover{opacity:1}.r8uj4tk img{object-fit:contain;border-radius:2px;width:1em;height:1em}.r8uj4tk svg{width:.9em;height:.9em}.r8uj4to .r8uj4tl{list-style-type:lower-alpha}.r8uj4to .r8uj4tm{list-style-type:circle}.r8uj4tr>*,.r8uj4tq>*{background-image:linear-gradient(var(--rc-text-secondary), var(--rc-text-secondary));background-position:0;background-repeat:no-repeat;background-size:0% 1.5px;transition:background-size .35s cubic-bezier(.4,0,.2,1) .15s,opacity .15s}.r8uj4tr>*{opacity:.5;background-size:100% 1.5px}.r8uj4ts>.r8uj4t3:first-child{margin-top:0}.r8uj4ts>.r8uj4t3:last-child{margin-bottom:0}.r8uj4ty tbody tr:last-child .r8uj4tw{border-bottom:none}.r8uj4tw .r8uj4t3{line-height:inherit;margin:0;padding:0}.r8uj4tw>:first-child{margin-top:0}.r8uj4tw>:last-child{margin-bottom:0}.r8uj4tx .r8uj4t3{line-height:inherit;margin:0;padding:0}.r8uj4tx>:first-child{margin-top:0}.r8uj4tx>:last-child{margin-bottom:0}@supports (animation-timeline:view()){.r8uj4tb{--rc-hl-highlighted:0;animation:step-end both r8uj4t0;animation-timeline:view();animation-range:entry 100% cover 10%}}._1o2d5g50{margin:var(--rc-space-md) 0;interpolate-size:allow-keywords;background-color:#0000;border:none}._1o2d5g51{align-items:flex-start;gap:var(--rc-space-sm);cursor:pointer;-webkit-user-select:none;user-select:none;padding:var(--rc-space-xs) 0;color:var(--rc-text);font-size:1em;font-weight:500;line-height:var(--rc-line-height);border-radius:var(--rc-radius-sm);outline:none;list-style:none;transition:opacity .2s,color .2s,box-shadow .2s;display:flex}._1o2d5g51:hover{opacity:.82}._1o2d5g51:focus-visible{box-shadow:0 0 0 2px var(--rc-accent-light)}._1o2d5g51::-webkit-details-marker{display:none}._1o2d5g51::marker{content:"";display:none}._1o2d5g52{flex:1;min-width:0}._1o2d5g53{width:1.25rem;height:1.25rem;color:var(--rc-text-tertiary);transform-origin:50%;flex-shrink:0;justify-content:center;align-items:center;transition:transform .35s cubic-bezier(.4,0,.2,1),color .2s;display:inline-flex;position:relative;top:.25rem}._1o2d5g54{margin-top:var(--rc-space-xs);padding:var(--rc-space-sm) var(--rc-space-xl);color:var(--rc-text-secondary);background-color:color-mix(in srgb, var(--rc-accent) 6%, var(--rc-bg-secondary));border-radius:var(--rc-radius-md)}._1o2d5g51:hover ._1o2d5g53{color:var(--rc-text-secondary)}._1o2d5g50[open] ._1o2d5g53{color:var(--rc-accent);transform:rotate(90deg)}._1o2d5g50::details-content{opacity:0;content-visibility:hidden;height:0;transition:height .4s cubic-bezier(.4, 0, .2, 1), opacity .4s cubic-bezier(.4, 0, .2, 1), content-visibility .4s cubic-bezier(.4, 0, .2, 1) allow-discrete;display:block;overflow:hidden}._1o2d5g50[open]::details-content{opacity:1;content-visibility:visible;height:auto}._1o2d5g54>.r8uj4t3:first-child{margin-top:0}._1o2d5g54>.r8uj4t3:last-child{margin-bottom:0}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);color:var(--rc-text);line-height:1.75}.v10dui0 .r8uj4t3{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .r8uj4td{color:var(--rc-text);margin-top:0;margin-bottom:.833333em;font-size:3em;font-weight:800;line-height:1}.v10dui0 .r8uj4te{color:var(--rc-text);margin-top:1.86667em;margin-bottom:1.06667em;font-size:1.875em;font-weight:700;line-height:1.33333}.v10dui0 .r8uj4tf{color:var(--rc-text);margin-top:1.66667em;margin-bottom:.666667em;font-size:1.5em;font-weight:600;line-height:1.5}.v10dui0 .r8uj4tg{color:var(--rc-text);margin-top:2em;margin-bottom:.5em;font-weight:600;line-height:1.5625}.v10dui0 .r8uj4te+*,.v10dui0 .r8uj4tf+*,.v10dui0 .r8uj4tg+*{margin-top:0}.v10dui0 .r8uj4ts{color:var(--rc-text);quotes:"“""”""‘""’";background-color:#0000;border-radius:0;margin-top:2.5em;margin-bottom:2.5em;padding-left:calc(1.5em + 4px);font-style:italic;font-weight:500}.v10dui0 .r8uj4ts:not([data-no-open-quote]) .r8uj4t3:first-of-type:before{content:open-quote}.v10dui0 .r8uj4ts:not([data-no-close-quote]) .r8uj4t3:last-of-type:after{content:close-quote}.v10dui0 .r8uj4ts .r8uj4t3:first-child{margin-top:0}.v10dui0 .r8uj4ts .r8uj4t3:last-child{margin-bottom:0}.v10dui0 .r8uj4ta{color:inherit;background-color:var(--rc-code-bg);border-radius:var(--rc-radius-sm);font-size:.875em;font-weight:600;font-family:var(--rc-font-mono);padding:.2em .4em}.v10dui0 .r8uj4ta:before,.v10dui0 .r8uj4ta:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.v10dui0 [contenteditable=true] .r8uj4ta:before,.v10dui0 [contenteditable=true] .r8uj4ta:after{content:""}.v10dui0 .rich-code-block{color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:.375rem;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.75}.v10dui0 .rich-code-block pre{margin:0;padding:1em 1.5em}.v10dui0 .r8uj4tm,.v10dui0 .r8uj4tl{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .r8uj4tn{margin-top:.75em;margin-bottom:.75em}.v10dui0 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.5em}.v10dui0 .r8uj4tn .r8uj4t3{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4tn>.r8uj4t3:first-child{margin-top:1.5em}.v10dui0 .r8uj4tn>.r8uj4t3:last-child{margin-bottom:1.5em}.v10dui0 .r8uj4tm .r8uj4tm,.v10dui0 .r8uj4tm .r8uj4tl,.v10dui0 .r8uj4tl .r8uj4tm,.v10dui0 .r8uj4tl .r8uj4tl{margin-top:1em;margin-bottom:1em}.v10dui0 .r8uj4ty{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4ty .r8uj4t3{line-height:inherit;margin:0;padding:0}.v10dui0 .rich-image{margin-top:2em;margin-bottom:2em}.v10dui0 .rich-image>*{margin-top:0;margin-bottom:0}.v10dui0 .rich-image figcaption{color:var(--rc-text-secondary);margin-top:1em;font-size:.875em;line-height:1.5}.v10dui0 .r8uj4tu{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .r8uj4tu+*{margin-top:0}.v10dui0 .r8uj4tj{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 ._1o2d5g50{margin:2em 0}.v10dui0>:first-child{margin-top:0}.v10dui0>:last-child{margin-bottom:0}.egstxq0{vertical-align:middle;padding:0 2px;display:inline}.egstxq1{text-align:center;padding:var(--rc-space-md) 0;margin:var(--rc-space-md) 0;display:block;overflow-x:auto}.egstxq2{font-family:var(--rc-font-mono);color:var(--rc-code-text);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-sm);padding:2px 6px;font-size:.9em}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .r8uj4t3{margin-bottom:.6em}._14ko36c0 .r8uj4td{margin-top:.8em;margin-bottom:.3em;font-size:1.35em;font-weight:700}._14ko36c0 .r8uj4te{margin-top:.7em;margin-bottom:.25em;font-size:1.2em;font-weight:700}._14ko36c0 .r8uj4tf{margin-top:.6em;margin-bottom:.2em;font-size:1.1em;font-weight:600}._14ko36c0 .r8uj4tg{margin-top:.5em;margin-bottom:.15em;font-size:1em;font-weight:600}._14ko36c0 .r8uj4th{margin-top:.45em;margin-bottom:.1em;font-size:.9em;font-weight:600}._14ko36c0 .r8uj4ti{margin-top:.4em;margin-bottom:.1em;font-size:.85em;font-weight:600}._14ko36c0 .r8uj4ts{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:calc(var(--rc-space-md) + 3px);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .r8uj4ts:before{width:3px}._14ko36c0 .r8uj4tl,._14ko36c0 .r8uj4tm{padding-left:var(--rc-space-md);margin-bottom:.6em}._14ko36c0 .r8uj4tn{margin-bottom:.1em}._14ko36c0 .rich-code-block{margin:var(--rc-space-sm) 0;border-radius:var(--rc-radius-sm);font-size:var(--rc-font-size-small)}._14ko36c0 .rich-code-block pre{padding:var(--rc-space-sm)}._14ko36c0 .line:before{display:none!important}._14ko36c0 .r8uj4ty{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tw,._14ko36c0 .r8uj4tx{padding:var(--rc-space-xs) var(--rc-space-sm)}._14ko36c0 .rich-image{margin:var(--rc-space-sm) 0}._14ko36c0 .rich-image figcaption{font-size:var(--rc-font-size-small)}._14ko36c0 .r8uj4tu{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .r8uj4t1k{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .egstxq1{padding:var(--rc-space-sm) 0;margin:var(--rc-space-sm) 0}.ys4fw90{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);color:var(--rc-text);line-height:1.8}.ys4fw90 .rich-editor__content>.r8uj4t3,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:not(:first-of-type){text-indent:2em}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type{margin-top:0}.ys4fw90 .rich-editor__content>.r8uj4t3:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2em}.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:first-of-type:first-letter{float:left;margin-right:.2em;font-size:2.4em;line-height:1}.ys4fw90 .rich-editor__content>.r8uj4t3:first-of-type:first-letter{color:var(--rc-accent);font-size:1.5em;font-weight:700}.ys4fw90 .rich-editor__content>.r8uj4t3:last-child,.ys4fw90.rich-content:not([data-rich-nested=true])>.r8uj4t3:last-child{margin-bottom:0}.ys4fw90 .r8uj4t4{font-family:var(--rc-font-family);color:var(--rc-text);font-weight:600}.ys4fw90 .r8uj4td{letter-spacing:-.025em;color:var(--rc-text);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.ys4fw90 .r8uj4te{letter-spacing:-.025em;color:var(--rc-text);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.ys4fw90 .r8uj4te+*{margin-top:0}.ys4fw90 .r8uj4tf{letter-spacing:-.025em;color:var(--rc-text);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.ys4fw90 .r8uj4tf+*{margin-top:0}.ys4fw90 .r8uj4tg{color:var(--rc-text);margin-top:1.5em;margin-bottom:.5em;font-size:1.125em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4tg+*{margin-top:0}.ys4fw90 .r8uj4th{color:var(--rc-text);margin-top:1.5em;margin-bottom:.5em;font-size:1em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4th+*{margin-top:0}.ys4fw90 .r8uj4ti{color:var(--rc-text);text-transform:uppercase;margin-top:1.5em;margin-bottom:.5em;font-size:.875em;font-weight:600;line-height:1.5}.ys4fw90 .r8uj4ti+*{margin-top:0}.ys4fw90 .r8uj4ts{font-family:var(--rc-font-family-kai);color:color-mix(in srgb, var(--rc-accent) 60%, var(--rc-text));background-color:color-mix(in srgb, var(--rc-accent) 12%, var(--rc-bg));text-indent:0;border-radius:2px;margin:1.6em 0;padding:1.2em 1.5em;font-style:normal;line-height:1.75;transform:rotate(-.6deg);box-shadow:2px 3px 8px #00000014,0 1px 2px #0000000a}.ys4fw90 .r8uj4ts:before{content:"";background:repeating-linear-gradient(105deg, transparent, transparent 2px, #ffffff14 2px, #ffffff14 4px), color-mix(in srgb, var(--rc-accent) 20%, #0000000f);opacity:.85;border-radius:1px;width:56px;height:16px;position:absolute;top:-7px;bottom:auto;left:50%;transform:translate(-50%)rotate(1.2deg);box-shadow:0 1px 2px #0000000f}.ys4fw90 .r8uj4ts .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .r8uj4tj{text-underline-offset:2px;font-weight:500;text-decoration:underline;text-decoration-thickness:1px;transition:color .15s}.ys4fw90 .r8uj4tj:hover{text-decoration-thickness:2px}.ys4fw90 .r8uj4ta{font-size:.875em;font-family:var(--rc-font-mono);border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg);padding:.2em .4em;font-weight:500}.ys4fw90 .r8uj4tl,.ys4fw90 .r8uj4tm{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .r8uj4tn{margin-top:.5em;margin-bottom:.5em}.ys4fw90 .r8uj4tn:not(.r8uj4tr):not(.r8uj4tq){padding-left:.375em}.ys4fw90 .r8uj4tn::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{border-radius:var(--rc-radius-md);margin-top:1.71429em;margin-bottom:1.71429em;font-size:.875em;line-height:1.71429;overflow-x:auto}.ys4fw90 .rich-code-block pre{margin:0;padding:.857143em 1.14286em}.ys4fw90 .r8uj4ty{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.ys4fw90 .r8uj4ty .r8uj4t3{line-height:inherit;margin:0;padding:0}.ys4fw90 .r8uj4ty .r8uj4t3:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-image{margin-top:2em;margin-bottom:2em}.ys4fw90 .rich-image img{border-radius:var(--rc-radius-md)}.ys4fw90 .rich-image figcaption{color:var(--rc-text-secondary);text-align:center;margin-top:.857143em;font-size:.875em;line-height:1.42857}.ys4fw90 .r8uj4tu{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;width:60px;margin:.5rem auto}.ys4fw90 .egstxq1{margin-top:1.6em;margin-bottom:1.6em;padding:1em 0;overflow-x:auto}.ys4fw90 .r8uj4tz{border-radius:var(--rc-radius-sm);padding-inline-start:.25em;padding-inline-end:.25em}.ys4fw90>:first-child{margin-top:0}.ys4fw90>:last-child{margin-bottom:0}._17ihk870{margin:var(--rc-space-md) 0;position:relative}._17ihk871{border-radius:var(--rc-radius-md);pointer-events:none;background:var(--rc-bg);border:1px solid var(--rc-border);box-shadow:var(--rc-shadow-top-bar);z-index:10;-webkit-user-select:none;user-select:none;white-space:nowrap;opacity:0;align-items:center;gap:2px;padding:4px 6px;transition:opacity .15s;display:flex;position:absolute;top:-36px;left:50%;transform:translate(-50%)}._17ihk872{width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0;justify-content:center;align-items:center;display:flex}._17ihk873{border-radius:var(--rc-radius-sm);cursor:pointer;min-width:24px;height:24px;color:var(--rc-text-secondary);background:0 0;border:none;justify-content:center;align-items:center;padding:0 6px;font-size:12px;font-weight:500;line-height:1;transition:color .15s,background-color .15s;display:flex}._17ihk873:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk874{background:var(--rc-fill);color:var(--rc-text);font-weight:600}._17ihk875{background:var(--rc-border);flex-shrink:0;width:1px;height:16px;margin:0 2px}._17ihk876{border-radius:var(--rc-radius-sm);cursor:pointer;min-width:24px;height:24px;color:var(--rc-text-secondary);background:0 0;border:none;justify-content:center;align-items:center;padding:0 6px;transition:color .15s,background-color .15s;display:flex}._17ihk876:hover{background-color:var(--rc-fill-secondary);color:var(--rc-text)}._17ihk877{gap:var(--rc-space-md);display:grid}._17ihk878{min-width:0}._17ihk879{outline:none;width:100%}._17ihk870:hover ._17ihk871,._17ihk870:focus-within ._17ihk871{opacity:1;pointer-events:auto}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{border-radius:var(--rc-radius-md);background-color:color-mix(in srgb, var(--rc-accent) 6%, transparent);position:relative}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb, var(--rc-accent) 48%, transparent);outline-offset:-2px}._1x58dbf1{z-index:25;pointer-events:none;flex-direction:column;align-items:flex-end;gap:.375rem;display:flex;position:absolute;bottom:.75rem;right:.75rem}._1x58dbf2{border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-bg) 95%, transparent);color:var(--rc-text);font-size:var(--rc-font-size-xs);box-shadow:var(--rc-shadow-top-bar);align-items:center;gap:.375rem;padding:.375rem .625rem;line-height:1.2;animation:.12s ease-out _1x58dbf0;display:inline-flex}._1x58dbf4{border-color:color-mix(in srgb, var(--rc-accent) 35%, transparent)}._1x58dbf5{border-color:color-mix(in srgb, var(--rc-alert-caution) 45%, transparent);color:var(--rc-alert-caution)}._1x58dbf7{border:2px solid color-mix(in srgb, var(--rc-text-secondary) 35%, transparent);border-top-color:color-mix(in srgb, var(--rc-text) 65%, transparent);border-radius:50%;width:12px;height:12px;animation:.75s linear infinite _1x58dbf6}._1x58dbf8._1x58dbf8{gap:0;width:min(560px,100vw - 2rem);padding:0;overflow:hidden}._1x58dbf9{border-bottom:1px solid var(--rc-border);padding:.875rem 1rem .75rem}._1x58dbfa{font-size:var(--rc-font-size-md);color:var(--rc-text);font-weight:600}._1x58dbfb{flex-direction:column;gap:.875rem;padding:.875rem 1rem;display:flex}._1x58dbfc{align-items:center;gap:.5rem;display:flex}._1x58dbfd{border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;color:var(--rc-text-secondary);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:1.2rem;transition:border-color .15s,background-color .15s,color .15s;display:flex}._1x58dbfd:hover{border-color:color-mix(in srgb, var(--rc-accent) 35%, transparent);background-color:color-mix(in srgb, var(--rc-accent) 6%, transparent);color:var(--rc-text)}._1x58dbff{border-color:color-mix(in srgb, var(--rc-accent) 55%, transparent);background-color:color-mix(in srgb, var(--rc-accent) 8%, transparent);color:var(--rc-text);transform:scale(1.01)}._1x58dbfg{cursor:progress;opacity:.9}._1x58dbfh{border-radius:var(--rc-radius-md);background-color:color-mix(in srgb, var(--rc-text) 6%, transparent);justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}._1x58dbfi{font-size:var(--rc-font-size-sm);color:var(--rc-text);font-weight:600}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{flex-direction:column;align-items:center;gap:.5rem;display:flex}._1x58dbfm{font-size:var(--rc-font-size-sm);color:var(--rc-text);align-items:center;gap:.375rem;display:inline-flex}._1x58dbfn{align-items:center;gap:.5rem;display:flex}._1x58dbfo{border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);width:100%;color:var(--rc-text);height:34px;font-size:var(--rc-font-size-sm);outline:none;padding:0 .625rem;transition:border-color .15s}._1x58dbfo:focus{border-color:color-mix(in srgb, var(--rc-accent) 50%, transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-text) 2%, transparent);overflow:hidden}._1x58dbfq{object-fit:cover;width:100%;max-height:220px;display:block}._1x58dbfr{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);align-items:center;gap:.4rem;display:inline-flex}._1x58dbfs{border-top:1px solid var(--rc-border);background-color:color-mix(in srgb, var(--rc-text) 2%, transparent);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem 1rem;display:flex}.gr1ebt0::selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0 ::selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0::-moz-selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt0 ::-moz-selection{background-color:var(--rc-accent-light);color:inherit}.gr1ebt1::selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1 ::selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1::-moz-selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.gr1ebt1 ::-moz-selection{background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}::highlight(rich-editor-text-selection){background-color:var(--rc-accent-light);color:inherit}::highlight(rich-editor-text-selection-inactive){background-color:color-mix(in srgb, var(--rc-text-tertiary) 24%, transparent);color:inherit}.b94s950{max-width:var(--rc-max-width);flex:1;width:100%;min-height:0;margin:0 auto;position:relative}.b94s951{width:100%;min-height:100px;padding:var(--ce-padding-top,12px) var(--rc-space-md) 12px var(--rc-space-md);outline:none}.b94s952{top:var(--ce-padding-top,12px);left:var(--rc-space-md);color:var(--rc-text-secondary);pointer-events:none;-webkit-user-select:none;user-select:none;position:absolute}
2
2
  /*$vite$:1*/
@@ -1,11 +1,11 @@
1
- import { F as useNestedContentRenderer, I as useOptionalNestedContentRenderer, M as extractTextContent, P as NestedContentRendererProvider, a as getTagBgColor, t as editorTheme } from "./theme-DG7I1YM5.js";
2
- import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, a as FootnoteDefinitionsProvider, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, d as RendererConfigProvider, f as useRendererConfig, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, l as RendererWrapper, m as useVariant, o as useFootnoteContent, p as useRendererMode, s as useFootnoteDefinitions, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-CqnhvDmj.js";
3
- import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, r as clsx, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
4
- import { D as useColorScheme, E as ColorSchemeProvider, n as builtinNodes, r as customNodes, t as allNodes } from "./config-ayEp2yVZ.js";
5
- import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
6
- import { t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-B-1wmGzd.js";
7
- import { a as LinkFavicon, i as useExtraNodes, n as usePresentDialog, r as ExtraNodesProvider, t as PresentDialogProvider } from "./PresentDialogContext-DKNicgia.js";
8
- import { t as RubyRenderer } from "./RubyRenderer-jOkydJHg.js";
1
+ import { F as extractTextContent, L as NestedContentRendererProvider, R as useNestedContentRenderer, a as getTagBgColor, t as editorTheme, z as useOptionalNestedContentRenderer } from "./theme-BYSEh-ew.js";
2
+ import { C as MENTION_NODE_KEY, D as VIDEO_NODE_KEY, E as TAG_NODE_KEY, S as LINK_CARD_NODE_KEY, T as RUBY_NODE_KEY, _ as CODE_BLOCK_NODE_KEY, a as FootnoteDefinitionsProvider, b as IMAGE_NODE_KEY, c as useFootnoteDisplayNumber, d as RendererConfigProvider, f as useRendererConfig, g as BANNER_NODE_KEY, h as ALERT_NODE_KEY, l as RendererWrapper, m as useVariant, o as useFootnoteContent, p as useRendererMode, s as useFootnoteDefinitions, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY, y as FOOTNOTE_SECTION_NODE_KEY } from "./KaTeXRenderer-v5qDPxDO.js";
3
+ import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, r as clsx, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-D77BtjJi.js";
4
+ import { D as useColorScheme, E as ColorSchemeProvider, n as builtinNodes, r as customNodes, t as allNodes } from "./config-Dxr6eH6Z.js";
5
+ import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-BxRbo20q.js";
6
+ import { t as normalizeSerializedEditorState } from "./normalizeSerializedEditorState-CdUhnqss.js";
7
+ import { a as LinkFavicon, i as useExtraNodes, n as usePresentDialog, r as ExtraNodesProvider, t as PresentDialogProvider } from "./PresentDialogContext-B11Y-NJ5.js";
8
+ import { t as RubyRenderer } from "./RubyRenderer-C3x1kf4k.js";
9
9
  import { jsx } from "react/jsx-runtime";
10
10
  import { articleTheme, commentTheme, noteTheme, vars } from "@haklex/rich-style-token/styles";
11
11
  //#region src/components/renderers/TagRenderer.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"grid.css.d.ts","sourceRoot":"","sources":["../../src/styles/grid.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,eAAO,MAAM,SAAS,QAGpB,CAAC;AAEH,eAAO,MAAM,OAAO,QAmBlB,CAAC;AAEH,eAAO,MAAM,WAAW,QAQtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAsBpB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,cAAc,QAMzB,CAAC;AAEH,eAAO,MAAM,YAAY,QAmBvB,CAAC;AAEH,eAAO,MAAM,KAAK,QAGhB,CAAC;AAEH,eAAO,MAAM,IAAI,QAEf,CAAC;AAEH,eAAO,MAAM,YAAY,QAEvB,CAAC;AAOH,eAAO,MAAM,UAAU;;;;;;;;;;;CAWb,CAAC"}
1
+ {"version":3,"file":"grid.css.d.ts","sourceRoot":"","sources":["../../src/styles/grid.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,eAAO,MAAM,SAAS,QAGpB,CAAC;AAEH,eAAO,MAAM,OAAO,QAmBlB,CAAC;AAEH,eAAO,MAAM,WAAW,QAQtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAsBpB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,cAAc,QAMzB,CAAC;AAEH,eAAO,MAAM,YAAY,QAmBvB,CAAC;AAEH,eAAO,MAAM,KAAK,QAGhB,CAAC;AAEH,eAAO,MAAM,IAAI,QAEf,CAAC;AAEH,eAAO,MAAM,YAAY,QAGvB,CAAC;AAOH,eAAO,MAAM,UAAU;;;;;;;;;;;CAWb,CAAC"}
@@ -25,6 +25,7 @@ export declare const semanticClassNames: {
25
25
  readonly listItemChecked: "rich-list-item-checked";
26
26
  readonly listItemUnchecked: "rich-list-item-unchecked";
27
27
  readonly quote: "rich-quote";
28
+ readonly quoteAttribution: "rich-quote-attribution";
28
29
  readonly hr: "rich-hr";
29
30
  readonly tableScrollableWrapper: "rich-table-scrollable-wrapper";
30
31
  readonly table: "rich-table";
@@ -80,6 +81,7 @@ export declare const checklist: string;
80
81
  export declare const listItemUnchecked: string;
81
82
  export declare const listItemChecked: string;
82
83
  export declare const quote: string;
84
+ export declare const quoteAttribution: string;
83
85
  export declare const hr: string;
84
86
  export declare const tableScrollableWrapper: string;
85
87
  export declare const tableCell: string;
@@ -134,6 +136,7 @@ export declare const sharedStyles: {
134
136
  listItemChecked: string;
135
137
  listItemUnchecked: string;
136
138
  quote: string;
139
+ quoteAttribution: string;
137
140
  hr: string;
138
141
  tableScrollableWrapper: string;
139
142
  table: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.css.d.ts","sourceRoot":"","sources":["../../src/styles/shared.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDrB,CAAC;AA0BX,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAErB,CAAC;AAEH,eAAO,MAAM,aAAa,QAExB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAG5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAGxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAanB,CAAC;AAEH,eAAO,MAAM,aAAa,QAkCxB,CAAC;AAEH,eAAO,MAAM,aAAa,QAYxB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAcpB,CAAC;AAEH,eAAO,MAAM,IAAI,QAsBf,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,cAAc,QAEzB,CAAC;AAEH,eAAO,MAAM,SAAS,QAGpB,CAAC;AAkDH,eAAO,MAAM,iBAAiB,QAQ5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAmB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAqBhB,CAAC;AAEH,eAAO,MAAM,EAAE,QAKb,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAEjC,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,eAAe,QAsB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAShB,CAAC;AAEH,eAAO,MAAM,OAAO,QAqBlB,CAAC;AAmBH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,GAAG,QAOd,CAAC;AAEH,eAAO,MAAM,OAAO,QAoBlB,CAAC;AAEH,eAAO,MAAM,IAAI,QAyBf,CAAC;AAEH,eAAO,MAAM,MAAM,QAKjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAEH,eAAO,MAAM,WAAW,QAmBtB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,eAAO,MAAM,eAAe,QAE1B,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAM9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,eAAO,MAAM,eAAe,QAc1B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAKlC,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB,QAenC,CAAC;AAEH,eAAO,MAAM,yBAAyB,QAoBpC,CAAC;AAEH,eAAO,MAAM,UAAU,QAsBrB,CAAC;AAEH,eAAO,MAAM,aAAa,QAOxB,CAAC;AAEH,eAAO,MAAM,KAAK,QAMhB,CAAC;AAoJH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDkC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC"}
1
+ {"version":3,"file":"shared.css.d.ts","sourceRoot":"","sources":["../../src/styles/shared.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDrB,CAAC;AA0BX,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAErB,CAAC;AAEH,eAAO,MAAM,aAAa,QAExB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAG5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAGxB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAanB,CAAC;AAEH,eAAO,MAAM,aAAa,QAkCxB,CAAC;AAEH,eAAO,MAAM,aAAa,QAYxB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,SAAS,QAcpB,CAAC;AAEH,eAAO,MAAM,IAAI,QAsBf,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,MAAM,QAIjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAEnB,CAAC;AAEH,eAAO,MAAM,cAAc,QAEzB,CAAC;AAEH,eAAO,MAAM,SAAS,QAGpB,CAAC;AAkDH,eAAO,MAAM,iBAAiB,QAQ5B,CAAC;AAEH,eAAO,MAAM,eAAe,QAmB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAqBhB,CAAC;AAEH,eAAO,MAAM,gBAAgB,QAO3B,CAAC;AAEH,eAAO,MAAM,EAAE,QAKb,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAEjC,CAAC;AAEH,eAAO,MAAM,SAAS,QAapB,CAAC;AAEH,eAAO,MAAM,eAAe,QAsB1B,CAAC;AAEH,eAAO,MAAM,KAAK,QAShB,CAAC;AAEH,eAAO,MAAM,OAAO,QAqBlB,CAAC;AAmBH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,GAAG,QAOd,CAAC;AAEH,eAAO,MAAM,OAAO,QAoBlB,CAAC;AAEH,eAAO,MAAM,IAAI,QAyBf,CAAC;AAEH,eAAO,MAAM,MAAM,QAKjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAEH,eAAO,MAAM,WAAW,QAmBtB,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAE5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,eAAO,MAAM,eAAe,QAE1B,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAIjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAM9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,eAAO,MAAM,eAAe,QAc1B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAKlC,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAMjC,CAAC;AAEH,eAAO,MAAM,wBAAwB,QAenC,CAAC;AAEH,eAAO,MAAM,yBAAyB,QAoBpC,CAAC;AAEH,eAAO,MAAM,UAAU,QAsBrB,CAAC;AAEH,eAAO,MAAM,aAAa,QAOxB,CAAC;AAEH,eAAO,MAAM,KAAK,QAMhB,CAAC;AAoJH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDkC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
2
- import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-CJCkLTZc.js";
1
+ import { a as noteVariant, c as richContent, i as getVariantClass, l as semanticClassNames, n as katexStyles, o as commentVariant, s as articleVariant, t as katexClassNames, u as sharedStyles } from "./katex.css-D77BtjJi.js";
2
+ import { i as detailsStyles, n as gridStyles, r as detailsClassNames, t as gridClassNames } from "./grid.css-BxRbo20q.js";
3
3
  import { articleTheme, commentTheme, noteTheme, vars } from "@haklex/rich-style-token/styles";
4
4
  export { articleTheme, articleVariant, commentTheme, commentVariant, detailsClassNames, detailsStyles, getVariantClass, gridClassNames, gridStyles, katexClassNames, katexStyles, noteTheme, noteVariant, richContent, semanticClassNames, sharedStyles, vars };
@@ -1,6 +1,7 @@
1
- import { C as MENTION_NODE_KEY, b as IMAGE_NODE_KEY, h as ALERT_NODE_KEY, i as FootnoteStaticRenderer, l as RendererWrapper, r as decodeThumbHash, t as KaTeXRenderer, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY } from "./KaTeXRenderer-CqnhvDmj.js";
2
- import { l as semanticClassNames, u as sharedStyles } from "./katex.css-CIOEOXyd.js";
1
+ import { C as MENTION_NODE_KEY, b as IMAGE_NODE_KEY, h as ALERT_NODE_KEY, i as FootnoteStaticRenderer, l as RendererWrapper, r as decodeThumbHash, t as KaTeXRenderer, u as createRendererDecoration, v as FOOTNOTE_NODE_KEY, w as MERMAID_NODE_KEY, x as KATEX_NODE_KEY } from "./KaTeXRenderer-v5qDPxDO.js";
2
+ import { l as semanticClassNames, u as sharedStyles } from "./katex.css-D77BtjJi.js";
3
3
  import { createContext, createElement, use, useCallback, useEffect, useMemo, useState } from "react";
4
+ import { QuoteNode } from "@lexical/rich-text";
4
5
  import { $getEditor, $getNodeByKey, $getSelection, $insertNodes, $isRangeSelection, DecoratorNode, ElementNode, TextNode, createCommand, getRegisteredNode } from "lexical";
5
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
7
  import { ImageIcon, Info, Lightbulb, MessageSquareWarning, OctagonAlert, Sigma, Tag, TriangleAlert, Workflow } from "lucide-react";
@@ -884,6 +885,49 @@ function $isMermaidNode(node) {
884
885
  return node instanceof MermaidNode;
885
886
  }
886
887
  //#endregion
888
+ //#region src/nodes/RichQuoteNode.ts
889
+ function normalizeAttribution(value) {
890
+ if (value == null) return null;
891
+ return value.trim() || null;
892
+ }
893
+ var RichQuoteNode = class RichQuoteNode extends QuoteNode {
894
+ constructor(attribution = null, key) {
895
+ super(key);
896
+ _defineProperty(this, "__attribution", void 0);
897
+ this.__attribution = normalizeAttribution(attribution);
898
+ }
899
+ static getType() {
900
+ return "rich-quote";
901
+ }
902
+ static clone(node) {
903
+ return new RichQuoteNode(node.__attribution, node.__key);
904
+ }
905
+ static importJSON(serializedNode) {
906
+ return $createRichQuoteNode(serializedNode.attribution ?? null).updateFromJSON(serializedNode);
907
+ }
908
+ exportJSON() {
909
+ return {
910
+ ...super.exportJSON(),
911
+ type: "rich-quote",
912
+ attribution: this.__attribution
913
+ };
914
+ }
915
+ getAttribution() {
916
+ return this.getLatest().__attribution;
917
+ }
918
+ setAttribution(value) {
919
+ const writable = this.getWritable();
920
+ writable.__attribution = normalizeAttribution(value);
921
+ return writable;
922
+ }
923
+ };
924
+ function $createRichQuoteNode(attribution = null) {
925
+ return new RichQuoteNode(attribution);
926
+ }
927
+ function $isRichQuoteNode(node) {
928
+ return node instanceof RichQuoteNode;
929
+ }
930
+ //#endregion
887
931
  //#region src/nodes/SpoilerNode.ts
888
932
  var SpoilerNode = class SpoilerNode extends ElementNode {
889
933
  static getType() {
@@ -1096,4 +1140,4 @@ var editorTheme = {
1096
1140
  hr: shared("hr")
1097
1141
  };
1098
1142
  //#endregion
1099
- export { AlertQuoteNode as A, ImageNode as C, $isAlertQuoteNode as D, FootnoteNode as E, useNestedContentRenderer as F, useOptionalNestedContentRenderer as I, extractTextContent as M, AlertRenderer as N, ALERT_LABELS as O, NestedContentRendererProvider as P, $isImageNode as S, $createFootnoteNode as T, KaTeXInlineNode as _, getTagBgColor as a, KaTeXBlockNode as b, SpoilerNode as c, MermaidNode as d, $createMentionNode as f, $isKaTeXInlineNode as g, $createKaTeXInlineNode as h, TagNode as i, _defineProperty as j, ALERT_TYPES as k, $createMermaidNode as l, MentionNode as m, $createTagNode as n, $createSpoilerNode as o, $isMentionNode as p, $isTagNode as r, $isSpoilerNode as s, editorTheme as t, $isMermaidNode as u, $createKaTeXBlockNode as v, OPEN_IMAGE_UPLOAD_DIALOG_COMMAND as w, $createImageNode as x, $isKaTeXBlockNode as y };
1143
+ export { $isAlertQuoteNode as A, KaTeXBlockNode as C, OPEN_IMAGE_UPLOAD_DIALOG_COMMAND as D, ImageNode as E, extractTextContent as F, AlertRenderer as I, NestedContentRendererProvider as L, ALERT_TYPES as M, AlertQuoteNode as N, $createFootnoteNode as O, _defineProperty as P, useNestedContentRenderer as R, $isKaTeXBlockNode as S, $isImageNode as T, MentionNode as _, getTagBgColor as a, KaTeXInlineNode as b, SpoilerNode as c, RichQuoteNode as d, $createMermaidNode as f, $isMentionNode as g, $createMentionNode as h, TagNode as i, ALERT_LABELS as j, FootnoteNode as k, $createRichQuoteNode as l, MermaidNode as m, $createTagNode as n, $createSpoilerNode as o, $isMermaidNode as p, $isTagNode as r, $isSpoilerNode as s, editorTheme as t, $isRichQuoteNode as u, $createKaTeXInlineNode as v, $createImageNode as w, $createKaTeXBlockNode as x, $isKaTeXInlineNode as y, useOptionalNestedContentRenderer as z };
@@ -1 +1 @@
1
- {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/transformers/code-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAWrE,eAAO,MAAM,gCAAgC,EAAE,2BAgC9C,CAAC"}
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/transformers/code-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAerE,eAAO,MAAM,gCAAgC,EAAE,2BAgC9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeSerializedEditorState.d.ts","sourceRoot":"","sources":["../../src/utils/normalizeSerializedEditorState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAarD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAC9C,qBAAqB,CAiCvB"}
1
+ {"version":3,"file":"normalizeSerializedEditorState.d.ts","sourceRoot":"","sources":["../../src/utils/normalizeSerializedEditorState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA6DrD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAC9C,qBAAqB,CAyCvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-editor",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "Core rich text editor based on Lexical",
5
5
  "repository": {
6
6
  "type": "git",
@@ -48,10 +48,10 @@
48
48
  "@lexical/code-core": "^0.44.0",
49
49
  "nanoid": "^5.1.9",
50
50
  "thumbhash": "^0.1.1",
51
- "@haklex/rich-editor-ui": "0.10.0",
52
- "@haklex/rich-headless": "0.10.0",
53
- "@haklex/rich-style-token": "0.10.0",
54
- "@haklex/rich-litexml": "0.10.0"
51
+ "@haklex/rich-editor-ui": "0.12.0",
52
+ "@haklex/rich-headless": "0.12.0",
53
+ "@haklex/rich-style-token": "0.12.0",
54
+ "@haklex/rich-litexml": "0.12.0"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@lexical/extension": "^0.44.0",