├── .gitignore ├── Dev ├── Typedown.Core │ ├── Config.cs │ ├── Controls │ │ ├── CaptionControls │ │ │ ├── Caption.xaml │ │ │ └── Caption.xaml.cs │ │ ├── CommonControls │ │ │ ├── AppContentDialog.cs │ │ │ ├── EnumNameBlock.cs │ │ │ ├── GlobalFrame.cs │ │ │ ├── GridSplitter.cs │ │ │ ├── MenuItemCollection.cs │ │ │ ├── PathPickerButton.cs │ │ │ ├── ProgressButton.xaml │ │ │ ├── ProgressButton.xaml.cs │ │ │ ├── ShortcutPicker.xaml │ │ │ ├── ShortcutPicker.xaml.cs │ │ │ ├── ShortcutPickerButton.xaml │ │ │ ├── ShortcutPickerButton.xaml.cs │ │ │ ├── ToolTip.cs │ │ │ ├── UnitNumberBox.xaml │ │ │ └── UnitNumberBox.xaml.cs │ │ ├── DialogControls │ │ │ ├── AddExportConfigDialog.xaml │ │ │ ├── AddExportConfigDialog.xaml.cs │ │ │ ├── AddUploadConfigDialog.xaml │ │ │ ├── AddUploadConfigDialog.xaml.cs │ │ │ ├── FeedbackDialog.xaml │ │ │ ├── FeedbackDialog.xaml.cs │ │ │ ├── InsertTableDialog.xaml │ │ │ ├── InsertTableDialog.xaml.cs │ │ │ ├── WebView2InstallControl.xaml │ │ │ └── WebView2InstallControl.xaml.cs │ │ ├── EditorControls │ │ │ ├── ContextMenuItems │ │ │ │ ├── CodeFencesItem.xaml │ │ │ │ ├── CodeFencesItem.xaml.cs │ │ │ │ ├── FormatItem.xaml │ │ │ │ ├── FormatItem.xaml.cs │ │ │ │ ├── ImageItem.xaml │ │ │ │ └── ImageItem.xaml.cs │ │ │ ├── EditorContainer.xaml │ │ │ ├── EditorContainer.xaml.cs │ │ │ ├── MainContent.xaml │ │ │ ├── MainContent.xaml.cs │ │ │ ├── MenuBar.xaml │ │ │ ├── MenuBar.xaml.cs │ │ │ ├── MenuBarItems │ │ │ │ ├── EditItem.xaml │ │ │ │ ├── EditItem.xaml.cs │ │ │ │ ├── FileItem.xaml │ │ │ │ ├── FileItem.xaml.cs │ │ │ │ ├── FormatItem.xaml │ │ │ │ ├── FormatItem.xaml.cs │ │ │ │ ├── MenuBarItemBase.cs │ │ │ │ ├── ParagraphItem.xaml │ │ │ │ ├── ParagraphItem.xaml.cs │ │ │ │ ├── ViewItem.xaml │ │ │ │ └── ViewItem.xaml.cs │ │ │ ├── StatusBar.xaml │ │ │ └── StatusBar.xaml.cs │ │ ├── FloatControls │ │ │ ├── FindReplace.xaml │ │ │ ├── FindReplace.xaml.cs │ │ │ ├── FrontMenu.xaml │ │ │ ├── FrontMenu.xaml.cs │ │ │ ├── ImageSelector.xaml │ │ │ ├── ImageSelector.xaml.cs │ │ │ ├── ImageToolbar.xaml │ │ │ ├── ImageToolbar.xaml.cs │ │ │ ├── TableTools.xaml │ │ │ ├── TableTools.xaml.cs │ │ │ ├── ToolTip.xaml │ │ │ └── ToolTip.xaml.cs │ │ ├── RootControl.xaml │ │ ├── RootControl.xaml.cs │ │ ├── SettingControls │ │ │ ├── AboutApp.xaml │ │ │ ├── AboutApp.xaml.cs │ │ │ ├── ButtonSettingItem.xaml │ │ │ ├── ButtonSettingItem.xaml.cs │ │ │ ├── ExpanderSettingItem.xaml │ │ │ ├── ExpanderSettingItem.xaml.cs │ │ │ ├── NormalSettingItem.xaml │ │ │ ├── NormalSettingItem.xaml.cs │ │ │ └── SettingItems │ │ │ │ ├── EditorSetting.xaml │ │ │ │ ├── EditorSetting.xaml.cs │ │ │ │ ├── ExportConfigItems │ │ │ │ ├── CommonConfig.xaml │ │ │ │ ├── CommonConfig.xaml.cs │ │ │ │ ├── HTMLConfig.xaml │ │ │ │ ├── HTMLConfig.xaml.cs │ │ │ │ ├── ImageConfig.xaml │ │ │ │ ├── ImageConfig.xaml.cs │ │ │ │ ├── PDFConfig.xaml │ │ │ │ └── PDFConfig.xaml.cs │ │ │ │ ├── ExportSetting.xaml │ │ │ │ ├── ExportSetting.xaml.cs │ │ │ │ ├── GeneralSetting.xaml │ │ │ │ ├── GeneralSetting.xaml.cs │ │ │ │ ├── ImageSetting.xaml │ │ │ │ ├── ImageSetting.xaml.cs │ │ │ │ ├── ImageUploadSetting.xaml │ │ │ │ ├── ImageUploadSetting.xaml.cs │ │ │ │ ├── ShortcutSetting.xaml │ │ │ │ ├── ShortcutSetting.xaml.cs │ │ │ │ ├── UploadConfigItems │ │ │ │ ├── CommonConfig.xaml │ │ │ │ ├── CommonConfig.xaml.cs │ │ │ │ ├── FTPConfig.xaml │ │ │ │ ├── FTPConfig.xaml.cs │ │ │ │ ├── GitConfig.xaml │ │ │ │ ├── GitConfig.xaml.cs │ │ │ │ ├── OSSConfig.xaml │ │ │ │ ├── OSSConfig.xaml.cs │ │ │ │ ├── PowerShellConfig.xaml │ │ │ │ ├── PowerShellConfig.xaml.cs │ │ │ │ ├── SCPConfig.xaml │ │ │ │ └── SCPConfig.xaml.cs │ │ │ │ ├── ViewSetting.xaml │ │ │ │ └── ViewSetting.xaml.cs │ │ └── SidePaneControls │ │ │ ├── LeftPane.xaml │ │ │ ├── LeftPane.xaml.cs │ │ │ ├── Pages │ │ │ ├── FolderPage.xaml │ │ │ ├── FolderPage.xaml.cs │ │ │ ├── Route.cs │ │ │ ├── TocPage.xaml │ │ │ └── TocPage.xaml.cs │ │ │ ├── SearchPane.xaml │ │ │ └── SearchPane.xaml.cs │ ├── Converters │ │ ├── BoolReverseConverter.cs │ │ ├── BoolToObjectConverter.cs │ │ ├── BoolToVisibilityConverter.cs │ │ ├── ElementThemeConverter.cs │ │ ├── EmptyToVisibilityConverter.cs │ │ ├── GridLengthToDoubleConverter.cs │ │ └── ShortcutKeyToStringConverter.cs │ ├── Enums │ │ ├── AppTheme.cs │ │ ├── ExportType.cs │ │ ├── ImageUploadMethod.cs │ │ ├── InsertImageAction.cs │ │ ├── PrintOrientation.cs │ │ └── StartupAction.cs │ ├── FodyWeavers.xml │ ├── FodyWeavers.xsd │ ├── Images │ │ └── logo.ico │ ├── Interfaces │ │ ├── IClipboard.cs │ │ ├── IFileConverter.cs │ │ ├── IFileExport.cs │ │ ├── IFileOperation.cs │ │ ├── IKeyboardAccelerator.cs │ │ ├── IMarkdownEditor.cs │ │ ├── IPowerShellService.cs │ │ ├── IWindowPrivate.cs │ │ └── IWindowService.cs │ ├── Migrations │ │ ├── 20230226122314_InitialCreate.cs │ │ ├── 20230226122314_InitialCreate.designer.cs │ │ └── DatabaseModelSnapshot.cs │ ├── Models │ │ ├── EventArgs │ │ │ ├── EditorEventArgs.cs │ │ │ └── KeyEventArgs.cs │ │ ├── PersistentModels │ │ │ ├── ExportConfig.cs │ │ │ ├── FileAccessHistory.cs │ │ │ ├── FolderAccessHistory.cs │ │ │ └── ImageUploadConfig.cs │ │ └── RuntimeModels │ │ │ ├── ContentHistory.cs │ │ │ ├── ContentState.cs │ │ │ ├── CursorState.cs │ │ │ ├── DimNumber.cs │ │ │ ├── ExplorerItem.cs │ │ │ ├── ExportConfigModels │ │ │ ├── ConfigModel.cs │ │ │ ├── HTMLConfigModel.cs │ │ │ ├── ImageConfigModel.cs │ │ │ └── PDFConfigModel.cs │ │ │ ├── ExportPdfSettings.cs │ │ │ ├── FormatState.cs │ │ │ ├── HtmlImgTag.cs │ │ │ ├── MarkdownBlock.cs │ │ │ ├── MarkdownCursor.cs │ │ │ ├── MenuItemState.cs │ │ │ ├── MenuState.cs │ │ │ ├── NumberUnit.cs │ │ │ ├── ParagraphState.cs │ │ │ ├── ScrollState.cs │ │ │ ├── ShortcutKey.cs │ │ │ ├── TocItem.cs │ │ │ ├── UploadConfigModels │ │ │ ├── ConfigModel.cs │ │ │ ├── FTPConfigModel.cs │ │ │ ├── GitConfigModel.cs │ │ │ ├── OSSConfigModel.cs │ │ │ ├── PowerShellModel.cs │ │ │ └── SCPConfigModel.cs │ │ │ └── WordCount.cs │ ├── Pages │ │ ├── MainPage.xaml │ │ ├── MainPage.xaml.cs │ │ ├── Route.cs │ │ ├── SettingPages │ │ │ ├── AboutPage.xaml │ │ │ ├── AboutPage.xaml.cs │ │ │ ├── EditorPage.xaml │ │ │ ├── EditorPage.xaml.cs │ │ │ ├── ExportConfigPage.xaml │ │ │ ├── ExportConfigPage.xaml.cs │ │ │ ├── ExportPage.xaml │ │ │ ├── ExportPage.xaml.cs │ │ │ ├── GeneralPage.xaml │ │ │ ├── GeneralPage.xaml.cs │ │ │ ├── ImagePage.xaml │ │ │ ├── ImagePage.xaml.cs │ │ │ ├── ImageUploadPage.xaml │ │ │ ├── ImageUploadPage.xaml.cs │ │ │ ├── ShortcutPage.xaml │ │ │ ├── ShortcutPage.xaml.cs │ │ │ ├── UploadConfigPage.xaml │ │ │ ├── UploadConfigPage.xaml.cs │ │ │ ├── ViewPage.xaml │ │ │ └── ViewPage.xaml.cs │ │ ├── SettingsPage.xaml │ │ └── SettingsPage.xaml.cs │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ └── Typedown.Core.rd.xml │ ├── Resources.cs │ ├── Resources │ │ ├── Converters.xaml │ │ ├── Strings │ │ │ ├── af │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── am │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ar │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── as │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── bg │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── bn │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── bs │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ca │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── cs │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── cy │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── da │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── de │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── el │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── en │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── es │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── et │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── eu │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── fa │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── fi │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── fil │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── fr │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ga │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── gl │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── gu │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── he │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── hi │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── hr │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── hu │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── hy │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── id │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── is │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── it │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ja │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ka │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── kk │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── km │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── kn │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ko │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── lo │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── lt │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── lv │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── mi │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── mk │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ml │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── mr │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ms │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── mt │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── nb │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ne │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── nl │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── or │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── pa │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── pl │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── prs │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── pt │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ro │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ru │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sk │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sl │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sq │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sr-Latn │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sv │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── sw │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ta │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── te │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── th │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ti │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── tr │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── uk │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── ur │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── uz │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── vi │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── zh-Hans │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ ├── zh-Hant │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ │ └── zu │ │ │ │ ├── CommonResources.resw │ │ │ │ ├── DialogResources.resw │ │ │ │ ├── Resources.resw │ │ │ │ └── SettingsResources.resw │ │ └── Styles │ │ │ ├── Button.xaml │ │ │ ├── ComboBox.xaml │ │ │ ├── ContentDialog.xaml │ │ │ └── ToggleSwitch.xaml │ ├── Services │ │ ├── AccessHistory.cs │ │ ├── AppDbContext.cs │ │ ├── AutoBackup.cs │ │ ├── EventCenter.cs │ │ ├── ImageAction.cs │ │ ├── ImageUpload.cs │ │ ├── RemoteInvoke.cs │ │ └── Transport.cs │ ├── Typedown.Core.csproj │ ├── Utilities │ │ ├── CollectionExtensions.cs │ │ ├── ComboBoxPatch.cs │ │ ├── Command.cs │ │ ├── CommandLine.cs │ │ ├── Common.cs │ │ ├── ControlExtensions.cs │ │ ├── CoreDispatcherExtensions.cs │ │ ├── ExportMarkdown.cs │ │ ├── FilePickersExtensions.cs │ │ ├── FileTypeHelper.cs │ │ ├── InjectionExtensions.cs │ │ ├── Locale.cs │ │ ├── Log.cs │ │ ├── NumberUnit.cs │ │ ├── PInvoke │ │ │ ├── PInvoke.DwmApi.cs │ │ │ ├── PInvoke.Kernel32.cs │ │ │ ├── PInvoke.Shell32.cs │ │ │ └── PInvoke.User32.cs │ │ ├── ReactiveExtensions.cs │ │ └── UriHelper.cs │ └── ViewModels │ │ ├── AppViewModel.cs │ │ ├── EditorViewModel.cs │ │ ├── FileViewModel.cs │ │ ├── FloatViewModel.cs │ │ ├── FormatViewModel.cs │ │ ├── ParagraphViewModel.cs │ │ ├── SettingsViewModel.Shortcut.cs │ │ ├── SettingsViewModel.cs │ │ └── UIViewModel.cs ├── Typedown.Editor │ ├── .eslintrc.json │ ├── .gitignore │ ├── .vscode │ │ └── launch.json │ ├── README.md │ ├── Typedown.Editor.esproj │ ├── config-overrides.js │ ├── package.json │ ├── public │ │ ├── index.html │ │ └── theme │ │ │ ├── codemirror │ │ │ ├── dark.theme.css │ │ │ └── light.theme.css │ │ │ ├── editor │ │ │ ├── dark.theme.css │ │ │ └── light.theme.css │ │ │ └── prismjs │ │ │ ├── dark.theme.css │ │ │ └── light.theme.css │ ├── src │ │ ├── App.scss │ │ ├── App.tsx │ │ ├── assets │ │ │ ├── icons │ │ │ │ ├── add_close.svg │ │ │ │ ├── align_center.svg │ │ │ │ ├── align_left.svg │ │ │ │ ├── align_right.svg │ │ │ │ ├── bullet_list.svg │ │ │ │ ├── chart.svg │ │ │ │ ├── code.svg │ │ │ │ ├── copy.svg │ │ │ │ ├── delete.svg │ │ │ │ ├── enter.svg │ │ │ │ ├── flowchart.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── format_clear.svg │ │ │ │ ├── format_code.svg │ │ │ │ ├── format_emphasis.svg │ │ │ │ ├── format_image.svg │ │ │ │ ├── format_link.svg │ │ │ │ ├── format_math.svg │ │ │ │ ├── format_strike.svg │ │ │ │ ├── format_strong.svg │ │ │ │ ├── format_underline.svg │ │ │ │ ├── front_matter.svg │ │ │ │ ├── header_1.svg │ │ │ │ ├── header_2.svg │ │ │ │ ├── header_3.svg │ │ │ │ ├── header_4.svg │ │ │ │ ├── header_5.svg │ │ │ │ ├── header_6.svg │ │ │ │ ├── horizontal_line.svg │ │ │ │ ├── html.svg │ │ │ │ ├── image.svg │ │ │ │ ├── image_dark.png │ │ │ │ ├── image_dark_fail.png │ │ │ │ ├── image_light.png │ │ │ │ ├── image_light_fail.png │ │ │ │ ├── imagefail.svg │ │ │ │ ├── math.svg │ │ │ │ ├── mermaid.svg │ │ │ │ ├── new_table.svg │ │ │ │ ├── order_list.svg │ │ │ │ ├── paragraph.svg │ │ │ │ ├── quote.svg │ │ │ │ ├── quote_block.svg │ │ │ │ ├── sequence.svg │ │ │ │ ├── table.svg │ │ │ │ ├── table_add.svg │ │ │ │ ├── title.svg │ │ │ │ ├── todolist.svg │ │ │ │ ├── turn.svg │ │ │ │ └── upload.svg │ │ │ ├── libs │ │ │ │ ├── sequence-diagram-snap.js │ │ │ │ └── snap.svg-min.js │ │ │ ├── pngicon │ │ │ │ ├── algin_center │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── algin_left │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── algin_right │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── bullet_list │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── chart │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── code │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── copy │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── delete │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── flowchart │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── footnote │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_clear │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_emphasis │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_image │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_link │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_math │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_strike │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_strong │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── format_underline │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── front_matter │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_1 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_2 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_3 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_4 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_5 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── heading_6 │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── highlight │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── horizontal_line │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── html │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── image │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── imageEdit │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── image_delete │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── image_fail │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── inline_image │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── link_jump │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── math │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── mermaid │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── new_table │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── order_list │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── paragraph │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── plantuml │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── quote │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── quote_block │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── sequence │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── table │ │ │ │ │ ├── table.png │ │ │ │ │ ├── table@2x.png │ │ │ │ │ └── table@3x.png │ │ │ │ ├── table_delete │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── todolist │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── turninto │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ ├── unlink │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ └── 3.png │ │ │ │ └── warning │ │ │ │ │ └── 2.png │ │ │ └── styles │ │ │ │ ├── danielbd.woff │ │ │ │ ├── danielbd.woff2 │ │ │ │ ├── exportStyle.css │ │ │ │ ├── headerFooterStyle.css │ │ │ │ ├── index.css │ │ │ │ └── sequence-diagram.css │ │ ├── components │ │ │ ├── CodeMirror │ │ │ │ └── index.tsx │ │ │ ├── Editor │ │ │ │ ├── index.scss │ │ │ │ ├── index.tsx │ │ │ │ └── type.d.ts │ │ │ ├── ErrorBoundary │ │ │ │ └── index.jsx │ │ │ └── Muya │ │ │ │ ├── index.tsx │ │ │ │ ├── lib │ │ │ │ ├── config │ │ │ │ │ └── index.js │ │ │ │ ├── contentState │ │ │ │ │ ├── arrowCtrl.js │ │ │ │ │ ├── backspaceCtrl.js │ │ │ │ │ ├── clickCtrl.js │ │ │ │ │ ├── codeBlockCtrl.js │ │ │ │ │ ├── containerCtrl.js │ │ │ │ │ ├── copyCutCtrl.js │ │ │ │ │ ├── core.js │ │ │ │ │ ├── deleteCtrl.js │ │ │ │ │ ├── dragDropCtrl.js │ │ │ │ │ ├── emojiCtrl.js │ │ │ │ │ ├── enterCtrl.js │ │ │ │ │ ├── footnoteCtrl.js │ │ │ │ │ ├── formatCtrl.js │ │ │ │ │ ├── htmlBlock.js │ │ │ │ │ ├── imageCtrl.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── inputCtrl.js │ │ │ │ │ ├── linkCtrl.js │ │ │ │ │ ├── paragraphCtrl.js │ │ │ │ │ ├── pasteCtrl.js │ │ │ │ │ ├── searchCtrl.js │ │ │ │ │ ├── tabCtrl.js │ │ │ │ │ ├── tableBlockCtrl.js │ │ │ │ │ ├── tableDragBarCtrl.js │ │ │ │ │ ├── tableSelectCellsCtrl.js │ │ │ │ │ ├── tocCtrl.js │ │ │ │ │ └── updateCtrl.js │ │ │ │ ├── eventHandler │ │ │ │ │ ├── clickEvent.js │ │ │ │ │ ├── clipboard.js │ │ │ │ │ ├── dragDrop.js │ │ │ │ │ ├── event.js │ │ │ │ │ ├── keyboard.js │ │ │ │ │ ├── mouseEvent.js │ │ │ │ │ └── resize.js │ │ │ │ ├── index.js │ │ │ │ ├── parser │ │ │ │ │ ├── escapeCharacter.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── marked │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── blockRules.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── inlineLexer.js │ │ │ │ │ │ ├── inlineRules.js │ │ │ │ │ │ ├── lexer.js │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ ├── parser.js │ │ │ │ │ │ ├── renderer.js │ │ │ │ │ │ ├── slugger.js │ │ │ │ │ │ ├── textRenderer.js │ │ │ │ │ │ ├── urlify.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── render │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── plantuml.js │ │ │ │ │ │ ├── renderBlock │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── renderBlock.js │ │ │ │ │ │ │ ├── renderContainerBlock.js │ │ │ │ │ │ │ ├── renderContainerEditIcon.js │ │ │ │ │ │ │ ├── renderCopyButton.js │ │ │ │ │ │ │ ├── renderFootnoteJump.js │ │ │ │ │ │ │ ├── renderIcon.js │ │ │ │ │ │ │ ├── renderLeafBlock.js │ │ │ │ │ │ │ ├── renderLineNumber.js │ │ │ │ │ │ │ ├── renderTableDargBar.js │ │ │ │ │ │ │ └── renderToolBar.js │ │ │ │ │ │ ├── renderInlines │ │ │ │ │ │ │ ├── autoLink.js │ │ │ │ │ │ │ ├── autoLinkExtension.js │ │ │ │ │ │ │ ├── backlash.js │ │ │ │ │ │ │ ├── backlashInToken.js │ │ │ │ │ │ │ ├── codeFense.js │ │ │ │ │ │ │ ├── del.js │ │ │ │ │ │ │ ├── delEmStringFactory.js │ │ │ │ │ │ │ ├── em.js │ │ │ │ │ │ │ ├── emoji.js │ │ │ │ │ │ │ ├── footnoteIdentifier.js │ │ │ │ │ │ │ ├── hardLineBreak.js │ │ │ │ │ │ │ ├── header.js │ │ │ │ │ │ │ ├── highlight.js │ │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ │ ├── htmlEscape.js │ │ │ │ │ │ │ ├── htmlRuby.js │ │ │ │ │ │ │ ├── htmlTag.js │ │ │ │ │ │ │ ├── image.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── inlineCode.js │ │ │ │ │ │ │ ├── inlineMath.js │ │ │ │ │ │ │ ├── link.js │ │ │ │ │ │ │ ├── loadImageAsync.js │ │ │ │ │ │ │ ├── multipleMath.js │ │ │ │ │ │ │ ├── referenceDefinition.js │ │ │ │ │ │ │ ├── referenceImage.js │ │ │ │ │ │ │ ├── referenceLink.js │ │ │ │ │ │ │ ├── softLineBreak.js │ │ │ │ │ │ │ ├── strong.js │ │ │ │ │ │ │ ├── superSubScript.js │ │ │ │ │ │ │ ├── tailHeader.js │ │ │ │ │ │ │ └── text.js │ │ │ │ │ │ ├── sequence.js │ │ │ │ │ │ └── snabbdom.js │ │ │ │ │ ├── rules.js │ │ │ │ │ └── utils.js │ │ │ │ ├── prism │ │ │ │ │ ├── index.js │ │ │ │ │ └── loadLanguage.js │ │ │ │ ├── renderers │ │ │ │ │ └── index.js │ │ │ │ ├── selection │ │ │ │ │ ├── cursor.js │ │ │ │ │ ├── dom.js │ │ │ │ │ └── index.js │ │ │ │ ├── ui │ │ │ │ │ ├── baseFloat │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── baseScrollFloat │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── codePicker │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── emojiPicker │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── emojis │ │ │ │ │ │ ├── emojisJson.json │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── fileIcons │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── footnoteTool │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── formatPicker.js │ │ │ │ │ ├── frontMenu.js │ │ │ │ │ ├── imageSelector.js │ │ │ │ │ ├── imageToolbar.js │ │ │ │ │ ├── linkTools.js │ │ │ │ │ ├── quickInsert │ │ │ │ │ │ ├── config.js │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── tablePicker.js │ │ │ │ │ ├── tableTools.js │ │ │ │ │ └── tooltip.js │ │ │ │ └── utils │ │ │ │ │ ├── cumputeCheckBoxStatus.js │ │ │ │ │ ├── domManipulate.js │ │ │ │ │ ├── dompurify.js │ │ │ │ │ ├── exportMarkdown.js │ │ │ │ │ ├── getImageInfo.js │ │ │ │ │ ├── getLinkInfo.js │ │ │ │ │ ├── getParentCheckBox.js │ │ │ │ │ ├── importMarkdown.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── resizeCodeLineNumber.js │ │ │ │ │ ├── turndownService.js │ │ │ │ │ └── url.js │ │ │ │ └── themes │ │ │ │ ├── default.css │ │ │ │ └── fonts │ │ │ │ ├── DejaVuSansMono-Bold.ttf │ │ │ │ ├── DejaVuSansMono-BoldOblique.ttf │ │ │ │ ├── DejaVuSansMono-Oblique.ttf │ │ │ │ ├── DejaVuSansMono.ttf │ │ │ │ ├── DejaVuSansMono_LICENSE │ │ │ │ ├── open-sans-LICENSE.txt │ │ │ │ ├── open-sans-v27-latin-ext_latin-300.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-300italic.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-600.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-600italic.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-700.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-700italic.woff │ │ │ │ ├── open-sans-v27-latin-ext_latin-italic.woff │ │ │ │ └── open-sans-v27-latin-ext_latin-regular.woff │ │ ├── index.tsx │ │ ├── react-app-env.d.ts │ │ ├── services │ │ │ ├── common.ts │ │ │ ├── cursor.js │ │ │ ├── exportHtml.js │ │ │ ├── importHtml.js │ │ │ ├── localization.ts │ │ │ ├── menuState.js │ │ │ ├── remote │ │ │ │ ├── common.ts │ │ │ │ └── index.ts │ │ │ ├── scrollbar.ts │ │ │ ├── theme.ts │ │ │ └── transport.ts │ │ ├── setupTests.ts │ │ └── types │ │ │ └── global.d.ts │ ├── tsconfig.json │ └── yarn.lock └── Typedown │ ├── App.cs │ ├── Assets │ └── logo.ico │ ├── Controls │ └── MarkdownEditor.cs │ ├── EnvCheck.cs │ ├── FodyWeavers.xml │ ├── FodyWeavers.xsd │ ├── Injection.cs │ ├── MicrosoftEdgeWebview2Setup.exe │ ├── Program.cs │ ├── Resources │ └── .gitignore │ ├── Services │ ├── Clipboard.cs │ ├── FileConverter.cs │ ├── FileExport.cs │ ├── FileOperation.cs │ ├── KeyboardAccelerator.cs │ ├── PowerShellService.cs │ └── WindowService.cs │ ├── Typedown.csproj │ ├── Utilities │ ├── ClipboardImage.cs │ ├── Common.cs │ ├── CoreWindowHelper.cs │ ├── PrintHelper.cs │ └── WebViewController.cs │ ├── Windows │ ├── MainWindow.cs │ └── WebViewInstallWindow.cs │ └── app.manifest ├── LICENSE ├── NuGet.Config ├── README.md ├── Tests ├── Typedown.Test │ ├── STATestMethodAttribute.cs │ ├── ServiceTests │ │ └── ClipboardTest.cs │ └── Typedown.Test.csproj ├── Typedown.UITest │ ├── TestBase.cs │ ├── Typedown.UITest.csproj │ └── UnitTest1.cs └── Typedown.Universal.Test │ ├── Typedown.Core.Test.csproj │ └── UtilityTests │ └── UriHelperTest.cs ├── Tools ├── DatabaseMigration │ ├── Database.cs │ ├── DatabaseMigration.csproj │ ├── Migrations │ │ ├── 20230226122314_InitialCreate.Designer.cs │ │ ├── 20230226122314_InitialCreate.cs │ │ └── DatabaseModelSnapshot.cs │ └── Program.cs ├── TranslationTool │ ├── BingDictionary │ │ ├── CommonResources.json │ │ ├── DialogResources.json │ │ ├── Resources.json │ │ └── SettingsResources.json │ ├── BingTranslate.cs │ ├── Dictionary │ │ ├── CommonResources.json │ │ ├── DialogResources.json │ │ ├── Resources.json │ │ └── SettingsResources.json │ ├── Program.cs │ ├── Template.resw │ ├── TextDictionary.cs │ ├── TextDictionaryItem.cs │ ├── TextResource.cs │ ├── TextResourceItem.cs │ └── TranslationTool.csproj ├── Typedown.Package │ ├── Assets │ │ ├── LargeTile.scale-100.png │ │ ├── LargeTile.scale-125.png │ │ ├── LargeTile.scale-150.png │ │ ├── LargeTile.scale-200.png │ │ ├── LargeTile.scale-400.png │ │ ├── Markdown.png │ │ ├── SmallTile.scale-100.png │ │ ├── SmallTile.scale-125.png │ │ ├── SmallTile.scale-150.png │ │ ├── SmallTile.scale-200.png │ │ ├── SmallTile.scale-400.png │ │ ├── SplashScreen.scale-100.png │ │ ├── SplashScreen.scale-125.png │ │ ├── SplashScreen.scale-150.png │ │ ├── SplashScreen.scale-200.png │ │ ├── SplashScreen.scale-400.png │ │ ├── Square150x150Logo.scale-100.png │ │ ├── Square150x150Logo.scale-125.png │ │ ├── Square150x150Logo.scale-150.png │ │ ├── Square150x150Logo.scale-200.png │ │ ├── Square150x150Logo.scale-400.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png │ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png │ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png │ │ ├── Square44x44Logo.scale-100.png │ │ ├── Square44x44Logo.scale-125.png │ │ ├── Square44x44Logo.scale-150.png │ │ ├── Square44x44Logo.scale-200.png │ │ ├── Square44x44Logo.scale-400.png │ │ ├── Square44x44Logo.targetsize-16.png │ │ ├── Square44x44Logo.targetsize-24.png │ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ │ ├── Square44x44Logo.targetsize-256.png │ │ ├── Square44x44Logo.targetsize-32.png │ │ ├── Square44x44Logo.targetsize-48.png │ │ ├── StoreLogo.scale-100.png │ │ ├── StoreLogo.scale-125.png │ │ ├── StoreLogo.scale-150.png │ │ ├── StoreLogo.scale-200.png │ │ ├── StoreLogo.scale-400.png │ │ ├── Wide310x150Logo.scale-100.png │ │ ├── Wide310x150Logo.scale-125.png │ │ ├── Wide310x150Logo.scale-150.png │ │ ├── Wide310x150Logo.scale-200.png │ │ └── Wide310x150Logo.scale-400.png │ ├── Package.appxmanifest │ ├── Typedown.Package.wapproj │ └── priconfig.packaging.xml └── XamlDesignApp │ ├── App.xaml │ ├── App.xaml.cs │ ├── Assets │ ├── LockScreenLogo.scale-200.png │ ├── SplashScreen.scale-200.png │ ├── Square150x150Logo.scale-200.png │ ├── Square44x44Logo.scale-200.png │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ ├── StoreLogo.png │ └── Wide310x150Logo.scale-200.png │ ├── MainPage.xaml │ ├── MainPage.xaml.cs │ ├── Package.appxmanifest │ ├── Properties │ ├── AssemblyInfo.cs │ └── Default.rd.xml │ └── XamlDesignApp.csproj ├── Typedown.sln ├── logo.png └── nupkgs └── Typedown.XamlUI.1.0.1.nupkg /Dev/Typedown.Core/Controls/CommonControls/ProgressButton.xaml: -------------------------------------------------------------------------------- 1 |  16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/DialogControls/InsertTableDialog.xaml: -------------------------------------------------------------------------------- 1 |  14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/DialogControls/WebView2InstallControl.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace Typedown.Core.Controls 6 | { 7 | public sealed partial class WebView2InstallControl : UserControl 8 | { 9 | public EventHandler CloseButtonClick; 10 | 11 | public EventHandler InstallButtonClick; 12 | 13 | public WebView2InstallControl() 14 | { 15 | this.InitializeComponent(); 16 | } 17 | 18 | private void OnCloseButtonClick(object sender, RoutedEventArgs e) 19 | { 20 | CloseButtonClick?.Invoke(this, EventArgs.Empty); 21 | } 22 | 23 | private void OnInstallButtonClick(object sender, RoutedEventArgs e) 24 | { 25 | InstallButtonClick?.Invoke(this, EventArgs.Empty); 26 | } 27 | 28 | private void OnUnloaded(object sender, RoutedEventArgs e) 29 | { 30 | 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/CodeFencesItem.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/CodeFencesItem.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Controls.EditorControls.ContextMenuItems 2 | { 3 | public sealed partial class CodeFencesItem : MenuItemCollection 4 | { 5 | public CodeFencesItem() 6 | { 7 | this.InitializeComponent(); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/FormatItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Controls; 3 | using Windows.UI.Xaml.Input; 4 | 5 | namespace Typedown.Core.Controls.EditorControls.ContextMenuItems 6 | { 7 | public sealed partial class FormatItem : MenuFlyoutItem 8 | { 9 | public event EventHandler ItemClick; 10 | 11 | public FormatItem() 12 | { 13 | InitializeComponent(); 14 | AddHandler(PointerReleasedEvent, new PointerEventHandler(OnMenuFlyoutItemPointerReleased), true); 15 | } 16 | 17 | private void OnMenuFlyoutItemPointerReleased(object sender, PointerRoutedEventArgs e) 18 | { 19 | ItemClick?.Invoke(this, EventArgs.Empty); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/EditorControls/MenuBarItems/ViewItem.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Controls.EditorControls.MenuBarItems 2 | { 3 | public sealed partial class ViewItem : MenuBarItemBase 4 | { 5 | public ViewItem() 6 | { 7 | InitializeComponent(); 8 | } 9 | 10 | protected override void OnRegisterShortcut() 11 | { 12 | RegisterWindowShortcut(Settings.ShortcutSidePane, SidePaneItem); 13 | RegisterWindowShortcut(Settings.ShortcutSourceCodeMode, SourceCodeModeItem); 14 | RegisterWindowShortcut(Settings.ShortcutFocusMode, FocusModeItem); 15 | RegisterWindowShortcut(Settings.ShortcutTypewriterMode, TypewriterModeItem); 16 | RegisterWindowShortcut(Settings.ShortcutStatusBar, StatusBarItem); 17 | } 18 | 19 | private void OnUnloaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) 20 | { 21 | Bindings?.StopTracking(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/SettingControls/SettingItems/ViewSetting.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.ViewModels; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace Typedown.Core.Controls.SettingControls.SettingItems 6 | { 7 | public sealed partial class ViewSetting : UserControl 8 | { 9 | public AppViewModel ViewModel => DataContext as AppViewModel; 10 | 11 | public SettingsViewModel Settings => ViewModel?.SettingsViewModel; 12 | 13 | public ViewSetting() 14 | { 15 | InitializeComponent(); 16 | } 17 | 18 | private void OnUnloaded(object sender, RoutedEventArgs e) 19 | { 20 | Bindings?.StopTracking(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/SidePaneControls/Pages/Route.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Typedown.Core.Controls.SidePanelControls.Pages; 3 | 4 | namespace Typedown.Core.Controls.SidePaneControls.Pages 5 | { 6 | public static class Route 7 | { 8 | public static Type GetSidePanePageType(string name) => name switch 9 | { 10 | "Toc" => typeof(TocPage), 11 | "Folder" => typeof(FolderPage), 12 | _ => null 13 | }; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Controls/SidePaneControls/Pages/TocPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.ViewModels; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace Typedown.Core.Controls.SidePanelControls.Pages 6 | { 7 | public sealed partial class TocPage : Page 8 | { 9 | public AppViewModel ViewModel => DataContext as AppViewModel; 10 | 11 | public EditorViewModel Editor => ViewModel.EditorViewModel; 12 | 13 | public TocPage() 14 | { 15 | InitializeComponent(); 16 | Unloaded += OnUnloaded; 17 | } 18 | 19 | private void OnUnloaded(object sender, RoutedEventArgs e) 20 | { 21 | Bindings?.StopTracking(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/BoolReverseConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | 4 | namespace Typedown.Core.Converters 5 | { 6 | public class BoolReverseConverter : IValueConverter 7 | { 8 | public object Convert(object value, Type targetType, object parameter, string language) 9 | { 10 | return !(bool)value; 11 | } 12 | 13 | public object ConvertBack(object value, Type targetType, object parameter, string language) 14 | { 15 | return !(bool)value; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/BoolToObjectConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Data; 3 | using Windows.UI.Xaml.Markup; 4 | 5 | namespace Typedown.Core.Converters 6 | { 7 | public class BoolToObjectConverter : IValueConverter 8 | { 9 | public object TrueValue { get; set; } 10 | 11 | public object FalseValue { get; set; } 12 | 13 | public object Convert(object value, Type targetType, object parameter, string language) 14 | { 15 | var res = (bool)value ? TrueValue : FalseValue; 16 | if (res is not string || targetType == typeof(string)) 17 | return res; 18 | return XamlBindingHelper.ConvertValue(targetType, res); 19 | } 20 | 21 | public object ConvertBack(object value, Type targetType, object parameter, string language) 22 | { 23 | throw new NotImplementedException(); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/BoolToVisibilityConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Data; 4 | 5 | namespace Typedown.Core.Converters 6 | { 7 | public class BoolToVisibilityConverter : IValueConverter 8 | { 9 | public bool IsReverse { get; set; } 10 | 11 | public object Convert(object value, Type targetType, object parameter, string language) 12 | { 13 | var res = (bool)value; 14 | if (IsReverse) res = !res; 15 | return res ? Visibility.Visible : Visibility.Collapsed; 16 | } 17 | 18 | public object ConvertBack(object value, Type targetType, object parameter, string language) 19 | { 20 | var res = (Visibility)value; 21 | return IsReverse ? res == Visibility.Collapsed : res == Visibility.Visible; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/ElementThemeConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Typedown.Core.Enums; 3 | using Windows.UI.Xaml; 4 | using Windows.UI.Xaml.Data; 5 | 6 | namespace Typedown.Core.Converters 7 | { 8 | public class ElementThemeConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, string language) 11 | { 12 | if(value is AppTheme) 13 | { 14 | return value switch 15 | { 16 | AppTheme.Light => ElementTheme.Light, 17 | AppTheme.Dark => ElementTheme.Dark, 18 | _ => ElementTheme.Default, 19 | }; 20 | } 21 | return ElementTheme.Default; 22 | } 23 | 24 | public object ConvertBack(object value, Type targetType, object parameter, string language) 25 | { 26 | throw new NotImplementedException(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/EmptyToVisibilityConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Data; 4 | 5 | namespace Typedown.Core.Converters 6 | { 7 | public class EmptyToVisibilityConverter : IValueConverter 8 | { 9 | public bool IsReverse { get; set; } 10 | 11 | public object Convert(object value, Type targetType, object parameter, string language) 12 | { 13 | var res = string.IsNullOrEmpty(value as string); 14 | if (IsReverse) res = !res; 15 | return res ? Visibility.Visible : Visibility.Collapsed; 16 | } 17 | 18 | public object ConvertBack(object value, Type targetType, object parameter, string language) 19 | { 20 | var res = (Visibility)value; 21 | return IsReverse ? res == Visibility.Collapsed : res == Visibility.Visible; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/GridLengthToDoubleConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Data; 4 | 5 | namespace Typedown.Core.Converters 6 | { 7 | public class GridLengthToDoubleConverter : IValueConverter 8 | { 9 | public GridUnitType GridUnitType { get; set; } = GridUnitType.Pixel; 10 | 11 | public object Convert(object value, Type targetType, object parameter, string language) 12 | { 13 | return value is GridLength length ? length.Value : 0d; 14 | } 15 | 16 | public object ConvertBack(object value, Type targetType, object parameter, string language) 17 | { 18 | return new GridLength(value is double length ? length : 0, GridUnitType); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Converters/ShortcutKeyToStringConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Typedown.Core.Models; 3 | using Typedown.Core.Utilities; 4 | using Windows.UI.Xaml.Data; 5 | 6 | namespace Typedown.Core.Converters 7 | { 8 | public class ShortcutKeyToStringConverter: IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, string language) 11 | { 12 | return value is ShortcutKey key ? Common.GetShortcutKeyText(key) : null; 13 | } 14 | 15 | public object ConvertBack(object value, Type targetType, object parameter, string language) 16 | { 17 | throw new NotImplementedException(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Enums/AppTheme.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Typedown.Core.Utilities; 5 | 6 | namespace Typedown.Core.Enums 7 | { 8 | public enum AppTheme 9 | { 10 | [Locale("UseSystemSetting")] 11 | Default = 0, 12 | 13 | [Locale("View.AppTheme.Light")] 14 | Light = 1, 15 | 16 | [Locale("View.AppTheme.Dark")] 17 | Dark = 2, 18 | } 19 | 20 | public static partial class Enumerable 21 | { 22 | public static IReadOnlyList AppThemes { get; } = Enum.GetValues(typeof(AppTheme)).Cast().ToList(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Enums/ExportType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Typedown.Core.Utilities; 5 | 6 | namespace Typedown.Core.Enums 7 | { 8 | public enum ExportType 9 | { 10 | [Locale("None")] 11 | None = 0, 12 | 13 | [Locale("Export.Types.PDF")] 14 | PDF = 1, 15 | 16 | [Locale("Export.Types.HTML")] 17 | HTML = 2, 18 | 19 | [Locale("Export.Types.Image")] 20 | Image = 3, 21 | } 22 | 23 | public static partial class Enumerable 24 | { 25 | public static IReadOnlyList ExportTypes { get; } = Enum.GetValues(typeof(ExportType)).Cast().ToList(); 26 | 27 | public static IReadOnlyList AvailableExportTypes { get; } = new List() { ExportType.PDF, ExportType.HTML }; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Enums/InsertImageAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Typedown.Core.Utilities; 5 | 6 | namespace Typedown.Core.Enums 7 | { 8 | public enum InsertImageAction 9 | { 10 | [Locale("NoAction")] 11 | None, 12 | 13 | [Locale("Image.InsertActions.CopyToPath")] 14 | CopyToPath, 15 | 16 | [Locale("Image.InsertActions.Upload")] 17 | Upload, 18 | } 19 | 20 | public static partial class Enumerable 21 | { 22 | public static IReadOnlyList InsertImageActions { get; } = Enum.GetValues(typeof(InsertImageAction)).Cast().ToList(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Enums/PrintOrientation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Typedown.Core.Utilities; 5 | 6 | namespace Typedown.Core.Enums 7 | { 8 | public enum PrintOrientation 9 | { 10 | [Locale("Export.PDFConfig.Orientations.Portrait")] 11 | Portrait = 0, 12 | 13 | [Locale("Export.PDFConfig.Orientations.Landscape")] 14 | Landscape = 1 15 | } 16 | 17 | public static partial class Enumerable 18 | { 19 | public static IReadOnlyList PrintOrientations { get; } = Enum.GetValues(typeof(PrintOrientation)).Cast().ToList(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Images/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Core/Images/logo.ico -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IClipboard.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Specialized; 2 | 3 | namespace Typedown.Core.Interfaces 4 | { 5 | public enum TextDataFormat 6 | { 7 | Text, 8 | UnicodeText, 9 | Rtf, 10 | Html, 11 | CommaSeparatedValue, 12 | Xaml 13 | } 14 | 15 | public interface IClipboard 16 | { 17 | bool ContainsText(TextDataFormat format); 18 | 19 | string GetText(TextDataFormat format); 20 | 21 | void SetText(string text, TextDataFormat format); 22 | 23 | void SetText(string text); 24 | 25 | StringCollection GetFileDropList(); 26 | 27 | void SetFileDropList(StringCollection fileDropList); 28 | 29 | IClipboardImage GetImage(); 30 | } 31 | 32 | public interface IClipboardImage 33 | { 34 | void SaveAsPng(string path); 35 | 36 | byte[] GetBytes(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IFileConverter.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Threading.Tasks; 3 | using Typedown.Core.Models; 4 | 5 | namespace Typedown.Core.Interfaces 6 | { 7 | public interface IFileConverter 8 | { 9 | Task HtmlToPdf(string html, PdfPrintSettings settings = null); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IFileExport.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using System.Threading.Tasks; 3 | using Typedown.Core.Enums; 4 | using Typedown.Core.Models; 5 | 6 | namespace Typedown.Core.Interfaces 7 | { 8 | public interface IFileExport 9 | { 10 | ObservableCollection ExportConfigs { get; } 11 | 12 | Task AddExportConfig(string name = null, ExportType type = 0); 13 | 14 | Task RemoveExportConfig(int id); 15 | 16 | Task SaveExportConfig(ExportConfig config); 17 | 18 | Task GetExportConfig(int id); 19 | 20 | Task UpdateExportConfigs(); 21 | 22 | Task Print(string basePath, string html, string documentName = null); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IFileOperation.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Specialized; 2 | 3 | namespace Typedown.Core.Interfaces 4 | { 5 | public interface IFileOperation 6 | { 7 | bool Delete(StringCollection files); 8 | 9 | bool Copy(StringCollection files, string to); 10 | 11 | bool Move(StringCollection files, string to); 12 | 13 | bool Rename(string from, string to); 14 | 15 | void CutToClipboard(StringCollection files); 16 | 17 | void CopyToClipboard(StringCollection files); 18 | 19 | bool IsPasteEnabled { get; } 20 | 21 | void PasteFromClipboard(string to); 22 | 23 | bool IsFilenameValid(string sourceFolder, string fileName); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IKeyboardAccelerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Typedown.Core.Models; 3 | using Windows.System; 4 | 5 | namespace Typedown.Core.Interfaces 6 | { 7 | public interface IKeyboardAccelerator 8 | { 9 | IDisposable Register(ShortcutKey key, EventHandler handler); 10 | 11 | IDisposable RegisterGlobal(EventHandler handler); 12 | 13 | IObservable GetObservable(); 14 | 15 | string GetShortcutKeyText(ShortcutKey key); 16 | 17 | string GetVirtualKeyNameText(VirtualKey key); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IMarkdownEditor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using Windows.Foundation; 4 | using Windows.UI.Xaml.Shapes; 5 | 6 | namespace Typedown.Core.Interfaces 7 | { 8 | public interface IMarkdownEditor : IDisposable, INotifyPropertyChanged 9 | { 10 | bool PostMessage(string name, object arg); 11 | 12 | Rectangle GetDummyRectangle(Rect rect); 13 | 14 | Rectangle MoveDummyRectangle(Point offset); 15 | 16 | bool IsEditorLoadFailed { get; } 17 | 18 | bool IsEditorLoaded { get; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IPowerShellService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Typedown.Core.Interfaces 4 | { 5 | public interface IPowerShellService 6 | { 7 | IEnumerable Invoke(string script, string command, params string[] parameters); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IWindowPrivate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | 4 | namespace Typedown.Core.Interfaces 5 | { 6 | [ComImport, Guid("06636C29-5A17-458D-8EA2-2422D997A922"), InterfaceType(ComInterfaceType.InterfaceIsIInspectable)] 7 | public interface IWindowPrivate 8 | { 9 | bool TransparentBackground { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Interfaces/IWindowService.cs: -------------------------------------------------------------------------------- 1 | using System.Reactive.Subjects; 2 | using Windows.Foundation; 3 | using Windows.UI.Xaml; 4 | 5 | namespace Typedown.Core.Interfaces 6 | { 7 | public interface IWindowService 8 | { 9 | Subject WindowStateChanged { get; } 10 | 11 | Subject WindowIsActivedChanged { get; } 12 | 13 | nint GetWindow(UIElement element); 14 | 15 | nint GetXamlSourceHandle(UIElement element); 16 | 17 | Point GetCursorPos(UIElement relativeTo); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/EventArgs/EditorEventArgs.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public class EditorEventArgs : global::System.EventArgs 6 | { 7 | public string Name { get; } 8 | 9 | public JToken Args { get; } 10 | 11 | public EditorEventArgs(string name, JToken args) 12 | { 13 | Name = name; 14 | Args = args; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/EventArgs/KeyEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.System; 3 | 4 | namespace Typedown.Core.Models 5 | { 6 | public class KeyEventArgs : EventArgs 7 | { 8 | public bool Handled { get; set; } 9 | 10 | public VirtualKey Key { get; } 11 | 12 | public VirtualKeyModifiers Modifiers { get; } 13 | 14 | public KeyEventArgs(VirtualKey key, VirtualKeyModifiers modifiers) 15 | { 16 | Key = key; 17 | Modifiers = modifiers; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/PersistentModels/FileAccessHistory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace Typedown.Core.Models 6 | { 7 | [Table("FileAccessHistory")] 8 | public class FileAccessHistory 9 | { 10 | [Key] 11 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 12 | public int Id { get; set; } 13 | 14 | public DateTime AccessTime { get; set; } 15 | 16 | public string FilePath { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/PersistentModels/FolderAccessHistory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace Typedown.Core.Models 6 | { 7 | [Table("FolderAccessHistory")] 8 | public class FolderAccessHistory 9 | { 10 | [Key] 11 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 12 | public int Id { get; set; } 13 | 14 | public DateTime AccessTime { get; set; } 15 | 16 | public string FolderPath { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ContentState.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public class ContentState 6 | { 7 | public WordCount WordCount { get; set; } 8 | 9 | public List Toc { get; set; } 10 | 11 | public TocItem Cur { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/CursorState.cs: -------------------------------------------------------------------------------- 1 | using static Typedown.Core.Models.CursorState; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public record CursorState(Pos Anchor, Pos Focus) 6 | { 7 | public record Pos(int Line, int Ch); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/DimNumber.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models 2 | { 3 | public record DimNumber 4 | { 5 | public NumberUnit Unit { get; set; } 6 | 7 | public double Value { get; set; } 8 | 9 | public DimNumber() 10 | { 11 | 12 | } 13 | 14 | public DimNumber(NumberUnit unit, double value = 0) 15 | { 16 | Unit = unit; 17 | Value = value; 18 | } 19 | 20 | public double GetValue(NumberUnit targetUnit) 21 | { 22 | return ((Value - Unit.Shift) / Unit.Scale) * targetUnit.Scale + targetUnit.Shift; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/ConfigModel.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | 7 | namespace Typedown.Core.Models.ExportConfigModels 8 | { 9 | public partial class ConfigModel : INotifyPropertyChanged 10 | { 11 | public Dictionary Addition { get; } = new(); 12 | 13 | public string ScriptAfter { get; } = string.Empty; 14 | 15 | public virtual Task Export(IServiceProvider serviceProvider, string html, string filePath) => null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/HTMLConfigModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | 5 | namespace Typedown.Core.Models.ExportConfigModels 6 | { 7 | public class HTMLConfigModel : ConfigModel 8 | { 9 | public string ExtraHead { get; set; } = ""; 10 | 11 | public string ExtraBody { get; set; } = ""; 12 | 13 | public override async Task Export(IServiceProvider serviceProvider, string html, string filePath) 14 | { 15 | await File.WriteAllTextAsync(filePath, html); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/ImageConfigModel.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.ExportConfigModels 2 | { 3 | public class ImageConfigModel : ConfigModel 4 | { 5 | public double DPI { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ExportPdfSettings.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Enums; 2 | using Windows.Foundation; 3 | using Windows.UI.Xaml; 4 | 5 | namespace Typedown.Core.Models 6 | { 7 | public class PdfPrintSettings 8 | { 9 | public PrintOrientation Orientation { get; set; } 10 | 11 | public double? ScaleFactor { get; set; } 12 | 13 | public Size? PageSize { get; set; } 14 | 15 | public Thickness? Margin { get; set; } 16 | 17 | public bool ShouldPrintHeaderAndFooter { get; set; } 18 | 19 | public string Header { get; set; } = string.Empty; 20 | 21 | public string Footer { get; set; } = string.Empty; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/HtmlImgTag.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.RuntimeModels 2 | { 3 | public class HtmlImgTag 4 | { 5 | public string Src { get; set; } 6 | 7 | public string Title { get; set; } 8 | 9 | public string Alt { get; set; } 10 | 11 | public HtmlImgTag(string src, string alt = null, string title = null) 12 | { 13 | Src = src; 14 | Alt = alt; 15 | Title = title; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/MarkdownCursor.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models 2 | { 3 | public record MarkdownCursor 4 | { 5 | public record Pos(string Key, int Offset); 6 | 7 | public Pos Anchor; 8 | 9 | public Pos Focus; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/MenuItemState.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models 2 | { 3 | public class MenuItemState 4 | { 5 | public bool IsEnable { get; set; } 6 | 7 | public bool IsChecked { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/MenuState.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public class MenuState 6 | { 7 | public bool IsDisabled { get; set; } 8 | public bool IsMultiline { get; set; } 9 | public bool IsLooseListItem { get; set; } 10 | public bool IsTaskList { get; set; } 11 | public bool IsCodeFences { get; set; } 12 | public bool IsCodeContent { get; set; } 13 | public bool IsTable { get; set; } 14 | public bool IsFootnote { get; set; } 15 | public Dictionary Affiliation { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/NumberUnit.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public struct NumberUnit 6 | { 7 | public string Name { get; } 8 | 9 | public double Scale { get; } 10 | 11 | public double Shift { get; } 12 | 13 | public NumberUnit(string name, double scale, double shift = 0) 14 | { 15 | Name = name; 16 | Scale = scale; 17 | Shift = shift; 18 | } 19 | 20 | public override bool Equals(object obj) => obj is NumberUnit other && Equals(other); 21 | 22 | public bool Equals(NumberUnit unit) => unit.Name == Name && unit.Scale == Scale && unit.Shift == Shift; 23 | 24 | public override int GetHashCode() => HashCode.Combine(Name, Scale, Shift); 25 | 26 | public static bool operator ==(NumberUnit lhs, NumberUnit rhs) => lhs.Equals(rhs); 27 | 28 | public static bool operator !=(NumberUnit lhs, NumberUnit rhs) => !(lhs == rhs); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ScrollState.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models 2 | { 3 | public class ScrollState 4 | { 5 | public double ViewportWidth { get; set; } 6 | public double ViewportHeight { get; set; } 7 | public double MaximumX { get; set; } 8 | public double MaximumY { get; set; } 9 | public double ScrollX { get; set; } 10 | public double ScrollY { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/ShortcutKey.cs: -------------------------------------------------------------------------------- 1 | using Windows.System; 2 | 3 | namespace Typedown.Core.Models 4 | { 5 | public record ShortcutKey(VirtualKeyModifiers Modifiers, VirtualKey Key) 6 | { 7 | public override string ToString() 8 | { 9 | return base.ToString(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/ConfigModel.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json.Linq; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Threading.Tasks; 6 | 7 | namespace Typedown.Core.Models.UploadConfigModels 8 | { 9 | public partial class ConfigModel : INotifyPropertyChanged 10 | { 11 | public Dictionary Addition { get; } = new(); 12 | 13 | public string UploadPath { get; set; } = string.Empty; 14 | 15 | public string ExternalURL { get; set; } = string.Empty; 16 | 17 | public virtual Task Upload(IServiceProvider serviceProvider, string filePath) => Task.FromResult(filePath); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/FTPConfigModel.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.UploadConfigModels 2 | { 3 | public class FTPConfigModel : ConfigModel 4 | { 5 | public string Host { get; set; } = string.Empty; 6 | 7 | public int Port { get; set; } = 21; 8 | 9 | public string Username { get; set; } = string.Empty; 10 | 11 | public string Password { get; set; } = string.Empty; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/GitConfigModel.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.UploadConfigModels 2 | { 3 | public class GitConfigModel : ConfigModel 4 | { 5 | public string URL { get; set; } = string.Empty; 6 | 7 | public string IdentityFile { get; set; } = string.Empty; 8 | 9 | public string Passphrase { get; set; } = string.Empty; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/OSSConfigModel.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.UploadConfigModels 2 | { 3 | public class OSSConfigModel : ConfigModel 4 | { 5 | public string AccessKey { get; set; } = string.Empty; 6 | 7 | public string SecretKey { get; set; } = string.Empty; 8 | 9 | public string BucketName { get; set; } = string.Empty; 10 | 11 | public string ServiceURL { get; set; } = string.Empty; 12 | 13 | public string RegionEndpoint { get; set; } = string.Empty; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/PowerShellModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | using System; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Typedown.Core.Interfaces; 6 | 7 | namespace Typedown.Core.Models.UploadConfigModels 8 | { 9 | public class PowerShellModel : ConfigModel 10 | { 11 | public static string DefaultScript = "# Upload file and return URL\nfunction Upload-Image($FilePath)\n{ \n return $FilePath\n}"; 12 | 13 | public string Script { get; set; } = DefaultScript; 14 | 15 | public override async Task Upload(IServiceProvider serviceProvider, string filePath) 16 | { 17 | return await Task.Run(() => 18 | { 19 | var powerShell = serviceProvider.GetService(); 20 | var result = powerShell.Invoke(Script, "Upload-Image", filePath); 21 | return result.First(); 22 | }); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/SCPConfigModel.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models.UploadConfigModels 2 | { 3 | public class SCPConfigModel : ConfigModel 4 | { 5 | public string Host { get; set; } = string.Empty; 6 | 7 | public int Port { get; set; } = 22; 8 | 9 | public string Username { get; set; } = string.Empty; 10 | 11 | public bool PubKeyAuthentication { get; set; } 12 | 13 | public string Password { get; set; } = string.Empty; 14 | 15 | public string IdentityFile { get; set; } = string.Empty; 16 | 17 | public string Passphrase { get; set; } = string.Empty; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Models/RuntimeModels/WordCount.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Models 2 | { 3 | public class WordCount 4 | { 5 | public int Word { get; set; } 6 | 7 | public int Character { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Typedown.Core.ViewModels; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace Typedown.Core.Pages 6 | { 7 | public sealed partial class MainPage : Page 8 | { 9 | public AppViewModel AppViewModel => this.GetService(); 10 | 11 | public MainPage() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | private void OnUnloaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) 17 | { 18 | Bindings?.StopTracking(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/Route.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Typedown.Core.Pages.SettingPages; 3 | 4 | namespace Typedown.Core.Pages 5 | { 6 | public static class Route 7 | { 8 | public static Type GetRootPageType(string name) => name switch 9 | { 10 | "Main" => typeof(MainPage), 11 | "Settings" => typeof(SettingsPage), 12 | _ => null 13 | }; 14 | 15 | public static Type GetSettingsPageType(string name) => name switch 16 | { 17 | "About" => typeof(AboutPage), 18 | "Editor" => typeof(EditorPage), 19 | "ExportConfig" => typeof(ExportConfigPage), 20 | "Export" => typeof(ExportPage), 21 | "General" => typeof(GeneralPage), 22 | "Image" => typeof(ImagePage), 23 | "ImageUpload" => typeof(ImageUploadPage), 24 | "Shortcut" => typeof(ShortcutPage), 25 | "UploadConfig" => typeof(UploadConfigPage), 26 | "View" => typeof(ViewPage), 27 | _ => null 28 | }; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/AboutPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/AboutPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("About.Title")] 7 | public sealed partial class AboutPage : Page 8 | { 9 | public AboutPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/EditorPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/EditorPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("Editor.Title")] 7 | public sealed partial class EditorPage : Page 8 | { 9 | public EditorPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ExportConfigPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 15 | 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ExportPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ExportPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("Export.Title")] 7 | public sealed partial class ExportPage : Page 8 | { 9 | public ExportPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/GeneralPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/GeneralPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("General.Title")] 7 | public sealed partial class GeneralPage : Page 8 | { 9 | public GeneralPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ImagePage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ImagePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("Image.Title")] 7 | public sealed partial class ImagePage : Page 8 | { 9 | public ImagePage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ImageUploadPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ImageUploadPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("ImageUpload.Title")] 7 | public sealed partial class ImageUploadPage : Page 8 | { 9 | public ImageUploadPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ShortcutPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ShortcutPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("Shortcut.Title")] 7 | public sealed partial class ShortcutPage : Page 8 | { 9 | public ShortcutPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/UploadConfigPage.xaml: -------------------------------------------------------------------------------- 1 |  12 | 15 | 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ViewPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Pages/SettingPages/ViewPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Typedown.Core.Utilities; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace Typedown.Core.Pages.SettingPages 5 | { 6 | [Locale("View.Title")] 7 | public sealed partial class ViewPage : Page 8 | { 9 | public ViewPage() 10 | { 11 | this.InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("Typedown.Core")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Typedown.Core")] 13 | [assembly: AssemblyCopyright("Copyright © 2022")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 程序集的版本信息由下列四个值组成: 18 | // 19 | // 主版本 20 | // 次版本 21 | // 生成号 22 | // 修订号 23 | // 24 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 25 | //通过使用 "*",如下所示: 26 | // [assembly: AssemblyVersion("1.0.*")] 27 | [assembly: AssemblyVersion("1.2.18.0")] 28 | [assembly: AssemblyFileVersion("1.2.18.0")] 29 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /Dev/Typedown.Core/Properties/Typedown.Core.rd.xml: -------------------------------------------------------------------------------- 1 | 2 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Resources.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Windows.UI.Xaml; 7 | 8 | namespace Typedown.Core 9 | { 10 | public class Resources : ResourceDictionary 11 | { 12 | public Resources() 13 | { 14 | MergedDictionaries.Add(new Microsoft.UI.Xaml.Controls.XamlControlsResources()); 15 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/Button.xaml") }); 16 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ComboBox.xaml") }); 17 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ContentDialog.xaml") }); 18 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ToggleSwitch.xaml") }); 19 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Converters.xaml") }); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Resources/Converters.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Utilities/CommandLine.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace Typedown.Core.Utilities 4 | { 5 | public static class CommandLine 6 | { 7 | public static string GetOpenFilePath(string[] commandLineArgs) 8 | { 9 | return commandLineArgs?.Where(FileTypeHelper.IsMarkdownFile).FirstOrDefault(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Utilities/ControlExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace Typedown.Core.Utilities 6 | { 7 | public static class ControlExtensions 8 | { 9 | public static DependencyObject GetTemplateChild(this Control control, string childName) 10 | { 11 | var method = typeof(Control).GetMethod("GetTemplateChild", BindingFlags.NonPublic | BindingFlags.Instance); 12 | return method.Invoke(control, new object[] { childName }) as DependencyObject; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Utilities/Log.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Typedown.Core.Controls; 4 | 5 | namespace Typedown.Core.Utilities 6 | { 7 | public static class Log 8 | { 9 | public static Task Report(string type, string content) 10 | { 11 | return Task.Run(() => Common.Post("https://typedown.ownbox.cn/report", new 12 | { 13 | version = AboutApp.GetAppVersion(), 14 | system = Environment.OSVersion.VersionString, 15 | type, 16 | content, 17 | })); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Utilities/NumberUnit.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Typedown.Core.Models; 3 | 4 | namespace Typedown.Core.Utilities 5 | { 6 | public static class Units 7 | { 8 | public static NumberUnit Centimeter { get; } = new("cm", 1); 9 | 10 | public static NumberUnit Inch { get; } = new("in", 0.3937007874); 11 | 12 | public static IReadOnlyList LengthUnits { get; } = new List() { Centimeter, Inch }; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Dev/Typedown.Core/Utilities/PInvoke/PInvoke.Kernel32.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.InteropServices; 3 | 4 | namespace Typedown.Core.Utilities 5 | { 6 | public static partial class PInvoke 7 | { 8 | [DllImport("kernel32.dll", ExactSpelling = true)] 9 | public static extern uint GetCurrentThreadId(); 10 | 11 | [DllImport("kernel32.dll", ExactSpelling = true)] 12 | [return: MarshalAs(UnmanagedType.Bool)] 13 | public static extern bool QueryPerformanceFrequency(out long frequency); 14 | 15 | [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", CharSet = CharSet.Unicode, ExactSpelling = true)] 16 | public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPWStr)] string lpFileName); 17 | 18 | [DllImport("kernel32.dll", EntryPoint = "GetModuleHandleW", CharSet = CharSet.Unicode, ExactSpelling = true)] 19 | public static extern nint GetModuleHandle([MarshalAs(UnmanagedType.LPWStr)] string lpModuleName); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true 5 | }, 6 | "extends": [ 7 | "eslint:recommended", 8 | "plugin:react/recommended", 9 | "plugin:react-hooks/recommended", 10 | "plugin:@typescript-eslint/recommended" 11 | ], 12 | "parser": "@typescript-eslint/parser", 13 | "parserOptions": { 14 | "ecmaFeatures": { 15 | "jsx": true 16 | }, 17 | "ecmaVersion": "latest", 18 | "sourceType": "module" 19 | }, 20 | "plugins": [ 21 | "react", 22 | "@typescript-eslint" 23 | ], 24 | "rules": { 25 | "react/prop-types": "off", 26 | "@typescript-eslint/no-var-requires": "off", 27 | "@typescript-eslint/no-empty-function": "off", 28 | "no-redeclare": "off", 29 | "@typescript-eslint/no-this-alias": "off", 30 | "no-prototype-builtins": "off", 31 | "@typescript-eslint/no-explicit-any": "off", 32 | "no-unreachable": "off" 33 | } 34 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Typedown.Editor", 6 | "type": "chrome", 7 | "request": "attach", 8 | "port": 9222, 9 | "webRoot": "${workspaceFolder}" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Typedown 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/App.scss: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | min-width: 400px; 4 | } 5 | 6 | :root::-webkit-scrollbar { 7 | width: 0; 8 | display: none; 9 | } 10 | 11 | .CodeMirror-sizer { 12 | margin-bottom: 64px !important; 13 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Editor from 'components/Editor'; 3 | import ErrorBoundary from 'components/ErrorBoundary'; 4 | import 'services/theme' 5 | import 'services/scrollbar' 6 | import 'services/localization' 7 | import './App.scss'; 8 | 9 | document.oncontextmenu = () => false; 10 | 11 | function App() { 12 | return ( 13 | 14 | 15 | 16 | ); 17 | } 18 | 19 | export default App; 20 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/add_close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/align_center.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/align_left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/align_right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/bullet_list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/delete.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/enter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/format_clear.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/format_emphasis.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/format_link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/format_underline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/header_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/header_4.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/horizontal_line.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/html.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/image_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_dark.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/image_dark_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_dark_fail.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/image_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_light.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/image_light_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_light_fail.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/mermaid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/new_table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/paragraph.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/quote.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/sequence.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/table_add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/icons/todolist.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_center/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_center/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_center/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_left/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_left/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_left/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_right/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_right/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/algin_right/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/bullet_list/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/bullet_list/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/bullet_list/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/chart/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/chart/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/chart/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/code/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/code/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/code/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/copy/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/copy/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/copy/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/delete/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/delete/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/delete/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/flowchart/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/flowchart/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/flowchart/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/footnote/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/footnote/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/footnote/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_clear/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_clear/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_clear/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_image/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_image/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_link/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_link/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_link/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_math/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_math/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_math/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strike/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strike/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strike/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strong/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strong/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_strong/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_underline/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_underline/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/format_underline/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/front_matter/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/front_matter/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/front_matter/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_1/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_1/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_1/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_2/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_2/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_2/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_3/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_3/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_3/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_4/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_4/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_4/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_5/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_5/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_5/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_6/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_6/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/heading_6/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/highlight/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/highlight/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/highlight/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/html/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/html/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/html/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/imageEdit/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/imageEdit/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/imageEdit/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_delete/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_delete/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_delete/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_fail/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_fail/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/image_fail/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/inline_image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/inline_image/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/inline_image/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/link_jump/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/link_jump/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/link_jump/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/math/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/math/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/math/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/mermaid/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/mermaid/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/mermaid/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/new_table/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/new_table/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/new_table/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/order_list/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/order_list/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/order_list/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/paragraph/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/paragraph/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/paragraph/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/plantuml/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/plantuml/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/plantuml/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote_block/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote_block/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/quote_block/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/sequence/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/sequence/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/sequence/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table/table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table/table@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table@2x.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table/table@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table@3x.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table_delete/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table_delete/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/table_delete/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/todolist/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/todolist/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/todolist/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/turninto/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/turninto/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/turninto/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/unlink/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/1.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/unlink/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/unlink/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/3.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/pngicon/warning/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/warning/2.png -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/styles/danielbd.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/styles/danielbd.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/styles/danielbd.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/styles/danielbd.woff2 -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/assets/styles/sequence-diagram.css: -------------------------------------------------------------------------------- 1 | /** js sequence diagrams 2 | * https://bramp.github.io/js-sequence-diagrams/ 3 | * (c) 2012-2017 Andrew Brampton (bramp.net) 4 | * Simplified BSD license. 5 | */ 6 | @font-face { 7 | font-family: 'danielbd'; 8 | src: url('danielbd.woff2') format('woff2'), 9 | url('danielbd.woff') format('woff'); 10 | font-weight: normal; 11 | font-style: normal; 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Editor/index.scss: -------------------------------------------------------------------------------- 1 | .react-codemirror2 { 2 | height: 100%; 3 | } 4 | 5 | .CodeMirror { 6 | height: auto !important; 7 | } 8 | 9 | .CodeMirror-scroll { 10 | min-height: calc(100vh - 48px); 11 | cursor: text; 12 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Editor/type.d.ts: -------------------------------------------------------------------------------- 1 | 2 | interface IExportArgs { 3 | type: string, 4 | context: unknown, 5 | basePath: string, 6 | title: string, 7 | options: object | undefined 8 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/ErrorBoundary/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { remote } from "services/remote"; 3 | 4 | class ErrorBoundary extends React.Component { 5 | 6 | constructor(props) { 7 | super(props); 8 | this.state = { hasError: false }; 9 | } 10 | 11 | static getDerivedStateFromError() { 12 | return { hasError: true }; 13 | } 14 | 15 | componentDidCatch(error, errorInfo) { 16 | remote.unhandledException(error + '\n\n' + JSON.stringify(errorInfo)); 17 | } 18 | 19 | render() { 20 | if (this.state.hasError) { 21 | return <>; 22 | } 23 | return this.props.children; 24 | } 25 | } 26 | 27 | export default ErrorBoundary -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/eventHandler/clipboard.js: -------------------------------------------------------------------------------- 1 | class Clipboard { 2 | constructor(muya) { 3 | this.muya = muya 4 | this.listen() 5 | } 6 | 7 | listen() { 8 | this.contentState = this.muya.contentState 9 | } 10 | 11 | copy({ type, copyInfo }) { 12 | this.contentState.copyHandler(type, copyInfo) 13 | } 14 | 15 | cut({ type, copyInfo }) { 16 | this.contentState.copyHandler(type, copyInfo) 17 | this.contentState.cutHandler() 18 | } 19 | 20 | paste({ type, text, html }) { 21 | this.contentState.pasteHandler(type, text ?? '', html ?? '') 22 | } 23 | 24 | } 25 | 26 | export default Clipboard 27 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/eventHandler/resize.js: -------------------------------------------------------------------------------- 1 | // import resizeCodeBlockLineNumber from '../utils/resizeCodeLineNumber' 2 | // import { throttle } from '../utils' 3 | 4 | class Resize { 5 | constructor (muya) { 6 | this.muya = muya 7 | this.listen() 8 | } 9 | 10 | listen () { 11 | // FIXME: Disabled due to #1648. 12 | // const { codeBlockLineNumbers } = this.muya.options 13 | // if (!codeBlockLineNumbers) { 14 | // return 15 | // } 16 | // 17 | // window.addEventListener('resize', throttle(() => { 18 | // const codeBlocks = document.querySelectorAll('pre.line-numbers') 19 | // if (codeBlocks.length) { 20 | // for (const ele of codeBlocks) { 21 | // resizeCodeBlockLineNumber(ele) 22 | // } 23 | // } 24 | // }, 300)) 25 | } 26 | } 27 | 28 | export default Resize 29 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/marked/README.md: -------------------------------------------------------------------------------- 1 | # Marked 2 | 3 | This folder contains a patched [Marked.js](https://github.com/markedjs/marked/) version based on `v0.8.2` and bug fixes from `v1.2.5`, no breaking changes from `v1.0.0` are included. 4 | 5 | ## Changes 6 | 7 | ### Features 8 | 9 | - Markdown Extra: frontmatter and inline and block math 10 | - GFM like: emojis 11 | 12 | ### (Inline) Lexer 13 | 14 | - `disableInline` mode 15 | - Custom list and list item implementation based on an older marked.js version 16 | - Slightly modified definition due `disableInline` 17 | - More token information like list item bullet type 18 | 19 | ### Renderer 20 | 21 | - Emoji renderer 22 | - Frontmatter renderer 23 | - Inline and block (`multiplemath`) math renderer 24 | 25 | ## License 26 | 27 | [MIT](LICENSE) 28 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/index.js: -------------------------------------------------------------------------------- 1 | import renderBlock from './renderBlock' 2 | import renderLeafBlock from './renderLeafBlock' 3 | import renderContainerBlock from './renderContainerBlock' 4 | import renderIcon from './renderIcon' 5 | 6 | export default { 7 | renderBlock, 8 | renderLeafBlock, 9 | renderContainerBlock, 10 | renderIcon 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderBlock.js: -------------------------------------------------------------------------------- 1 | /** 2 | * [renderBlock render one block, no matter it is a container block or text block] 3 | */ 4 | export default function renderBlock (parent, block, activeBlocks, matches, useCache = false) { 5 | const method = Array.isArray(block.children) && block.children.length > 0 6 | ? 'renderContainerBlock' 7 | : 'renderLeafBlock' 8 | 9 | return this[method](parent, block, activeBlocks, matches, useCache) 10 | } 11 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderContainerEditIcon.js: -------------------------------------------------------------------------------- 1 | import { h } from '../snabbdom' 2 | import { CLASS_OR_ID } from '../../../config' 3 | 4 | export const renderEditIcon = () => { 5 | const selector = `a.${CLASS_OR_ID.AG_CONTAINER_ICON}` 6 | 7 | const iconVnode = h(`span.icon`, { 8 | style: { 9 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"', 10 | 'margin-top':'2px', 11 | 'font-size': '8px', 12 | } 13 | }, String.fromCharCode(parseInt('E70F', 16))) 14 | 15 | return h(selector, { 16 | attrs: { 17 | contenteditable: 'false' 18 | } 19 | }, iconVnode) 20 | } 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderCopyButton.js: -------------------------------------------------------------------------------- 1 | import { h } from '../snabbdom' 2 | 3 | const renderCopyButton = () => { 4 | const selector = 'a.ag-code-copy' 5 | 6 | const iconVnode = h(`span.icon`, { 7 | style: { 8 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"', 9 | 'font-size': '16px' 10 | } 11 | }, String.fromCharCode(parseInt('E8C8', 16))) 12 | 13 | return h(selector, { 14 | attrs: { 15 | 'data-tooltip': 'CopyContent', 16 | contenteditable: 'false' 17 | } 18 | }, iconVnode) 19 | } 20 | 21 | export default renderCopyButton 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderFootnoteJump.js: -------------------------------------------------------------------------------- 1 | import { h } from '../snabbdom' 2 | 3 | export const footnoteJumpIcon = () => { 4 | return h('span.ag-footnote-backlink', { 5 | style: { 6 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"', 7 | 'font-size': '12px', 8 | } 9 | }, String.fromCharCode(parseInt('EB97', 16))) 10 | } 11 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderLineNumber.js: -------------------------------------------------------------------------------- 1 | import { h } from '../snabbdom' 2 | 3 | const NEW_LINE_EXP = /\n(?!$)/g 4 | 5 | const renderLineNumberRows = codeContent => { 6 | const { text } = codeContent 7 | const match = text.match(NEW_LINE_EXP) 8 | let linesNum = match ? match.length + 1 : 1 9 | if (text.endsWith('\n')) { 10 | linesNum++ 11 | } 12 | const data = { 13 | attrs: { 14 | 'aria-hidden': true 15 | } 16 | } 17 | const children = [...new Array(linesNum)].map(() => h('span')) 18 | 19 | return h('span.line-numbers-rows', data, children) 20 | } 21 | 22 | export default renderLineNumberRows 23 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderTableDargBar.js: -------------------------------------------------------------------------------- 1 | import { h } from '../snabbdom' 2 | 3 | export const renderLeftBar = () => { 4 | return h('span.ag-drag-handler.left', { 5 | attrs: { contenteditable: 'false' } 6 | }) 7 | } 8 | 9 | export const renderBottomBar = () => { 10 | return h('span.ag-drag-handler.bottom', { 11 | attrs: { contenteditable: 'false' } 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/autoLinkExtension.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | import { sanitizeHyperlink } from '../../../utils/url' 3 | 4 | // render auto_link to vdom 5 | export default function autoLinkExtension (h, cursor, block, token, outerClass) { 6 | const { linkType, www, url, email } = token 7 | const { start, end } = token.range 8 | 9 | const content = this.highlight(h, block, start, end, token) 10 | const hyperlink = linkType === 'www' ? encodeURI(`http://${www}`) : (linkType === 'url' ? encodeURI(url) : `mailto:${email}`) 11 | 12 | return [ 13 | h(`a.${CLASS_OR_ID.AG_INLINE_RULE}.${CLASS_OR_ID.AG_AUTO_LINK_EXTENSION}`, { 14 | attrs: { 15 | spellcheck: 'false' 16 | }, 17 | props: { 18 | href: sanitizeHyperlink(hyperlink), 19 | target: '_blank' 20 | } 21 | }, content) 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/backlash.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function backlash (h, cursor, block, token, outerClass) { 4 | const className = this.getClassName(outerClass, block, token, cursor) 5 | const { start, end } = token.range 6 | const content = this.highlight(h, block, start, end, token) 7 | 8 | return [ 9 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, content) 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/backlashInToken.js: -------------------------------------------------------------------------------- 1 | import { union, isEven } from '../../../utils' 2 | import { CLASS_OR_ID } from '../../../config' 3 | // TODO HIGHLIGHT 4 | export default function backlashInToken (h, backlashes, outerClass, start, token) { 5 | const { highlights = [] } = token 6 | const chunks = backlashes.split('') 7 | const len = chunks.length 8 | const result = [] 9 | let i 10 | 11 | for (i = 0; i < len; i++) { 12 | const chunk = chunks[i] 13 | const light = highlights.filter(light => union({ start: start + i, end: start + i + 1 }, light)) 14 | let selector = 'span' 15 | if (light.length) { 16 | const className = this.getHighlightClassName(light[0].active) 17 | selector += `.${className}` 18 | } 19 | if (isEven(i)) { 20 | result.push( 21 | h(`${selector}.${outerClass}`, chunk) 22 | ) 23 | } else { 24 | result.push( 25 | h(`${selector}.${CLASS_OR_ID.AG_BACKLASH}`, chunk) 26 | ) 27 | } 28 | } 29 | 30 | return result 31 | } 32 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/codeFense.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function codeFense (h, cursor, block, token, outerClass) { 4 | const { start, end } = token.range 5 | const { marker } = token 6 | 7 | const markerContent = this.highlight(h, block, start, start + marker.length, token) 8 | const content = this.highlight(h, block, start + marker.length, end, token) 9 | 10 | return [ 11 | h(`span.${CLASS_OR_ID.AG_GRAY}`, markerContent), 12 | h(`span.${CLASS_OR_ID.AG_LANGUAGE}`, { 13 | attrs: { 14 | spellcheck: 'false' 15 | } 16 | }, content) 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/del.js: -------------------------------------------------------------------------------- 1 | export default function del (h, cursor, block, token, outerClass) { 2 | return this.delEmStrongFac('del', h, cursor, block, token, outerClass) 3 | } 4 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/em.js: -------------------------------------------------------------------------------- 1 | export default function em (h, cursor, block, token, outerClass) { 2 | return this.delEmStrongFac('em', h, cursor, block, token, outerClass) 3 | } 4 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/footnoteIdentifier.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function footnoteIdentifier (h, cursor, block, token, outerClass) { 4 | const className = this.getClassName(outerClass, block, token, cursor) 5 | const { marker } = token 6 | const { start, end } = token.range 7 | 8 | const startMarker = this.highlight(h, block, start, start + marker.length, token) 9 | const endMarker = this.highlight(h, block, end - 1, end, token) 10 | const content = this.highlight(h, block, start + marker.length, end - 1, token) 11 | 12 | return [ 13 | h(`sup#noteref-${token.content}.${CLASS_OR_ID.AG_INLINE_FOOTNOTE_IDENTIFIER}.${CLASS_OR_ID.AG_INLINE_RULE}`, [ 14 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker), 15 | h('a', { 16 | attrs: { 17 | spellcheck: 'false' 18 | } 19 | }, content), 20 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker) 21 | ]) 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/hardLineBreak.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function softLineBreak (h, cursor, block, token, outerClass) { 4 | const { spaces, lineBreak, isAtEnd } = token 5 | const className = CLASS_OR_ID.AG_HARD_LINE_BREAK 6 | const spaceClass = CLASS_OR_ID.AG_HARD_LINE_BREAK_SPACE 7 | if (isAtEnd) { 8 | return [ 9 | h(`span.${className}`, h(`span.${spaceClass}`, spaces)), 10 | h(`span.${CLASS_OR_ID.AG_LINE_END}`, lineBreak) 11 | ] 12 | } else { 13 | return [ 14 | h(`span.${className}`, [h(`span.${spaceClass}`, spaces), lineBreak]) 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/header.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function header (h, cursor, block, token, outerClass) { 4 | const { content } = token 5 | const { start, end } = token.range 6 | const className = this.getClassName(outerClass, block, { 7 | range: { 8 | start, 9 | end: end - content.length 10 | } 11 | }, cursor) 12 | const markerVnode = this.highlight(h, block, start, end - content.length, token) 13 | const contentVnode = this.highlight(h, block, end - content.length, end, token) 14 | const spaceSelector = className === CLASS_OR_ID.AG_HIDE 15 | ? `span.${CLASS_OR_ID.AG_HEADER_TIGHT_SPACE}.${CLASS_OR_ID.AG_REMOVE}` 16 | : `span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}` 17 | 18 | return [ 19 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, markerVnode), 20 | h(spaceSelector, contentVnode) 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/hr.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function hr (h, cursor, block, token, outerClass) { 4 | const { start, end } = token.range 5 | const content = this.highlight(h, block, start, end, token) 6 | return [ 7 | h(`span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}`, content) 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/htmlEscape.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | import escapeCharactersMap from '../../escapeCharacter' 3 | 4 | export default function htmlEscape (h, cursor, block, token, outerClass) { 5 | const className = this.getClassName(outerClass, block, token, cursor) 6 | const { escapeCharacter } = token 7 | const { start, end } = token.range 8 | 9 | const content = this.highlight(h, block, start, end, token) 10 | 11 | return [ 12 | h(`span.${className}.${CLASS_OR_ID.AG_HTML_ESCAPE}`, { 13 | dataset: { 14 | character: escapeCharactersMap[escapeCharacter] 15 | } 16 | }, content) 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/inlineCode.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function inlineCode (h, cursor, block, token, outerClass) { 4 | const className = this.getClassName(outerClass, block, token, cursor) 5 | const { marker } = token 6 | const { start, end } = token.range 7 | 8 | const startMarker = this.highlight(h, block, start, start + marker.length, token) 9 | const endMarker = this.highlight(h, block, end - marker.length, end, token) 10 | const content = this.highlight(h, block, start + marker.length, end - marker.length, token) 11 | 12 | return [ 13 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker), 14 | h(`code.${CLASS_OR_ID.AG_INLINE_RULE}`, { 15 | attrs: { 16 | spellcheck: 'false' 17 | } 18 | }, content), 19 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker) 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/multipleMath.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function multipleMath (h, cursor, block, token, outerClass) { 4 | const { start, end } = token.range 5 | const content = this.highlight(h, block, start, end, token) 6 | return [ 7 | h(`span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}`, content) 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/softLineBreak.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function hardLineBreak (h, cursor, block, token, outerClass) { 4 | const { lineBreak, isAtEnd } = token 5 | let selector = `span.${CLASS_OR_ID.AG_SOFT_LINE_BREAK}` 6 | if (isAtEnd) { 7 | selector += `.${CLASS_OR_ID.AG_LINE_END}` 8 | } 9 | 10 | return [ 11 | h(selector, lineBreak) 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/strong.js: -------------------------------------------------------------------------------- 1 | export default function strong (h, cursor, block, token, outerClass) { 2 | return this.delEmStrongFac('strong', h, cursor, block, token, outerClass) 3 | } 4 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/superSubScript.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../../../config' 2 | 3 | export default function superSubScript (h, cursor, block, token, outerClass) { 4 | const className = this.getClassName(outerClass, block, token, cursor) 5 | const { marker } = token 6 | const { start, end } = token.range 7 | 8 | const startMarker = this.highlight(h, block, start, start + marker.length, token) 9 | const endMarker = this.highlight(h, block, end - marker.length, end, token) 10 | const content = this.highlight(h, block, start + marker.length, end - marker.length, token) 11 | const tagName = marker === '^' ? 'sup' : 'sub' 12 | 13 | return [ 14 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker), 15 | h(`${tagName}.${CLASS_OR_ID.AG_INLINE_RULE}`, { 16 | attrs: { 17 | spellcheck: 'false' 18 | } 19 | }, content), 20 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker) 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/tailHeader.js: -------------------------------------------------------------------------------- 1 | export default function tailHeader (h, cursor, block, token, outerClass) { 2 | const className = this.getClassName(outerClass, block, token, cursor) 3 | const { start, end } = token.range 4 | const content = this.highlight(h, block, start, end, token) 5 | if (/^h\d$/.test(block.type)) { 6 | return [ 7 | h(`span.${className}`, content) 8 | ] 9 | } else { 10 | return content 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/text.js: -------------------------------------------------------------------------------- 1 | // render token of text type to vdom. 2 | export default function text (h, cursor, block, token) { 3 | const { start, end } = token.range 4 | return [ 5 | h('span.ag-plain-text', this.highlight(h, block, start, end, token)) 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/sequence.js: -------------------------------------------------------------------------------- 1 | 2 | import Diagram from '../../../../../assets/libs/sequence-diagram-snap' 3 | import '../../../../../assets/styles/sequence-diagram.css' 4 | 5 | export default Diagram 6 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/parser/render/snabbdom.js: -------------------------------------------------------------------------------- 1 | import { 2 | init, 3 | classModule, 4 | attributesModule, 5 | datasetModule, 6 | propsModule, 7 | styleModule, 8 | eventListenersModule, 9 | h as sh, 10 | toVNode as sToVNode 11 | } from 'snabbdom' 12 | 13 | export const patch = init([ 14 | classModule, 15 | attributesModule, 16 | styleModule, 17 | propsModule, 18 | datasetModule, 19 | eventListenersModule 20 | ]) 21 | 22 | export const h = sh 23 | export const toVNode = sToVNode 24 | 25 | export const toHTML = require('snabbdom-to-html') // helper function for convert vnode to HTML string 26 | export const htmlToVNode = html => { // helper function for convert html to vnode 27 | const wrapper = document.createElement('div') 28 | wrapper.innerHTML = html 29 | 30 | return toVNode(wrapper).children 31 | } 32 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/fileIcons/index.js: -------------------------------------------------------------------------------- 1 | // Because the sidebar also use the file icons, So I put this file out of floatBox directory. 2 | import '@marktext/file-icons/build/index.css' 3 | import fileIcons from '@marktext/file-icons' 4 | 5 | fileIcons.getClassByName = function (name) { 6 | const icon = fileIcons.matchName(name) 7 | 8 | return icon ? icon.getClass(0, false) : null 9 | } 10 | 11 | fileIcons.getClassByLanguage = function (lang) { 12 | const icon = fileIcons.matchLanguage(lang) 13 | 14 | return icon ? icon.getClass(0, false) : null 15 | } 16 | 17 | export default fileIcons 18 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/footnoteTool/index.css: -------------------------------------------------------------------------------- 1 | .ag-footnote-tool-container { 2 | width: 300px; 3 | border-radius: 5px; 4 | } 5 | 6 | .ag-footnote-tool-container .ag-footnote-tool>div { 7 | display: flex; 8 | height: 35px; 9 | align-items: center; 10 | color: var(--editorColor); 11 | font-size: 12px; 12 | padding: 0 10px; 13 | } 14 | 15 | .ag-footnote-tool .text { 16 | text-overflow: ellipsis; 17 | overflow: hidden; 18 | white-space: nowrap; 19 | flex: 1; 20 | } 21 | 22 | .ag-footnote-tool .btn { 23 | width: 40px; 24 | display: inline-block; 25 | cursor: pointer; 26 | } 27 | 28 | .ag-footnote-tool .icon-wrapper { 29 | width: 16px; 30 | height: 24px; 31 | margin-right: 6px; 32 | position: relative; 33 | } 34 | 35 | .ag-footnote-tool .icon-wrapper span.icon { 36 | display: inline-block; 37 | position: absolute; 38 | top: 0; 39 | height: 100%; 40 | width: 100%; 41 | overflow: hidden; 42 | color: var(--iconColor); 43 | transition: all .25s ease-in-out; 44 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/formatPicker.js: -------------------------------------------------------------------------------- 1 | import transport from 'services/transport' 2 | 3 | class FormatPicker { 4 | static pluginName = 'formatPicker' 5 | constructor(muya) { 6 | muya.eventCenter.subscribe('muya-format-picker', ({ reference, ...arg }) => { 7 | if (reference) { 8 | const boundingClientRect = reference.getBoundingClientRect() 9 | transport.postMessage('OpenFormatPicker', { ...arg, boundingClientRect }) 10 | } 11 | }) 12 | } 13 | } 14 | 15 | export default FormatPicker 16 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/frontMenu.js: -------------------------------------------------------------------------------- 1 | import transport from 'services/transport' 2 | 3 | class FrontMenu { 4 | static pluginName = 'frontMenu' 5 | 6 | constructor(muya) { 7 | muya.eventCenter.subscribe('muya-front-menu', ({ reference, ...arg }) => { 8 | if (reference) { 9 | const boundingClientRect = reference.getBoundingClientRect() 10 | transport.postMessage('OpenFrontMenu', { ...arg, boundingClientRect }) 11 | } 12 | }) 13 | 14 | this.onFrontMenuClosed = () => { 15 | const { contentState } = muya 16 | contentState.selectedBlock = null 17 | contentState.partialRender() 18 | }; 19 | 20 | transport.addListener('FrontMenuClosed', this.onFrontMenuClosed); 21 | } 22 | 23 | destroy() { 24 | transport.removeListener('FrontMenuClosed', this.onFrontMenuClosed); 25 | } 26 | 27 | } 28 | 29 | export default FrontMenu 30 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/linkTools.js: -------------------------------------------------------------------------------- 1 | class LinkTools { 2 | static pluginName = 'linkTools' 3 | 4 | constructor(muya) { 5 | const { eventCenter } = muya 6 | eventCenter.subscribe('muya-link-tools', ({ reference }) => { 7 | if (reference && !reference.getAttribute('data-tooltip')) { 8 | reference.setAttribute('data-tooltip', "CtrlAndClickOpenLink") 9 | muya.tooltip.mouseOver({ 10 | target: { 11 | closest: () => reference 12 | } 13 | }) 14 | } 15 | }) 16 | } 17 | 18 | } 19 | 20 | export default LinkTools 21 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/tablePicker.js: -------------------------------------------------------------------------------- 1 | import remote from 'services/remote/common' 2 | 3 | class TablePicker { 4 | static pluginName = 'tablePicker' 5 | constructor(muya) { 6 | muya.eventCenter.subscribe('muya-table-picker', async (data, reference, cb) => { 7 | const { rows, columns } = await remote.resizeTable({ rows: data.row + 1, columns: data.column + 1 }); 8 | cb(Math.max(rows - 1, 0), Math.max(columns - 1, 0)) 9 | }) 10 | } 11 | } 12 | 13 | export default TablePicker 14 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/ui/tableTools.js: -------------------------------------------------------------------------------- 1 | import transport from 'services/transport' 2 | 3 | class TableBarTools { 4 | static pluginName = 'tableBarTools' 5 | 6 | constructor(muya) { 7 | muya.eventCenter.subscribe('muya-table-bar', ({ reference, tableInfo }) => { 8 | if (reference) { 9 | const boundingClientRect = reference.getBoundingClientRect() 10 | transport.postMessage('OpenTableTools', { tableInfo, boundingClientRect }) 11 | } 12 | }) 13 | 14 | this.onEditTable = item => { 15 | muya.contentState.editTable(item) 16 | } 17 | 18 | transport.addListener('EditTable', this.onEditTable); 19 | } 20 | 21 | destroy() { 22 | transport.removeListener('EditTable', this.onEditTable); 23 | } 24 | 25 | } 26 | 27 | export default TableBarTools 28 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/cumputeCheckBoxStatus.js: -------------------------------------------------------------------------------- 1 | export const cumputeCheckboxStatus = function (parentCheckbox) { 2 | const children = parentCheckbox.parentElement.lastElementChild.children 3 | const len = children.length 4 | for (let i = 0; i < len; i++) { 5 | const checkbox = children[i].firstElementChild 6 | if (checkbox.checked === false) { 7 | return false 8 | } 9 | } 10 | return true 11 | } 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/domManipulate.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * [description `add` or `remove` className of element 4 | */ 5 | export const operateClassName = (element, ctrl, className) => { 6 | element.classList[ctrl](className) 7 | } 8 | 9 | export const insertBefore = (newNode, originNode) => { 10 | const parentNode = originNode.parentNode 11 | parentNode.insertBefore(newNode, originNode) 12 | } 13 | 14 | // DOM operations 15 | export const insertAfter = (newNode, originNode) => { 16 | const parentNode = originNode.parentNode 17 | 18 | if (originNode.nextSibling) { 19 | parentNode.insertBefore(newNode, originNode.nextSibling) 20 | } else { 21 | parentNode.appendChild(newNode) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/dompurify.js: -------------------------------------------------------------------------------- 1 | import { sanitize, isValidAttribute } from 'dompurify' 2 | 3 | export { isValidAttribute } 4 | 5 | export default sanitize 6 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/getLinkInfo.js: -------------------------------------------------------------------------------- 1 | import { findNearestParagraph } from '../selection/dom' 2 | import { tokenizer } from '../parser' 3 | 4 | export const getLinkInfo = a => { 5 | const paragraph = findNearestParagraph(a) 6 | const raw = a.getAttribute('data-raw') 7 | const start = a.getAttribute('data-start') 8 | const end = a.getAttribute('data-end') 9 | const tokens = tokenizer(raw) 10 | const token = tokens[0] 11 | const href = a.getAttribute('href') 12 | token.range = { 13 | start, 14 | end 15 | } 16 | return { 17 | key: paragraph.id, 18 | token, 19 | href 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/getParentCheckBox.js: -------------------------------------------------------------------------------- 1 | import { CLASS_OR_ID } from '../config' 2 | 3 | export const getParentCheckBox = function (checkbox) { 4 | const parent = checkbox.parentElement.parentElement.parentElement 5 | if (parent.id !== CLASS_OR_ID.AG_EDITOR_ID) { 6 | return parent.firstElementChild 7 | } else { 8 | return null 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/lib/utils/url.js: -------------------------------------------------------------------------------- 1 | import { isValidAttribute } from '../utils/dompurify' 2 | 3 | export const sanitizeHyperlink = rawLink => { 4 | if (rawLink && typeof rawLink === 'string' && isValidAttribute('a', 'href', rawLink)) { 5 | return rawLink 6 | } 7 | return '' 8 | } 9 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Bold.ttf -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-BoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-BoldOblique.ttf -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Oblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Oblique.ttf -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300italic.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600italic.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700italic.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-italic.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-regular.woff -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById('root') 10 | ); 11 | 12 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/services/localization.ts: -------------------------------------------------------------------------------- 1 | import { remote } from 'services/remote'; 2 | 3 | const names = [ 4 | 'InputFootnoteDefine', 5 | 'InputYAMLFrontMatter', 6 | 'InputMathFormula', 7 | 'InputLanguageIdentifier', 8 | 'ClickToAddAnImage', 9 | 'LoadImageFail', 10 | 'Footnote' 11 | ] 12 | 13 | remote.getStringResources({ names }).then(dic => { 14 | for (const key in dic) { 15 | document.documentElement.style.setProperty(`--${key}`, `'${dic[key]}'`) 16 | } 17 | }); -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/services/remote/index.ts: -------------------------------------------------------------------------------- 1 | import common from './common' 2 | 3 | const remote = { ...common } 4 | 5 | export { remote } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/services/scrollbar.ts: -------------------------------------------------------------------------------- 1 | import transport from "./transport" 2 | 3 | const postScrollState = () => { 4 | transport.postMessage('OnScroll', { 5 | viewportWidth: window.innerWidth, 6 | viewportHeight: window.innerHeight, 7 | maximumX: document.body.scrollWidth - window.innerWidth, 8 | maximumY: document.body.scrollHeight - window.innerHeight, 9 | scrollX: window.scrollX, 10 | scrollY: window.scrollY 11 | }) 12 | } 13 | 14 | const resizeObserver = new ResizeObserver(postScrollState) 15 | resizeObserver.observe(document.body) 16 | addEventListener('scroll', postScrollState) 17 | addEventListener('resize', postScrollState) 18 | 19 | transport.addListener<{ scrollX: number, scrollY: number }>('OnScroll', ({ scrollX, scrollY }) => { 20 | const equals = (a: number, b: number) => Math.abs(a - b) < 1 21 | if (!equals(scrollX, window.scrollX) || !equals(scrollY, window.scrollY)) 22 | window.scrollTo(scrollX, scrollY) 23 | }) -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /Dev/Typedown.Editor/src/types/global.d.ts: -------------------------------------------------------------------------------- 1 | 2 | export declare global { 3 | interface Window { 4 | chrome: { 5 | webview: { 6 | addEventListener: (eventName: string, handler: (arg: Event & { data: T }) => void) => void 7 | postMessage: (arg: T) => void 8 | } 9 | } 10 | basePath: string 11 | actualTheme: string 12 | } 13 | } -------------------------------------------------------------------------------- /Dev/Typedown.Editor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx", 22 | "baseUrl": "src" 23 | }, 24 | "include": [ 25 | "src" 26 | ] 27 | } -------------------------------------------------------------------------------- /Dev/Typedown/Assets/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown/Assets/logo.ico -------------------------------------------------------------------------------- /Dev/Typedown/EnvCheck.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Web.WebView2.Core; 2 | using System; 3 | using System.Threading.Tasks; 4 | using Typedown.Windows; 5 | 6 | namespace Typedown 7 | { 8 | public static class EnvCheck 9 | { 10 | public static bool IsWebView2Installed() 11 | { 12 | try 13 | { 14 | _ = CoreWebView2Environment.GetAvailableBrowserVersionString(); 15 | return true; 16 | } 17 | catch (Exception) 18 | { 19 | return false; 20 | } 21 | } 22 | 23 | public static async Task EnsureWebView2Installed() 24 | { 25 | if (IsWebView2Installed()) 26 | { 27 | return true; 28 | } 29 | return await WebViewInstallWindow.TryInstallWebView2(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Dev/Typedown/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /Dev/Typedown/MicrosoftEdgeWebview2Setup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown/MicrosoftEdgeWebview2Setup.exe -------------------------------------------------------------------------------- /Dev/Typedown/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Typedown.Core.Controls; 4 | using Typedown.Core.Utilities; 5 | 6 | namespace System.Runtime.CompilerServices 7 | { 8 | public static class IsExternalInit { } 9 | } 10 | 11 | namespace Typedown 12 | { 13 | public class Program 14 | { 15 | [STAThread] 16 | public static void Main() 17 | { 18 | AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; 19 | App.Launch(); 20 | } 21 | 22 | private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) 23 | { 24 | if (e.IsTerminating) 25 | { 26 | Log.Report("UnhandledException", e.ExceptionObject.ToString()).Wait(); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Dev/Typedown/Resources/.gitignore: -------------------------------------------------------------------------------- 1 | /Statics 2 | -------------------------------------------------------------------------------- /Dev/Typedown/Services/PowerShellService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Typedown.Core.Interfaces; 4 | 5 | namespace Typedown.Services 6 | { 7 | public class PowerShellService : IPowerShellService 8 | { 9 | public IEnumerable Invoke(string script, string command, params string[] parameters) 10 | { 11 | //using var powerShell = PowerShell.Create(); 12 | //powerShell.AddScript(script); 13 | //powerShell.Invoke(); 14 | //powerShell.Commands.Clear(); 15 | //powerShell.AddCommand(command).AddParameters(parameters); 16 | //var result = powerShell.Invoke(); 17 | //return result.Select(x => x.ToString()); 18 | throw new NotImplementedException("NotImplemented"); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Dev/Typedown/Utilities/ClipboardImage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing.Imaging; 4 | using System.IO; 5 | using System.Text; 6 | using Typedown.Core.Interfaces; 7 | 8 | namespace Typedown.Utilities 9 | { 10 | public class ClipboardImage : IClipboardImage 11 | { 12 | private readonly System.Drawing.Image image; 13 | 14 | public ClipboardImage(System.Drawing.Image image) 15 | { 16 | this.image = image; 17 | } 18 | 19 | public byte[] GetBytes() 20 | { 21 | using var stream = new MemoryStream(); 22 | image.Save(stream, ImageFormat.Png); 23 | return stream.ToArray(); 24 | } 25 | 26 | public void SaveAsPng(string path) 27 | { 28 | image.Save(path); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Dev/Typedown/Utilities/PrintHelper.cs: -------------------------------------------------------------------------------- 1 | using PdfiumViewer; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using System.Windows.Forms; 5 | 6 | namespace Typedown.Utilities 7 | { 8 | public static class PrintHelper 9 | { 10 | public static async Task PrintPDF(nint hWnd, Stream stream, string documentName = null) 11 | { 12 | await Task.Run(() => 13 | { 14 | using var pdfDoc = PdfDocument.Load(stream); 15 | using var printDoc = pdfDoc.CreatePrintDocument(); 16 | printDoc.DocumentName = documentName; 17 | using var dialog = new PrintDialog() { Document = printDoc, UseEXDialog = true }; 18 | var result = dialog.ShowDialog(new Win32Window(hWnd)); 19 | if (result == DialogResult.OK) 20 | printDoc.Print(); 21 | }); 22 | } 23 | 24 | private record Win32Window(nint Handle) : IWin32Window; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Tests/Typedown.Test/STATestMethodAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Threading; 6 | 7 | namespace Typedown.Test 8 | { 9 | public class STATestMethodAttribute : TestMethodAttribute 10 | { 11 | public override TestResult[] Execute(ITestMethod testMethod) 12 | { 13 | if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) 14 | return Invoke(testMethod); 15 | 16 | TestResult[] result = null; 17 | var thread = new Thread(() => result = Invoke(testMethod)); 18 | thread.SetApartmentState(ApartmentState.STA); 19 | thread.Start(); 20 | thread.Join(); 21 | return result; 22 | } 23 | 24 | private TestResult[] Invoke(ITestMethod testMethod) 25 | { 26 | return new[] { testMethod.Invoke(null) }; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tests/Typedown.Test/ServiceTests/ClipboardTest.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using Typedown.Services; 6 | 7 | namespace Typedown.Test.ServiceTests 8 | { 9 | [TestClass] 10 | public class ClipboardTest 11 | { 12 | public Clipboard GetDefaultClipboardService() 13 | { 14 | return new Clipboard(); 15 | } 16 | 17 | 18 | [STATestMethod] 19 | public void SetTextAndGetText_WithRandomText_CanSetAndGet() 20 | { 21 | var clipboard = GetDefaultClipboardService(); 22 | var text = new Random().Next().ToString(); 23 | clipboard.SetText(text); 24 | Assert.AreEqual(text, clipboard.GetText(Core.Interfaces.TextDataFormat.UnicodeText)); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Tests/Typedown.UITest/Typedown.UITest.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | latest 6 | false 7 | x64;x86 8 | Debug;Release;Debug_Local 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | all 18 | runtime; build; native; contentfiles; analyzers; buildtransitive 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Tests/Typedown.UITest/UnitTest1.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | 3 | namespace Typedown.UITest 4 | { 5 | [TestClass] 6 | public class UnitTest1: TestBase 7 | { 8 | [ClassInitialize] 9 | public static void Initialize(TestContext context) 10 | { 11 | InitializeEnvironment(context); 12 | } 13 | 14 | [ClassCleanup] 15 | public static void Cleanup() 16 | { 17 | CleanupEnvironment(); 18 | } 19 | 20 | [TestMethod] 21 | public void TestMethod1() 22 | { 23 | var menuBarFileItem = Session.FindElementByAccessibilityId("MenuBarFileItem"); 24 | menuBarFileItem.Click(); 25 | // Assert.IsNotNull(WindowRootLayout); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Tools/DatabaseMigration/Database.cs: -------------------------------------------------------------------------------- 1 | namespace Typedown.Core.Services 2 | { 3 | public class Database : AppDbContext 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tools/DatabaseMigration/Program.cs: -------------------------------------------------------------------------------- 1 | namespace DatabaseMigration 2 | { 3 | public class Program 4 | { 5 | public static void Main(string[] args) 6 | { 7 | // Add-Migration -s Tools\DatabaseMigration -p Tools\DatabaseMigration 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tools/TranslationTool/TextDictionaryItem.cs: -------------------------------------------------------------------------------- 1 | namespace TranslationTool 2 | { 3 | public class TextDictionaryItem 4 | { 5 | public string Table { get; set; } 6 | 7 | public string Name { get; set; } 8 | 9 | public string Comment { get; set; } 10 | 11 | public Dictionary Values { get; set; } = new(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tools/TranslationTool/TextResourceItem.cs: -------------------------------------------------------------------------------- 1 | namespace TranslationTool 2 | { 3 | public class TextResourceItem 4 | { 5 | public string Table { get; set; } 6 | 7 | public string Name { get; set; } 8 | 9 | public string Value { get; set; } 10 | 11 | public string Comment { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tools/TranslationTool/TranslationTool.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net6.0 6 | enable 7 | Debug;Release;Debug_Local 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | PreserveNewest 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/LargeTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/LargeTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/LargeTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/LargeTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/LargeTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Markdown.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SmallTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SmallTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SmallTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SmallTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SmallTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SplashScreen.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SplashScreen.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/SplashScreen.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square150x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square150x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square150x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square150x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-16.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-256.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-32.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-48.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-16.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-256.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-32.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-48.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/StoreLogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/StoreLogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/StoreLogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/StoreLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/StoreLogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Wide310x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-100.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Wide310x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-125.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Wide310x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-150.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/Assets/Wide310x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-400.png -------------------------------------------------------------------------------- /Tools/Typedown.Package/priconfig.packaging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Tools/XamlDesignApp/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/LockScreenLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/LockScreenLogo.scale-200.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/StoreLogo.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /Tools/XamlDesignApp/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Tools/XamlDesignApp/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Runtime.InteropServices.WindowsRuntime; 6 | using Windows.Foundation; 7 | using Windows.Foundation.Collections; 8 | using Windows.UI.Xaml; 9 | using Windows.UI.Xaml.Controls; 10 | using Windows.UI.Xaml.Controls.Primitives; 11 | using Windows.UI.Xaml.Data; 12 | using Windows.UI.Xaml.Input; 13 | using Windows.UI.Xaml.Media; 14 | using Windows.UI.Xaml.Navigation; 15 | 16 | // https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x804 上介绍了“空白页”项模板 17 | 18 | namespace XamlDesignApp 19 | { 20 | /// 21 | /// 可用于自身或导航至 Frame 内部的空白页。 22 | /// 23 | public sealed partial class MainPage : Page 24 | { 25 | public MainPage() 26 | { 27 | this.InitializeComponent(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("XamlDesignApp")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("XamlDesignApp")] 13 | [assembly: AssemblyCopyright("Copyright © 2023")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 程序集的版本信息由下列四个值组成: 18 | // 19 | // 主版本 20 | // 次版本 21 | // 生成号 22 | // 修订号 23 | // 24 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 25 | //通过使用 "*",如下所示: 26 | // [assembly: AssemblyVersion("1.0.*")] 27 | [assembly: AssemblyVersion("1.0.0.0")] 28 | [assembly: AssemblyFileVersion("1.0.0.0")] 29 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /Tools/XamlDesignApp/Properties/Default.rd.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/logo.png -------------------------------------------------------------------------------- /nupkgs/Typedown.XamlUI.1.0.1.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/nupkgs/Typedown.XamlUI.1.0.1.nupkg --------------------------------------------------------------------------------