@haklex/rich-editor 0.0.43 → 0.0.45

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.
@@ -12,7 +12,7 @@ import { ListPlugin } from "@lexical/react/LexicalListPlugin";
12
12
  import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin";
13
13
  import { TabIndentationPlugin } from "@lexical/react/LexicalTabIndentationPlugin";
14
14
  import { TablePlugin } from "@lexical/react/LexicalTablePlugin";
15
- import { Y as $isAlertQuoteNode, d as RendererWrapper, Z as AlertRenderer, _ as SpoilerNode, T as MentionNode, a0 as FootnoteNode, O as KaTeXInlineNode, a1 as AlertQuoteNode, f as editorTheme, a2 as $isBannerNode, a3 as BannerRenderer, a4 as BannerNode, a5 as normalizeBannerType, a6 as $isCodeBlockNode, a7 as CodeBlockRenderer, a8 as CodeBlockNode, i as useFootnoteDefinitions, I as FootnoteSectionNode, v as $isGridContainerNode, K as GridContainerNode, b as builtinNodes, M as KaTeXBlockNode, L as ImageNode, a9 as VideoNode, Q as LinkCardNode, aa as DetailsNode, U as MermaidNode, F as FootnoteDefinitionsProvider, p as $createImageNode, W as computeImageMeta, V as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, ab as $createKaTeXInlineNode, ac as $createKaTeXBlockNode, ad as $createDetailsNode, ae as $createFootnoteNode, t as $isFootnoteSectionNode, $ as $createFootnoteSectionNode, r as $createMentionNode, g as extractTextContent, af as $createSpoilerNode, s as $createMermaidNode, C as ColorSchemeProvider, R as RendererConfigProvider } from "./theme-gVNBI_ET.js";
15
+ import { a2 as $isAlertQuoteNode, d as RendererWrapper, a3 as AlertRenderer, a4 as SpoilerNode, X as MentionNode, a5 as FootnoteNode, T as KaTeXInlineNode, a6 as AlertQuoteNode, f as editorTheme, a7 as $isBannerNode, a8 as BannerRenderer, a9 as BannerNode, aa as normalizeBannerType, ab as $isCodeBlockNode, ac as CodeBlockRenderer, ad as CodeBlockNode, j as useFootnoteDefinitions, M as FootnoteSectionNode, y as $isGridContainerNode, P as GridContainerNode, b as builtinNodes, S as KaTeXBlockNode, Q as ImageNode, ae as VideoNode, V as LinkCardNode, af as DetailsNode, Y as MermaidNode, _ as RubyNode, F as FootnoteDefinitionsProvider, r as $createImageNode, a0 as computeImageMeta, Z as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND, ag as $createKaTeXInlineNode, ah as $createKaTeXBlockNode, g as getHostname, p as probeFavicon, ai as $createDetailsNode, aj as $createFootnoteNode, x as $isFootnoteSectionNode, $ as $createFootnoteSectionNode, t as $createMentionNode, h as extractTextContent, w as $createRubyNode, ak as $createSpoilerNode, v as $createMermaidNode, C as ColorSchemeProvider, R as RendererConfigProvider } from "./favicon-BSvQNu9R.js";
16
16
  import { $getNodeByKey, KEY_ENTER_COMMAND, COMMAND_PRIORITY_CRITICAL, KEY_ARROW_DOWN_COMMAND, COMMAND_PRIORITY_HIGH, $getRoot, $createParagraphNode, $isParagraphNode, $getSelection, $isRangeSelection, $insertNodes, createEditor, $isElementNode, $isDecoratorNode, $createNodeSelection, $setSelection, $nodesOfType, createCommand, COMMAND_PRIORITY_EDITOR, $isRootNode, $isNodeSelection, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND, KEY_ARROW_UP_COMMAND, $isTextNode, createState, $getState, $addUpdateTag, $setState, $parseSerializedNode, PASTE_COMMAND, $createTextNode, $createLineBreakNode } from "lexical";
17
17
  import { Info, Lightbulb, TriangleAlert, Flag, LayoutGrid, Plus, Minus, Check, Upload, Link2 } from "lucide-react";
18
18
  import { useCallback, useEffect, createElement, useState, createContext, use, useRef, useMemo } from "react";
@@ -31,7 +31,7 @@ import { Dialog, DialogPopup, DialogTitle, SegmentedControl } from "@haklex/rich
31
31
  import { b as clsx, g as getVariantClass } from "./utils-fpeaZV1R.js";
32
32
  import { MarkdownShortcutPlugin } from "@lexical/react/LexicalMarkdownShortcutPlugin";
33
33
  import { CHECK_LIST, TRANSFORMERS, QUOTE, CODE } from "@lexical/markdown";
34
- import { GIT_ALERT_TRANSFORMER as GIT_ALERT_TRANSFORMER$1, CONTAINER_TRANSFORMER as CONTAINER_TRANSFORMER$1, FOOTNOTE_TRANSFORMER as FOOTNOTE_TRANSFORMER$1, FOOTNOTE_SECTION_TRANSFORMER as FOOTNOTE_SECTION_TRANSFORMER$1, KATEX_INLINE_TRANSFORMER as KATEX_INLINE_TRANSFORMER$1, KATEX_BLOCK_TRANSFORMER as KATEX_BLOCK_TRANSFORMER$1, MENTION_TRANSFORMER as MENTION_TRANSFORMER$1, SPOILER_TRANSFORMER as SPOILER_TRANSFORMER$1, INSERT_TRANSFORMER, SUPERSCRIPT_TRANSFORMER, SUBSCRIPT_TRANSFORMER, IMAGE_BLOCK_TRANSFORMER, VIDEO_BLOCK_TRANSFORMER, CODE_BLOCK_NODE_TRANSFORMER, LINK_CARD_BLOCK_TRANSFORMER, MERMAID_BLOCK_TRANSFORMER, HORIZONTAL_RULE_BLOCK_TRANSFORMER, TABLE_BLOCK_TRANSFORMER } from "@haklex/rich-headless/transformers";
34
+ import { GIT_ALERT_TRANSFORMER as GIT_ALERT_TRANSFORMER$1, CONTAINER_TRANSFORMER as CONTAINER_TRANSFORMER$1, FOOTNOTE_TRANSFORMER as FOOTNOTE_TRANSFORMER$1, FOOTNOTE_SECTION_TRANSFORMER as FOOTNOTE_SECTION_TRANSFORMER$1, KATEX_INLINE_TRANSFORMER as KATEX_INLINE_TRANSFORMER$1, KATEX_BLOCK_TRANSFORMER as KATEX_BLOCK_TRANSFORMER$1, MENTION_TRANSFORMER as MENTION_TRANSFORMER$1, RUBY_TRANSFORMER as RUBY_TRANSFORMER$1, SPOILER_TRANSFORMER as SPOILER_TRANSFORMER$1, INSERT_TRANSFORMER, SUPERSCRIPT_TRANSFORMER, SUBSCRIPT_TRANSFORMER, IMAGE_BLOCK_TRANSFORMER, VIDEO_BLOCK_TRANSFORMER, CODE_BLOCK_NODE_TRANSFORMER, LINK_CARD_BLOCK_TRANSFORMER, MERMAID_BLOCK_TRANSFORMER, HORIZONTAL_RULE_BLOCK_TRANSFORMER, TABLE_BLOCK_TRANSFORMER } from "@haklex/rich-headless/transformers";
35
35
  function ExitBlockPlugin({
36
36
  parentEditor,
37
37
  nodeKey
@@ -1027,7 +1027,8 @@ const customEditNodes = [
1027
1027
  DetailsNode,
1028
1028
  GridEditNode,
1029
1029
  BannerEditNode,
1030
- MermaidNode
1030
+ MermaidNode,
1031
+ RubyNode
1031
1032
  ];
1032
1033
  const allEditNodes = [
1033
1034
  ...builtinNodes,
@@ -2082,6 +2083,45 @@ function KaTeXPlugin() {
2082
2083
  }, [editor]);
2083
2084
  return null;
2084
2085
  }
2086
+ function applyFavicon(dom, href) {
2087
+ if (dom.dataset.faviconHref === href) return;
2088
+ dom.dataset.faviconHref = href;
2089
+ const hostname = getHostname(href);
2090
+ if (!hostname) return;
2091
+ probeFavicon(hostname).then((faviconUrl) => {
2092
+ if (faviconUrl) {
2093
+ dom.style.setProperty("--rc-link-favicon", `url(${faviconUrl})`);
2094
+ dom.dataset.favicon = "loaded";
2095
+ }
2096
+ });
2097
+ }
2098
+ function LinkFaviconPlugin() {
2099
+ const [editor] = useLexicalComposerContext();
2100
+ useEffect(() => {
2101
+ const handleMutations = (mutations) => {
2102
+ for (const [nodeKey, mutation] of mutations) {
2103
+ if (mutation === "destroyed") continue;
2104
+ const dom = editor.getElementByKey(nodeKey);
2105
+ if (!dom) continue;
2106
+ const href = dom.getAttribute("href");
2107
+ if (href) applyFavicon(dom, href);
2108
+ }
2109
+ };
2110
+ const unregisterLink = editor.registerMutationListener(
2111
+ LinkNode,
2112
+ handleMutations
2113
+ );
2114
+ const unregisterAutoLink = editor.registerMutationListener(
2115
+ AutoLinkNode,
2116
+ handleMutations
2117
+ );
2118
+ return () => {
2119
+ unregisterLink();
2120
+ unregisterAutoLink();
2121
+ };
2122
+ }, [editor]);
2123
+ return null;
2124
+ }
2085
2125
  const ALERT_TYPE_MAP = {
2086
2126
  NOTE: "note",
2087
2127
  TIP: "tip",
@@ -2325,6 +2365,18 @@ ${body}
2325
2365
  },
2326
2366
  type: "element"
2327
2367
  };
