@scribdown/shared 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +257 -1
- package/dist/index.js +237 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -525,4 +525,260 @@ declare const SCRIBDOWN_TOOLBAR_CURRENT_TEXT_CLASS_NAME = "scribdown-toolbar-cur
|
|
|
525
525
|
*/
|
|
526
526
|
declare const CONTENT_WIDTH_STORAGE_KEY = "scribdown-content-width";
|
|
527
527
|
|
|
528
|
-
|
|
528
|
+
/**
|
|
529
|
+
* Scribdown 国际化「语言」契约。
|
|
530
|
+
* 统一收敛支持的 locale、默认兜底、回落链,以及各宿主静态文件(Chrome _locales、
|
|
531
|
+
* VS Code package.nls)的目录/后缀命名映射,禁止在其他包重新定义或硬编码。
|
|
532
|
+
*/
|
|
533
|
+
/**
|
|
534
|
+
* 支持的界面语言枚举(BCP-47 规范写法)。
|
|
535
|
+
* 新增语言时在此追加,并在 {@link SUPPORTED_LOCALES}、{@link LOCALE_FALLBACKS}、
|
|
536
|
+
* messages 目录三处补齐即可,无需改动接线逻辑。
|
|
537
|
+
*/
|
|
538
|
+
declare enum LocaleType {
|
|
539
|
+
/** 英语(默认兜底语言)。 */
|
|
540
|
+
English = "en",
|
|
541
|
+
/** 简体中文。 */
|
|
542
|
+
SimplifiedChinese = "zh-CN"
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* 默认兜底语言:无法识别宿主语言、或某语言缺失文案时最终回落到此。
|
|
546
|
+
*/
|
|
547
|
+
declare const DEFAULT_LOCALE: LocaleType;
|
|
548
|
+
/**
|
|
549
|
+
* 当前支持的全部语言列表(用于校验入参、遍历生成静态文件)。
|
|
550
|
+
*/
|
|
551
|
+
declare const SUPPORTED_LOCALES: LocaleType[];
|
|
552
|
+
/**
|
|
553
|
+
* 各语言的回落链:命中语言缺失某 key 时,按顺序回落到链上语言,最终止于 {@link DEFAULT_LOCALE}。
|
|
554
|
+
* 默认语言自身链为空。
|
|
555
|
+
*/
|
|
556
|
+
declare const LOCALE_FALLBACKS: Record<LocaleType, LocaleType[]>;
|
|
557
|
+
/**
|
|
558
|
+
* 语言 → Chrome 扩展 `_locales/<dir>/messages.json` 目录名映射。
|
|
559
|
+
* Chrome 约定 locale 目录名用下划线(如 `zh_CN`)。
|
|
560
|
+
*/
|
|
561
|
+
declare const CHROME_LOCALE_DIRECTORY: Record<LocaleType, string>;
|
|
562
|
+
/**
|
|
563
|
+
* 语言 → VS Code `package.nls[.<suffix>].json` 文件名后缀映射。
|
|
564
|
+
* VS Code 约定后缀用小写连字符(如 `zh-cn`);默认语言写入无后缀的 `package.nls.json`。
|
|
565
|
+
*/
|
|
566
|
+
declare const VSCODE_NLS_SUFFIX: Record<LocaleType, string>;
|
|
567
|
+
/**
|
|
568
|
+
* 把宿主上报的原始语言标签归一化成受支持的 {@link LocaleType}。
|
|
569
|
+
* 逐级降级匹配:先精确命中,再按主语言子标签匹配(如 `zh-Hans-CN` → `zh-CN`),
|
|
570
|
+
* 全不命中回落到 {@link DEFAULT_LOCALE}。
|
|
571
|
+
* @param rawLocale 宿主原始语言标签(如 `navigator.language`、`vscode.env.language`),大小写与分隔符不限。
|
|
572
|
+
* @returns 归一化后的受支持语言。
|
|
573
|
+
*/
|
|
574
|
+
declare function normalizeLocale(rawLocale: string | null | undefined): LocaleType;
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Scribdown 文案目录的结构契约。
|
|
578
|
+
* 每个受支持语言都必须提供 {@link Messages} 的全部 key(由 Record 类型在编译期约束缺漏),
|
|
579
|
+
* 保证跨语言 key 对齐;带 `{name}` 的值表示运行时插值占位。
|
|
580
|
+
*/
|
|
581
|
+
/**
|
|
582
|
+
* 全量文案 key → 文案字符串的映射结构。
|
|
583
|
+
* key 采用 `<面>.<语义>` 命名,便于按面归组与静态文件生成。
|
|
584
|
+
*/
|
|
585
|
+
interface Messages {
|
|
586
|
+
/** 工具栏「目录」按钮 / 目录侧栏标题。 */
|
|
587
|
+
"toolbar.toc": string;
|
|
588
|
+
/** 目录侧栏右上角关闭按钮 aria-label。 */
|
|
589
|
+
"toolbar.tocClose": string;
|
|
590
|
+
/** 目录为空时的占位文案。 */
|
|
591
|
+
"toolbar.tocEmpty": string;
|
|
592
|
+
/** 工具栏「更多」按钮。 */
|
|
593
|
+
"toolbar.more": string;
|
|
594
|
+
/** 「更多」菜单内「页面宽度」触发行文案。 */
|
|
595
|
+
"toolbar.pageWidth": string;
|
|
596
|
+
/** 「更多」菜单内「回到顶部」项。 */
|
|
597
|
+
"toolbar.backTop": string;
|
|
598
|
+
/** 「更多」菜单内「关于」项。 */
|
|
599
|
+
"toolbar.about": string;
|
|
600
|
+
/** 代码块复制按钮 aria-label(默认态)。 */
|
|
601
|
+
"code.copy": string;
|
|
602
|
+
/** 代码块复制按钮 aria-label(已复制态)。 */
|
|
603
|
+
"code.copied": string;
|
|
604
|
+
/** Mermaid 渲染失败占位文案。 */
|
|
605
|
+
"mermaid.renderFailed": string;
|
|
606
|
+
/** Mermaid 代码块上的「全屏查看」按钮 aria-label。 */
|
|
607
|
+
"mermaid.fullscreenButton": string;
|
|
608
|
+
/** Mermaid 全屏查看对话框 aria-label。 */
|
|
609
|
+
"mermaid.fullscreen": string;
|
|
610
|
+
/** Mermaid 全屏查看器放大按钮 aria-label。 */
|
|
611
|
+
"mermaid.zoomIn": string;
|
|
612
|
+
/** Mermaid 全屏查看器缩小按钮 aria-label。 */
|
|
613
|
+
"mermaid.zoomOut": string;
|
|
614
|
+
/** Mermaid 全屏查看器重置缩放按钮 aria-label。 */
|
|
615
|
+
"mermaid.zoomReset": string;
|
|
616
|
+
/** Mermaid 全屏查看器关闭按钮 aria-label。 */
|
|
617
|
+
"mermaid.close": string;
|
|
618
|
+
/** 图片查看器无标题时的兜底 aria-label。 */
|
|
619
|
+
"image.viewFull": string;
|
|
620
|
+
/** 图片查看器带标题时的 aria-label(插值:{alt} 图片标题)。 */
|
|
621
|
+
"image.viewFullOf": string;
|
|
622
|
+
/** 图片加载失败占位文案。 */
|
|
623
|
+
"image.loadFailed": string;
|
|
624
|
+
/** 图片查看器快捷键提示文本。 */
|
|
625
|
+
"image.hint": string;
|
|
626
|
+
/** 图片查看器放大按钮 aria-label。 */
|
|
627
|
+
"image.zoomIn": string;
|
|
628
|
+
/** 图片查看器缩小按钮 aria-label。 */
|
|
629
|
+
"image.zoomOut": string;
|
|
630
|
+
/** 图片查看器重置缩放按钮 aria-label。 */
|
|
631
|
+
"image.zoomReset": string;
|
|
632
|
+
/** 图片查看器关闭按钮 aria-label。 */
|
|
633
|
+
"image.close": string;
|
|
634
|
+
/** 视频加载失败占位文案。 */
|
|
635
|
+
"video.loadFailed": string;
|
|
636
|
+
/** 内联目录容器 aria-label / summary 文案。 */
|
|
637
|
+
"toc.label": string;
|
|
638
|
+
/** 内联目录子项折叠切换按钮 aria-label。 */
|
|
639
|
+
"toc.toggle": string;
|
|
640
|
+
/** Frontmatter 折叠块标题。 */
|
|
641
|
+
"frontmatter.label": string;
|
|
642
|
+
/** 顶部启用开关 aria-label。 */
|
|
643
|
+
"popup.enableAria": string;
|
|
644
|
+
/** 顶部启用开关 title(已启用)。 */
|
|
645
|
+
"popup.enabledTitle": string;
|
|
646
|
+
/** 顶部启用开关 title(已关闭)。 */
|
|
647
|
+
"popup.disabledTitle": string;
|
|
648
|
+
/** 扩展关闭时的空态提示。 */
|
|
649
|
+
"popup.disabledEmpty": string;
|
|
650
|
+
/** 「允许访问文件网址」未开启横幅标题。 */
|
|
651
|
+
"popup.fileAccessBannerTitle": string;
|
|
652
|
+
/** 「允许访问文件网址」未开启横幅说明。 */
|
|
653
|
+
"popup.fileAccessBannerText": string;
|
|
654
|
+
/** 横幅「去开启」按钮文案。 */
|
|
655
|
+
"popup.fileAccessAction": string;
|
|
656
|
+
/** 横幅「去开启」按钮 aria-label。 */
|
|
657
|
+
"popup.fileAccessActionAria": string;
|
|
658
|
+
/** 自动刷新设置分组 aria-label。 */
|
|
659
|
+
"popup.autoRefreshGroupAria": string;
|
|
660
|
+
/** 自动刷新开关标签。 */
|
|
661
|
+
"popup.autoRefreshLabel": string;
|
|
662
|
+
/** 自动刷新说明按钮 aria-label。 */
|
|
663
|
+
"popup.autoRefreshInfoAria": string;
|
|
664
|
+
/** 自动刷新开启态说明气泡(插值:{seconds} 刷新间隔秒数)。 */
|
|
665
|
+
"popup.autoRefreshOnTip": string;
|
|
666
|
+
/** 自动刷新关闭态说明气泡。 */
|
|
667
|
+
"popup.autoRefreshOffTip": string;
|
|
668
|
+
/** 刷新间隔输入项标签。 */
|
|
669
|
+
"popup.intervalLabel": string;
|
|
670
|
+
/** 刷新间隔说明按钮 aria-label。 */
|
|
671
|
+
"popup.intervalInfoAria": string;
|
|
672
|
+
/** 刷新间隔取值范围气泡(插值:{min} 最小值、{max} 最大值)。 */
|
|
673
|
+
"popup.intervalRangeTip": string;
|
|
674
|
+
/** 刷新间隔单位(秒)。 */
|
|
675
|
+
"popup.intervalUnit": string;
|
|
676
|
+
/** 切换后保存成功提示。 */
|
|
677
|
+
"popup.savedTip": string;
|
|
678
|
+
/** 扩展关闭时的浏览器工具栏图标 title。 */
|
|
679
|
+
"browser.disabledTitle": string;
|
|
680
|
+
/** 未开启「允许访问文件网址」时的工具栏图标 title。 */
|
|
681
|
+
"browser.fileAccessNeededTitle": string;
|
|
682
|
+
/** 渲染失败错误页标题。 */
|
|
683
|
+
"viewer.errorHeading": string;
|
|
684
|
+
/** 「查看原始链接」跳转文案。 */
|
|
685
|
+
"viewer.viewRawLink": string;
|
|
686
|
+
/** 禁止在 iframe 中加载的错误。 */
|
|
687
|
+
"viewer.errorIframe": string;
|
|
688
|
+
/** 缺少 src 参数的错误。 */
|
|
689
|
+
"viewer.errorMissingSrc": string;
|
|
690
|
+
/** 请求失败错误(插值:{message} 错误信息)。 */
|
|
691
|
+
"viewer.errorRequestFailed": string;
|
|
692
|
+
/** 响应非 Markdown 类型的错误(插值:{contentType} 响应内容类型)。 */
|
|
693
|
+
"viewer.errorNotMarkdown": string;
|
|
694
|
+
/** Content-Type 未声明时的占位词,用于填充 {contentType}。 */
|
|
695
|
+
"viewer.contentTypeUndeclared": string;
|
|
696
|
+
/** 文件内容为空的错误。 */
|
|
697
|
+
"viewer.errorEmpty": string;
|
|
698
|
+
/** 不支持的协议错误(插值:{protocol} 协议名)。 */
|
|
699
|
+
"viewer.errorUnsupportedProtocol": string;
|
|
700
|
+
/** src 非合法 URL 的错误。 */
|
|
701
|
+
"viewer.errorInvalidUrl": string;
|
|
702
|
+
/** 无激活 Markdown 文档时的警告。 */
|
|
703
|
+
"vscode.noMarkdownWarning": string;
|
|
704
|
+
/** 无法打开链接的警告(插值:{href} 链接地址)。 */
|
|
705
|
+
"vscode.openLinkFailed": string;
|
|
706
|
+
/** 链接目标不存在的警告(插值:{path} 目标路径)。 */
|
|
707
|
+
"vscode.linkTargetMissing": string;
|
|
708
|
+
/** 预览渲染失败标题。 */
|
|
709
|
+
"vscode.renderFailed": string;
|
|
710
|
+
/** 浏览器扩展商店展示名称。 */
|
|
711
|
+
"manifest.browserName": string;
|
|
712
|
+
/** 浏览器扩展商店描述。 */
|
|
713
|
+
"manifest.browserDescription": string;
|
|
714
|
+
/** VS Code 扩展展示名称(displayName)。 */
|
|
715
|
+
"manifest.vscodeDisplayName": string;
|
|
716
|
+
/** VS Code 扩展描述(description)。 */
|
|
717
|
+
"manifest.vscodeDescription": string;
|
|
718
|
+
/** VS Code「打开预览」命令标题。 */
|
|
719
|
+
"manifest.vscodeCommandTitle": string;
|
|
720
|
+
}
|
|
721
|
+
/**
|
|
722
|
+
* 文案 key 联合类型,供 `t()` 与 `createTranslator()` 约束调用方只能取已声明的 key。
|
|
723
|
+
*/
|
|
724
|
+
type MessageKey = keyof Messages;
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* Scribdown 全量文案目录(唯一源)。
|
|
728
|
+
* 三处运行时(浏览器 popup/viewer、共享工具栏、VS Code 宿主/webview)与两处静态清单
|
|
729
|
+
* (Chrome `_locales`、VS Code `package.nls`)均以此为准,禁止在各端硬编码或重复定义。
|
|
730
|
+
* 插值占位统一用 `{name}` 语法,由 translator 在运行时替换。
|
|
731
|
+
*/
|
|
732
|
+
|
|
733
|
+
/**
|
|
734
|
+
* 语言 → 文案目录的总表。新增语言时在此登记对应目录。
|
|
735
|
+
*/
|
|
736
|
+
declare const MESSAGES: Record<LocaleType, Messages>;
|
|
737
|
+
|
|
738
|
+
/**
|
|
739
|
+
* Scribdown 无框架文案取值内核。
|
|
740
|
+
* 纯 TS、零第三方依赖,可在浏览器 popup(React)、纯 DOM 工具栏、VS Code webview 与
|
|
741
|
+
* Node 宿主中一致运行。宿主启动时按语言调一次 {@link setActiveLocale},其余代码用 {@link t}
|
|
742
|
+
* 取文案;需要多语言并存时用 {@link createTranslator} 取独立实例。
|
|
743
|
+
*/
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* 插值变量映射:把文案中的 `{name}` 占位替换为对应值。
|
|
747
|
+
*/
|
|
748
|
+
type MessageVars = Record<string, string | number>;
|
|
749
|
+
/**
|
|
750
|
+
* 设置全局生效语言。非受支持语言会被静默回落到 {@link DEFAULT_LOCALE},避免脏输入。
|
|
751
|
+
* @param locale 目标语言(应为受支持的 {@link LocaleType})。
|
|
752
|
+
*/
|
|
753
|
+
declare function setActiveLocale(locale: LocaleType): void;
|
|
754
|
+
/**
|
|
755
|
+
* 读取当前全局生效语言。
|
|
756
|
+
* @returns 当前语言。
|
|
757
|
+
*/
|
|
758
|
+
declare function getActiveLocale(): LocaleType;
|
|
759
|
+
/**
|
|
760
|
+
* 便捷方法:把宿主原始语言标签归一化后设为全局语言。
|
|
761
|
+
* @param rawLocale 宿主原始语言标签(如 `navigator.language`、`vscode.env.language`)。
|
|
762
|
+
* @returns 实际生效的语言。
|
|
763
|
+
*/
|
|
764
|
+
declare function setActiveLocaleFromHost(rawLocale: string | null | undefined): LocaleType;
|
|
765
|
+
/**
|
|
766
|
+
* 按当前全局语言取文案。
|
|
767
|
+
* @param key 文案 key。
|
|
768
|
+
* @param vars 可选插值变量。
|
|
769
|
+
* @returns 已解析并插值的文案。
|
|
770
|
+
*/
|
|
771
|
+
declare function t(key: MessageKey, vars?: MessageVars): string;
|
|
772
|
+
/**
|
|
773
|
+
* 翻译函数类型:绑定固定语言的取文案方法。
|
|
774
|
+
*/
|
|
775
|
+
type Translator = (key: MessageKey, vars?: MessageVars) => string;
|
|
776
|
+
/**
|
|
777
|
+
* 创建绑定固定语言的独立翻译器,不受全局语言影响。
|
|
778
|
+
* 适用于多语言并存、或需要显式指定语言的场景(如静态清单生成)。
|
|
779
|
+
* @param locale 目标语言,接受原始标签或 {@link LocaleType},会归一化到受支持语言。
|
|
780
|
+
* @returns 绑定该语言的翻译函数。
|
|
781
|
+
*/
|
|
782
|
+
declare function createTranslator(locale: LocaleType | string): Translator;
|
|
783
|
+
|
|
784
|
+
export { CHROME_LOCALE_DIRECTORY, CODE_BLOCK_BODY_CLASS_NAME, CODE_BLOCK_CHROME_CLASS_NAME, CODE_BLOCK_CLASS_NAME, CODE_BLOCK_COPY_CLASS_NAME, CODE_BLOCK_COPY_ICON_CHECK_CLASS_NAME, CODE_BLOCK_COPY_ICON_CLASS_NAME, CODE_BLOCK_COPY_ICON_COPY_CLASS_NAME, CODE_BLOCK_GUTTER_CLASS_NAME, CODE_BLOCK_GUTTER_LINE_CLASS_NAME, CODE_BLOCK_LANG_CLASS_NAME, CODE_BLOCK_LINE_CLASS_NAME, CONTENT_WIDTH_STORAGE_KEY, DEFAULT_LOCALE, DEFAULT_THEME, DETAILS_CLASS_NAME, FRAME_CLASS_NAME, FRONTMATTER_CHROME_CLASS_NAME, FRONTMATTER_CLASS_NAME, FRONTMATTER_LABEL_CLASS_NAME, FRONTMATTER_LIST_CLASS_NAME, FRONTMATTER_LIST_NESTED_CLASS_NAME, HEADING_MARK_CLASS_NAME, IMAGE_CAPTION_CLASS_NAME, IMAGE_ELEMENT_CLASS_NAME, IMAGE_FALLBACK_CLASS_NAME, IMAGE_FALLBACK_ICON_CLASS_NAME, IMAGE_FALLBACK_SOURCE_CLASS_NAME, IMAGE_FALLBACK_TEXT_CLASS_NAME, IMAGE_FIGURE_CLASS_NAME, IMAGE_FRAME_CLASS_NAME, IMAGE_FRAME_FAILED_CLASS_NAME, IMAGE_FRAME_LOADED_CLASS_NAME, IMAGE_VIEWER_BUTTON_CLASS_NAME, IMAGE_VIEWER_CAPTION_CLASS_NAME, IMAGE_VIEWER_CAPTION_GROUP_CLASS_NAME, IMAGE_VIEWER_CHROME_CLASS_NAME, IMAGE_VIEWER_CLOSE_BUTTON_CLASS_NAME, IMAGE_VIEWER_CONTROLS_CLASS_NAME, IMAGE_VIEWER_DIALOG_CLASS_NAME, IMAGE_VIEWER_DRAGGING_CLASS_NAME, IMAGE_VIEWER_HINT_CLASS_NAME, IMAGE_VIEWER_IMAGE_CLASS_NAME, IMAGE_VIEWER_VIEWPORT_CLASS_NAME, IMAGE_VIEWER_ZOOMED_CLASS_NAME, IMAGE_VIEWER_ZOOM_VALUE_CLASS_NAME, LOCALE_FALLBACKS, LocaleType, MARKDOWN_FILE_EXTNAME, MARKDOWN_LANGUAGE_ID, MERMAID_BODY_CLASS_NAME, MERMAID_CANVAS_CLASS_NAME, MERMAID_CHROME_CLASS_NAME, MERMAID_FALLBACK_CLASS_NAME, MERMAID_FALLBACK_ICON_CLASS_NAME, MERMAID_FALLBACK_SOURCE_CLASS_NAME, MERMAID_FALLBACK_TEXT_CLASS_NAME, MERMAID_FIGURE_CLASS_NAME, MERMAID_FIGURE_FAILED_CLASS_NAME, MERMAID_FIGURE_LOADED_CLASS_NAME, MERMAID_FIGURE_LOADING_CLASS_NAME, MERMAID_FULLSCREEN_BUTTON_CLASS_NAME, MERMAID_LABEL_CLASS_NAME, MERMAID_VIEWER_BUTTON_CLASS_NAME, MERMAID_VIEWER_CANVAS_CLASS_NAME, MERMAID_VIEWER_CAPTION_CLASS_NAME, MERMAID_VIEWER_CHROME_CLASS_NAME, MERMAID_VIEWER_CLOSE_BUTTON_CLASS_NAME, MERMAID_VIEWER_CONTROLS_CLASS_NAME, MERMAID_VIEWER_DIALOG_CLASS_NAME, MERMAID_VIEWER_DRAGGING_CLASS_NAME, MERMAID_VIEWER_VIEWPORT_CLASS_NAME, MERMAID_VIEWER_ZOOMED_CLASS_NAME, MERMAID_VIEWER_ZOOM_VALUE_CLASS_NAME, MESSAGES, type MessageKey, type MessageVars, type Messages, NODE_LTS_VERSION, OPEN_PREVIEW_COMMAND, PROJECT_HOMEPAGE_URL, PROJECT_NAME, PlatformType, SCRIBDOWN_APP_CLASS_NAME, SCRIBDOWN_CONTENT_AREA_CLASS_NAME, SCRIBDOWN_CONTENT_SCROLL_CLASS_NAME, SCRIBDOWN_MARKDOWN_CLASS_NAME, SCRIBDOWN_PAGE_CLASS_NAME, SCRIBDOWN_THIN_SCROLLBAR_CLASS_NAME, SCRIBDOWN_TOC_HOST_CLASS_NAME, SCRIBDOWN_TOOLBAR_BTN_CLASS_NAME, SCRIBDOWN_TOOLBAR_CLASS_NAME, SCRIBDOWN_TOOLBAR_CURRENT_CLASS_NAME, SCRIBDOWN_TOOLBAR_CURRENT_TEXT_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_GROUP_CHOICES_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_GROUP_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_ITEM_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SELECT_CHEVRON_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SELECT_LABEL_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SELECT_VALUE_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_LABEL_CLASS_NAME, SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_MARK_CLASS_NAME, SCRIBDOWN_TOOLBAR_TOC_PANEL_CLASS_NAME, SCRIBDOWN_TOOLBAR_TOC_PANEL_CLOSE_CLASS_NAME, SCRIBDOWN_TOOLBAR_TOC_PANEL_EMPTY_CLASS_NAME, SCRIBDOWN_TOOLBAR_TOC_PANEL_TITLE_CLASS_NAME, SOURCE_LINE_ACTIVE_CLASS_NAME, SOURCE_LINE_DATA_ATTRIBUTE, SOURCE_LINE_OFFSCREEN_HINT_BOTTOM_CLASS_NAME, SOURCE_LINE_OFFSCREEN_HINT_CLASS_NAME, SOURCE_LINE_OFFSCREEN_HINT_TOP_CLASS_NAME, SUPPORTED_LOCALES, SUPPORTED_PLATFORMS, TOC_CLASS_NAME, TOC_ITEM_BRANCH_CLASS_NAME, TOC_ITEM_CLASS_PREFIX, TOC_ITEM_COLLAPSED_CLASS_NAME, TOC_LINK_ACTIVE_CLASS_NAME, TOC_LINK_CLASS_NAME, TOC_LIST_CLASS_NAME, TOC_LIST_NESTED_CLASS_NAME, TOC_NAV_CLASS_NAME, TOC_SUMMARY_CLASS_NAME, TOC_TOGGLE_CLASS_NAME, ThemeType, type Translator, VIDEO_ELEMENT_CLASS_NAME, VIDEO_FALLBACK_CLASS_NAME, VIDEO_FALLBACK_ICON_CLASS_NAME, VIDEO_FALLBACK_SOURCE_CLASS_NAME, VIDEO_FALLBACK_TEXT_CLASS_NAME, VIDEO_FIGURE_CLASS_NAME, VIDEO_FRAME_CLASS_NAME, VIDEO_FRAME_FAILED_CLASS_NAME, VIDEO_FRAME_LOADED_CLASS_NAME, VSCODE_NLS_SUFFIX, createTranslator, getActiveLocale, normalizeLocale, setActiveLocale, setActiveLocaleFromHost, t };
|
package/dist/index.js
CHANGED
|
@@ -141,7 +141,231 @@ var SCRIBDOWN_TOOLBAR_TOC_PANEL_CLOSE_CLASS_NAME = "scribdown-toolbar-toc-panel-
|
|
|
141
141
|
var SCRIBDOWN_TOOLBAR_TOC_PANEL_EMPTY_CLASS_NAME = "scribdown-toolbar-toc-panel-empty";
|
|
142
142
|
var SCRIBDOWN_TOOLBAR_CURRENT_TEXT_CLASS_NAME = "scribdown-toolbar-current-text";
|
|
143
143
|
var CONTENT_WIDTH_STORAGE_KEY = "scribdown-content-width";
|
|
144
|
+
|
|
145
|
+
// src/i18n/locales.ts
|
|
146
|
+
var LocaleType = /* @__PURE__ */ ((LocaleType3) => {
|
|
147
|
+
LocaleType3["English"] = "en";
|
|
148
|
+
LocaleType3["SimplifiedChinese"] = "zh-CN";
|
|
149
|
+
return LocaleType3;
|
|
150
|
+
})(LocaleType || {});
|
|
151
|
+
var DEFAULT_LOCALE = "en" /* English */;
|
|
152
|
+
var SUPPORTED_LOCALES = ["en" /* English */, "zh-CN" /* SimplifiedChinese */];
|
|
153
|
+
var LOCALE_FALLBACKS = {
|
|
154
|
+
["en" /* English */]: [],
|
|
155
|
+
["zh-CN" /* SimplifiedChinese */]: ["en" /* English */]
|
|
156
|
+
};
|
|
157
|
+
var CHROME_LOCALE_DIRECTORY = {
|
|
158
|
+
["en" /* English */]: "en",
|
|
159
|
+
["zh-CN" /* SimplifiedChinese */]: "zh_CN"
|
|
160
|
+
};
|
|
161
|
+
var VSCODE_NLS_SUFFIX = {
|
|
162
|
+
["en" /* English */]: "",
|
|
163
|
+
["zh-CN" /* SimplifiedChinese */]: "zh-cn"
|
|
164
|
+
};
|
|
165
|
+
function normalizeLocale(rawLocale) {
|
|
166
|
+
if (!rawLocale) {
|
|
167
|
+
return DEFAULT_LOCALE;
|
|
168
|
+
}
|
|
169
|
+
const normalizedTag = rawLocale.toLowerCase().replace(/_/g, "-");
|
|
170
|
+
const exactMatch = SUPPORTED_LOCALES.find((locale) => locale.toLowerCase() === normalizedTag);
|
|
171
|
+
if (exactMatch) {
|
|
172
|
+
return exactMatch;
|
|
173
|
+
}
|
|
174
|
+
const primarySubtag = normalizedTag.split("-")[0];
|
|
175
|
+
const primaryMatch = SUPPORTED_LOCALES.find(
|
|
176
|
+
(locale) => locale.toLowerCase().split("-")[0] === primarySubtag
|
|
177
|
+
);
|
|
178
|
+
if (primaryMatch) {
|
|
179
|
+
return primaryMatch;
|
|
180
|
+
}
|
|
181
|
+
return DEFAULT_LOCALE;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// src/i18n/messages.ts
|
|
185
|
+
var EN_MESSAGES = {
|
|
186
|
+
"toolbar.toc": "Contents",
|
|
187
|
+
"toolbar.tocClose": "Close contents",
|
|
188
|
+
"toolbar.tocEmpty": "No headings",
|
|
189
|
+
"toolbar.more": "More",
|
|
190
|
+
"toolbar.pageWidth": "Page width",
|
|
191
|
+
"toolbar.backTop": "Back to top",
|
|
192
|
+
"toolbar.about": "About",
|
|
193
|
+
"code.copy": "Copy code",
|
|
194
|
+
"code.copied": "Copied",
|
|
195
|
+
"mermaid.renderFailed": "Diagram failed to render",
|
|
196
|
+
"mermaid.fullscreenButton": "View diagram fullscreen",
|
|
197
|
+
"mermaid.fullscreen": "View Mermaid diagram fullscreen",
|
|
198
|
+
"mermaid.zoomIn": "Zoom in diagram",
|
|
199
|
+
"mermaid.zoomOut": "Zoom out diagram",
|
|
200
|
+
"mermaid.zoomReset": "Reset zoom",
|
|
201
|
+
"mermaid.close": "Close fullscreen view",
|
|
202
|
+
"image.viewFull": "View full image",
|
|
203
|
+
"image.viewFullOf": "View full image: {alt}",
|
|
204
|
+
"image.loadFailed": "Image failed to load",
|
|
205
|
+
"image.hint": "Shortcuts: +/= zoom in \xB7 - zoom out \xB7 0 reset \xB7 Esc close \xB7 drag to pan \xB7 Ctrl/\u2318 + wheel to zoom",
|
|
206
|
+
"image.zoomIn": "Zoom in image",
|
|
207
|
+
"image.zoomOut": "Zoom out image",
|
|
208
|
+
"image.zoomReset": "Reset zoom",
|
|
209
|
+
"image.close": "Close image viewer",
|
|
210
|
+
"video.loadFailed": "Video failed to load",
|
|
211
|
+
"toc.label": "Contents",
|
|
212
|
+
"toc.toggle": "Expand or collapse subheadings",
|
|
213
|
+
"frontmatter.label": "Metadata",
|
|
214
|
+
"popup.enableAria": "Enable Scribdown",
|
|
215
|
+
"popup.enabledTitle": "Scribdown enabled",
|
|
216
|
+
"popup.disabledTitle": "Scribdown disabled",
|
|
217
|
+
"popup.disabledEmpty": "Disabled. Markdown pages are no longer taken over.",
|
|
218
|
+
"popup.fileAccessBannerTitle": "\u26A0\uFE0F \u201CAllow access to file URLs\u201D is off",
|
|
219
|
+
"popup.fileAccessBannerText": "Local .md files can\u2019t be taken over or auto-refreshed by Scribdown. Turn the switch on to enable it.",
|
|
220
|
+
"popup.fileAccessAction": "Turn on",
|
|
221
|
+
"popup.fileAccessActionAria": "Open the extension details page to allow access to file URLs",
|
|
222
|
+
"popup.autoRefreshGroupAria": "Local file auto-refresh settings",
|
|
223
|
+
"popup.autoRefreshLabel": "Auto-refresh local files",
|
|
224
|
+
"popup.autoRefreshInfoAria": "About local file auto-refresh",
|
|
225
|
+
"popup.autoRefreshOnTip": "On: re-fetches the local .md file every {seconds}s",
|
|
226
|
+
"popup.autoRefreshOffTip": "Off: reload the page manually after the local .md changes",
|
|
227
|
+
"popup.intervalLabel": "Refresh interval",
|
|
228
|
+
"popup.intervalInfoAria": "Refresh interval range",
|
|
229
|
+
"popup.intervalRangeTip": "Range {min}\u2013{max} seconds",
|
|
230
|
+
"popup.intervalUnit": "s",
|
|
231
|
+
"popup.savedTip": "Saved. Reload the current page to apply.",
|
|
232
|
+
"browser.disabledTitle": "Scribdown (disabled)",
|
|
233
|
+
"browser.fileAccessNeededTitle": "Scribdown \xB7 needs \u201CAllow access to file URLs\u201D",
|
|
234
|
+
"viewer.errorHeading": "Scribdown can\u2019t render this file",
|
|
235
|
+
"viewer.viewRawLink": "View raw source",
|
|
236
|
+
"viewer.errorIframe": "The Scribdown viewer can\u2019t load inside an iframe.",
|
|
237
|
+
"viewer.errorMissingSrc": "Missing src parameter.",
|
|
238
|
+
"viewer.errorRequestFailed": "Request failed: {message}",
|
|
239
|
+
"viewer.errorNotMarkdown": "Response is not Markdown (Content-Type: {contentType}).",
|
|
240
|
+
"viewer.contentTypeUndeclared": "undeclared",
|
|
241
|
+
"viewer.errorEmpty": "The file is empty.",
|
|
242
|
+
"viewer.errorUnsupportedProtocol": "Unsupported protocol ({protocol}); only http / https are allowed.",
|
|
243
|
+
"viewer.errorInvalidUrl": "The src parameter is not a valid URL.",
|
|
244
|
+
"vscode.noMarkdownWarning": "Open a Markdown document first, then run Scribdown preview.",
|
|
245
|
+
"vscode.openLinkFailed": "Can\u2019t open link: {href}",
|
|
246
|
+
"vscode.linkTargetMissing": "Link target not found: {path}",
|
|
247
|
+
"vscode.renderFailed": "Render failed",
|
|
248
|
+
"manifest.browserName": "Scribdown",
|
|
249
|
+
"manifest.browserDescription": "Handdrawn markdown rendering experience.",
|
|
250
|
+
"manifest.vscodeDisplayName": "Scribdown Markdown Preview",
|
|
251
|
+
"manifest.vscodeDescription": "Handdrawn-style Markdown preview for VS Code.",
|
|
252
|
+
"manifest.vscodeCommandTitle": "Open Scribdown Preview"
|
|
253
|
+
};
|
|
254
|
+
var ZH_CN_MESSAGES = {
|
|
255
|
+
"toolbar.toc": "\u76EE\u5F55",
|
|
256
|
+
"toolbar.tocClose": "\u5173\u95ED\u76EE\u5F55",
|
|
257
|
+
"toolbar.tocEmpty": "\u6682\u65E0\u6807\u9898",
|
|
258
|
+
"toolbar.more": "\u66F4\u591A",
|
|
259
|
+
"toolbar.pageWidth": "\u9875\u9762\u5BBD\u5EA6",
|
|
260
|
+
"toolbar.backTop": "\u56DE\u5230\u9876\u90E8",
|
|
261
|
+
"toolbar.about": "\u5173\u4E8E",
|
|
262
|
+
"code.copy": "\u590D\u5236\u4EE3\u7801",
|
|
263
|
+
"code.copied": "\u5DF2\u590D\u5236",
|
|
264
|
+
"mermaid.renderFailed": "\u56FE\u8868\u6E32\u67D3\u5931\u8D25",
|
|
265
|
+
"mermaid.fullscreenButton": "\u5168\u5C4F\u67E5\u770B\u56FE\u8868",
|
|
266
|
+
"mermaid.fullscreen": "\u5168\u5C4F\u67E5\u770B Mermaid \u56FE\u8868",
|
|
267
|
+
"mermaid.zoomIn": "\u653E\u5927\u56FE\u8868",
|
|
268
|
+
"mermaid.zoomOut": "\u7F29\u5C0F\u56FE\u8868",
|
|
269
|
+
"mermaid.zoomReset": "\u91CD\u7F6E\u7F29\u653E",
|
|
270
|
+
"mermaid.close": "\u5173\u95ED\u5168\u5C4F\u67E5\u770B",
|
|
271
|
+
"image.viewFull": "\u67E5\u770B\u5168\u56FE",
|
|
272
|
+
"image.viewFullOf": "\u67E5\u770B\u5168\u56FE\uFF1A{alt}",
|
|
273
|
+
"image.loadFailed": "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25",
|
|
274
|
+
"image.hint": "\u5FEB\u6377\u952E\uFF1A+/= \u653E\u5927 \xB7 - \u7F29\u5C0F \xB7 0 \u91CD\u7F6E \xB7 Esc \u5173\u95ED \xB7 \u9F20\u6807\u62D6\u62FD\u53EF\u5E73\u79FB \xB7 Ctrl/\u2318 + \u6EDA\u8F6E\u7F29\u653E",
|
|
275
|
+
"image.zoomIn": "\u653E\u5927\u56FE\u7247",
|
|
276
|
+
"image.zoomOut": "\u7F29\u5C0F\u56FE\u7247",
|
|
277
|
+
"image.zoomReset": "\u91CD\u7F6E\u7F29\u653E",
|
|
278
|
+
"image.close": "\u5173\u95ED\u5168\u56FE\u67E5\u770B",
|
|
279
|
+
"video.loadFailed": "\u89C6\u9891\u52A0\u8F7D\u5931\u8D25",
|
|
280
|
+
"toc.label": "\u76EE\u5F55",
|
|
281
|
+
"toc.toggle": "\u5C55\u5F00\u6216\u6298\u53E0\u5B50\u76EE\u5F55",
|
|
282
|
+
"frontmatter.label": "\u5143\u6570\u636E",
|
|
283
|
+
"popup.enableAria": "\u542F\u7528 Scribdown",
|
|
284
|
+
"popup.enabledTitle": "\u5DF2\u542F\u7528 Scribdown",
|
|
285
|
+
"popup.disabledTitle": "\u5DF2\u5173\u95ED Scribdown",
|
|
286
|
+
"popup.disabledEmpty": "\u5DF2\u5173\u95ED\uFF0C\u8BBF\u95EE .md \u4E0D\u518D\u88AB\u63A5\u7BA1\u3002",
|
|
287
|
+
"popup.fileAccessBannerTitle": "\u26A0\uFE0F \u300C\u5141\u8BB8\u8BBF\u95EE\u6587\u4EF6\u7F51\u5740\u300D\u672A\u5F00\u542F",
|
|
288
|
+
"popup.fileAccessBannerText": "\u672C\u5730 .md \u6587\u4EF6\u65E0\u6CD5\u88AB Scribdown \u63A5\u7BA1\u4E0E\u81EA\u52A8\u5237\u65B0\u3002\u6253\u5F00\u5F00\u5173\u540E\u5373\u53EF\u751F\u6548\u3002",
|
|
289
|
+
"popup.fileAccessAction": "\u53BB\u5F00\u542F",
|
|
290
|
+
"popup.fileAccessActionAria": "\u6253\u5F00\u6269\u5C55\u8BE6\u60C5\u9875\u4EE5\u5F00\u542F\u5141\u8BB8\u8BBF\u95EE\u6587\u4EF6\u7F51\u5740",
|
|
291
|
+
"popup.autoRefreshGroupAria": "\u672C\u5730\u6587\u4EF6\u81EA\u52A8\u5237\u65B0\u8BBE\u7F6E",
|
|
292
|
+
"popup.autoRefreshLabel": "\u672C\u5730\u6587\u4EF6\u81EA\u52A8\u5237\u65B0",
|
|
293
|
+
"popup.autoRefreshInfoAria": "\u67E5\u770B\u672C\u5730\u6587\u4EF6\u81EA\u52A8\u5237\u65B0\u8BF4\u660E",
|
|
294
|
+
"popup.autoRefreshOnTip": "\u5DF2\u5F00\u542F\uFF1A\u6BCF {seconds} \u79D2\u56DE\u62C9\u4E00\u6B21\u672C\u5730 .md \u6587\u4EF6",
|
|
295
|
+
"popup.autoRefreshOffTip": "\u5DF2\u5173\u95ED\uFF1A\u672C\u5730 .md \u66F4\u65B0\u540E\u9700\u624B\u52A8\u5237\u65B0\u9875\u9762",
|
|
296
|
+
"popup.intervalLabel": "\u5237\u65B0\u95F4\u9694",
|
|
297
|
+
"popup.intervalInfoAria": "\u67E5\u770B\u5237\u65B0\u95F4\u9694\u53D6\u503C\u8303\u56F4",
|
|
298
|
+
"popup.intervalRangeTip": "\u53D6\u503C\u8303\u56F4 {min} \u2013 {max} \u79D2",
|
|
299
|
+
"popup.intervalUnit": "\u79D2",
|
|
300
|
+
"popup.savedTip": "\u5207\u6362\u5DF2\u4FDD\u5B58\uFF0C\u5237\u65B0\u5F53\u524D\u9875\u9762\u540E\u751F\u6548\u3002",
|
|
301
|
+
"browser.disabledTitle": "Scribdown\uFF08\u5DF2\u5173\u95ED\uFF09",
|
|
302
|
+
"browser.fileAccessNeededTitle": "Scribdown \xB7 \u9700\u5F00\u542F\u300C\u5141\u8BB8\u8BBF\u95EE\u6587\u4EF6\u7F51\u5740\u300D",
|
|
303
|
+
"viewer.errorHeading": "Scribdown \u65E0\u6CD5\u6E32\u67D3\u8BE5\u6587\u4EF6",
|
|
304
|
+
"viewer.viewRawLink": "\u67E5\u770B\u539F\u59CB\u94FE\u63A5",
|
|
305
|
+
"viewer.errorIframe": "Scribdown viewer \u4E0D\u5141\u8BB8\u5728 iframe \u4E2D\u52A0\u8F7D\u3002",
|
|
306
|
+
"viewer.errorMissingSrc": "\u7F3A\u5C11 src \u53C2\u6570\u3002",
|
|
307
|
+
"viewer.errorRequestFailed": "\u8BF7\u6C42\u5931\u8D25\uFF1A{message}",
|
|
308
|
+
"viewer.errorNotMarkdown": "\u54CD\u5E94\u4E0D\u662F Markdown \u7C7B\u578B\uFF08Content-Type: {contentType}\uFF09\u3002",
|
|
309
|
+
"viewer.contentTypeUndeclared": "\u672A\u58F0\u660E",
|
|
310
|
+
"viewer.errorEmpty": "\u6587\u4EF6\u5185\u5BB9\u4E3A\u7A7A\u3002",
|
|
311
|
+
"viewer.errorUnsupportedProtocol": "\u4E0D\u652F\u6301\u7684\u534F\u8BAE\uFF08{protocol}\uFF09\uFF0C\u4EC5\u5141\u8BB8 http / https\u3002",
|
|
312
|
+
"viewer.errorInvalidUrl": "src \u53C2\u6570\u4E0D\u662F\u5408\u6CD5\u7684 URL\u3002",
|
|
313
|
+
"vscode.noMarkdownWarning": "\u8BF7\u5148\u6253\u5F00\u4E00\u4E2A Markdown \u6587\u6863\uFF0C\u518D\u6267\u884C Scribdown \u9884\u89C8\u3002",
|
|
314
|
+
"vscode.openLinkFailed": "\u65E0\u6CD5\u6253\u5F00\u94FE\u63A5\uFF1A{href}",
|
|
315
|
+
"vscode.linkTargetMissing": "\u94FE\u63A5\u76EE\u6807\u4E0D\u5B58\u5728\uFF1A{path}",
|
|
316
|
+
"vscode.renderFailed": "\u6E32\u67D3\u5931\u8D25",
|
|
317
|
+
"manifest.browserName": "Scribdown",
|
|
318
|
+
"manifest.browserDescription": "\u624B\u7ED8\u98CE\u683C\u7684 Markdown \u6E32\u67D3\u4F53\u9A8C\u3002",
|
|
319
|
+
"manifest.vscodeDisplayName": "Scribdown Markdown \u9884\u89C8",
|
|
320
|
+
"manifest.vscodeDescription": "VS Code \u7684\u624B\u7ED8\u98CE\u683C Markdown \u9884\u89C8\u3002",
|
|
321
|
+
"manifest.vscodeCommandTitle": "\u6253\u5F00 Scribdown \u9884\u89C8"
|
|
322
|
+
};
|
|
323
|
+
var MESSAGES = {
|
|
324
|
+
["en" /* English */]: EN_MESSAGES,
|
|
325
|
+
["zh-CN" /* SimplifiedChinese */]: ZH_CN_MESSAGES
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// src/i18n/translator.ts
|
|
329
|
+
var activeLocale = DEFAULT_LOCALE;
|
|
330
|
+
function setActiveLocale(locale) {
|
|
331
|
+
activeLocale = SUPPORTED_LOCALES.includes(locale) ? locale : DEFAULT_LOCALE;
|
|
332
|
+
}
|
|
333
|
+
function getActiveLocale() {
|
|
334
|
+
return activeLocale;
|
|
335
|
+
}
|
|
336
|
+
function setActiveLocaleFromHost(rawLocale) {
|
|
337
|
+
const resolvedLocale = normalizeLocale(rawLocale);
|
|
338
|
+
setActiveLocale(resolvedLocale);
|
|
339
|
+
return resolvedLocale;
|
|
340
|
+
}
|
|
341
|
+
function resolveMessage(locale, key) {
|
|
342
|
+
const lookupChain = [locale, ...LOCALE_FALLBACKS[locale]];
|
|
343
|
+
for (const chainLocale of lookupChain) {
|
|
344
|
+
const candidate = MESSAGES[chainLocale]?.[key];
|
|
345
|
+
if (typeof candidate === "string") {
|
|
346
|
+
return candidate;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return key;
|
|
350
|
+
}
|
|
351
|
+
function interpolate(template, vars) {
|
|
352
|
+
if (!vars) {
|
|
353
|
+
return template;
|
|
354
|
+
}
|
|
355
|
+
return template.replace(/\{(\w+)\}/g, (placeholder, name) => {
|
|
356
|
+
const value = vars[name];
|
|
357
|
+
return value === void 0 ? placeholder : String(value);
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
function t(key, vars) {
|
|
361
|
+
return interpolate(resolveMessage(activeLocale, key), vars);
|
|
362
|
+
}
|
|
363
|
+
function createTranslator(locale) {
|
|
364
|
+
const resolvedLocale = normalizeLocale(locale);
|
|
365
|
+
return (key, vars) => interpolate(resolveMessage(resolvedLocale, key), vars);
|
|
366
|
+
}
|
|
144
367
|
export {
|
|
368
|
+
CHROME_LOCALE_DIRECTORY,
|
|
145
369
|
CODE_BLOCK_BODY_CLASS_NAME,
|
|
146
370
|
CODE_BLOCK_CHROME_CLASS_NAME,
|
|
147
371
|
CODE_BLOCK_CLASS_NAME,
|
|
@@ -154,6 +378,7 @@ export {
|
|
|
154
378
|
CODE_BLOCK_LANG_CLASS_NAME,
|
|
155
379
|
CODE_BLOCK_LINE_CLASS_NAME,
|
|
156
380
|
CONTENT_WIDTH_STORAGE_KEY,
|
|
381
|
+
DEFAULT_LOCALE,
|
|
157
382
|
DEFAULT_THEME,
|
|
158
383
|
DETAILS_CLASS_NAME,
|
|
159
384
|
FRAME_CLASS_NAME,
|
|
@@ -186,6 +411,8 @@ export {
|
|
|
186
411
|
IMAGE_VIEWER_VIEWPORT_CLASS_NAME,
|
|
187
412
|
IMAGE_VIEWER_ZOOMED_CLASS_NAME,
|
|
188
413
|
IMAGE_VIEWER_ZOOM_VALUE_CLASS_NAME,
|
|
414
|
+
LOCALE_FALLBACKS,
|
|
415
|
+
LocaleType,
|
|
189
416
|
MARKDOWN_FILE_EXTNAME,
|
|
190
417
|
MARKDOWN_LANGUAGE_ID,
|
|
191
418
|
MERMAID_BODY_CLASS_NAME,
|
|
@@ -212,6 +439,7 @@ export {
|
|
|
212
439
|
MERMAID_VIEWER_VIEWPORT_CLASS_NAME,
|
|
213
440
|
MERMAID_VIEWER_ZOOMED_CLASS_NAME,
|
|
214
441
|
MERMAID_VIEWER_ZOOM_VALUE_CLASS_NAME,
|
|
442
|
+
MESSAGES,
|
|
215
443
|
NODE_LTS_VERSION,
|
|
216
444
|
OPEN_PREVIEW_COMMAND,
|
|
217
445
|
PROJECT_HOMEPAGE_URL,
|
|
@@ -247,6 +475,7 @@ export {
|
|
|
247
475
|
SOURCE_LINE_OFFSCREEN_HINT_BOTTOM_CLASS_NAME,
|
|
248
476
|
SOURCE_LINE_OFFSCREEN_HINT_CLASS_NAME,
|
|
249
477
|
SOURCE_LINE_OFFSCREEN_HINT_TOP_CLASS_NAME,
|
|
478
|
+
SUPPORTED_LOCALES,
|
|
250
479
|
SUPPORTED_PLATFORMS,
|
|
251
480
|
TOC_CLASS_NAME,
|
|
252
481
|
TOC_ITEM_BRANCH_CLASS_NAME,
|
|
@@ -268,6 +497,13 @@ export {
|
|
|
268
497
|
VIDEO_FIGURE_CLASS_NAME,
|
|
269
498
|
VIDEO_FRAME_CLASS_NAME,
|
|
270
499
|
VIDEO_FRAME_FAILED_CLASS_NAME,
|
|
271
|
-
VIDEO_FRAME_LOADED_CLASS_NAME
|
|
500
|
+
VIDEO_FRAME_LOADED_CLASS_NAME,
|
|
501
|
+
VSCODE_NLS_SUFFIX,
|
|
502
|
+
createTranslator,
|
|
503
|
+
getActiveLocale,
|
|
504
|
+
normalizeLocale,
|
|
505
|
+
setActiveLocale,
|
|
506
|
+
setActiveLocaleFromHost,
|
|
507
|
+
t
|
|
272
508
|
};
|
|
273
509
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/class-names.ts","../src/enums.ts","../src/constants.ts"],"sourcesContent":["/**\n * Scribdown Markdown 渲染 DOM 的 class 契约。\n * 由 @scribdown/markdown-renderer 写入 DOM,@scribdown/ui-handdrawn 的样式与各宿主按名引用,\n * 统一收敛在此,禁止在其他包重新定义或硬编码。\n */\n\n// ─── 手绘边框 / 内容折叠块 ───\n\n/**\n * 手绘卡片边框类名:可复用的「边框」基底,由内容折叠块、目录根等显式 opt-in 引入。\n */\nexport const FRAME_CLASS_NAME = \"scribdown-frame\";\n\n/**\n * 内容折叠块类名:用户手写的原生 <details>(区别于目录用 <details>)在渲染时打上此标。\n */\nexport const DETAILS_CLASS_NAME = \"scribdown-details\";\n\n// ─── Frontmatter 元数据卡片 ───\n\n/**\n * Frontmatter 元数据卡片容器类名(文档头部 YAML 键值对展示)。\n */\nexport const FRONTMATTER_CLASS_NAME = \"scribdown-frontmatter\";\n\n/**\n * Frontmatter 顶部 chrome 容器类名(仅承载「元数据」标签)。\n */\nexport const FRONTMATTER_CHROME_CLASS_NAME = \"scribdown-frontmatter__chrome\";\n\n/**\n * Frontmatter 标签类名。\n */\nexport const FRONTMATTER_LABEL_CLASS_NAME = \"scribdown-frontmatter__label\";\n\n/**\n * Frontmatter 键值列表类名。\n */\nexport const FRONTMATTER_LIST_CLASS_NAME = \"scribdown-frontmatter__list\";\n\n/**\n * Frontmatter 嵌套键值列表类名(对象类型的值向下展开一层)。\n */\nexport const FRONTMATTER_LIST_NESTED_CLASS_NAME = \"scribdown-frontmatter__list--nested\";\n\n// ─── 目录(TOC)与标题 ───\n\n/**\n * 目录容器类名。\n */\nexport const TOC_CLASS_NAME = \"scribdown-toc\";\n\n/**\n * 目录摘要按钮类名。\n */\nexport const TOC_SUMMARY_CLASS_NAME = \"scribdown-toc-summary\";\n\n/**\n * 目录导航区域类名。\n */\nexport const TOC_NAV_CLASS_NAME = \"scribdown-toc-nav\";\n\n/**\n * 目录列表类名。\n */\nexport const TOC_LIST_CLASS_NAME = \"scribdown-toc-list\";\n\n/**\n * 目录嵌套列表类名。\n */\nexport const TOC_LIST_NESTED_CLASS_NAME = \"scribdown-toc-list--nested\";\n\n/**\n * 目录条目类名前缀。\n */\nexport const TOC_ITEM_CLASS_PREFIX = \"scribdown-toc-item\";\n\n/**\n * 目录分支条目类名(拥有可折叠子层级)。\n */\nexport const TOC_ITEM_BRANCH_CLASS_NAME = \"scribdown-toc-item--branch\";\n\n/**\n * 目录分支条目折叠态类名(运行时由折叠按钮切换,控制隐藏嵌套列表与箭头朝向)。\n */\nexport const TOC_ITEM_COLLAPSED_CLASS_NAME = \"scribdown-toc-item--collapsed\";\n\n/**\n * 目录条目标题跳转链接类名:叶子与分支共用同一种 <a href=\"#id\"> 元素与跳转逻辑。\n */\nexport const TOC_LINK_CLASS_NAME = \"scribdown-toc-link\";\n\n/**\n * 目录标题链接「当前章节」高亮类名:scrollspy 命中当前可视区标题时切换,与工具栏当前指示器同步。\n */\nexport const TOC_LINK_ACTIVE_CLASS_NAME = \"scribdown-toc-link--active\";\n\n/**\n * 目录分支折叠按钮类名(与标题链接分离,专职展开/折叠,避免与跳转冲突)。\n */\nexport const TOC_TOGGLE_CLASS_NAME = \"scribdown-toc-toggle\";\n\n/**\n * 标题文本包裹层类名:用于按行绘制手绘高亮,确保多行标题每行都有底色。\n */\nexport const HEADING_MARK_CLASS_NAME = \"scribdown-heading-mark\";\n\n// ─── 图片 figure ───\n\n/**\n * 图片 figure 容器类名。\n */\nexport const IMAGE_FIGURE_CLASS_NAME = \"scribdown-image-figure\";\n\n/**\n * 图片边框容器类名。\n */\nexport const IMAGE_FRAME_CLASS_NAME = \"scribdown-image-frame\";\n\n/**\n * 图片元素类名。\n */\nexport const IMAGE_ELEMENT_CLASS_NAME = \"scribdown-image\";\n\n/**\n * 图片标题类名。\n */\nexport const IMAGE_CAPTION_CLASS_NAME = \"scribdown-image-caption\";\n\n/**\n * 图片加载失败状态类名。\n */\nexport const IMAGE_FRAME_FAILED_CLASS_NAME = \"scribdown-image-frame--failed\";\n\n/**\n * 图片加载完成状态类名。\n */\nexport const IMAGE_FRAME_LOADED_CLASS_NAME = \"scribdown-image-frame--loaded\";\n\n/**\n * 图片失败态占位内容类名。\n */\nexport const IMAGE_FALLBACK_CLASS_NAME = \"scribdown-image-fallback\";\n\n/**\n * 图片失败态图标类名。\n */\nexport const IMAGE_FALLBACK_ICON_CLASS_NAME = \"scribdown-image-fallback-icon\";\n\n/**\n * 图片失败态标题类名。\n */\nexport const IMAGE_FALLBACK_TEXT_CLASS_NAME = \"scribdown-image-fallback-text\";\n\n/**\n * 图片失败态来源类名。\n */\nexport const IMAGE_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-image-fallback-source\";\n\n// ─── 视频 figure ───\n\n/**\n * 视频 figure 容器类名。\n */\nexport const VIDEO_FIGURE_CLASS_NAME = \"scribdown-video-figure\";\n\n/**\n * 视频边框容器类名。\n */\nexport const VIDEO_FRAME_CLASS_NAME = \"scribdown-video-frame\";\n\n/**\n * 视频元素类名。\n */\nexport const VIDEO_ELEMENT_CLASS_NAME = \"scribdown-video\";\n\n/**\n * 视频加载失败状态类名。\n */\nexport const VIDEO_FRAME_FAILED_CLASS_NAME = \"scribdown-video-frame--failed\";\n\n/**\n * 视频加载完成状态类名。\n */\nexport const VIDEO_FRAME_LOADED_CLASS_NAME = \"scribdown-video-frame--loaded\";\n\n/**\n * 视频失败态占位内容类名。\n */\nexport const VIDEO_FALLBACK_CLASS_NAME = \"scribdown-video-fallback\";\n\n/**\n * 视频失败态图标类名。\n */\nexport const VIDEO_FALLBACK_ICON_CLASS_NAME = \"scribdown-video-fallback-icon\";\n\n/**\n * 视频失败态标题类名。\n */\nexport const VIDEO_FALLBACK_TEXT_CLASS_NAME = \"scribdown-video-fallback-text\";\n\n/**\n * 视频失败态来源类名。\n */\nexport const VIDEO_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-video-fallback-source\";\n\n// ─── 图片全图查看器 ───\n\n/**\n * 图片查看器 dialog 类名。\n */\nexport const IMAGE_VIEWER_DIALOG_CLASS_NAME = \"scribdown-image-viewer\";\n\n/**\n * 图片查看器缩放状态类名。\n */\nexport const IMAGE_VIEWER_ZOOMED_CLASS_NAME = \"scribdown-image-viewer--zoomed\";\n\n/**\n * 图片查看器拖拽状态类名。\n */\nexport const IMAGE_VIEWER_DRAGGING_CLASS_NAME = \"scribdown-image-viewer--dragging\";\n\n/**\n * 图片查看器标题区域类名(包裹 caption + hint)。\n */\nexport const IMAGE_VIEWER_CAPTION_GROUP_CLASS_NAME = \"scribdown-image-viewer__caption-group\";\n\n/**\n * 图片查看器快捷键提示类名。\n */\nexport const IMAGE_VIEWER_HINT_CLASS_NAME = \"scribdown-image-viewer__hint\";\n\n/**\n * 图片查看器顶部区域类名。\n */\nexport const IMAGE_VIEWER_CHROME_CLASS_NAME = \"scribdown-image-viewer__chrome\";\n\n/**\n * 图片查看器按钮区域类名。\n */\nexport const IMAGE_VIEWER_CONTROLS_CLASS_NAME = \"scribdown-image-viewer__controls\";\n\n/**\n * 图片查看器按钮类名。\n */\nexport const IMAGE_VIEWER_BUTTON_CLASS_NAME = \"scribdown-image-viewer__button\";\n\n/**\n * 图片查看器关闭按钮修饰类名。\n */\nexport const IMAGE_VIEWER_CLOSE_BUTTON_CLASS_NAME = \"scribdown-image-viewer__button--close\";\n\n/**\n * 图片查看器视口类名。\n */\nexport const IMAGE_VIEWER_VIEWPORT_CLASS_NAME = \"scribdown-image-viewer__viewport\";\n\n/**\n * 图片查看器图片类名。\n */\nexport const IMAGE_VIEWER_IMAGE_CLASS_NAME = \"scribdown-image-viewer__image\";\n\n/**\n * 图片查看器说明文字类名。\n */\nexport const IMAGE_VIEWER_CAPTION_CLASS_NAME = \"scribdown-image-viewer__caption\";\n\n/**\n * 图片查看器缩放数值类名。\n */\nexport const IMAGE_VIEWER_ZOOM_VALUE_CLASS_NAME = \"scribdown-image-viewer__zoom-value\";\n\n// ─── 代码块 chrome ───\n\n/**\n * 代码块外层 figure 类名。\n */\nexport const CODE_BLOCK_CLASS_NAME = \"scribdown-code-block\";\n\n/**\n * 代码块顶部 chrome 区域类名。\n */\nexport const CODE_BLOCK_CHROME_CLASS_NAME = \"scribdown-code-block__chrome\";\n\n/**\n * 代码块正文区域类名。\n */\nexport const CODE_BLOCK_BODY_CLASS_NAME = \"scribdown-code-block__body\";\n\n/**\n * 代码块语言标签类名。\n */\nexport const CODE_BLOCK_LANG_CLASS_NAME = \"scribdown-code-block__lang\";\n\n/**\n * 代码块复制按钮类名。\n */\nexport const CODE_BLOCK_COPY_CLASS_NAME = \"scribdown-code-block__copy\";\n\n/**\n * 代码块复制按钮图标类名。\n */\nexport const CODE_BLOCK_COPY_ICON_CLASS_NAME = \"scribdown-code-block__copy-icon\";\n\n/**\n * 代码块复制按钮\"复制\"态图标类名(默认显示)。\n */\nexport const CODE_BLOCK_COPY_ICON_COPY_CLASS_NAME = \"scribdown-code-block__copy-icon--copy\";\n\n/**\n * 代码块复制按钮\"已复制\"态图标类名(复制成功后显示)。\n */\nexport const CODE_BLOCK_COPY_ICON_CHECK_CLASS_NAME = \"scribdown-code-block__copy-icon--check\";\n\n/**\n * 代码块代码行类名。\n */\nexport const CODE_BLOCK_LINE_CLASS_NAME = \"scribdown-code-block__line\";\n\n/**\n * 代码块行号固定列类名。\n */\nexport const CODE_BLOCK_GUTTER_CLASS_NAME = \"scribdown-code-block__gutter\";\n\n/**\n * 代码块行号固定列中的单行节点类名。\n */\nexport const CODE_BLOCK_GUTTER_LINE_CLASS_NAME = \"scribdown-code-block__gutter-line\";\n\n// ─── Mermaid 图表 ───\n\n/**\n * Mermaid 图表外层 figure 容器类名。\n */\nexport const MERMAID_FIGURE_CLASS_NAME = \"scribdown-mermaid\";\n\n/**\n * Mermaid 图表顶部 chrome 容器类名。\n */\nexport const MERMAID_CHROME_CLASS_NAME = \"scribdown-mermaid__chrome\";\n\n/**\n * Mermaid 图表语言标签类名。\n */\nexport const MERMAID_LABEL_CLASS_NAME = \"scribdown-mermaid__label\";\n\n/**\n * Mermaid 图表正文容器类名。\n */\nexport const MERMAID_BODY_CLASS_NAME = \"scribdown-mermaid__body\";\n\n/**\n * Mermaid 图表 SVG 画布容器类名。\n */\nexport const MERMAID_CANVAS_CLASS_NAME = \"scribdown-mermaid__canvas\";\n\n/**\n * Mermaid 图表失败态容器类名。\n */\nexport const MERMAID_FALLBACK_CLASS_NAME = \"scribdown-mermaid__fallback\";\n\n/**\n * Mermaid 失败态图标类名。\n */\nexport const MERMAID_FALLBACK_ICON_CLASS_NAME = \"scribdown-mermaid__fallback-icon\";\n\n/**\n * Mermaid 失败态文案类名。\n */\nexport const MERMAID_FALLBACK_TEXT_CLASS_NAME = \"scribdown-mermaid__fallback-text\";\n\n/**\n * Mermaid 失败态源码块类名。\n */\nexport const MERMAID_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-mermaid__fallback-source\";\n\n/**\n * Mermaid 加载/失败/完成态修饰类名。\n */\nexport const MERMAID_FIGURE_LOADING_CLASS_NAME = \"scribdown-mermaid--loading\";\n\n/**\n * MERMAID_FIGURE_FAILED_CLASS_NAME\n */\nexport const MERMAID_FIGURE_FAILED_CLASS_NAME = \"scribdown-mermaid--failed\";\n\n/**\n * MERMAID_FIGURE_LOADED_CLASS_NAME\n */\nexport const MERMAID_FIGURE_LOADED_CLASS_NAME = \"scribdown-mermaid--loaded\";\n\n/**\n * Mermaid 全屏按钮类名(位于 figure 右下角)。\n */\nexport const MERMAID_FULLSCREEN_BUTTON_CLASS_NAME = \"scribdown-mermaid__fullscreen\";\n\n// ─── Mermaid 全屏查看器 ───\n\n/**\n * Mermaid 全屏查看器 dialog 类名。\n */\nexport const MERMAID_VIEWER_DIALOG_CLASS_NAME = \"scribdown-mermaid-viewer\";\n\n/**\n * Mermaid 全屏查看器缩放进行中状态类名。\n */\nexport const MERMAID_VIEWER_ZOOMED_CLASS_NAME = \"scribdown-mermaid-viewer--zoomed\";\n\n/**\n * Mermaid 全屏查看器拖拽中状态类名。\n */\nexport const MERMAID_VIEWER_DRAGGING_CLASS_NAME = \"scribdown-mermaid-viewer--dragging\";\n\n/**\n * Mermaid 全屏查看器顶部 chrome 类名。\n */\nexport const MERMAID_VIEWER_CHROME_CLASS_NAME = \"scribdown-mermaid-viewer__chrome\";\n\n/**\n * Mermaid 全屏查看器 caption 类名。\n */\nexport const MERMAID_VIEWER_CAPTION_CLASS_NAME = \"scribdown-mermaid-viewer__caption\";\n\n/**\n * Mermaid 全屏查看器控件容器类名。\n */\nexport const MERMAID_VIEWER_CONTROLS_CLASS_NAME = \"scribdown-mermaid-viewer__controls\";\n\n/**\n * Mermaid 全屏查看器按钮类名。\n */\nexport const MERMAID_VIEWER_BUTTON_CLASS_NAME = \"scribdown-mermaid-viewer__button\";\n\n/**\n * Mermaid 全屏查看器关闭按钮修饰类名。\n */\nexport const MERMAID_VIEWER_CLOSE_BUTTON_CLASS_NAME = \"scribdown-mermaid-viewer__button--close\";\n\n/**\n * Mermaid 全屏查看器视口类名。\n */\nexport const MERMAID_VIEWER_VIEWPORT_CLASS_NAME = \"scribdown-mermaid-viewer__viewport\";\n\n/**\n * Mermaid 全屏查看器画布类名。\n */\nexport const MERMAID_VIEWER_CANVAS_CLASS_NAME = \"scribdown-mermaid-viewer__canvas\";\n\n/**\n * Mermaid 全屏查看器缩放百分比文本类名。\n */\nexport const MERMAID_VIEWER_ZOOM_VALUE_CLASS_NAME = \"scribdown-mermaid-viewer__zoom-value\";\n","/**\n * 平台类型枚举。\n */\nexport enum PlatformType {\n BrowserExtension = \"browser-extension\",\n VscodeExtension = \"vscode-extension\"\n}\n\n/**\n * 默认主题类型枚举。\n */\nexport enum ThemeType {\n Paper = \"paper\",\n Sketch = \"sketch\"\n}\n","import { PlatformType, ThemeType } from \"./enums\";\n\n/**\n * 当前项目展示名称。\n */\nexport const PROJECT_NAME = \"Scribdown\";\n\n/**\n * 当前项目主页地址(部署在 GitHub Pages 的项目站点,带 /scribdown/ 子路径)。\n */\nexport const PROJECT_HOMEPAGE_URL = \"https://share-man-man.github.io/scribdown/\";\n\n/**\n * 当前项目固定 Node.js LTS 版本。\n */\nexport const NODE_LTS_VERSION = \"24.15.0\";\n\n/**\n * 当前项目支持的平台列表。\n */\nexport const SUPPORTED_PLATFORMS: PlatformType[] = [\n PlatformType.BrowserExtension,\n PlatformType.VscodeExtension\n];\n\n/**\n * 当前项目默认主题。\n */\nexport const DEFAULT_THEME = ThemeType.Paper;\n\n/**\n * VS Code 预览命令 ID。\n */\nexport const OPEN_PREVIEW_COMMAND = \"scribdown.openPreview\";\n\n/**\n * Markdown 语言 ID。\n */\nexport const MARKDOWN_LANGUAGE_ID = \"markdown\";\n\n/**\n * Markdown 文件扩展名。\n * 用于兜底识别被宿主注册为其他语言 ID 的 Markdown 文件(如 VS Code 内置\n * prompt-basics 扩展把 SKILL.md 注册为 skill 语言)。\n */\nexport const MARKDOWN_FILE_EXTNAME = \".md\";\n\n/**\n * Scribdown 页面根容器 class。\n */\nexport const SCRIBDOWN_PAGE_CLASS_NAME = \"scribdown-page\";\n\n/**\n * Scribdown 应用布局容器 class。\n */\nexport const SCRIBDOWN_APP_CLASS_NAME = \"scribdown-app\";\n\n/**\n * Scribdown Markdown 渲染容器 class。\n */\nexport const SCRIBDOWN_MARKDOWN_CLASS_NAME = \"scribdown-markdown\";\n\n/**\n * 块级元素源码起始行号的 data 属性名,用于编辑器与预览的双向滚动对齐。\n */\nexport const SOURCE_LINE_DATA_ATTRIBUTE = \"data-source-line\";\n\n/**\n * 编辑器光标所在源码行对应预览块的高亮 class。\n */\nexport const SOURCE_LINE_ACTIVE_CLASS_NAME = \"scribdown-source-line-active\";\n\n/**\n * 高亮块位于预览视口外时,提示其方向的边缘弧形闪烁 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_CLASS_NAME = \"scribdown-source-line-offscreen-hint\";\n\n/**\n * 边缘提示位于视口顶部(高亮块在视口上方)的修饰 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_TOP_CLASS_NAME =\n \"scribdown-source-line-offscreen-hint--top\";\n\n/**\n * 边缘提示位于视口底部(高亮块在视口下方)的修饰 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_BOTTOM_CLASS_NAME =\n \"scribdown-source-line-offscreen-hint--bottom\";\n\n/**\n * 浮动工具栏容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_CLASS_NAME = \"scribdown-toolbar\";\n\n/**\n * 工具栏单个按钮 class。\n */\nexport const SCRIBDOWN_TOOLBAR_BTN_CLASS_NAME = \"scribdown-toolbar-btn\";\n\n/**\n * 工具栏目录面板 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_CLASS_NAME =\n \"scribdown-toolbar-toc-panel\";\n\n/**\n * 工具栏「当前章节指示器」class:位于目录按钮左侧,随滚动展示当前可视区所属标题。\n */\nexport const SCRIBDOWN_TOOLBAR_CURRENT_CLASS_NAME = \"scribdown-toolbar-current\";\n\n/**\n * 工具栏挂载时附加到 container 上的 class,把 container 标记为 TOC + 正文的 flex 容器。\n */\nexport const SCRIBDOWN_TOC_HOST_CLASS_NAME = \"scribdown-toc-host\";\n\n/**\n * 工具栏挂载时用于包裹 container 已有内容的 wrapper class,作为 flex 流中的正文 item,与 TOC 横向并列。\n * 自身 flex:1 填满 TOC 之外的剩余宽度,并作为内部滚动层的定位上下文(position:relative)。\n */\nexport const SCRIBDOWN_CONTENT_AREA_CLASS_NAME = \"scribdown-content-area\";\n\n/**\n * 正文内部滚动层 class:位于 .scribdown-content-area 内,position:absolute + inset:0 铺满父级,\n * 由它统一承载正文的横向与纵向滚动(外层 page / content-area 均不滚动)。\n */\nexport const SCRIBDOWN_CONTENT_SCROLL_CLASS_NAME = \"scribdown-content-scroll\";\n\n/**\n * 通用「细 + 主题色」滚动条 class:各滚动容器(目录侧栏、正文滚动层等)显式 opt-in 引入,\n * 统一标准 scrollbar-* 与 ::-webkit-scrollbar 兜底配色,避免在多个容器选择器上重复罗列。\n */\nexport const SCRIBDOWN_THIN_SCROLLBAR_CLASS_NAME = \"scribdown-scrollbar-thin\";\n\n/**\n * 工具栏「更多」下拉菜单容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_CLASS_NAME = \"scribdown-toolbar-menu\";\n\n/**\n * 工具栏「更多」下拉菜单单个菜单项 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_ITEM_CLASS_NAME =\n \"scribdown-toolbar-menu-item\";\n\n/**\n * 工具栏「更多」下拉菜单内子项分组容器 class(例:宽度选择下拉)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_GROUP_CLASS_NAME =\n \"scribdown-toolbar-menu-group\";\n\n/**\n * 工具栏「更多」下拉菜单内子项 class(例:宽度具体档位)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item\";\n\n/**\n * 工具栏菜单子项左侧勾选占位 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_MARK_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item-mark\";\n\n/**\n * 工具栏菜单子项文字标签 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_LABEL_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item-label\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的文字标签 class(例:页面宽度)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_LABEL_CLASS_NAME =\n \"scribdown-toolbar-menu-select-label\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的当前值展示 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_VALUE_CLASS_NAME =\n \"scribdown-toolbar-menu-select-value\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的 chevron 箭头 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_CHEVRON_CLASS_NAME =\n \"scribdown-toolbar-menu-select-chevron\";\n\n/**\n * 工具栏菜单分组内可折叠的档位列表容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_GROUP_CHOICES_CLASS_NAME =\n \"scribdown-toolbar-menu-group-choices\";\n\n/**\n * 工具栏目录侧栏顶部标题行 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_TITLE_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-title\";\n\n/**\n * 工具栏目录侧栏右上角关闭按钮 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_CLOSE_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-close\";\n\n/**\n * 工具栏目录侧栏「暂无标题」空态 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_EMPTY_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-empty\";\n\n/**\n * 工具栏当前章节指示器的可见文本 class。\n */\nexport const SCRIBDOWN_TOOLBAR_CURRENT_TEXT_CLASS_NAME =\n \"scribdown-toolbar-current-text\";\n\n/**\n * localStorage 中保存页面内容宽度的 key。\n */\nexport const CONTENT_WIDTH_STORAGE_KEY = \"scribdown-content-width\";\n"],"mappings":"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","names":["PlatformType","ThemeType"]}
|
|
1
|
+
{"version":3,"sources":["../src/class-names.ts","../src/enums.ts","../src/constants.ts","../src/i18n/locales.ts","../src/i18n/messages.ts","../src/i18n/translator.ts"],"sourcesContent":["/**\n * Scribdown Markdown 渲染 DOM 的 class 契约。\n * 由 @scribdown/markdown-renderer 写入 DOM,@scribdown/ui-handdrawn 的样式与各宿主按名引用,\n * 统一收敛在此,禁止在其他包重新定义或硬编码。\n */\n\n// ─── 手绘边框 / 内容折叠块 ───\n\n/**\n * 手绘卡片边框类名:可复用的「边框」基底,由内容折叠块、目录根等显式 opt-in 引入。\n */\nexport const FRAME_CLASS_NAME = \"scribdown-frame\";\n\n/**\n * 内容折叠块类名:用户手写的原生 <details>(区别于目录用 <details>)在渲染时打上此标。\n */\nexport const DETAILS_CLASS_NAME = \"scribdown-details\";\n\n// ─── Frontmatter 元数据卡片 ───\n\n/**\n * Frontmatter 元数据卡片容器类名(文档头部 YAML 键值对展示)。\n */\nexport const FRONTMATTER_CLASS_NAME = \"scribdown-frontmatter\";\n\n/**\n * Frontmatter 顶部 chrome 容器类名(仅承载「元数据」标签)。\n */\nexport const FRONTMATTER_CHROME_CLASS_NAME = \"scribdown-frontmatter__chrome\";\n\n/**\n * Frontmatter 标签类名。\n */\nexport const FRONTMATTER_LABEL_CLASS_NAME = \"scribdown-frontmatter__label\";\n\n/**\n * Frontmatter 键值列表类名。\n */\nexport const FRONTMATTER_LIST_CLASS_NAME = \"scribdown-frontmatter__list\";\n\n/**\n * Frontmatter 嵌套键值列表类名(对象类型的值向下展开一层)。\n */\nexport const FRONTMATTER_LIST_NESTED_CLASS_NAME = \"scribdown-frontmatter__list--nested\";\n\n// ─── 目录(TOC)与标题 ───\n\n/**\n * 目录容器类名。\n */\nexport const TOC_CLASS_NAME = \"scribdown-toc\";\n\n/**\n * 目录摘要按钮类名。\n */\nexport const TOC_SUMMARY_CLASS_NAME = \"scribdown-toc-summary\";\n\n/**\n * 目录导航区域类名。\n */\nexport const TOC_NAV_CLASS_NAME = \"scribdown-toc-nav\";\n\n/**\n * 目录列表类名。\n */\nexport const TOC_LIST_CLASS_NAME = \"scribdown-toc-list\";\n\n/**\n * 目录嵌套列表类名。\n */\nexport const TOC_LIST_NESTED_CLASS_NAME = \"scribdown-toc-list--nested\";\n\n/**\n * 目录条目类名前缀。\n */\nexport const TOC_ITEM_CLASS_PREFIX = \"scribdown-toc-item\";\n\n/**\n * 目录分支条目类名(拥有可折叠子层级)。\n */\nexport const TOC_ITEM_BRANCH_CLASS_NAME = \"scribdown-toc-item--branch\";\n\n/**\n * 目录分支条目折叠态类名(运行时由折叠按钮切换,控制隐藏嵌套列表与箭头朝向)。\n */\nexport const TOC_ITEM_COLLAPSED_CLASS_NAME = \"scribdown-toc-item--collapsed\";\n\n/**\n * 目录条目标题跳转链接类名:叶子与分支共用同一种 <a href=\"#id\"> 元素与跳转逻辑。\n */\nexport const TOC_LINK_CLASS_NAME = \"scribdown-toc-link\";\n\n/**\n * 目录标题链接「当前章节」高亮类名:scrollspy 命中当前可视区标题时切换,与工具栏当前指示器同步。\n */\nexport const TOC_LINK_ACTIVE_CLASS_NAME = \"scribdown-toc-link--active\";\n\n/**\n * 目录分支折叠按钮类名(与标题链接分离,专职展开/折叠,避免与跳转冲突)。\n */\nexport const TOC_TOGGLE_CLASS_NAME = \"scribdown-toc-toggle\";\n\n/**\n * 标题文本包裹层类名:用于按行绘制手绘高亮,确保多行标题每行都有底色。\n */\nexport const HEADING_MARK_CLASS_NAME = \"scribdown-heading-mark\";\n\n// ─── 图片 figure ───\n\n/**\n * 图片 figure 容器类名。\n */\nexport const IMAGE_FIGURE_CLASS_NAME = \"scribdown-image-figure\";\n\n/**\n * 图片边框容器类名。\n */\nexport const IMAGE_FRAME_CLASS_NAME = \"scribdown-image-frame\";\n\n/**\n * 图片元素类名。\n */\nexport const IMAGE_ELEMENT_CLASS_NAME = \"scribdown-image\";\n\n/**\n * 图片标题类名。\n */\nexport const IMAGE_CAPTION_CLASS_NAME = \"scribdown-image-caption\";\n\n/**\n * 图片加载失败状态类名。\n */\nexport const IMAGE_FRAME_FAILED_CLASS_NAME = \"scribdown-image-frame--failed\";\n\n/**\n * 图片加载完成状态类名。\n */\nexport const IMAGE_FRAME_LOADED_CLASS_NAME = \"scribdown-image-frame--loaded\";\n\n/**\n * 图片失败态占位内容类名。\n */\nexport const IMAGE_FALLBACK_CLASS_NAME = \"scribdown-image-fallback\";\n\n/**\n * 图片失败态图标类名。\n */\nexport const IMAGE_FALLBACK_ICON_CLASS_NAME = \"scribdown-image-fallback-icon\";\n\n/**\n * 图片失败态标题类名。\n */\nexport const IMAGE_FALLBACK_TEXT_CLASS_NAME = \"scribdown-image-fallback-text\";\n\n/**\n * 图片失败态来源类名。\n */\nexport const IMAGE_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-image-fallback-source\";\n\n// ─── 视频 figure ───\n\n/**\n * 视频 figure 容器类名。\n */\nexport const VIDEO_FIGURE_CLASS_NAME = \"scribdown-video-figure\";\n\n/**\n * 视频边框容器类名。\n */\nexport const VIDEO_FRAME_CLASS_NAME = \"scribdown-video-frame\";\n\n/**\n * 视频元素类名。\n */\nexport const VIDEO_ELEMENT_CLASS_NAME = \"scribdown-video\";\n\n/**\n * 视频加载失败状态类名。\n */\nexport const VIDEO_FRAME_FAILED_CLASS_NAME = \"scribdown-video-frame--failed\";\n\n/**\n * 视频加载完成状态类名。\n */\nexport const VIDEO_FRAME_LOADED_CLASS_NAME = \"scribdown-video-frame--loaded\";\n\n/**\n * 视频失败态占位内容类名。\n */\nexport const VIDEO_FALLBACK_CLASS_NAME = \"scribdown-video-fallback\";\n\n/**\n * 视频失败态图标类名。\n */\nexport const VIDEO_FALLBACK_ICON_CLASS_NAME = \"scribdown-video-fallback-icon\";\n\n/**\n * 视频失败态标题类名。\n */\nexport const VIDEO_FALLBACK_TEXT_CLASS_NAME = \"scribdown-video-fallback-text\";\n\n/**\n * 视频失败态来源类名。\n */\nexport const VIDEO_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-video-fallback-source\";\n\n// ─── 图片全图查看器 ───\n\n/**\n * 图片查看器 dialog 类名。\n */\nexport const IMAGE_VIEWER_DIALOG_CLASS_NAME = \"scribdown-image-viewer\";\n\n/**\n * 图片查看器缩放状态类名。\n */\nexport const IMAGE_VIEWER_ZOOMED_CLASS_NAME = \"scribdown-image-viewer--zoomed\";\n\n/**\n * 图片查看器拖拽状态类名。\n */\nexport const IMAGE_VIEWER_DRAGGING_CLASS_NAME = \"scribdown-image-viewer--dragging\";\n\n/**\n * 图片查看器标题区域类名(包裹 caption + hint)。\n */\nexport const IMAGE_VIEWER_CAPTION_GROUP_CLASS_NAME = \"scribdown-image-viewer__caption-group\";\n\n/**\n * 图片查看器快捷键提示类名。\n */\nexport const IMAGE_VIEWER_HINT_CLASS_NAME = \"scribdown-image-viewer__hint\";\n\n/**\n * 图片查看器顶部区域类名。\n */\nexport const IMAGE_VIEWER_CHROME_CLASS_NAME = \"scribdown-image-viewer__chrome\";\n\n/**\n * 图片查看器按钮区域类名。\n */\nexport const IMAGE_VIEWER_CONTROLS_CLASS_NAME = \"scribdown-image-viewer__controls\";\n\n/**\n * 图片查看器按钮类名。\n */\nexport const IMAGE_VIEWER_BUTTON_CLASS_NAME = \"scribdown-image-viewer__button\";\n\n/**\n * 图片查看器关闭按钮修饰类名。\n */\nexport const IMAGE_VIEWER_CLOSE_BUTTON_CLASS_NAME = \"scribdown-image-viewer__button--close\";\n\n/**\n * 图片查看器视口类名。\n */\nexport const IMAGE_VIEWER_VIEWPORT_CLASS_NAME = \"scribdown-image-viewer__viewport\";\n\n/**\n * 图片查看器图片类名。\n */\nexport const IMAGE_VIEWER_IMAGE_CLASS_NAME = \"scribdown-image-viewer__image\";\n\n/**\n * 图片查看器说明文字类名。\n */\nexport const IMAGE_VIEWER_CAPTION_CLASS_NAME = \"scribdown-image-viewer__caption\";\n\n/**\n * 图片查看器缩放数值类名。\n */\nexport const IMAGE_VIEWER_ZOOM_VALUE_CLASS_NAME = \"scribdown-image-viewer__zoom-value\";\n\n// ─── 代码块 chrome ───\n\n/**\n * 代码块外层 figure 类名。\n */\nexport const CODE_BLOCK_CLASS_NAME = \"scribdown-code-block\";\n\n/**\n * 代码块顶部 chrome 区域类名。\n */\nexport const CODE_BLOCK_CHROME_CLASS_NAME = \"scribdown-code-block__chrome\";\n\n/**\n * 代码块正文区域类名。\n */\nexport const CODE_BLOCK_BODY_CLASS_NAME = \"scribdown-code-block__body\";\n\n/**\n * 代码块语言标签类名。\n */\nexport const CODE_BLOCK_LANG_CLASS_NAME = \"scribdown-code-block__lang\";\n\n/**\n * 代码块复制按钮类名。\n */\nexport const CODE_BLOCK_COPY_CLASS_NAME = \"scribdown-code-block__copy\";\n\n/**\n * 代码块复制按钮图标类名。\n */\nexport const CODE_BLOCK_COPY_ICON_CLASS_NAME = \"scribdown-code-block__copy-icon\";\n\n/**\n * 代码块复制按钮\"复制\"态图标类名(默认显示)。\n */\nexport const CODE_BLOCK_COPY_ICON_COPY_CLASS_NAME = \"scribdown-code-block__copy-icon--copy\";\n\n/**\n * 代码块复制按钮\"已复制\"态图标类名(复制成功后显示)。\n */\nexport const CODE_BLOCK_COPY_ICON_CHECK_CLASS_NAME = \"scribdown-code-block__copy-icon--check\";\n\n/**\n * 代码块代码行类名。\n */\nexport const CODE_BLOCK_LINE_CLASS_NAME = \"scribdown-code-block__line\";\n\n/**\n * 代码块行号固定列类名。\n */\nexport const CODE_BLOCK_GUTTER_CLASS_NAME = \"scribdown-code-block__gutter\";\n\n/**\n * 代码块行号固定列中的单行节点类名。\n */\nexport const CODE_BLOCK_GUTTER_LINE_CLASS_NAME = \"scribdown-code-block__gutter-line\";\n\n// ─── Mermaid 图表 ───\n\n/**\n * Mermaid 图表外层 figure 容器类名。\n */\nexport const MERMAID_FIGURE_CLASS_NAME = \"scribdown-mermaid\";\n\n/**\n * Mermaid 图表顶部 chrome 容器类名。\n */\nexport const MERMAID_CHROME_CLASS_NAME = \"scribdown-mermaid__chrome\";\n\n/**\n * Mermaid 图表语言标签类名。\n */\nexport const MERMAID_LABEL_CLASS_NAME = \"scribdown-mermaid__label\";\n\n/**\n * Mermaid 图表正文容器类名。\n */\nexport const MERMAID_BODY_CLASS_NAME = \"scribdown-mermaid__body\";\n\n/**\n * Mermaid 图表 SVG 画布容器类名。\n */\nexport const MERMAID_CANVAS_CLASS_NAME = \"scribdown-mermaid__canvas\";\n\n/**\n * Mermaid 图表失败态容器类名。\n */\nexport const MERMAID_FALLBACK_CLASS_NAME = \"scribdown-mermaid__fallback\";\n\n/**\n * Mermaid 失败态图标类名。\n */\nexport const MERMAID_FALLBACK_ICON_CLASS_NAME = \"scribdown-mermaid__fallback-icon\";\n\n/**\n * Mermaid 失败态文案类名。\n */\nexport const MERMAID_FALLBACK_TEXT_CLASS_NAME = \"scribdown-mermaid__fallback-text\";\n\n/**\n * Mermaid 失败态源码块类名。\n */\nexport const MERMAID_FALLBACK_SOURCE_CLASS_NAME = \"scribdown-mermaid__fallback-source\";\n\n/**\n * Mermaid 加载/失败/完成态修饰类名。\n */\nexport const MERMAID_FIGURE_LOADING_CLASS_NAME = \"scribdown-mermaid--loading\";\n\n/**\n * MERMAID_FIGURE_FAILED_CLASS_NAME\n */\nexport const MERMAID_FIGURE_FAILED_CLASS_NAME = \"scribdown-mermaid--failed\";\n\n/**\n * MERMAID_FIGURE_LOADED_CLASS_NAME\n */\nexport const MERMAID_FIGURE_LOADED_CLASS_NAME = \"scribdown-mermaid--loaded\";\n\n/**\n * Mermaid 全屏按钮类名(位于 figure 右下角)。\n */\nexport const MERMAID_FULLSCREEN_BUTTON_CLASS_NAME = \"scribdown-mermaid__fullscreen\";\n\n// ─── Mermaid 全屏查看器 ───\n\n/**\n * Mermaid 全屏查看器 dialog 类名。\n */\nexport const MERMAID_VIEWER_DIALOG_CLASS_NAME = \"scribdown-mermaid-viewer\";\n\n/**\n * Mermaid 全屏查看器缩放进行中状态类名。\n */\nexport const MERMAID_VIEWER_ZOOMED_CLASS_NAME = \"scribdown-mermaid-viewer--zoomed\";\n\n/**\n * Mermaid 全屏查看器拖拽中状态类名。\n */\nexport const MERMAID_VIEWER_DRAGGING_CLASS_NAME = \"scribdown-mermaid-viewer--dragging\";\n\n/**\n * Mermaid 全屏查看器顶部 chrome 类名。\n */\nexport const MERMAID_VIEWER_CHROME_CLASS_NAME = \"scribdown-mermaid-viewer__chrome\";\n\n/**\n * Mermaid 全屏查看器 caption 类名。\n */\nexport const MERMAID_VIEWER_CAPTION_CLASS_NAME = \"scribdown-mermaid-viewer__caption\";\n\n/**\n * Mermaid 全屏查看器控件容器类名。\n */\nexport const MERMAID_VIEWER_CONTROLS_CLASS_NAME = \"scribdown-mermaid-viewer__controls\";\n\n/**\n * Mermaid 全屏查看器按钮类名。\n */\nexport const MERMAID_VIEWER_BUTTON_CLASS_NAME = \"scribdown-mermaid-viewer__button\";\n\n/**\n * Mermaid 全屏查看器关闭按钮修饰类名。\n */\nexport const MERMAID_VIEWER_CLOSE_BUTTON_CLASS_NAME = \"scribdown-mermaid-viewer__button--close\";\n\n/**\n * Mermaid 全屏查看器视口类名。\n */\nexport const MERMAID_VIEWER_VIEWPORT_CLASS_NAME = \"scribdown-mermaid-viewer__viewport\";\n\n/**\n * Mermaid 全屏查看器画布类名。\n */\nexport const MERMAID_VIEWER_CANVAS_CLASS_NAME = \"scribdown-mermaid-viewer__canvas\";\n\n/**\n * Mermaid 全屏查看器缩放百分比文本类名。\n */\nexport const MERMAID_VIEWER_ZOOM_VALUE_CLASS_NAME = \"scribdown-mermaid-viewer__zoom-value\";\n","/**\n * 平台类型枚举。\n */\nexport enum PlatformType {\n BrowserExtension = \"browser-extension\",\n VscodeExtension = \"vscode-extension\"\n}\n\n/**\n * 默认主题类型枚举。\n */\nexport enum ThemeType {\n Paper = \"paper\",\n Sketch = \"sketch\"\n}\n","import { PlatformType, ThemeType } from \"./enums\";\n\n/**\n * 当前项目展示名称。\n */\nexport const PROJECT_NAME = \"Scribdown\";\n\n/**\n * 当前项目主页地址(部署在 GitHub Pages 的项目站点,带 /scribdown/ 子路径)。\n */\nexport const PROJECT_HOMEPAGE_URL = \"https://share-man-man.github.io/scribdown/\";\n\n/**\n * 当前项目固定 Node.js LTS 版本。\n */\nexport const NODE_LTS_VERSION = \"24.15.0\";\n\n/**\n * 当前项目支持的平台列表。\n */\nexport const SUPPORTED_PLATFORMS: PlatformType[] = [\n PlatformType.BrowserExtension,\n PlatformType.VscodeExtension\n];\n\n/**\n * 当前项目默认主题。\n */\nexport const DEFAULT_THEME = ThemeType.Paper;\n\n/**\n * VS Code 预览命令 ID。\n */\nexport const OPEN_PREVIEW_COMMAND = \"scribdown.openPreview\";\n\n/**\n * Markdown 语言 ID。\n */\nexport const MARKDOWN_LANGUAGE_ID = \"markdown\";\n\n/**\n * Markdown 文件扩展名。\n * 用于兜底识别被宿主注册为其他语言 ID 的 Markdown 文件(如 VS Code 内置\n * prompt-basics 扩展把 SKILL.md 注册为 skill 语言)。\n */\nexport const MARKDOWN_FILE_EXTNAME = \".md\";\n\n/**\n * Scribdown 页面根容器 class。\n */\nexport const SCRIBDOWN_PAGE_CLASS_NAME = \"scribdown-page\";\n\n/**\n * Scribdown 应用布局容器 class。\n */\nexport const SCRIBDOWN_APP_CLASS_NAME = \"scribdown-app\";\n\n/**\n * Scribdown Markdown 渲染容器 class。\n */\nexport const SCRIBDOWN_MARKDOWN_CLASS_NAME = \"scribdown-markdown\";\n\n/**\n * 块级元素源码起始行号的 data 属性名,用于编辑器与预览的双向滚动对齐。\n */\nexport const SOURCE_LINE_DATA_ATTRIBUTE = \"data-source-line\";\n\n/**\n * 编辑器光标所在源码行对应预览块的高亮 class。\n */\nexport const SOURCE_LINE_ACTIVE_CLASS_NAME = \"scribdown-source-line-active\";\n\n/**\n * 高亮块位于预览视口外时,提示其方向的边缘弧形闪烁 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_CLASS_NAME = \"scribdown-source-line-offscreen-hint\";\n\n/**\n * 边缘提示位于视口顶部(高亮块在视口上方)的修饰 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_TOP_CLASS_NAME =\n \"scribdown-source-line-offscreen-hint--top\";\n\n/**\n * 边缘提示位于视口底部(高亮块在视口下方)的修饰 class。\n */\nexport const SOURCE_LINE_OFFSCREEN_HINT_BOTTOM_CLASS_NAME =\n \"scribdown-source-line-offscreen-hint--bottom\";\n\n/**\n * 浮动工具栏容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_CLASS_NAME = \"scribdown-toolbar\";\n\n/**\n * 工具栏单个按钮 class。\n */\nexport const SCRIBDOWN_TOOLBAR_BTN_CLASS_NAME = \"scribdown-toolbar-btn\";\n\n/**\n * 工具栏目录面板 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_CLASS_NAME =\n \"scribdown-toolbar-toc-panel\";\n\n/**\n * 工具栏「当前章节指示器」class:位于目录按钮左侧,随滚动展示当前可视区所属标题。\n */\nexport const SCRIBDOWN_TOOLBAR_CURRENT_CLASS_NAME = \"scribdown-toolbar-current\";\n\n/**\n * 工具栏挂载时附加到 container 上的 class,把 container 标记为 TOC + 正文的 flex 容器。\n */\nexport const SCRIBDOWN_TOC_HOST_CLASS_NAME = \"scribdown-toc-host\";\n\n/**\n * 工具栏挂载时用于包裹 container 已有内容的 wrapper class,作为 flex 流中的正文 item,与 TOC 横向并列。\n * 自身 flex:1 填满 TOC 之外的剩余宽度,并作为内部滚动层的定位上下文(position:relative)。\n */\nexport const SCRIBDOWN_CONTENT_AREA_CLASS_NAME = \"scribdown-content-area\";\n\n/**\n * 正文内部滚动层 class:位于 .scribdown-content-area 内,position:absolute + inset:0 铺满父级,\n * 由它统一承载正文的横向与纵向滚动(外层 page / content-area 均不滚动)。\n */\nexport const SCRIBDOWN_CONTENT_SCROLL_CLASS_NAME = \"scribdown-content-scroll\";\n\n/**\n * 通用「细 + 主题色」滚动条 class:各滚动容器(目录侧栏、正文滚动层等)显式 opt-in 引入,\n * 统一标准 scrollbar-* 与 ::-webkit-scrollbar 兜底配色,避免在多个容器选择器上重复罗列。\n */\nexport const SCRIBDOWN_THIN_SCROLLBAR_CLASS_NAME = \"scribdown-scrollbar-thin\";\n\n/**\n * 工具栏「更多」下拉菜单容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_CLASS_NAME = \"scribdown-toolbar-menu\";\n\n/**\n * 工具栏「更多」下拉菜单单个菜单项 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_ITEM_CLASS_NAME =\n \"scribdown-toolbar-menu-item\";\n\n/**\n * 工具栏「更多」下拉菜单内子项分组容器 class(例:宽度选择下拉)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_GROUP_CLASS_NAME =\n \"scribdown-toolbar-menu-group\";\n\n/**\n * 工具栏「更多」下拉菜单内子项 class(例:宽度具体档位)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item\";\n\n/**\n * 工具栏菜单子项左侧勾选占位 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_MARK_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item-mark\";\n\n/**\n * 工具栏菜单子项文字标签 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SUB_ITEM_LABEL_CLASS_NAME =\n \"scribdown-toolbar-menu-sub-item-label\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的文字标签 class(例:页面宽度)。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_LABEL_CLASS_NAME =\n \"scribdown-toolbar-menu-select-label\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的当前值展示 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_VALUE_CLASS_NAME =\n \"scribdown-toolbar-menu-select-value\";\n\n/**\n * 工具栏菜单「下拉选择」触发行的 chevron 箭头 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_SELECT_CHEVRON_CLASS_NAME =\n \"scribdown-toolbar-menu-select-chevron\";\n\n/**\n * 工具栏菜单分组内可折叠的档位列表容器 class。\n */\nexport const SCRIBDOWN_TOOLBAR_MENU_GROUP_CHOICES_CLASS_NAME =\n \"scribdown-toolbar-menu-group-choices\";\n\n/**\n * 工具栏目录侧栏顶部标题行 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_TITLE_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-title\";\n\n/**\n * 工具栏目录侧栏右上角关闭按钮 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_CLOSE_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-close\";\n\n/**\n * 工具栏目录侧栏「暂无标题」空态 class。\n */\nexport const SCRIBDOWN_TOOLBAR_TOC_PANEL_EMPTY_CLASS_NAME =\n \"scribdown-toolbar-toc-panel-empty\";\n\n/**\n * 工具栏当前章节指示器的可见文本 class。\n */\nexport const SCRIBDOWN_TOOLBAR_CURRENT_TEXT_CLASS_NAME =\n \"scribdown-toolbar-current-text\";\n\n/**\n * localStorage 中保存页面内容宽度的 key。\n */\nexport const CONTENT_WIDTH_STORAGE_KEY = \"scribdown-content-width\";\n","/**\n * Scribdown 国际化「语言」契约。\n * 统一收敛支持的 locale、默认兜底、回落链,以及各宿主静态文件(Chrome _locales、\n * VS Code package.nls)的目录/后缀命名映射,禁止在其他包重新定义或硬编码。\n */\n\n/**\n * 支持的界面语言枚举(BCP-47 规范写法)。\n * 新增语言时在此追加,并在 {@link SUPPORTED_LOCALES}、{@link LOCALE_FALLBACKS}、\n * messages 目录三处补齐即可,无需改动接线逻辑。\n */\nexport enum LocaleType {\n /** 英语(默认兜底语言)。 */\n English = \"en\",\n /** 简体中文。 */\n SimplifiedChinese = \"zh-CN\"\n}\n\n/**\n * 默认兜底语言:无法识别宿主语言、或某语言缺失文案时最终回落到此。\n */\nexport const DEFAULT_LOCALE: LocaleType = LocaleType.English;\n\n/**\n * 当前支持的全部语言列表(用于校验入参、遍历生成静态文件)。\n */\nexport const SUPPORTED_LOCALES: LocaleType[] = [LocaleType.English, LocaleType.SimplifiedChinese];\n\n/**\n * 各语言的回落链:命中语言缺失某 key 时,按顺序回落到链上语言,最终止于 {@link DEFAULT_LOCALE}。\n * 默认语言自身链为空。\n */\nexport const LOCALE_FALLBACKS: Record<LocaleType, LocaleType[]> = {\n [LocaleType.English]: [],\n [LocaleType.SimplifiedChinese]: [LocaleType.English]\n};\n\n/**\n * 语言 → Chrome 扩展 `_locales/<dir>/messages.json` 目录名映射。\n * Chrome 约定 locale 目录名用下划线(如 `zh_CN`)。\n */\nexport const CHROME_LOCALE_DIRECTORY: Record<LocaleType, string> = {\n [LocaleType.English]: \"en\",\n [LocaleType.SimplifiedChinese]: \"zh_CN\"\n};\n\n/**\n * 语言 → VS Code `package.nls[.<suffix>].json` 文件名后缀映射。\n * VS Code 约定后缀用小写连字符(如 `zh-cn`);默认语言写入无后缀的 `package.nls.json`。\n */\nexport const VSCODE_NLS_SUFFIX: Record<LocaleType, string> = {\n [LocaleType.English]: \"\",\n [LocaleType.SimplifiedChinese]: \"zh-cn\"\n};\n\n/**\n * 把宿主上报的原始语言标签归一化成受支持的 {@link LocaleType}。\n * 逐级降级匹配:先精确命中,再按主语言子标签匹配(如 `zh-Hans-CN` → `zh-CN`),\n * 全不命中回落到 {@link DEFAULT_LOCALE}。\n * @param rawLocale 宿主原始语言标签(如 `navigator.language`、`vscode.env.language`),大小写与分隔符不限。\n * @returns 归一化后的受支持语言。\n */\nexport function normalizeLocale(rawLocale: string | null | undefined): LocaleType {\n if (!rawLocale) {\n return DEFAULT_LOCALE;\n }\n\n /** 统一成小写、连字符分隔的标签,兼容下划线写法(如 `zh_CN`)。 */\n const normalizedTag = rawLocale.toLowerCase().replace(/_/g, \"-\");\n\n // 关键步骤:精确命中受支持语言(大小写无关)。\n const exactMatch = SUPPORTED_LOCALES.find((locale) => locale.toLowerCase() === normalizedTag);\n if (exactMatch) {\n return exactMatch;\n }\n\n /** 原始标签的主语言子标签(如 `zh-hans-cn` → `zh`)。 */\n const primarySubtag = normalizedTag.split(\"-\")[0];\n\n // 关键步骤:按主语言子标签匹配,命中同语族的首个受支持语言(如各种 zh-* → zh-CN)。\n const primaryMatch = SUPPORTED_LOCALES.find(\n (locale) => locale.toLowerCase().split(\"-\")[0] === primarySubtag\n );\n if (primaryMatch) {\n return primaryMatch;\n }\n\n return DEFAULT_LOCALE;\n}\n","/**\n * Scribdown 全量文案目录(唯一源)。\n * 三处运行时(浏览器 popup/viewer、共享工具栏、VS Code 宿主/webview)与两处静态清单\n * (Chrome `_locales`、VS Code `package.nls`)均以此为准,禁止在各端硬编码或重复定义。\n * 插值占位统一用 `{name}` 语法,由 translator 在运行时替换。\n */\n\nimport { LocaleType } from \"./locales\";\nimport type { Messages } from \"./messages.types\";\n\n/**\n * 英语文案(默认兜底语言)。\n */\nconst EN_MESSAGES: Messages = {\n \"toolbar.toc\": \"Contents\",\n \"toolbar.tocClose\": \"Close contents\",\n \"toolbar.tocEmpty\": \"No headings\",\n \"toolbar.more\": \"More\",\n \"toolbar.pageWidth\": \"Page width\",\n \"toolbar.backTop\": \"Back to top\",\n \"toolbar.about\": \"About\",\n\n \"code.copy\": \"Copy code\",\n \"code.copied\": \"Copied\",\n\n \"mermaid.renderFailed\": \"Diagram failed to render\",\n \"mermaid.fullscreenButton\": \"View diagram fullscreen\",\n \"mermaid.fullscreen\": \"View Mermaid diagram fullscreen\",\n \"mermaid.zoomIn\": \"Zoom in diagram\",\n \"mermaid.zoomOut\": \"Zoom out diagram\",\n \"mermaid.zoomReset\": \"Reset zoom\",\n \"mermaid.close\": \"Close fullscreen view\",\n\n \"image.viewFull\": \"View full image\",\n \"image.viewFullOf\": \"View full image: {alt}\",\n \"image.loadFailed\": \"Image failed to load\",\n \"image.hint\":\n \"Shortcuts: +/= zoom in · - zoom out · 0 reset · Esc close · drag to pan · Ctrl/⌘ + wheel to zoom\",\n \"image.zoomIn\": \"Zoom in image\",\n \"image.zoomOut\": \"Zoom out image\",\n \"image.zoomReset\": \"Reset zoom\",\n \"image.close\": \"Close image viewer\",\n\n \"video.loadFailed\": \"Video failed to load\",\n\n \"toc.label\": \"Contents\",\n \"toc.toggle\": \"Expand or collapse subheadings\",\n\n \"frontmatter.label\": \"Metadata\",\n\n \"popup.enableAria\": \"Enable Scribdown\",\n \"popup.enabledTitle\": \"Scribdown enabled\",\n \"popup.disabledTitle\": \"Scribdown disabled\",\n \"popup.disabledEmpty\": \"Disabled. Markdown pages are no longer taken over.\",\n \"popup.fileAccessBannerTitle\": \"⚠️ “Allow access to file URLs” is off\",\n \"popup.fileAccessBannerText\":\n \"Local .md files can’t be taken over or auto-refreshed by Scribdown. Turn the switch on to enable it.\",\n \"popup.fileAccessAction\": \"Turn on\",\n \"popup.fileAccessActionAria\": \"Open the extension details page to allow access to file URLs\",\n \"popup.autoRefreshGroupAria\": \"Local file auto-refresh settings\",\n \"popup.autoRefreshLabel\": \"Auto-refresh local files\",\n \"popup.autoRefreshInfoAria\": \"About local file auto-refresh\",\n \"popup.autoRefreshOnTip\": \"On: re-fetches the local .md file every {seconds}s\",\n \"popup.autoRefreshOffTip\": \"Off: reload the page manually after the local .md changes\",\n \"popup.intervalLabel\": \"Refresh interval\",\n \"popup.intervalInfoAria\": \"Refresh interval range\",\n \"popup.intervalRangeTip\": \"Range {min}–{max} seconds\",\n \"popup.intervalUnit\": \"s\",\n \"popup.savedTip\": \"Saved. Reload the current page to apply.\",\n\n \"browser.disabledTitle\": \"Scribdown (disabled)\",\n \"browser.fileAccessNeededTitle\": \"Scribdown · needs “Allow access to file URLs”\",\n\n \"viewer.errorHeading\": \"Scribdown can’t render this file\",\n \"viewer.viewRawLink\": \"View raw source\",\n \"viewer.errorIframe\": \"The Scribdown viewer can’t load inside an iframe.\",\n \"viewer.errorMissingSrc\": \"Missing src parameter.\",\n \"viewer.errorRequestFailed\": \"Request failed: {message}\",\n \"viewer.errorNotMarkdown\": \"Response is not Markdown (Content-Type: {contentType}).\",\n \"viewer.contentTypeUndeclared\": \"undeclared\",\n \"viewer.errorEmpty\": \"The file is empty.\",\n \"viewer.errorUnsupportedProtocol\":\n \"Unsupported protocol ({protocol}); only http / https are allowed.\",\n \"viewer.errorInvalidUrl\": \"The src parameter is not a valid URL.\",\n\n \"vscode.noMarkdownWarning\": \"Open a Markdown document first, then run Scribdown preview.\",\n \"vscode.openLinkFailed\": \"Can’t open link: {href}\",\n \"vscode.linkTargetMissing\": \"Link target not found: {path}\",\n \"vscode.renderFailed\": \"Render failed\",\n\n \"manifest.browserName\": \"Scribdown\",\n \"manifest.browserDescription\": \"Handdrawn markdown rendering experience.\",\n \"manifest.vscodeDisplayName\": \"Scribdown Markdown Preview\",\n \"manifest.vscodeDescription\": \"Handdrawn-style Markdown preview for VS Code.\",\n \"manifest.vscodeCommandTitle\": \"Open Scribdown Preview\"\n};\n\n/**\n * 简体中文文案。\n */\nconst ZH_CN_MESSAGES: Messages = {\n \"toolbar.toc\": \"目录\",\n \"toolbar.tocClose\": \"关闭目录\",\n \"toolbar.tocEmpty\": \"暂无标题\",\n \"toolbar.more\": \"更多\",\n \"toolbar.pageWidth\": \"页面宽度\",\n \"toolbar.backTop\": \"回到顶部\",\n \"toolbar.about\": \"关于\",\n\n \"code.copy\": \"复制代码\",\n \"code.copied\": \"已复制\",\n\n \"mermaid.renderFailed\": \"图表渲染失败\",\n \"mermaid.fullscreenButton\": \"全屏查看图表\",\n \"mermaid.fullscreen\": \"全屏查看 Mermaid 图表\",\n \"mermaid.zoomIn\": \"放大图表\",\n \"mermaid.zoomOut\": \"缩小图表\",\n \"mermaid.zoomReset\": \"重置缩放\",\n \"mermaid.close\": \"关闭全屏查看\",\n\n \"image.viewFull\": \"查看全图\",\n \"image.viewFullOf\": \"查看全图:{alt}\",\n \"image.loadFailed\": \"图片加载失败\",\n \"image.hint\":\n \"快捷键:+/= 放大 · - 缩小 · 0 重置 · Esc 关闭 · 鼠标拖拽可平移 · Ctrl/⌘ + 滚轮缩放\",\n \"image.zoomIn\": \"放大图片\",\n \"image.zoomOut\": \"缩小图片\",\n \"image.zoomReset\": \"重置缩放\",\n \"image.close\": \"关闭全图查看\",\n\n \"video.loadFailed\": \"视频加载失败\",\n\n \"toc.label\": \"目录\",\n \"toc.toggle\": \"展开或折叠子目录\",\n\n \"frontmatter.label\": \"元数据\",\n\n \"popup.enableAria\": \"启用 Scribdown\",\n \"popup.enabledTitle\": \"已启用 Scribdown\",\n \"popup.disabledTitle\": \"已关闭 Scribdown\",\n \"popup.disabledEmpty\": \"已关闭,访问 .md 不再被接管。\",\n \"popup.fileAccessBannerTitle\": \"⚠️ 「允许访问文件网址」未开启\",\n \"popup.fileAccessBannerText\":\n \"本地 .md 文件无法被 Scribdown 接管与自动刷新。打开开关后即可生效。\",\n \"popup.fileAccessAction\": \"去开启\",\n \"popup.fileAccessActionAria\": \"打开扩展详情页以开启允许访问文件网址\",\n \"popup.autoRefreshGroupAria\": \"本地文件自动刷新设置\",\n \"popup.autoRefreshLabel\": \"本地文件自动刷新\",\n \"popup.autoRefreshInfoAria\": \"查看本地文件自动刷新说明\",\n \"popup.autoRefreshOnTip\": \"已开启:每 {seconds} 秒回拉一次本地 .md 文件\",\n \"popup.autoRefreshOffTip\": \"已关闭:本地 .md 更新后需手动刷新页面\",\n \"popup.intervalLabel\": \"刷新间隔\",\n \"popup.intervalInfoAria\": \"查看刷新间隔取值范围\",\n \"popup.intervalRangeTip\": \"取值范围 {min} – {max} 秒\",\n \"popup.intervalUnit\": \"秒\",\n \"popup.savedTip\": \"切换已保存,刷新当前页面后生效。\",\n\n \"browser.disabledTitle\": \"Scribdown(已关闭)\",\n \"browser.fileAccessNeededTitle\": \"Scribdown · 需开启「允许访问文件网址」\",\n\n \"viewer.errorHeading\": \"Scribdown 无法渲染该文件\",\n \"viewer.viewRawLink\": \"查看原始链接\",\n \"viewer.errorIframe\": \"Scribdown viewer 不允许在 iframe 中加载。\",\n \"viewer.errorMissingSrc\": \"缺少 src 参数。\",\n \"viewer.errorRequestFailed\": \"请求失败:{message}\",\n \"viewer.errorNotMarkdown\": \"响应不是 Markdown 类型(Content-Type: {contentType})。\",\n \"viewer.contentTypeUndeclared\": \"未声明\",\n \"viewer.errorEmpty\": \"文件内容为空。\",\n \"viewer.errorUnsupportedProtocol\": \"不支持的协议({protocol}),仅允许 http / https。\",\n \"viewer.errorInvalidUrl\": \"src 参数不是合法的 URL。\",\n\n \"vscode.noMarkdownWarning\": \"请先打开一个 Markdown 文档,再执行 Scribdown 预览。\",\n \"vscode.openLinkFailed\": \"无法打开链接:{href}\",\n \"vscode.linkTargetMissing\": \"链接目标不存在:{path}\",\n \"vscode.renderFailed\": \"渲染失败\",\n\n \"manifest.browserName\": \"Scribdown\",\n \"manifest.browserDescription\": \"手绘风格的 Markdown 渲染体验。\",\n \"manifest.vscodeDisplayName\": \"Scribdown Markdown 预览\",\n \"manifest.vscodeDescription\": \"VS Code 的手绘风格 Markdown 预览。\",\n \"manifest.vscodeCommandTitle\": \"打开 Scribdown 预览\"\n};\n\n/**\n * 语言 → 文案目录的总表。新增语言时在此登记对应目录。\n */\nexport const MESSAGES: Record<LocaleType, Messages> = {\n [LocaleType.English]: EN_MESSAGES,\n [LocaleType.SimplifiedChinese]: ZH_CN_MESSAGES\n};\n","/**\n * Scribdown 无框架文案取值内核。\n * 纯 TS、零第三方依赖,可在浏览器 popup(React)、纯 DOM 工具栏、VS Code webview 与\n * Node 宿主中一致运行。宿主启动时按语言调一次 {@link setActiveLocale},其余代码用 {@link t}\n * 取文案;需要多语言并存时用 {@link createTranslator} 取独立实例。\n */\n\nimport {\n DEFAULT_LOCALE,\n LOCALE_FALLBACKS,\n LocaleType,\n SUPPORTED_LOCALES,\n normalizeLocale\n} from \"./locales\";\nimport { MESSAGES } from \"./messages\";\nimport type { MessageKey } from \"./messages.types\";\n\n/**\n * 插值变量映射:把文案中的 `{name}` 占位替换为对应值。\n */\nexport type MessageVars = Record<string, string | number>;\n\n/**\n * 当前全局生效的界面语言。默认取兜底语言,宿主启动时通过 {@link setActiveLocale} 覆盖。\n */\nlet activeLocale: LocaleType = DEFAULT_LOCALE;\n\n/**\n * 设置全局生效语言。非受支持语言会被静默回落到 {@link DEFAULT_LOCALE},避免脏输入。\n * @param locale 目标语言(应为受支持的 {@link LocaleType})。\n */\nexport function setActiveLocale(locale: LocaleType): void {\n activeLocale = SUPPORTED_LOCALES.includes(locale) ? locale : DEFAULT_LOCALE;\n}\n\n/**\n * 读取当前全局生效语言。\n * @returns 当前语言。\n */\nexport function getActiveLocale(): LocaleType {\n return activeLocale;\n}\n\n/**\n * 便捷方法:把宿主原始语言标签归一化后设为全局语言。\n * @param rawLocale 宿主原始语言标签(如 `navigator.language`、`vscode.env.language`)。\n * @returns 实际生效的语言。\n */\nexport function setActiveLocaleFromHost(rawLocale: string | null | undefined): LocaleType {\n // 关键步骤:归一化脏标签,再落为全局语言。\n const resolvedLocale = normalizeLocale(rawLocale);\n setActiveLocale(resolvedLocale);\n return resolvedLocale;\n}\n\n/**\n * 在指定语言及其回落链上解析某 key 的原始文案。\n * @param locale 起始语言。\n * @param key 文案 key。\n * @returns 命中的原始文案;全链缺失时返回 key 自身(便于暴露漏配)。\n */\nfunction resolveMessage(locale: LocaleType, key: MessageKey): string {\n // 关键步骤:按「命中语言 → 其回落链」顺序查找首个存在的文案。\n const lookupChain: LocaleType[] = [locale, ...LOCALE_FALLBACKS[locale]];\n\n for (const chainLocale of lookupChain) {\n /** 该语言目录下对应 key 的文案,可能不存在。 */\n const candidate = MESSAGES[chainLocale]?.[key];\n if (typeof candidate === \"string\") {\n return candidate;\n }\n }\n\n return key;\n}\n\n/**\n * 用插值变量替换文案中的 `{name}` 占位。未提供的占位原样保留。\n * @param template 含占位的文案模板。\n * @param vars 插值变量映射。\n * @returns 替换后的文案。\n */\nfunction interpolate(template: string, vars?: MessageVars): string {\n if (!vars) {\n return template;\n }\n\n return template.replace(/\\{(\\w+)\\}/g, (placeholder, name: string) => {\n /** 当前占位对应的变量值。 */\n const value = vars[name];\n return value === undefined ? placeholder : String(value);\n });\n}\n\n/**\n * 按当前全局语言取文案。\n * @param key 文案 key。\n * @param vars 可选插值变量。\n * @returns 已解析并插值的文案。\n */\nexport function t(key: MessageKey, vars?: MessageVars): string {\n return interpolate(resolveMessage(activeLocale, key), vars);\n}\n\n/**\n * 翻译函数类型:绑定固定语言的取文案方法。\n */\nexport type Translator = (key: MessageKey, vars?: MessageVars) => string;\n\n/**\n * 创建绑定固定语言的独立翻译器,不受全局语言影响。\n * 适用于多语言并存、或需要显式指定语言的场景(如静态清单生成)。\n * @param locale 目标语言,接受原始标签或 {@link LocaleType},会归一化到受支持语言。\n * @returns 绑定该语言的翻译函数。\n */\nexport function createTranslator(locale: LocaleType | string): Translator {\n /** 归一化后的目标语言。 */\n const resolvedLocale = normalizeLocale(locale);\n return (key, vars) => interpolate(resolveMessage(resolvedLocale, key), vars);\n}\n"],"mappings":"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","names":["PlatformType","ThemeType","LocaleType"]}
|