2368
+ const RUBY_TRANSFORMER = {
2369
+ ...RUBY_TRANSFORMER$1,
2370
+ dependencies: [RubyNode],
2371
+ replace: (textNode, match) => {
2372
+ const rubyNode = $createRubyNode(match[2] ?? "");
2373
+ const baseText = match[1] ?? "";
2374
+ if (baseText) {
2375
+ rubyNode.append($createTextNode(baseText));
2376
+ }
2377
+ textNode.replace(rubyNode);
2378
+ }
2379
+ };
2328
2380
  const SPOILER_TRANSFORMER = {
2329
2381
  ...SPOILER_TRANSFORMER$1,
2330
2382
  dependencies: [SpoilerNode],
@@ -2342,6 +2394,7 @@ const ALL_TRANSFORMERS = [
2342
2394
  INSERT_TRANSFORMER,
2343
2395
  SUPERSCRIPT_TRANSFORMER,
2344
2396
  SUBSCRIPT_TRANSFORMER,
2397
+ RUBY_TRANSFORMER,
2345
2398
  KATEX_INLINE_TRANSFORMER,
2346
2399
  // Block transformers (order matters - more specific first)
2347
2400
  FOOTNOTE_SECTION_TRANSFORMER,
@@ -2541,6 +2594,7 @@ function RichEditor({
2541
2594
  /* @__PURE__ */ jsx(CheckListPlugin, {}),
2542
2595
  /* @__PURE__ */ jsx(BlockExitPlugin, {}),
2543
2596
  /* @__PURE__ */ jsx(AutoLinkPlugin, {}),
2597
+ /* @__PURE__ */ jsx(LinkFaviconPlugin, {}),
2544
2598
  /* @__PURE__ */ jsx(BlockIdPlugin, {}),
2545
2599
  /* @__PURE__ */ jsx(EditorRefPlugin, { onEditorReady }),
2546
2600
  autoFocus && /* @__PURE__ */ jsx(AutoFocusPlugin, {}),
@@ -0,0 +1,13 @@
1
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
+ function RubyRenderer({ reading, children }) {
3
+ if (!reading) {
4
+ return /* @__PURE__ */ jsx(Fragment, { children });
5
+ }
6
+ return /* @__PURE__ */ jsxs("ruby", { className: "rich-ruby", children: [
7
+ children,
8
+ /* @__PURE__ */ jsx("rt", { className: "rich-ruby-rt", children: reading })
9
+ ] });
10
+ }
11
+ export {
12
+ RubyRenderer as R
13
+ };
@@ -0,0 +1,4 @@
1
+ export declare function LinkFavicon({ href }: {
2
+ href: string;
3
+ }): import("react").JSX.Element | null;
4
+ //# sourceMappingURL=LinkFavicon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkFavicon.d.ts","sourceRoot":"","sources":["../../src/components/LinkFavicon.tsx"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,sCA4BrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"RichEditor.d.ts","sourceRoot":"","sources":["../../src/components/RichEditor.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI/C,wBAAgB,UAAU,CAAC,EACzB,YAAY,EACZ,QAAQ,EACR,OAAmB,EACnB,KAAe,EACf,WAAkC,EAClC,QAAQ,EACR,SAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,+BA2EjB"}
1
+ {"version":3,"file":"RichEditor.d.ts","sourceRoot":"","sources":["../../src/components/RichEditor.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI/C,wBAAgB,UAAU,CAAC,EACzB,YAAY,EACZ,QAAQ,EACR,OAAmB,EACnB,KAAe,EACf,WAAkC,EAClC,QAAQ,EACR,SAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,QAAQ,GACT,EAAE,eAAe,+BA4EjB"}
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ export interface RubyRendererProps {
3
+ reading: string;
4
+ children?: ReactNode;
5
+ }
6
+ export declare function RubyRenderer({ reading, children }: RubyRendererProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=RubyRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RubyRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/renderers/RubyRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BAWpE"}
@@ -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,CAAA;AAmBjD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAgBrD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAGlD,CAAA"}
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,CAAA;AAoBjD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAiBrD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAGlD,CAAA"}
@@ -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,CAAA;AAkBjD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAYlD,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAgBjD,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAG9C,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAmBjD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAYlD,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAiBjD,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAG9C,CAAA"}
package/dist/editor.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { R, a, c, g, s } from "./RichEditor-Cv399wxR.js";
2
- import { a as a2, b, c as c2 } from "./theme-gVNBI_ET.js";
1
+ import { R, a, c, g, s } from "./RichEditor-aTCMdx5E.js";
2
+ import { a as a2, b, c as c2 } from "./favicon-BSvQNu9R.js";
3
3
  export {
4
4
  R as RichEditor,
5
5
  a as allEditNodes,
@@ -7,7 +7,7 @@ import { LinkNode, AutoLinkNode } from "@lexical/link";
7
7
  import { ListNode, ListItemNode } from "@lexical/list";
8
8
  import { HeadingNode, QuoteNode } from "@lexical/rich-text";
9
9
  import { TableNode, TableCellNode, TableRowNode } from "@lexical/table";
10
- import { DecoratorNode, $insertNodes, ElementNode, createCommand, $getSelection, $isRangeSelection, $getNodeByKey } from "lexical";
10
+ import { DecoratorNode, $insertNodes, ElementNode, createCommand, $getSelection, $isRangeSelection, $getNodeByKey, $createTextNode } from "lexical";
11
11
  import { createContext, use, useMemo, createElement, useState, useRef, useEffect, useCallback } from "react";
12
12
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
13
13
  import { OctagonAlert, TriangleAlert, MessageSquareWarning, Lightbulb, Info, Code, ChevronRight, ImageIcon, Sigma, Link, Workflow, Video } from "lucide-react";
@@ -1983,6 +1983,117 @@ function $createMermaidNode(diagram) {
1983
1983
  function $isMermaidNode(node) {
1984
1984
  return node instanceof MermaidNode;
1985
1985
  }
1986
+ function readBaseTextFromRuby(element) {
1987
+ let base = "";
1988
+ for (const child of Array.from(element.childNodes)) {
1989
+ if (child.nodeType === Node.TEXT_NODE) {
1990
+ base += child.textContent ?? "";
1991
+ continue;
1992
+ }
1993
+ if (child.nodeType !== Node.ELEMENT_NODE) continue;
1994
+ const childElement = child;
1995
+ const tag = childElement.tagName.toLowerCase();
1996
+ if (tag === "rt" || tag === "rp") continue;
1997
+ base += childElement.textContent ?? "";
1998
+ }
1999
+ return base;
2000
+ }
2001
+ class RubyNode extends ElementNode {
2002
+ constructor(reading, key) {
2003
+ super(key);
2004
+ __publicField(this, "__reading");
2005
+ this.__reading = reading;
2006
+ }
2007
+ static getType() {
2008
+ return "ruby";
2009
+ }
2010
+ static clone(node) {
2011
+ return new RubyNode(node.__reading, node.__key);
2012
+ }
2013
+ static importJSON(serializedNode) {
2014
+ return $createRubyNode(serializedNode.reading ?? "");
2015
+ }
2016
+ exportJSON() {
2017
+ return {
2018
+ ...super.exportJSON(),
2019
+ type: "ruby",
2020
+ reading: this.__reading,
2021
+ version: 1
2022
+ };
2023
+ }
2024
+ static importDOM() {
2025
+ return {
2026
+ ruby: () => ({
2027
+ conversion: (domNode) => {
2028
+ if (!(domNode instanceof HTMLElement)) return null;
2029
+ const reading = domNode.querySelector("rt")?.textContent ?? "";
2030
+ const baseText = readBaseTextFromRuby(domNode);
2031
+ const node = $createRubyNode(reading);
2032
+ if (baseText) {
2033
+ node.append($createTextNode(baseText));
2034
+ }
2035
+ return { node };
2036
+ },
2037
+ priority: 2
2038
+ })
2039
+ };
2040
+ }
2041
+ exportDOM() {
2042
+ const ruby = document.createElement("ruby");
2043
+ ruby.className = "rich-ruby";
2044
+ const baseText = this.getTextContent();
2045
+ if (baseText) {
2046
+ ruby.append(baseText);
2047
+ }
2048
+ if (this.__reading) {
2049
+ const rt = document.createElement("rt");
2050
+ rt.className = "rich-ruby-rt";
2051
+ rt.textContent = this.__reading;
2052
+ ruby.append(rt);
2053
+ }
2054
+ return { element: ruby };
2055
+ }
2056
+ createDOM(_config) {
2057
+ const span = document.createElement("span");
2058
+ span.className = "rich-ruby";
2059
+ if (this.__reading) {
2060
+ span.dataset.ruby = this.__reading;
2061
+ }
2062
+ return span;
2063
+ }
2064
+ updateDOM(prevNode, dom) {
2065
+ if (prevNode.__reading !== this.__reading) {
2066
+ if (this.__reading) {
2067
+ dom.dataset.ruby = this.__reading;
2068
+ } else {
2069
+ delete dom.dataset.ruby;
2070
+ }
2071
+ }
2072
+ return false;
2073
+ }
2074
+ canInsertTextBefore() {
2075
+ return true;
2076
+ }
2077
+ canInsertTextAfter() {
2078
+ return true;
2079
+ }
2080
+ isInline() {
2081
+ return true;
2082
+ }
2083
+ getReading() {
2084
+ return this.getLatest().__reading;
2085
+ }
2086
+ setReading(reading) {
2087
+ const writable = this.getWritable();
2088
+ writable.__reading = reading;
2089
+ }
2090
+ }
2091
+ function $createRubyNode(reading) {
2092
+ return new RubyNode(reading);
2093
+ }
2094
+ function $isRubyNode(node) {
2095
+ return node instanceof RubyNode;
2096
+ }
1986
2097
  class SpoilerNode extends ElementNode {
1987
2098
  static getType() {
1988
2099
  return "spoiler";
@@ -2179,7 +2290,8 @@ const customNodes = [
2179
2290
  DetailsNode,
2180
2291
  GridContainerNode,
2181
2292
  BannerNode,
2182
- MermaidNode
2293
+ MermaidNode,
2294
+ RubyNode
2183
2295
  ];
2184
2296
  const allNodes = [
2185
2297
  ...builtinNodes,
@@ -2226,75 +2338,119 @@ const editorTheme = {
2226
2338
  /** Used by @lexical/extension HorizontalRuleNode */
2227
2339
  hr: "rich-hr"
2228
2340
  };
2341
+ const FAVICON_VARIANTS = [
2342
+ "/favicon.ico",
2343
+ "/favicon.png",
2344
+ "/favicon.svg",
2345
+ "/apple-touch-icon.png",
2346
+ "/apple-touch-icon-precomposed.png"
2347
+ ];
2348
+ const faviconCache = /* @__PURE__ */ new Map();
2349
+ function getHostname(href) {
2350
+ try {
2351
+ const url = new URL(href);
2352
+ if (url.protocol !== "http:" && url.protocol !== "https:") return null;
2353
+ return url.hostname;
2354
+ } catch {
2355
+ return null;
2356
+ }
2357
+ }
2358
+ function probeImage(url) {
2359
+ return new Promise((resolve) => {
2360
+ const img = new Image();
2361
+ img.onload = () => resolve(url);
2362
+ img.onerror = () => resolve(null);
2363
+ img.src = url;
2364
+ });
2365
+ }
2366
+ async function probeFavicon(hostname) {
2367
+ const cached = faviconCache.get(hostname);
2368
+ if (cached !== void 0) return cached;
2369
+ for (const variant of FAVICON_VARIANTS) {
2370
+ const url = `https://${hostname}${variant}`;
2371
+ const result = await probeImage(url);
2372
+ if (result) {
2373
+ faviconCache.set(hostname, result);
2374
+ return result;
2375
+ }
2376
+ }
2377
+ faviconCache.set(hostname, null);
2378
+ return null;
2379
+ }
2229
2380
  export {
2230
2381
  $createFootnoteSectionNode as $,
2231
- $isMentionNode as A,
2232
- $isMermaidNode as B,
2382
+ $isKaTeXBlockNode as A,
2383
+ $isKaTeXInlineNode as B,
2233
2384
  ColorSchemeProvider as C,
2234
- ALERT_LABELS as D,
2235
- ALERT_TYPES as E,
2385
+ $isLinkCardNode as D,
2386
+ $isMentionNode as E,
2236
2387
  FootnoteDefinitionsProvider as F,
2237
- BANNER_LABELS as G,
2238
- BANNER_TYPES as H,
2239
- FootnoteSectionNode as I,
2240
- FootnoteStaticRenderer as J,
2241
- GridContainerNode as K,
2242
- ImageNode as L,
2243
- KaTeXBlockNode as M,
2388
+ $isMermaidNode as G,
2389
+ $isRubyNode as H,
2390
+ ALERT_LABELS as I,
2391
+ ALERT_TYPES as J,
2392
+ BANNER_LABELS as K,
2393
+ BANNER_TYPES as L,
2394
+ FootnoteSectionNode as M,
2244
2395
  NestedContentRendererProvider as N,
2245
- KaTeXInlineNode as O,
2246
- KaTeXRenderer as P,
2247
- LinkCardNode as Q,
2396
+ FootnoteStaticRenderer as O,
2397
+ GridContainerNode as P,
2398
+ ImageNode as Q,
2248
2399
  RendererConfigProvider as R,
2249
- LinkCardRenderer as S,
2250
- MentionNode as T,
2251
- MermaidNode as U,
2252
- OPEN_IMAGE_UPLOAD_DIALOG_COMMAND as V,
2253
- computeImageMeta as W,
2254
- decodeThumbHash as X,
2255
- $isAlertQuoteNode as Y,
2256
- AlertRenderer as Z,
2257
- SpoilerNode as _,
2400
+ KaTeXBlockNode as S,
2401
+ KaTeXInlineNode as T,
2402
+ KaTeXRenderer as U,
2403
+ LinkCardNode as V,
2404
+ LinkCardRenderer as W,
2405
+ MentionNode as X,
2406
+ MermaidNode as Y,
2407
+ OPEN_IMAGE_UPLOAD_DIALOG_COMMAND as Z,
2408
+ RubyNode as _,
2258
2409
  allNodes as a,
2259
- FootnoteNode as a0,
2260
- AlertQuoteNode as a1,
2261
- $isBannerNode as a2,
2262
- BannerRenderer as a3,
2263
- BannerNode as a4,
2264
- normalizeBannerType as a5,
2265
- $isCodeBlockNode as a6,
2266
- CodeBlockRenderer as a7,
2267
- CodeBlockNode as a8,
2268
- VideoNode as a9,
2269
- DetailsNode as aa,
2270
- $createKaTeXInlineNode as ab,
2271
- $createKaTeXBlockNode as ac,
2272
- $createDetailsNode as ad,
2273
- $createFootnoteNode as ae,
2274
- $createSpoilerNode as af,
2410
+ computeImageMeta as a0,
2411
+ decodeThumbHash as a1,
2412
+ $isAlertQuoteNode as a2,
2413
+ AlertRenderer as a3,
2414
+ SpoilerNode as a4,
2415
+ FootnoteNode as a5,
2416
+ AlertQuoteNode as a6,
2417
+ $isBannerNode as a7,
2418
+ BannerRenderer as a8,
2419
+ BannerNode as a9,
2420
+ normalizeBannerType as aa,
2421
+ $isCodeBlockNode as ab,
2422
+ CodeBlockRenderer as ac,
2423
+ CodeBlockNode as ad,
2424
+ VideoNode as ae,
2425
+ DetailsNode as af,
2426
+ $createKaTeXInlineNode as ag,
2427
+ $createKaTeXBlockNode as ah,
2428
+ $createDetailsNode as ai,
2429
+ $createFootnoteNode as aj,
2430
+ $createSpoilerNode as ak,
2275
2431
  builtinNodes as b,
2276
2432
  customNodes as c,
2277
2433
  RendererWrapper as d,
2278
2434
  createRendererDecoration as e,
2279
2435
  editorTheme as f,
2280
- extractTextContent as g,
2281
- useFootnoteContent as h,
2282
- useFootnoteDefinitions as i,
2283
- useFootnoteDisplayNumber as j,
2284
- useNestedContentRenderer as k,
2285
- useRendererConfig as l,
2286
- useRendererMode as m,
2287
- useVariant as n,
2288
- $createGridContainerNode as o,
2289
- $createImageNode as p,
2290
- $createLinkCardNode as q,
2291
- $createMentionNode as r,
2292
- $createMermaidNode as s,
2293
- $isFootnoteSectionNode as t,
2436
+ getHostname as g,
2437
+ extractTextContent as h,
2438
+ useFootnoteContent as i,
2439
+ useFootnoteDefinitions as j,
2440
+ useFootnoteDisplayNumber as k,
2441
+ useNestedContentRenderer as l,
2442
+ useRendererConfig as m,
2443
+ useRendererMode as n,
2444
+ useVariant as o,
2445
+ probeFavicon as p,
2446
+ $createGridContainerNode as q,
2447
+ $createImageNode as r,
2448
+ $createLinkCardNode as s,
2449
+ $createMentionNode as t,
2294
2450
  useColorScheme as u,
2295
- $isGridContainerNode as v,
2296
- $isImageNode as w,
2297
- $isKaTeXBlockNode as x,
2298
- $isKaTeXInlineNode as y,
2299
- $isLinkCardNode as z
2451
+ $createMermaidNode as v,
2452
+ $createRubyNode as w,
2453
+ $isFootnoteSectionNode as x,
2454
+ $isGridContainerNode as y,
2455
+ $isImageNode as z
2300
2456
  };
package/dist/index.d.ts CHANGED
@@ -20,6 +20,8 @@ export { getResolvedEditNodes, setResolvedEditNodes } from './node-registry';
20
20
  export { NESTED_EDITOR_NODES } from './nodes/shared';
21
21
  export type { SerializedMermaidNode } from './nodes/MermaidNode';
22
22
  export { $createMermaidNode, $isMermaidNode, MermaidNode, } from './nodes/MermaidNode';
23
+ export type { SerializedRubyNode } from './nodes/RubyNode';
24
+ export { $createRubyNode, $isRubyNode, RubyNode } from './nodes/RubyNode';
23
25
  export type { AlertType } from './nodes/AlertQuoteNode';
24
26
  export { ALERT_LABELS, ALERT_TYPES } from './nodes/AlertQuoteNode';
25
27
  export { INSERT_ALERT_COMMAND } from './plugins/AlertPlugin';
@@ -49,6 +51,7 @@ export type { KaTeXRendererProps } from './components/renderers/KaTeXRenderer';
49
51
  export type { LinkCardRendererProps } from './components/renderers/LinkCardRenderer';
50
52
  export type { MentionRendererProps } from './components/renderers/MentionRenderer';
51
53
  export type { MermaidRendererProps } from './components/renderers/MermaidRenderer';
54
+ export type { RubyRendererProps } from './components/renderers/RubyRenderer';
52
55
  export type { VideoRendererProps } from './components/renderers/VideoRenderer';
53
56
  export type { SerializedMentionNode } from './nodes/MentionNode';
54
57
  export { $createMentionNode, $isMentionNode, MentionNode, } from './nodes/MentionNode';
@@ -59,6 +62,7 @@ export { LinkCardRenderer } from './components/renderers/LinkCardRenderer';
59
62
  export type { LinkCardNodePayload, SerializedLinkCardNode, } from './nodes/LinkCardNode';
60
63
  export { $createLinkCardNode, $isLinkCardNode, LinkCardNode, } from './nodes/LinkCardNode';
61
64
  export { KaTeXRenderer } from './components/renderers/KaTeXRenderer';
65
+ export { RubyRenderer } from './components/renderers/RubyRenderer';
62
66
  export type { SerializedKaTeXBlockNode } from './nodes/KaTeXBlockNode';
63
67
  export { $isKaTeXBlockNode, KaTeXBlockNode } from './nodes/KaTeXBlockNode';
64
68
  export type { SerializedKaTeXInlineNode } from './nodes/KaTeXInlineNode';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,13 +1,14 @@
1
- import { b as blockIdState } from "./RichEditor-Cv399wxR.js";
2
- import { A, F, d, I, e, f, h, i, N, R, a, c, j, g, s, u } from "./RichEditor-Cv399wxR.js";
3
- import { h as useFootnoteContent, j as useFootnoteDisplayNumber } from "./theme-gVNBI_ET.js";
4
- import { $, o, p, q, r, s as s2, t, v, w, x, y, z, A as A2, B, D, E, G, H, C, F as F2, I as I2, J, K, L, M, O, P, Q, S, T, U, N as N2, V, a as a2, b, W, e as e2, c as c2, X, f as f2, g as g2, u as u2, i as i2, k, l, m, n } from "./theme-gVNBI_ET.js";
5
- import { a as a3, c as c3, g as g3, n as n2 } from "./utils-fpeaZV1R.js";
1
+ import { b as blockIdState } from "./RichEditor-aTCMdx5E.js";
2
+ import { A, F, d, I, e, f, h, i, N, R, a, c, j, g, s, u } from "./RichEditor-aTCMdx5E.js";
3
+ import { i as useFootnoteContent, k as useFootnoteDisplayNumber } from "./favicon-BSvQNu9R.js";
4
+ import { $, q, r, s as s2, t, v, w, x, y, z, A as A2, B, D, E, G, H, I as I2, J, K, L, C, F as F2, M, O, P, Q, S, T, U, V, W, X, Y, N as N2, Z, _, a as a2, b, a0, e as e2, c as c2, a1, f as f2, h as h2, u as u2, j as j2, l, m, n, o } from "./favicon-BSvQNu9R.js";
5
+ import { a as a3, c as c3, g as g2, n as n2 } from "./utils-fpeaZV1R.js";
6
6
  import { r as r2 } from "./shared.css-BqX4HjVE.js";
7
7
  import { articleTheme, commentTheme, noteTheme, vars } from "@haklex/rich-style-token";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { TooltipRoot, TooltipTrigger, TooltipContent } from "@haklex/rich-editor-ui";
10
10
  import { useCallback } from "react";
11
+ import { R as R2 } from "./RubyRenderer-DbeobSoH.js";
11
12
  import { $getRoot, $getSelection, $isRangeSelection, $getState, $isElementNode, $isTextNode, $isLineBreakNode } from "lexical";
12
13
  function FootnoteRenderer({ identifier }) {
13
14
  const content = useFootnoteContent(identifier);
@@ -55,8 +56,8 @@ function computeBlockFingerprint(block) {
55
56
  const text = block.getTextContent();
56
57
  const input = text.slice(0, 200) + String(text.length);
57
58
  let hash = 5381;
58
- for (let i3 = 0; i3 < input.length; i3++) {
59
- hash = (hash << 5) + hash + (input.codePointAt(i3) ?? 0) | 0;
59
+ for (let i2 = 0; i2 < input.length; i2++) {
60
+ hash = (hash << 5) + hash + (input.codePointAt(i2) ?? 0) | 0;
60
61
  }
61
62
  return (hash >>> 0).toString(16);
62
63
  }
@@ -208,49 +209,53 @@ function buildRangeAnchor(editor) {
208
209
  }
209
210
  export {
210
211
  $ as $createFootnoteSectionNode,
211
- o as $createGridContainerNode,
212
- p as $createImageNode,
213
- q as $createLinkCardNode,
214
- r as $createMentionNode,
215
- s2 as $createMermaidNode,
216
- t as $isFootnoteSectionNode,
217
- v as $isGridContainerNode,
218
- w as $isImageNode,
219
- x as $isKaTeXBlockNode,
220
- y as $isKaTeXInlineNode,
221
- z as $isLinkCardNode,
222
- A2 as $isMentionNode,
223
- B as $isMermaidNode,
224
- D as ALERT_LABELS,
225
- E as ALERT_TYPES,
212
+ q as $createGridContainerNode,
213
+ r as $createImageNode,
214
+ s2 as $createLinkCardNode,
215
+ t as $createMentionNode,
216
+ v as $createMermaidNode,
217
+ w as $createRubyNode,
218
+ x as $isFootnoteSectionNode,
219
+ y as $isGridContainerNode,
220
+ z as $isImageNode,
221
+ A2 as $isKaTeXBlockNode,
222
+ B as $isKaTeXInlineNode,
223
+ D as $isLinkCardNode,
224
+ E as $isMentionNode,
225
+ G as $isMermaidNode,
226
+ H as $isRubyNode,
227
+ I2 as ALERT_LABELS,
228
+ J as ALERT_TYPES,
226
229
  A as ALL_TRANSFORMERS,
227
- G as BANNER_LABELS,
228
- H as BANNER_TYPES,
230
+ K as BANNER_LABELS,
231
+ L as BANNER_TYPES,
229
232
  C as ColorSchemeProvider,
230
233
  F2 as FootnoteDefinitionsProvider,
231
234
  F as FootnotePlugin,
232
235
  FootnoteRenderer,
233
236
  d as FootnoteSectionEditNode,
234
- I2 as FootnoteSectionNode,
235
- J as FootnoteStaticRenderer,
236
- K as GridContainerNode,
237
+ M as FootnoteSectionNode,
238
+ O as FootnoteStaticRenderer,
239
+ P as GridContainerNode,
237
240
  I as INSERT_ALERT_COMMAND,
238
241
  e as INSERT_IMAGE_COMMAND,
239
242
  f as INSERT_KATEX_BLOCK_COMMAND,
240
243
  h as INSERT_KATEX_INLINE_COMMAND,
241
244
  i as INSERT_MERMAID_COMMAND,
242
- L as ImageNode,
243
- M as KaTeXBlockNode,
244
- O as KaTeXInlineNode,
245
- P as KaTeXRenderer,
246
- Q as LinkCardNode,
247
- S as LinkCardRenderer,
248
- T as MentionNode,
249
- U as MermaidNode,
245
+ Q as ImageNode,
246
+ S as KaTeXBlockNode,
247
+ T as KaTeXInlineNode,
248
+ U as KaTeXRenderer,
249
+ V as LinkCardNode,
250
+ W as LinkCardRenderer,
251
+ X as MentionNode,
252
+ Y as MermaidNode,
250
253
  N as NESTED_EDITOR_NODES,
251
254
  N2 as NestedContentRendererProvider,
252
- V as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND,
255
+ Z as OPEN_IMAGE_UPLOAD_DIALOG_COMMAND,
253
256
  R as RichEditor,
257
+ _ as RubyNode,
258
+ R2 as RubyRenderer,
254
259
  a as allEditNodes,
255
260
  a2 as allNodes,
256
261
  articleTheme,
@@ -261,28 +266,28 @@ export {
261
266
  b as builtinNodes,
262
267
  commentTheme,
263
268
  c3 as commentVariant,
264
- W as computeImageMeta,
269
+ a0 as computeImageMeta,
265
270
  e2 as createRendererDecoration,
266
271
  c as customEditNodes,
267
272
  c2 as customNodes,
268
- X as decodeThumbHash,
273
+ a1 as decodeThumbHash,
269
274
  j as defaultImageUpload,
270
275
  f2 as editorTheme,
271
- g2 as extractTextContent,
276
+ h2 as extractTextContent,
272
277
  g as getResolvedEditNodes,
273
- g3 as getVariantClass,
278
+ g2 as getVariantClass,
274
279
  noteTheme,
275
280
  n2 as noteVariant,
276
281
  r2 as richContent,
277
282
  s as setResolvedEditNodes,
278
283
  u2 as useColorScheme,
279
284
  useFootnoteContent,
280
- i2 as useFootnoteDefinitions,
285
+ j2 as useFootnoteDefinitions,
281
286
  useFootnoteDisplayNumber,
282
287
  u as useImageUpload,
283
- k as useNestedContentRenderer,
284
- l as useRendererConfig,
285
- m as useRendererMode,
286
- n as useVariant,
288
+ l as useNestedContentRenderer,
289
+ m as useRendererConfig,
290
+ n as useRendererMode,
291
+ o as useVariant,
287
292
  vars
288
293
  };
@@ -0,0 +1,24 @@
1
+ import { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalNode, NodeKey, SerializedElementNode, Spread, ElementNode } from 'lexical';
2
+ export type SerializedRubyNode = Spread<{
3
+ reading: string;
4
+ }, SerializedElementNode>;
5
+ export declare class RubyNode extends ElementNode {
6
+ __reading: string;
7
+ static getType(): string;
8
+ static clone(node: RubyNode): RubyNode;
9
+ constructor(reading: string, key?: NodeKey);
10
+ static importJSON(serializedNode: SerializedRubyNode): RubyNode;
11
+ exportJSON(): SerializedRubyNode;
12
+ static importDOM(): DOMConversionMap | null;
13
+ exportDOM(): DOMExportOutput;
14
+ createDOM(_config: EditorConfig): HTMLElement;
15
+ updateDOM(prevNode: RubyNode, dom: HTMLElement): boolean;
16
+ canInsertTextBefore(): boolean;
17
+ canInsertTextAfter(): boolean;
18
+ isInline(): boolean;
19
+ getReading(): string;
20
+ setReading(reading: string): void;
21
+ }
22
+ export declare function $createRubyNode(reading: string): RubyNode;
23
+ export declare function $isRubyNode(node: LexicalNode | null | undefined): node is RubyNode;
24
+ //# sourceMappingURL=RubyNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RubyNode.d.ts","sourceRoot":"","sources":["../../src/nodes/RubyNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,MAAM,EACP,MAAM,SAAS,CAAA;AAChB,OAAO,EAAmB,WAAW,EAAE,MAAM,SAAS,CAAA;AAEtD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC;IACE,OAAO,EAAE,MAAM,CAAA;CAChB,EACD,qBAAqB,CACtB,CAAA;AAwBD,qBAAa,QAAS,SAAQ,WAAW;IACvC,SAAS,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;gBAI1B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO;IAK1C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAI/D,UAAU,IAAI,kBAAkB;IAShC,MAAM,CAAC,SAAS,IAAI,gBAAgB,GAAG,IAAI;IAqB3C,SAAS,IAAI,eAAe;IAmB5B,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAW7C,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO;IAYxD,mBAAmB,IAAI,OAAO;IAI9B,kBAAkB,IAAI,OAAO;IAI7B,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,MAAM;IAIpB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAIlC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAEzD;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GACnC,IAAI,IAAI,QAAQ,CAElB"}
@@ -22,6 +22,8 @@ export type { SerializedMentionNode } from './MentionNode';
22
22
  export { $createMentionNode, $isMentionNode, MentionNode } from './MentionNode';
23
23
  export type { SerializedMermaidNode } from './MermaidNode';
24
24
  export { $createMermaidNode, $isMermaidNode, MermaidNode } from './MermaidNode';
25
+ export type { SerializedRubyNode } from './RubyNode';
26
+ export { $createRubyNode, $isRubyNode, RubyNode } from './RubyNode';
25
27
  export { $createSpoilerNode, $isSpoilerNode, SpoilerNode } from './SpoilerNode';
26
28
  export type { SerializedVideoNode, VideoNodePayload } from './VideoNode';
27
29
  export { $createVideoNode, $isVideoNode, VideoNode } from './VideoNode';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvE,YAAY,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC/E,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function LinkFaviconPlugin(): null;
2
+ //# sourceMappingURL=LinkFaviconPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkFaviconPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/LinkFaviconPlugin.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,iBAAiB,SAgChC"}
@@ -1 +1 @@
1
- :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--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 rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: 8px}.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: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--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 rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes r8uj4t1{to{--rc-hl-highlighted: 1}}@keyframes r8uj4t2{0%{background-color:#ef44443d}to{background-color:transparent}}.r8uj4t0{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}.r8uj4t0 .rich-paragraph{margin:0 0 1em;line-height:var(--rc-line-height)}.r8uj4t0 .rich-text-bold{font-weight:700}.r8uj4t0 .rich-text-italic{font-style:italic}.r8uj4t0 .rich-text-underline{text-decoration:underline}.r8uj4t0 .rich-text-strikethrough{text-decoration:line-through}.r8uj4t0 .rich-text-superscript{vertical-align:super;font-size:.8em}.r8uj4t0 .rich-text-subscript{vertical-align:sub;font-size:.8em}.r8uj4t0 .rich-text-code{font-family:var(--rc-font-mono);font-size:.9em;background-color:var(--rc-code-bg);color:var(--rc-code-text);padding:2px 6px;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border)}.r8uj4t0 mark{background:transparent}.r8uj4t0 .rich-text-highlight{--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] .rich-text-highlight{--rc-hl-highlighted: 1;animation:none}[data-theme=dark] .r8uj4t0 .rich-text-highlight{--rc-hl-lightness: .35}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6){position:relative}.r8uj4t0 .rich-heading-anchor{position:absolute;left:-1.25em;top:0;bottom:0;display:flex;align-items:center;text-decoration:none;color:var(--rc-text-secondary);opacity:0;transition:opacity .15s ease;font-size:.8em}.r8uj4t0 .rich-heading-anchor:before{content:"#"}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6):hover .rich-heading-anchor{opacity:.5}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6):hover .rich-heading-anchor:hover{opacity:1}.r8uj4t0 .rich-heading-h1{font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em}.r8uj4t0 .rich-heading-h2{font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em}.r8uj4t0 .rich-heading-h3{font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em}.r8uj4t0 .rich-heading-h4{font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em}.r8uj4t0 .rich-heading-h5{font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em}.r8uj4t0 .rich-heading-h6{font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1em;margin-bottom:.25em;color:var(--rc-text)}.r8uj4t0 .rich-link{color:var(--rc-link);text-decoration:none;transition:color .2s ease}.r8uj4t0 .rich-link:hover{text-decoration:underline}.r8uj4t0 .rich-list-ol{list-style-type:decimal;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4t0 .rich-list-ul{list-style-type:disc;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4t0 .rich-list-item{margin-bottom:.25em}.r8uj4t0 .rich-list-nested-item{list-style-type:none}.r8uj4t0 .rich-list-nested-item .rich-list-ol{list-style-type:lower-alpha}.r8uj4t0 .rich-list-nested-item .rich-list-ul{list-style-type:circle}.r8uj4t0 .rich-checklist{list-style-type:none;padding-left:0}.r8uj4t0 .rich-list-item.rich-list-item-checked,.r8uj4t0 .rich-list-item.rich-list-item-unchecked{position:relative;padding-left:1.9em;list-style-type:none;outline:none}.r8uj4t0 .rich-list-item.rich-list-item-unchecked:before,.r8uj4t0 .rich-list-item.rich-list-item-checked:before{content:"";width:16px;height:16px;border:1px solid var(--rc-border);border-radius:var(--rc-radius-sm);position:absolute;left:0;top:calc((1lh - 16px)/2);box-sizing:border-box}.r8uj4t0 .rich-list-item.rich-list-item-checked:before{background-color:var(--rc-accent);border-color:var(--rc-accent)}.r8uj4t0 .rich-list-item.rich-list-item-checked:after{content:"";position:absolute;left:5px;top:calc((1lh - 16px)/2 + 5px);width:6px;height:3px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg);box-sizing:border-box}.r8uj4t0 .rich-list-item-checked{text-decoration:line-through;color:var(--rc-text-secondary)}.r8uj4t0 .rich-quote{border-left:4px solid var(--rc-quote-border);background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);font-style:italic;color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0}.r8uj4t0 .rich-quote>.rich-paragraph:first-child{margin-top:0}.r8uj4t0 .rich-quote>.rich-paragraph:last-child{margin-bottom:0}.r8uj4t0 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4t0 .rich-table-scrollable-wrapper{overflow-x:auto}.r8uj4t0 .rich-table{width:100%;border-collapse:separate;border-spacing:0;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}.r8uj4t0 .rich-table-cell{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}.r8uj4t0 .rich-table-cell:last-child{border-right:none}.r8uj4t0 .rich-table tbody tr:last-child .rich-table-cell{border-bottom:none}.r8uj4t0 .rich-table-cell .rich-paragraph{margin:0;padding:0;line-height:inherit}.r8uj4t0 .rich-table-cell>:first-child{margin-top:0}.r8uj4t0 .rich-table-cell>:last-child{margin-bottom:0}.r8uj4t0 .rich-table-cell-header{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;font-weight:600;font-size:.75em;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;line-height:1.5;position:sticky;top:0;z-index:1}.r8uj4t0 .rich-table-cell-header:last-child{border-right:none}.r8uj4t0 .rich-table-cell-header .rich-paragraph{margin:0;padding:0;line-height:inherit}.r8uj4t0 .rich-table-cell-header>:first-child{margin-top:0}.r8uj4t0 .rich-table-cell-header>:last-child{margin-bottom:0}.r8uj4t0 img{max-width:100%;height:auto;border-radius:var(--rc-radius-md)}.r8uj4t0 .rich-spoiler{background-color:var(--rc-text);color:transparent;border-radius:var(--rc-radius-sm);padding-inline:4px;cursor:pointer;transition:background-color .3s ease,color .3s ease;user-select:none}[contenteditable=true] .rich-spoiler{background-color:color-mix(in srgb,var(--rc-text) 30%,transparent);color:inherit;user-select:auto;cursor:text}.r8uj4t0 .rich-spoiler:hover,.r8uj4t0 .rich-spoiler-revealed{background-color:transparent;color:inherit;user-select:auto}.r8uj4t0 .rich-footnote{vertical-align:super;font-size:.8em}.r8uj4t0 .rich-footnote-ref{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;text-decoration:none;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;padding:0 .35em;line-height:1.45;font-weight:600;font-size:.82em;transition:filter .15s ease}.r8uj4t0 .rich-footnote-ref:hover{filter:brightness(.96)}.r8uj4t0 .rich-footnote-highlight{animation:r8uj4t2 1.2s ease-out}.r8uj4t0 .rich-footnote-ref-wrapper{position:relative;display:inline}.r8uj4t0 .rich-footnote-section{margin-top:var(--rc-space-lg)}.r8uj4t0 .rich-footnote-section-divider{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t0 .rich-footnote-section-list{list-style-type:decimal;padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6}.r8uj4t0 .rich-footnote-section-item{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t0 .rich-footnote-back-ref{display:inline-flex;align-items:center;margin-left:var(--rc-space-xs);color:var(--rc-accent);text-decoration:none;font-size:.85em;transition:opacity .15s ease;font-family:var(--rc-font-mono)}.r8uj4t0 .rich-footnote-back-ref:hover{opacity:.7}.r8uj4t0 .rich-footnote-section-item-edit{display:flex;align-items:center;gap:var(--rc-space-sm);list-style-type:none}.r8uj4t0 .rich-footnote-section-item-num{flex-shrink:0;color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);font-weight:600;min-width:1.5em}.r8uj4t0 .rich-footnote-section-item-input{flex:1;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:transparent;outline:none;transition:border-color .15s ease}.r8uj4t0 .rich-footnote-section-item-input:focus{border-color:var(--rc-accent)}.r8uj4t0 .rich-footnote-section-item-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);font-size:14px;transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-footnote-section-item-remove:hover{color:#ef4444;background-color:#ef44441a}.rich-drag-handle{position:absolute;display:flex;align-items:center;justify-content:center;width:20px;height:20px;cursor:grab;border-radius:var(--rc-radius-sm);color:var(--rc-text-secondary);opacity:.4;transition:opacity .15s ease,background-color .15s ease;z-index:10}.rich-drag-handle:hover{opacity:1;background-color:var(--rc-bg-secondary)}.rich-drag-handle:active{cursor:grabbing}.rich-drop-indicator{position:absolute;height:2px;background-color:var(--rc-accent);border-radius:1px;pointer-events:none;z-index:10}.r8uj4t0 .rich-alert{margin:2em 0;padding:0 1em;background-color:transparent;border:none;border-radius:0}.r8uj4t0>*:first-child,.r8uj4t0 .rich-editor__content>*:first-child{margin-top:0}.r8uj4t0>*:last-child,.r8uj4t0 .rich-editor__content>*:last-child{margin-bottom:0}@supports (animation-timeline: view()){.r8uj4t0 .rich-text-highlight{--rc-hl-highlighted: 0;animation:r8uj4t1 steps(1) both;animation-timeline:view();animation-range:entry 100% cover 10%}}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.75;color:var(--rc-text)}.v10dui0 .rich-paragraph{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .rich-heading-h1{color:var(--rc-text);font-weight:800;font-size:3em;margin-top:0;margin-bottom:.8333333333333334em;line-height:1}.v10dui0 .rich-heading-h2{color:var(--rc-text);font-weight:700;font-size:1.875em;margin-top:1.8666666666666667em;margin-bottom:1.0666666666666667em;line-height:1.3333333}.v10dui0 .rich-heading-h3{color:var(--rc-text);font-weight:600;font-size:1.5em;margin-top:1.6666666666666667em;margin-bottom:.6666666666666666em;line-height:1.5}.v10dui0 .rich-heading-h4{color:var(--rc-text);font-weight:600;margin-top:2em;margin-bottom:.5em;line-height:1.5625}.v10dui0 .rich-heading-h2+*,.v10dui0 .rich-heading-h3+*,.v10dui0 .rich-heading-h4+*{margin-top:0}.v10dui0 .rich-quote{font-weight:500;font-style:italic;color:var(--rc-text);border-left-width:.25rem;border-left-style:solid;border-left-color:var(--rc-quote-border);margin-top:2.5em;margin-bottom:2.5em;padding-left:1.5em;background-color:transparent;border-radius:0;quotes:"“""”""‘""’"}.v10dui0 .rich-quote .rich-paragraph:first-of-type:before{content:open-quote}.v10dui0 .rich-quote .rich-paragraph:last-of-type:after{content:close-quote}.v10dui0 .rich-quote .rich-paragraph:first-child{margin-top:0}.v10dui0 .rich-quote .rich-paragraph:last-child{margin-bottom:0}.v10dui0 .rich-text-code{color:var(--rc-text);font-weight:600;font-size:.875em;background-color:var(--rc-code-bg);padding:.2em .4em;border-radius:var(--rc-radius-sm);font-family:var(--rc-font-mono)}.v10dui0 .rich-text-code:before,.v10dui0 .rich-text-code:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.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{padding:1em 1.5em;margin:0}.v10dui0 .rich-list-ul,.v10dui0 .rich-list-ol{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .rich-list-item{margin-top:.75em;margin-bottom:.75em;padding-left:.5em}.v10dui0 .rich-list-item .rich-paragraph{margin-top:1em;margin-bottom:1em}.v10dui0 .rich-list-item>.rich-paragraph:first-child{margin-top:1.5em}.v10dui0 .rich-list-item>.rich-paragraph:last-child{margin-bottom:1.5em}.v10dui0 .rich-list-ul .rich-list-ul,.v10dui0 .rich-list-ul .rich-list-ol,.v10dui0 .rich-list-ol .rich-list-ul,.v10dui0 .rich-list-ol .rich-list-ol{margin-top:1em;margin-bottom:1em}.v10dui0 .rich-table{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .rich-table .rich-paragraph{margin:0;padding:0;line-height:inherit}.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);font-size:.875em;line-height:1.5;margin-top:1em}.v10dui0 .rich-hr{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .rich-hr+*{margin-top:0}.v10dui0 .rich-link{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 .rich-details{margin:2em 0}.v10dui0>*:first-child{margin-top:0}.v10dui0>*:last-child{margin-bottom:0}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .rich-paragraph{margin-bottom:.6em}._14ko36c0 .rich-heading-h1{font-size:1.35em;font-weight:700;margin-top:.8em;margin-bottom:.3em}._14ko36c0 .rich-heading-h2{font-size:1.2em;font-weight:700;margin-top:.7em;margin-bottom:.25em}._14ko36c0 .rich-heading-h3{font-size:1.1em;font-weight:600;margin-top:.6em;margin-bottom:.2em}._14ko36c0 .rich-heading-h4{font-size:1em;font-weight:600;margin-top:.5em;margin-bottom:.15em}._14ko36c0 .rich-heading-h5{font-size:.9em;font-weight:600;margin-top:.45em;margin-bottom:.1em}._14ko36c0 .rich-heading-h6{font-size:.85em;font-weight:600;margin-top:.4em;margin-bottom:.1em}._14ko36c0 .rich-quote{border-left-width:3px;padding:var(--rc-space-sm) var(--rc-space-md);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .rich-list-ol,._14ko36c0 .rich-list-ul{margin-bottom:.6em;padding-left:var(--rc-space-md)}._14ko36c0 .rich-list-item{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 .rich-table{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .rich-table-cell,._14ko36c0 .rich-table-cell-header{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 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .rich-alert{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .rich-katex-block{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);line-height:1.8;color:var(--rc-text)}.ys4fw90>.rich-paragraph,.ys4fw90 .rich-editor__content>.rich-paragraph,.ys4fw90 .rich-content__body>.rich-paragraph{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90>.rich-paragraph:first-of-type,.ys4fw90 .rich-editor__content>.rich-paragraph:first-of-type,.ys4fw90 .rich-content__body>.rich-paragraph:first-of-type{margin-top:0;margin-bottom:2rem}.ys4fw90>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child,.ys4fw90 .rich-editor__content>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child,.ys4fw90 .rich-content__body>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2rem}.ys4fw90>.rich-paragraph:first-of-type:first-letter,.ys4fw90 .rich-content__body>.rich-paragraph:first-of-type:first-letter{float:left;font-size:2.4em;margin-right:.2em;line-height:1}.ys4fw90 .rich-editor__content>.rich-paragraph:first-of-type:first-letter{font-size:1.5em;font-weight:700;color:var(--rc-accent)}.ys4fw90>.rich-paragraph:last-child,.ys4fw90 .rich-editor__content>.rich-paragraph:last-child,.ys4fw90 .rich-content__body>.rich-paragraph:last-child{margin-bottom:0}.ys4fw90 .rich-text-bold{font-family:var(--rc-font-family);font-weight:600;color:var(--rc-text)}.ys4fw90 .rich-heading-h1{font-size:2.25em;font-weight:800;line-height:1.1111111;margin-top:0;margin-bottom:.8888889em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h2{font-size:1.5em;font-weight:700;line-height:1.3333333;margin-top:2em;margin-bottom:1em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h2+*{margin-top:0}.ys4fw90 .rich-heading-h3{font-size:1.25em;font-weight:600;line-height:1.6;margin-top:1.6em;margin-bottom:.6em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h3+*{margin-top:0}.ys4fw90 .rich-heading-h4{font-size:1.125em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .rich-heading-h4+*{margin-top:0}.ys4fw90 .rich-heading-h5{font-size:1em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .rich-heading-h5+*{margin-top:0}.ys4fw90 .rich-heading-h6{font-size:.875em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text);text-transform:uppercase}.ys4fw90 .rich-heading-h6+*{margin-top:0}.ys4fw90 .rich-quote{font-style:normal;line-height:1.8;color:inherit;border-left:none;background-color:color-mix(in srgb,var(--rc-accent) 10%,transparent);margin-top:1.6em;margin-bottom:1.6em;margin-left:-1rem;margin-right:-1rem;padding:1em 2em;border-radius:0}.ys4fw90 .rich-quote .rich-paragraph:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-link{font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .15s ease}.ys4fw90 .rich-link:hover{text-decoration-thickness:2px}.ys4fw90 .rich-text-code{font-size:.875em;font-family:var(--rc-font-mono);font-weight:500;padding:.2em .4em;border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg)}.ys4fw90 .rich-list-ol,.ys4fw90 .rich-list-ul{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .rich-list-ol{list-style-type:decimal}.ys4fw90 .rich-list-ul{list-style-type:disc}.ys4fw90 .rich-list-item{margin-top:.5em;margin-bottom:.5em;padding-left:.375em}.ys4fw90 .rich-list-item::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:var(--rc-radius-md);overflow-x:auto}.ys4fw90 .rich-code-block pre{padding:.8571429em 1.1428571em;margin:0}.ys4fw90 .rich-table{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.ys4fw90 .rich-table .rich-paragraph{margin:0;padding:0;line-height:inherit}.ys4fw90 .rich-table .rich-paragraph: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{font-size:.875em;line-height:1.4285714;margin-top:.8571429em;color:var(--rc-text-secondary);text-align:center}.ys4fw90 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;margin-top:.5rem;margin-bottom:.5rem;width:60px;margin-left:auto;margin-right:auto}.ys4fw90 .rich-katex-block{margin-top:1.6em;margin-bottom:1.6em;overflow-x:auto;padding:1em 0}.ys4fw90 .rich-spoiler{border-radius:var(--rc-radius-sm);padding-inline:.25em}.ys4fw90>*:first-child{margin-top:0}.ys4fw90>*:last-child{margin-bottom:0}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{position:relative;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent)}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb,var(--rc-accent) 48%,transparent);outline-offset:-2px}._1x58dbf1{position:absolute;right:.75rem;bottom:.75rem;z-index:25;display:flex;flex-direction:column;align-items:flex-end;gap:.375rem;pointer-events:none}._1x58dbf2{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;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);line-height:1.2;box-shadow:var(--rc-shadow-top-bar);animation:_1x58dbf0 .12s ease-out}._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{width:12px;height:12px;border-radius:50%;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);animation:_1x58dbf6 .75s linear infinite}._1x58dbf8._1x58dbf8{padding:0;gap:0;width:min(560px,calc(100vw - 2rem));overflow:hidden}._1x58dbf9{padding:.875rem 1rem .75rem;border-bottom:1px solid var(--rc-border)}._1x58dbfa{font-size:var(--rc-font-size-md);font-weight:600;color:var(--rc-text)}._1x58dbfb{display:flex;flex-direction:column;gap:.875rem;padding:.875rem 1rem}._1x58dbfc{display:flex;align-items:center;gap:.5rem}._1x58dbfd{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;padding:1.2rem;color:var(--rc-text-secondary);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}._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{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-text) 6%,transparent)}._1x58dbfi{font-size:var(--rc-font-size-sm);font-weight:600;color:var(--rc-text)}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{display:flex;flex-direction:column;align-items:center;gap:.5rem}._1x58dbfm{display:inline-flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-sm);color:var(--rc-text)}._1x58dbfn{display:flex;align-items:center;gap:.5rem}._1x58dbfo{width:100%;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text);height:34px;padding:0 .625rem;font-size:var(--rc-font-size-sm);outline:none;transition:border-color .15s ease}._1x58dbfo:focus{border-color:color-mix(in srgb,var(--rc-accent) 50%,transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{height:34px;border-radius:var(--rc-radius-sm);border:1px solid transparent;font-size:var(--rc-font-size-xs);font-weight:600;cursor:pointer;padding:0 .75rem;transition:background-color .15s ease,border-color .15s ease,color .15s ease}._1x58dbfq{background-color:var(--rc-text);color:var(--rc-bg)}._1x58dbfq:hover{background-color:color-mix(in srgb,var(--rc-text) 85%,transparent)}._1x58dbfq:disabled{opacity:.45;cursor:not-allowed}._1x58dbfr{border-color:var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text-secondary)}._1x58dbfr:hover{color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._1x58dbfr:disabled{opacity:.45;cursor:not-allowed}._1x58dbfs{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);overflow:hidden;background-color:color-mix(in srgb,var(--rc-text) 2%,transparent)}._1x58dbft{display:block;width:100%;max-height:220px;object-fit:cover}._1x58dbfu{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary)}._1x58dbfv{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-top:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-text) 2%,transparent);padding:.65rem 1rem}._1x58dbfw{display:flex;align-items:center;gap:.5rem}.r8uj4t0 .rich-katex-inline{display:inline;padding:0 2px;vertical-align:middle}.r8uj4t0 .rich-katex-block{display:block;text-align:center;padding:var(--rc-space-md) 0;overflow-x:auto;margin:var(--rc-space-md) 0}.r8uj4t0 .rich-katex-fallback{font-family:var(--rc-font-mono);font-size:.9em;color:var(--rc-code-text);background-color:var(--rc-code-bg);padding:2px 6px;border-radius:var(--rc-radius-sm)}.r8uj4t0 .rich-details{margin:var(--rc-space-md) 0;border:none;interpolate-size:allow-keywords}.r8uj4t0 .rich-details-summary{display:flex;align-items:center;justify-content:space-between;gap:1rem;cursor:pointer;user-select:none;font-weight:500;font-size:.9375rem;line-height:1.5;padding:.75rem 0;color:var(--rc-text);list-style:none;transition:color .2s ease}.r8uj4t0 .rich-details-summary:hover{opacity:.8}.r8uj4t0 .rich-details-summary::-webkit-details-marker{display:none}.r8uj4t0 .rich-details-summary::marker{content:"";display:none}.r8uj4t0 .rich-details-summary-text{flex:1}.r8uj4t0 .rich-details-chevron{display:inline-flex;flex-shrink:0;color:var(--rc-text-secondary);transition:transform .35s cubic-bezier(.4,0,.2,1)}.r8uj4t0 .rich-details[open] .rich-details-chevron{transform:rotate(180deg)}.r8uj4t0 .rich-details::details-content{display:block;height:0;overflow:hidden;opacity:0;content-visibility:hidden;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}.r8uj4t0 .rich-details[open]::details-content{height:auto;opacity:1;content-visibility:visible}.r8uj4t0 .rich-details-content{padding:0 0 .75rem;color:var(--rc-text-secondary)}[contenteditable=true] .rich-details-content{background-color:var(--rc-bg-secondary);border-radius:var(--rc-radius-sm);padding:var(--rc-space-sm) var(--rc-space-md);margin-top:var(--rc-space-xs)}.r8uj4t0 .rich-details-content>.rich-paragraph:first-child{margin-top:0}.r8uj4t0 .rich-details-content>.rich-paragraph:last-child{margin-bottom:0}.r8uj4t0 .rich-grid-container{position:relative;margin:var(--rc-space-md) 0}.r8uj4t0 .rich-grid-toolbar{position:absolute;top:-36px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:4px 6px;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;user-select:none;white-space:nowrap;opacity:0;transition:opacity .15s ease}.r8uj4t0 .rich-grid-container:hover .rich-grid-toolbar,.r8uj4t0 .rich-grid-container:focus-within .rich-grid-toolbar{opacity:1;pointer-events:auto}.r8uj4t0 .rich-grid-toolbar-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0}.r8uj4t0 .rich-grid-col-btn{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;font-size:12px;font-weight:500;color:var(--rc-text-secondary);line-height:1;transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-grid-col-btn:hover{background-color:var(--rc-bg-secondary);color:var(--rc-text)}.r8uj4t0 .rich-grid-col-btn-active{background:var(--rc-bg-secondary);font-weight:600;color:var(--rc-text)}.r8uj4t0 .rich-grid-toolbar-divider{width:1px;height:16px;background:var(--rc-border);margin:0 2px;flex-shrink:0}.r8uj4t0 .rich-grid-action-btn{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;color:var(--rc-text-secondary);transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-grid-action-btn:hover{background-color:var(--rc-bg-secondary);color:var(--rc-text)}.r8uj4t0 .rich-grid-inner{display:grid;gap:var(--rc-space-md)}.r8uj4t0 .rich-grid-cell{min-width:0}.r8uj4t0 .rich-grid-cell-editable{outline:none}
1
+ :root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--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 rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--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-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: 8px}.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: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--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 rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}@keyframes r8uj4t1{to{--rc-hl-highlighted: 1}}@keyframes r8uj4t2{0%{background-color:#ef44443d}to{background-color:transparent}}.r8uj4t0{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}.r8uj4t0 .rich-paragraph{margin:0 0 1em;line-height:var(--rc-line-height)}.r8uj4t0 .rich-text-bold{font-weight:700}.r8uj4t0 .rich-text-italic{font-style:italic}.r8uj4t0 .rich-text-underline{text-decoration:underline}.r8uj4t0 .rich-text-strikethrough{text-decoration:line-through}.r8uj4t0 .rich-text-superscript{vertical-align:super;font-size:.8em}.r8uj4t0 .rich-text-subscript{vertical-align:sub;font-size:.8em}.r8uj4t0 .rich-text-code{font-family:var(--rc-font-mono);font-size:.9em;background-color:var(--rc-code-bg);color:var(--rc-code-text);padding:2px 6px;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border)}.r8uj4t0 mark{background:transparent}.r8uj4t0 .rich-text-highlight{--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] .rich-text-highlight{--rc-hl-highlighted: 1;animation:none}[data-theme=dark] .r8uj4t0 .rich-text-highlight{--rc-hl-lightness: .35}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6){position:relative}.r8uj4t0 .rich-heading-anchor{position:absolute;left:-1.25em;top:0;bottom:0;display:flex;align-items:center;text-decoration:none;color:var(--rc-text-secondary);opacity:0;transition:opacity .15s ease;font-size:.8em}.r8uj4t0 .rich-heading-anchor:before{content:"#"}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6):hover .rich-heading-anchor{opacity:.5}.r8uj4t0 :is(.rich-heading-h1,.rich-heading-h2,.rich-heading-h3,.rich-heading-h4,.rich-heading-h5,.rich-heading-h6):hover .rich-heading-anchor:hover{opacity:1}[contenteditable=true] .rich-heading-h1:before,[contenteditable=true] .rich-heading-h2:before,[contenteditable=true] .rich-heading-h3:before,[contenteditable=true] .rich-heading-h4:before,[contenteditable=true] .rich-heading-h5:before,[contenteditable=true] .rich-heading-h6:before{position:absolute;left:-1.5rem;bottom:.5rem;display:flex;font-size:.5rem;font-weight:600;color:var(--rc-text-secondary);opacity:.6;pointer-events:none;font-family:var(--rc-font-mono)}[contenteditable=true] .rich-heading-h1:before{content:"H1"}[contenteditable=true] .rich-heading-h2:before{content:"H2"}[contenteditable=true] .rich-heading-h3:before{content:"H3"}[contenteditable=true] .rich-heading-h4:before{content:"H4"}[contenteditable=true] .rich-heading-h5:before{content:"H5"}[contenteditable=true] .rich-heading-h6:before{content:"H6"}.r8uj4t0 .rich-heading-h1{font-size:2em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.5em;margin-bottom:.5em}.r8uj4t0 .rich-heading-h2{font-size:1.5em;font-weight:700;line-height:var(--rc-line-height-tight);margin-top:1.4em;margin-bottom:.45em}.r8uj4t0 .rich-heading-h3{font-size:1.25em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.3em;margin-bottom:.4em}.r8uj4t0 .rich-heading-h4{font-size:1.125em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.2em;margin-bottom:.35em}.r8uj4t0 .rich-heading-h5{font-size:1em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1.1em;margin-bottom:.3em}.r8uj4t0 .rich-heading-h6{font-size:.875em;font-weight:600;line-height:var(--rc-line-height-tight);margin-top:1em;margin-bottom:.25em;color:var(--rc-text)}.r8uj4t0 .rich-link{color:var(--rc-link);text-decoration:none;transition:color .2s ease}.r8uj4t0 .rich-link:hover{text-decoration:underline}.r8uj4t0 .rich-link[data-favicon=loaded]:before{content:"";display:inline-block;width:1em;height:1em;margin-right:.2em;vertical-align:-.125em;background-image:var(--rc-link-favicon);background-size:contain;background-repeat:no-repeat;background-position:center;border-radius:2px}.r8uj4t0 .rich-link-favicon{display:inline;width:1em;height:1em;margin-right:.15em;vertical-align:-.125em;border-radius:2px;object-fit:contain}.r8uj4t0 .rich-list-ol{list-style-type:decimal;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4t0 .rich-list-ul{list-style-type:disc;padding-left:var(--rc-space-lg);margin-bottom:1em}.r8uj4t0 .rich-list-item{margin-bottom:.25em}.r8uj4t0 .rich-list-nested-item{list-style-type:none}.r8uj4t0 .rich-list-nested-item .rich-list-ol{list-style-type:lower-alpha}.r8uj4t0 .rich-list-nested-item .rich-list-ul{list-style-type:circle}.r8uj4t0 .rich-checklist{list-style-type:none;padding-left:0}.r8uj4t0 .rich-list-item.rich-list-item-checked,.r8uj4t0 .rich-list-item.rich-list-item-unchecked{--rc-cb-size: 1.125rem;position:relative;padding-left:2em;list-style-type:none;outline:none}.r8uj4t0 .rich-list-item.rich-list-item-unchecked:before,.r8uj4t0 .rich-list-item.rich-list-item-checked:before{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);border:2px solid color-mix(in oklab,var(--rc-text-secondary) 60%,transparent);border-radius:var(--rc-radius-sm);box-sizing:border-box;cursor:pointer;vertical-align:middle;color:var(--rc-text);background-color:transparent;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease}[contenteditable=true] .r8uj4t0 .rich-list-item.rich-list-item-unchecked:hover:before{border-color:color-mix(in oklab,var(--rc-text-secondary) 80%,transparent)}.r8uj4t0 .rich-list-item.rich-list-item-unchecked:after,.r8uj4t0 .rich-list-item.rich-list-item-checked:after{content:"";position:absolute;left:0;top:calc((1lh - var(--rc-cb-size)) / 2);width:var(--rc-cb-size);height:var(--rc-cb-size);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);background-color:#fff;box-sizing:border-box;display:block;pointer-events:none;transform:rotate(45deg);transform-origin:center;transition:clip-path .25s cubic-bezier(.34,1.56,.64,1),opacity .15s}.r8uj4t0 .rich-list-item.rich-list-item-checked:before{background-color:var(--rc-accent);border-color:var(--rc-accent);box-shadow:0 0 0 1px var(--rc-accent)}.r8uj4t0 .rich-list-item.rich-list-item-checked:after{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1;transform:rotate(45deg) scale(.7)}.r8uj4t0 .rich-list-item-checked{text-decoration:line-through;color:var(--rc-text-secondary)}.r8uj4t0 .rich-quote{border-left:4px solid var(--rc-quote-border);background-color:var(--rc-quote-bg);margin:var(--rc-space-md) 0;padding:var(--rc-space-sm) var(--rc-space-md);font-style:italic;color:var(--rc-text-secondary);border-radius:0 var(--rc-radius-sm) var(--rc-radius-sm) 0}.r8uj4t0 .rich-quote>.rich-paragraph:first-child{margin-top:0}.r8uj4t0 .rich-quote>.rich-paragraph:last-child{margin-bottom:0}.r8uj4t0 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}.r8uj4t0 .rich-table-scrollable-wrapper{overflow-x:auto}.r8uj4t0 .rich-table{width:100%;border-collapse:separate;border-spacing:0;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}.r8uj4t0 .rich-table-cell{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}.r8uj4t0 .rich-table-cell:last-child{border-right:none}.r8uj4t0 .rich-table tbody tr:last-child .rich-table-cell{border-bottom:none}.r8uj4t0 .rich-table-cell .rich-paragraph{margin:0;padding:0;line-height:inherit}.r8uj4t0 .rich-table-cell>:first-child{margin-top:0}.r8uj4t0 .rich-table-cell>:last-child{margin-bottom:0}.r8uj4t0 .rich-table-cell-header{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;font-weight:600;font-size:.75em;text-transform:uppercase;letter-spacing:.05em;color:var(--rc-text-secondary);background-color:var(--rc-bg-secondary);vertical-align:middle;line-height:1.5;position:sticky;top:0;z-index:1}.r8uj4t0 .rich-table-cell-header:last-child{border-right:none}.r8uj4t0 .rich-table-cell-header .rich-paragraph{margin:0;padding:0;line-height:inherit}.r8uj4t0 .rich-table-cell-header>:first-child{margin-top:0}.r8uj4t0 .rich-table-cell-header>:last-child{margin-bottom:0}.r8uj4t0 img{max-width:100%;height:auto;border-radius:var(--rc-radius-md)}.r8uj4t0 .rich-spoiler{background-color:var(--rc-text);color:transparent;border-radius:var(--rc-radius-sm);padding-inline:4px;cursor:pointer;transition:background-color .3s ease,color .3s ease;user-select:none}[contenteditable=true] .rich-spoiler{background-color:color-mix(in srgb,var(--rc-text) 30%,transparent);color:inherit;user-select:auto;cursor:text}.r8uj4t0 .rich-spoiler:hover,.r8uj4t0 .rich-spoiler-revealed{background-color:transparent;color:inherit;user-select:auto}.r8uj4t0 .rich-ruby{ruby-position:over;ruby-align:center}.r8uj4t0 .rich-ruby-rt{font-size:.58em;line-height:1;color:var(--rc-text-secondary);user-select:none}[contenteditable=true] .rich-ruby[data-ruby]{position:relative;display:inline-block;padding-top:.72em;line-height:1.2}[contenteditable=true] .rich-ruby[data-ruby]:before{content:attr(data-ruby);position:absolute;left:0;right:0;top:0;transform:translateY(-.68em);font-size:.58em;line-height:1;text-align:center;color:var(--rc-text-secondary);pointer-events:none;white-space:nowrap}.r8uj4t0 .rich-footnote{vertical-align:super;font-size:.8em}.r8uj4t0 .rich-footnote-ref{display:inline-flex;align-items:center;justify-content:center;min-width:1.5em;text-decoration:none;color:var(--rc-accent);background-color:var(--rc-accent-light);border-radius:999px;padding:0 .35em;line-height:1.45;font-weight:600;font-size:.82em;transition:filter .15s ease}.r8uj4t0 .rich-footnote-ref:hover{filter:brightness(.96)}.r8uj4t0 .rich-footnote-highlight{animation:r8uj4t2 1.2s ease-out}.r8uj4t0 .rich-footnote-ref-wrapper{position:relative;display:inline}.r8uj4t0 .rich-footnote-section{margin-top:var(--rc-space-lg)}.r8uj4t0 .rich-footnote-section-divider{border:none;border-top:1px solid var(--rc-border);margin:var(--rc-space-lg) 0 var(--rc-space-md)}.r8uj4t0 .rich-footnote-section-list{list-style-type:decimal;padding-left:var(--rc-space-lg);font-size:var(--rc-font-size-small);color:var(--rc-text-secondary);line-height:1.6}.r8uj4t0 .rich-footnote-section-item{margin-bottom:var(--rc-space-sm);padding-left:var(--rc-space-xs)}.r8uj4t0 .rich-footnote-back-ref{display:inline-flex;align-items:center;margin-left:var(--rc-space-xs);color:var(--rc-accent);text-decoration:none;font-size:.85em;transition:opacity .15s ease;font-family:var(--rc-font-mono)}.r8uj4t0 .rich-footnote-back-ref:hover{opacity:.7}.r8uj4t0 .rich-footnote-section-item-edit{display:flex;align-items:center;gap:var(--rc-space-sm);list-style-type:none}.r8uj4t0 .rich-footnote-section-item-num{flex-shrink:0;color:var(--rc-text-secondary);font-size:var(--rc-font-size-small);font-weight:600;min-width:1.5em}.r8uj4t0 .rich-footnote-section-item-input{flex:1;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:transparent;outline:none;transition:border-color .15s ease}.r8uj4t0 .rich-footnote-section-item-input:focus{border-color:var(--rc-accent)}.r8uj4t0 .rich-footnote-section-item-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;border-radius:var(--rc-radius-sm);font-size:14px;transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-footnote-section-item-remove:hover{color:#ef4444;background-color:#ef44441a}.rich-drag-handle{position:absolute;display:flex;align-items:center;justify-content:center;width:20px;height:20px;cursor:grab;border-radius:var(--rc-radius-sm);color:var(--rc-text-secondary);opacity:.4;transition:opacity .15s ease,background-color .15s ease;z-index:10}.rich-drag-handle:hover{opacity:1;background-color:var(--rc-bg-secondary)}.rich-drag-handle:active{cursor:grabbing}.rich-drop-indicator{position:absolute;height:2px;background-color:var(--rc-accent);border-radius:1px;pointer-events:none;z-index:10}.r8uj4t0 .rich-alert{margin:2em 0;padding:0 1em;background-color:transparent;border:none;border-radius:0}.r8uj4t0>*:first-child,.r8uj4t0 .rich-editor__content>*:first-child{margin-top:0}.r8uj4t0>*:last-child,.r8uj4t0 .rich-editor__content>*:last-child{margin-bottom:0}@supports (animation-timeline: view()){.r8uj4t0 .rich-text-highlight{--rc-hl-highlighted: 0;animation:r8uj4t1 steps(1) both;animation-timeline:view();animation-range:entry 100% cover 10%}}.v10dui0{max-width:var(--rc-max-width);font-size:var(--rc-font-size-base);line-height:1.75;color:var(--rc-text)}.v10dui0 .rich-paragraph{margin-top:1.5em;margin-bottom:1.5em}.v10dui0 .rich-heading-h1{color:var(--rc-text);font-weight:800;font-size:3em;margin-top:0;margin-bottom:.8333333333333334em;line-height:1}.v10dui0 .rich-heading-h2{color:var(--rc-text);font-weight:700;font-size:1.875em;margin-top:1.8666666666666667em;margin-bottom:1.0666666666666667em;line-height:1.3333333}.v10dui0 .rich-heading-h3{color:var(--rc-text);font-weight:600;font-size:1.5em;margin-top:1.6666666666666667em;margin-bottom:.6666666666666666em;line-height:1.5}.v10dui0 .rich-heading-h4{color:var(--rc-text);font-weight:600;margin-top:2em;margin-bottom:.5em;line-height:1.5625}.v10dui0 .rich-heading-h2+*,.v10dui0 .rich-heading-h3+*,.v10dui0 .rich-heading-h4+*{margin-top:0}.v10dui0 .rich-quote{font-weight:500;font-style:italic;color:var(--rc-text);border-left-width:.25rem;border-left-style:solid;border-left-color:var(--rc-quote-border);margin-top:2.5em;margin-bottom:2.5em;padding-left:1.5em;background-color:transparent;border-radius:0;quotes:"“""”""‘""’"}.v10dui0 .rich-quote .rich-paragraph:first-of-type:before{content:open-quote}.v10dui0 .rich-quote .rich-paragraph:last-of-type:after{content:close-quote}.v10dui0 .rich-quote .rich-paragraph:first-child{margin-top:0}.v10dui0 .rich-quote .rich-paragraph:last-child{margin-bottom:0}.v10dui0 .rich-text-code{color:var(--rc-text);font-weight:600;font-size:.875em;background-color:var(--rc-code-bg);padding:.2em .4em;border-radius:var(--rc-radius-sm);font-family:var(--rc-font-mono)}.v10dui0 .rich-text-code:before,.v10dui0 .rich-text-code:after{content:"`";color:var(--rc-text-secondary);opacity:.5}.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{padding:1em 1.5em;margin:0}.v10dui0 .rich-list-ul,.v10dui0 .rich-list-ol{margin-top:1.5em;margin-bottom:1.5em;padding-left:1.75em}.v10dui0 .rich-list-item{margin-top:.75em;margin-bottom:.75em;padding-left:.5em}.v10dui0 .rich-list-item .rich-paragraph{margin-top:1em;margin-bottom:1em}.v10dui0 .rich-list-item>.rich-paragraph:first-child{margin-top:1.5em}.v10dui0 .rich-list-item>.rich-paragraph:last-child{margin-bottom:1.5em}.v10dui0 .rich-list-ul .rich-list-ul,.v10dui0 .rich-list-ul .rich-list-ol,.v10dui0 .rich-list-ol .rich-list-ul,.v10dui0 .rich-list-ol .rich-list-ol{margin-top:1em;margin-bottom:1em}.v10dui0 .rich-table{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.5}.v10dui0 .rich-table .rich-paragraph{margin:0;padding:0;line-height:inherit}.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);font-size:.875em;line-height:1.5;margin-top:1em}.v10dui0 .rich-hr{border-color:var(--rc-hr-border);border-top-width:1px;width:60px;margin:3.5em auto}.v10dui0 .rich-hr+*{margin-top:0}.v10dui0 .rich-link{font-weight:500;text-decoration:underline}.v10dui0 .rich-banner,.v10dui0 .rich-code-snippet,.v10dui0 .rich-details{margin:2em 0}.v10dui0>*:first-child{margin-top:0}.v10dui0>*:last-child{margin-bottom:0}._14ko36c0{font-size:var(--rc-font-size-base);line-height:var(--rc-line-height)}._14ko36c0 .rich-paragraph{margin-bottom:.6em}._14ko36c0 .rich-heading-h1{font-size:1.35em;font-weight:700;margin-top:.8em;margin-bottom:.3em}._14ko36c0 .rich-heading-h2{font-size:1.2em;font-weight:700;margin-top:.7em;margin-bottom:.25em}._14ko36c0 .rich-heading-h3{font-size:1.1em;font-weight:600;margin-top:.6em;margin-bottom:.2em}._14ko36c0 .rich-heading-h4{font-size:1em;font-weight:600;margin-top:.5em;margin-bottom:.15em}._14ko36c0 .rich-heading-h5{font-size:.9em;font-weight:600;margin-top:.45em;margin-bottom:.1em}._14ko36c0 .rich-heading-h6{font-size:.85em;font-weight:600;margin-top:.4em;margin-bottom:.1em}._14ko36c0 .rich-quote{border-left-width:3px;padding:var(--rc-space-sm) var(--rc-space-md);margin:var(--rc-space-sm) 0;font-size:.95em}._14ko36c0 .rich-list-ol,._14ko36c0 .rich-list-ul{margin-bottom:.6em;padding-left:var(--rc-space-md)}._14ko36c0 .rich-list-item{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 .rich-table{margin:var(--rc-space-sm) 0;font-size:var(--rc-font-size-small)}._14ko36c0 .rich-table-cell,._14ko36c0 .rich-table-cell-header{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 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);margin:var(--rc-space-lg) auto;width:60px}._14ko36c0 .rich-alert{padding:var(--rc-space-sm) var(--rc-space-md);padding-left:var(--rc-space-lg);margin:var(--rc-space-sm) 0}._14ko36c0 .rich-katex-block{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);line-height:1.8;color:var(--rc-text)}.ys4fw90>.rich-paragraph,.ys4fw90 .rich-editor__content>.rich-paragraph,.ys4fw90 .rich-content__body>.rich-paragraph{margin-top:1.25em;margin-bottom:1.25em;line-height:1.8}.ys4fw90>.rich-paragraph:first-of-type,.ys4fw90 .rich-editor__content>.rich-paragraph:first-of-type,.ys4fw90 .rich-content__body>.rich-paragraph:first-of-type{margin-top:0;margin-bottom:2rem}.ys4fw90>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child,.ys4fw90 .rich-editor__content>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child,.ys4fw90 .rich-content__body>.rich-paragraph:not(:first-of-type)>[data-lexical-text]:first-child{margin-inline-start:2rem}.ys4fw90>.rich-paragraph:first-of-type:first-letter,.ys4fw90 .rich-content__body>.rich-paragraph:first-of-type:first-letter{float:left;font-size:2.4em;margin-right:.2em;line-height:1}.ys4fw90 .rich-editor__content>.rich-paragraph:first-of-type:first-letter{font-size:1.5em;font-weight:700;color:var(--rc-accent)}.ys4fw90>.rich-paragraph:last-child,.ys4fw90 .rich-editor__content>.rich-paragraph:last-child,.ys4fw90 .rich-content__body>.rich-paragraph:last-child{margin-bottom:0}.ys4fw90 .rich-text-bold{font-family:var(--rc-font-family);font-weight:600;color:var(--rc-text)}.ys4fw90 .rich-heading-h1{font-size:2.25em;font-weight:800;line-height:1.1111111;margin-top:0;margin-bottom:.8888889em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h2{font-size:1.5em;font-weight:700;line-height:1.3333333;margin-top:2em;margin-bottom:1em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h2+*{margin-top:0}.ys4fw90 .rich-heading-h3{font-size:1.25em;font-weight:600;line-height:1.6;margin-top:1.6em;margin-bottom:.6em;letter-spacing:-.025em;color:var(--rc-text)}.ys4fw90 .rich-heading-h3+*{margin-top:0}.ys4fw90 .rich-heading-h4{font-size:1.125em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .rich-heading-h4+*{margin-top:0}.ys4fw90 .rich-heading-h5{font-size:1em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text)}.ys4fw90 .rich-heading-h5+*{margin-top:0}.ys4fw90 .rich-heading-h6{font-size:.875em;font-weight:600;line-height:1.5;margin-top:1.5em;margin-bottom:.5em;color:var(--rc-text);text-transform:uppercase}.ys4fw90 .rich-heading-h6+*{margin-top:0}.ys4fw90 .rich-quote{font-style:normal;line-height:1.8;color:inherit;border-left:none;background-color:color-mix(in srgb,var(--rc-accent) 10%,transparent);margin-top:1.6em;margin-bottom:1.6em;margin-left:-1rem;margin-right:-1rem;padding:1em 2em;border-radius:0}.ys4fw90 .rich-quote .rich-paragraph:first-child:first-letter{float:none;font-size:inherit;margin-right:0}.ys4fw90 .rich-link{font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:color .15s ease}.ys4fw90 .rich-link:hover{text-decoration-thickness:2px}.ys4fw90 .rich-text-code{font-size:.875em;font-family:var(--rc-font-mono);font-weight:500;padding:.2em .4em;border-radius:var(--rc-radius-sm);background-color:var(--rc-code-bg)}.ys4fw90 .rich-list-ol,.ys4fw90 .rich-list-ul{margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.ys4fw90 .rich-list-ol{list-style-type:decimal}.ys4fw90 .rich-list-ul{list-style-type:disc}.ys4fw90 .rich-list-item{margin-top:.5em;margin-bottom:.5em;padding-left:.375em}.ys4fw90 .rich-list-item::marker{color:var(--rc-text-secondary)}.ys4fw90 .rich-code-block{font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:var(--rc-radius-md);overflow-x:auto}.ys4fw90 .rich-code-block pre{padding:.8571429em 1.1428571em;margin:0}.ys4fw90 .rich-table{margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.ys4fw90 .rich-table .rich-paragraph{margin:0;padding:0;line-height:inherit}.ys4fw90 .rich-table .rich-paragraph: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{font-size:.875em;line-height:1.4285714;margin-top:.8571429em;color:var(--rc-text-secondary);text-align:center}.ys4fw90 .rich-hr{border:none;border-top:1px solid var(--rc-hr-border);opacity:.2;margin-top:.5rem;margin-bottom:.5rem;width:60px;margin-left:auto;margin-right:auto}.ys4fw90 .rich-katex-block{margin-top:1.6em;margin-bottom:1.6em;overflow-x:auto;padding:1em 0}.ys4fw90 .rich-spoiler{border-radius:var(--rc-radius-sm);padding-inline:.25em}.ys4fw90>*:first-child{margin-top:0}.ys4fw90>*:last-child{margin-bottom:0}@keyframes _1x58dbf0{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes _1x58dbf6{to{transform:rotate(360deg)}}.rich-image-upload-dragging{position:relative;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-accent) 6%,transparent)}.rich-image-upload-dragging .rich-editor__content{outline:2px dashed color-mix(in srgb,var(--rc-accent) 48%,transparent);outline-offset:-2px}._1x58dbf1{position:absolute;right:.75rem;bottom:.75rem;z-index:25;display:flex;flex-direction:column;align-items:flex-end;gap:.375rem;pointer-events:none}._1x58dbf2{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;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);line-height:1.2;box-shadow:var(--rc-shadow-top-bar);animation:_1x58dbf0 .12s ease-out}._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{width:12px;height:12px;border-radius:50%;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);animation:_1x58dbf6 .75s linear infinite}._1x58dbf8._1x58dbf8{padding:0;gap:0;width:min(560px,calc(100vw - 2rem));overflow:hidden}._1x58dbf9{padding:.875rem 1rem .75rem;border-bottom:1px solid var(--rc-border)}._1x58dbfa{font-size:var(--rc-font-size-md);font-weight:600;color:var(--rc-text)}._1x58dbfb{display:flex;flex-direction:column;gap:.875rem;padding:.875rem 1rem}._1x58dbfc{display:flex;align-items:center;gap:.5rem}._1x58dbfd{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--rc-radius-md);border:1.5px dashed var(--rc-border);min-height:190px;padding:1.2rem;color:var(--rc-text-secondary);cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}._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{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--rc-radius-md);background-color:color-mix(in srgb,var(--rc-text) 6%,transparent)}._1x58dbfi{font-size:var(--rc-font-size-sm);font-weight:600;color:var(--rc-text)}._1x58dbfj{font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary);text-align:center}._1x58dbfk{display:none}._1x58dbfl{display:flex;flex-direction:column;align-items:center;gap:.5rem}._1x58dbfm{display:inline-flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-sm);color:var(--rc-text)}._1x58dbfn{display:flex;align-items:center;gap:.5rem}._1x58dbfo{width:100%;border-radius:var(--rc-radius-sm);border:1px solid var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text);height:34px;padding:0 .625rem;font-size:var(--rc-font-size-sm);outline:none;transition:border-color .15s ease}._1x58dbfo:focus{border-color:color-mix(in srgb,var(--rc-accent) 50%,transparent)}._1x58dbfo::placeholder{color:var(--rc-text-secondary)}._1x58dbfp{height:34px;border-radius:var(--rc-radius-sm);border:1px solid transparent;font-size:var(--rc-font-size-xs);font-weight:600;cursor:pointer;padding:0 .75rem;transition:background-color .15s ease,border-color .15s ease,color .15s ease}._1x58dbfq{background-color:var(--rc-text);color:var(--rc-bg)}._1x58dbfq:hover{background-color:color-mix(in srgb,var(--rc-text) 85%,transparent)}._1x58dbfq:disabled{opacity:.45;cursor:not-allowed}._1x58dbfr{border-color:var(--rc-border);background-color:var(--rc-bg);color:var(--rc-text-secondary)}._1x58dbfr:hover{color:var(--rc-text);background-color:color-mix(in srgb,var(--rc-text) 4%,transparent)}._1x58dbfr:disabled{opacity:.45;cursor:not-allowed}._1x58dbfs{border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);overflow:hidden;background-color:color-mix(in srgb,var(--rc-text) 2%,transparent)}._1x58dbft{display:block;width:100%;max-height:220px;object-fit:cover}._1x58dbfu{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--rc-font-size-xs);color:var(--rc-text-secondary)}._1x58dbfv{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-top:1px solid var(--rc-border);background-color:color-mix(in srgb,var(--rc-text) 2%,transparent);padding:.65rem 1rem}._1x58dbfw{display:flex;align-items:center;gap:.5rem}.r8uj4t0 .rich-katex-inline{display:inline;padding:0 2px;vertical-align:middle}.r8uj4t0 .rich-katex-block{display:block;text-align:center;padding:var(--rc-space-md) 0;overflow-x:auto;margin:var(--rc-space-md) 0}.r8uj4t0 .rich-katex-fallback{font-family:var(--rc-font-mono);font-size:.9em;color:var(--rc-code-text);background-color:var(--rc-code-bg);padding:2px 6px;border-radius:var(--rc-radius-sm)}.r8uj4t0 .rich-details{margin:var(--rc-space-md) 0;border:none;interpolate-size:allow-keywords}.r8uj4t0 .rich-details-summary{display:flex;align-items:center;justify-content:space-between;gap:1rem;cursor:pointer;user-select:none;font-weight:500;font-size:.9375rem;line-height:1.5;padding:.75rem 0;color:var(--rc-text);list-style:none;transition:color .2s ease}.r8uj4t0 .rich-details-summary:hover{opacity:.8}.r8uj4t0 .rich-details-summary::-webkit-details-marker{display:none}.r8uj4t0 .rich-details-summary::marker{content:"";display:none}.r8uj4t0 .rich-details-summary-text{flex:1}.r8uj4t0 .rich-details-chevron{display:inline-flex;flex-shrink:0;color:var(--rc-text-secondary);transition:transform .35s cubic-bezier(.4,0,.2,1)}.r8uj4t0 .rich-details[open] .rich-details-chevron{transform:rotate(180deg)}.r8uj4t0 .rich-details::details-content{display:block;height:0;overflow:hidden;opacity:0;content-visibility:hidden;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}.r8uj4t0 .rich-details[open]::details-content{height:auto;opacity:1;content-visibility:visible}.r8uj4t0 .rich-details-content{padding:0 0 .75rem;color:var(--rc-text-secondary)}[contenteditable=true] .rich-details-content{background-color:var(--rc-bg-secondary);border-radius:var(--rc-radius-sm);padding:var(--rc-space-sm) var(--rc-space-md);margin-top:var(--rc-space-xs)}.r8uj4t0 .rich-details-content>.rich-paragraph:first-child{margin-top:0}.r8uj4t0 .rich-details-content>.rich-paragraph:last-child{margin-bottom:0}.r8uj4t0 .rich-grid-container{position:relative;margin:var(--rc-space-md) 0}.r8uj4t0 .rich-grid-toolbar{position:absolute;top:-36px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:2px;padding:4px 6px;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;user-select:none;white-space:nowrap;opacity:0;transition:opacity .15s ease}.r8uj4t0 .rich-grid-container:hover .rich-grid-toolbar,.r8uj4t0 .rich-grid-container:focus-within .rich-grid-toolbar{opacity:1;pointer-events:auto}.r8uj4t0 .rich-grid-toolbar-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:var(--rc-text-secondary);flex-shrink:0}.r8uj4t0 .rich-grid-col-btn{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;font-size:12px;font-weight:500;color:var(--rc-text-secondary);line-height:1;transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-grid-col-btn:hover{background-color:var(--rc-bg-secondary);color:var(--rc-text)}.r8uj4t0 .rich-grid-col-btn-active{background:var(--rc-bg-secondary);font-weight:600;color:var(--rc-text)}.r8uj4t0 .rich-grid-toolbar-divider{width:1px;height:16px;background:var(--rc-border);margin:0 2px;flex-shrink:0}.r8uj4t0 .rich-grid-action-btn{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 6px;border-radius:var(--rc-radius-sm);border:none;background:transparent;cursor:pointer;color:var(--rc-text-secondary);transition:color .15s ease,background-color .15s ease}.r8uj4t0 .rich-grid-action-btn:hover{background-color:var(--rc-bg-secondary);color:var(--rc-text)}.r8uj4t0 .rich-grid-inner{display:grid;gap:var(--rc-space-md)}.r8uj4t0 .rich-grid-cell{min-width:0}.r8uj4t0 .rich-grid-cell-editable{outline:none}
@@ -1,3 +1,6 @@
1
+ export { LinkFavicon } from './components/LinkFavicon';
2
+ export type { RubyRendererProps } from './components/renderers/RubyRenderer';
3
+ export { RubyRenderer } from './components/renderers/RubyRenderer';
1
4
  export type { RendererKey } from './components/RendererWrapper';
2
5
  export { createRendererDecoration, RendererWrapper, } from './components/RendererWrapper';
3
6
  export { getVariantClass } from './components/utils';
@@ -1 +1 @@
1
- {"version":3,"file":"static-entry.d.ts","sourceRoot":"","sources":["../src/static-entry.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAA;AAC3F,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,wCAAwC,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,GACL,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"static-entry.d.ts","sourceRoot":"","sources":["../src/static-entry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAA;AAC3F,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,wCAAwC,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,GACL,MAAM,0BAA0B,CAAA"}
@@ -1,13 +1,45 @@
1
- import { C, F, N, R, d, a, b, e, c, f, g, u, h, i, j, k, l, m, n } from "./theme-gVNBI_ET.js";
2
- import { a as a2, c as c2, g as g2, n as n2 } from "./utils-fpeaZV1R.js";
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import { g as getHostname, p as probeFavicon } from "./favicon-BSvQNu9R.js";
4
+ import { C, F, N, R, d, a, b, e, c, f, h, u, i, j, k, l, m, n, o } from "./favicon-BSvQNu9R.js";
5
+ import { R as R2 } from "./RubyRenderer-DbeobSoH.js";
6
+ import { a as a2, c as c2, g, n as n2 } from "./utils-fpeaZV1R.js";
3
7
  import { r } from "./shared.css-BqX4HjVE.js";
4
8
  import { articleTheme, commentTheme, noteTheme, vars } from "@haklex/rich-style-token";
9
+ function LinkFavicon({ href }) {
10
+ const [faviconUrl, setFaviconUrl] = useState(null);
11
+ useEffect(() => {
12
+ const hostname = getHostname(href);
13
+ if (!hostname) return;
14
+ let cancelled = false;
15
+ probeFavicon(hostname).then((url) => {
16
+ if (!cancelled) setFaviconUrl(url);
17
+ });
18
+ return () => {
19
+ cancelled = true;
20
+ };
21
+ }, [href]);
22
+ if (!faviconUrl) return null;
23
+ return /* @__PURE__ */ jsx(
24
+ "img",
25
+ {
26
+ className: "rich-link-favicon",
27
+ src: faviconUrl,
28
+ alt: "",
29
+ width: 14,
30
+ height: 14,
31
+ "aria-hidden": "true"
32
+ }
33
+ );
34
+ }
5
35
  export {
6
36
  C as ColorSchemeProvider,
7
37
  F as FootnoteDefinitionsProvider,
38
+ LinkFavicon,
8
39
  N as NestedContentRendererProvider,
9
40
  R as RendererConfigProvider,
10
41
  d as RendererWrapper,
42
+ R2 as RubyRenderer,
11
43
  a as allNodes,
12
44
  articleTheme,
13
45
  a2 as articleVariant,
@@ -17,18 +49,18 @@ export {
17
49
  e as createRendererDecoration,
18
50
  c as customNodes,
19
51
  f as editorTheme,
20
- g as extractTextContent,
21
- g2 as getVariantClass,
52
+ h as extractTextContent,
53
+ g as getVariantClass,
22
54
  noteTheme,
23
55
  n2 as noteVariant,
24
56
  r as richContent,
25
57
  u as useColorScheme,
26
- h as useFootnoteContent,
27
- i as useFootnoteDefinitions,
28
- j as useFootnoteDisplayNumber,
29
- k as useNestedContentRenderer,
30
- l as useRendererConfig,
31
- m as useRendererMode,
32
- n as useVariant,
58
+ i as useFootnoteContent,
59
+ j as useFootnoteDefinitions,
60
+ k as useFootnoteDisplayNumber,
61
+ l as useNestedContentRenderer,
62
+ m as useRendererConfig,
63
+ n as useRendererMode,
64
+ o as useVariant,
33
65
  vars
34
66
  };
@@ -7,6 +7,7 @@ export { INSERT_TRANSFORMER } from './insert';
7
7
  export { KATEX_BLOCK_TRANSFORMER, KATEX_INLINE_TRANSFORMER } from './katex';
8
8
  export { MENTION_TRANSFORMER } from './mention';
9
9
  export { CODE_BLOCK_NODE_TRANSFORMER, GRID_CONTAINER_BLOCK_TRANSFORMER, HORIZONTAL_RULE_BLOCK_TRANSFORMER, IMAGE_BLOCK_TRANSFORMER, LINK_CARD_BLOCK_TRANSFORMER, MERMAID_BLOCK_TRANSFORMER, TABLE_BLOCK_TRANSFORMER, VIDEO_BLOCK_TRANSFORMER, } from './rich-blocks';
10
+ export { RUBY_TRANSFORMER } from './ruby';
10
11
  export { SPOILER_TRANSFORMER } from './spoiler';
11
12
  export { SUBSCRIPT_TRANSFORMER, SUPERSCRIPT_TRANSFORMER, } from './superscript-subscript';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,gBAAgB,2CA0B5B,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,gBAAgB,2CA2B5B,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,iCAAiC,EACjC,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { TextMatchTransformer } from '@lexical/markdown';
2
+ export declare const RUBY_TRANSFORMER: TextMatchTransformer;
3
+ //# sourceMappingURL=ruby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../src/transformers/ruby.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAK7D,eAAO,MAAM,gBAAgB,EAAE,oBAa9B,CAAA"}
@@ -9,6 +9,7 @@ import { KaTeXRendererProps } from '../components/renderers/KaTeXRenderer';
9
9
  import { LinkCardRendererProps } from '../components/renderers/LinkCardRenderer';
10
10
  import { MentionRendererProps } from '../components/renderers/MentionRenderer';
11
11
  import { MermaidRendererProps } from '../components/renderers/MermaidRenderer';
12
+ import { RubyRendererProps } from '../components/renderers/RubyRenderer';
12
13
  import { VideoRendererProps } from '../components/renderers/VideoRenderer';
13
14
  export interface CodeFile {
14
15
  filename: string;
@@ -61,6 +62,8 @@ export interface RendererConfig {
61
62
  Mermaid?: ComponentType<MermaidRendererProps>;
62
63
  /** Custom renderer for social media mentions */
63
64
  Mention?: ComponentType<MentionRendererProps>;
65
+ /** Custom renderer for ruby annotations */
66
+ Ruby?: ComponentType<RubyRendererProps>;
64
67
  /** Custom renderer for video embeds */
65
68
  Video?: ComponentType<VideoRendererProps>;
66
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-config.d.ts","sourceRoot":"","sources":["../../src/types/renderer-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer-config.d.ts","sourceRoot":"","sources":["../../src/types/renderer-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getHostname(href: string): string | null;
2
+ export declare function probeFavicon(hostname: string): Promise<string | null>;
3
+ //# sourceMappingURL=favicon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.d.ts","sourceRoot":"","sources":["../../src/utils/favicon.ts"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQvD;AAWD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAe3E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-editor",
3
- "version": "0.0.43",
3
+ "version": "0.0.45",
4
4
  "description": "Core rich text editor based on Lexical",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -30,9 +30,9 @@
30
30
  "dependencies": {
31
31
  "nanoid": "^5.1.6",
32
32
  "thumbhash": "^0.1.1",
33
- "@haklex/rich-editor-ui": "0.0.43",
34
- "@haklex/rich-style-token": "0.0.43",
35
- "@haklex/rich-headless": "0.0.43"
33
+ "@haklex/rich-editor-ui": "0.0.45",
34
+ "@haklex/rich-headless": "0.0.45",
35
+ "@haklex/rich-style-token": "0.0.45"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@base-ui/react": "^1.2.0",