├── .changeset ├── README.md ├── bright-crabs-look.md ├── config.json ├── curly-bugs-clean.md ├── cyan-kiwis-travel.md ├── dry-dryers-beg.md ├── eighty-clouds-tease.md ├── few-baboons-attack.md ├── gold-bottles-kneel.md ├── gold-snakes-care.md ├── great-shirts-turn.md ├── green-cycles-dance.md ├── healthy-baboons-live.md ├── honest-llamas-argue.md ├── hungry-knives-taste.md ├── large-apples-enjoy.md ├── late-flowers-dress.md ├── light-rice-try.md ├── nasty-pillows-breathe.md ├── neat-jokes-draw.md ├── olive-roses-study.md ├── pink-bees-carry.md ├── pre.json ├── rare-forks-rule.md ├── rare-kings-sit.md ├── real-trainers-turn.md ├── shy-seas-fly.md ├── tame-beds-attend.md ├── tough-sheep-scream.md ├── tricky-toys-walk.md └── young-onions-wink.md ├── .eslintignore ├── .eslintrc.js ├── .gitee └── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ └── feature-request.yml ├── .gitignore ├── .husky └── pre-commit ├── .lintstagedrc.json ├── .npmrc ├── .prettierrc.json ├── LICENSE ├── README.md ├── README.zh-CN.md ├── apps ├── demo │ ├── .eslintrc.cjs │ ├── favicon.svg │ ├── index.html │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── Editor │ │ │ │ ├── extensions │ │ │ │ │ └── mention-member │ │ │ │ │ │ ├── MentionListItemRender.tsx │ │ │ │ │ │ ├── MentionMemberNodeView.module.less │ │ │ │ │ │ ├── MentionMemberNodeView.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── mention-member.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ └── utils.ts │ │ │ ├── HeaderBar │ │ │ │ ├── index.css │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── InspectPanel │ │ │ │ ├── index.tsx │ │ │ │ └── userWorker.ts │ │ ├── contexts │ │ │ └── ThemeContext.tsx │ │ ├── index.less │ │ ├── index.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── legacy │ ├── .eslintrc.cjs │ ├── CHANGELOG.md │ ├── favicon.svg │ ├── index.html │ ├── package.json │ ├── rollup.config.js │ ├── src │ ├── demo │ │ ├── index.ts │ │ ├── mock.ts │ │ ├── mock_issues.json │ │ ├── mock_members.json │ │ ├── mock_pull_requests.json │ │ └── mock_specify_resources.json │ ├── editor.tsx │ ├── lib.ts │ ├── mentionLink.ts │ ├── type.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── babel.config.js ├── docs ├── CONTRIBUTING.md └── images │ ├── tide-screenshot.jpg │ └── tide.jpg ├── package.json ├── packages ├── common │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── commands │ │ │ ├── index.ts │ │ │ ├── liftListItem.ts │ │ │ ├── listBackspace.ts │ │ │ ├── markLeftExit.ts │ │ │ ├── sinkListItem.ts │ │ │ └── toggleList.ts │ │ ├── extensions │ │ │ ├── commands.ts │ │ │ ├── high-priority-keymap.ts │ │ │ ├── index.ts │ │ │ └── low-priority-keymap.ts │ │ ├── helpers │ │ │ ├── index.ts │ │ │ ├── isActive.ts │ │ │ ├── isList.ts │ │ │ ├── isListItem.ts │ │ │ ├── isMarkActive.ts │ │ │ ├── isWindows.ts │ │ │ ├── joinListBackwards.ts │ │ │ ├── joinListForwards.ts │ │ │ ├── listBackspace.ts │ │ │ ├── selectionInfo.ts │ │ │ └── transformer.ts │ │ ├── index.ts │ │ ├── inputRules │ │ │ ├── index.ts │ │ │ ├── textblockTypeInputRule.ts │ │ │ ├── wrapInListInputRule.ts │ │ │ └── wrappingInputRule.ts │ │ └── utilities │ │ │ └── list │ │ │ ├── list-command-dedent.ts │ │ │ ├── list-command-indent.ts │ │ │ └── list-commands.ts │ └── tsconfig.json ├── editor │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── EditorRender.tsx │ │ ├── TideEditor.ts │ │ ├── components │ │ │ ├── EditorContent.less │ │ │ ├── EditorContent.tsx │ │ │ ├── EditorLayout.less │ │ │ ├── EditorLayout.tsx │ │ │ ├── EditorMenu.tsx │ │ │ └── index.tsx │ │ ├── context │ │ │ └── EditorContext.tsx │ │ ├── index.ts │ │ └── types.ts │ └── tsconfig.json ├── eslint-config-custom │ ├── CHANGELOG.md │ ├── index.js │ └── package.json ├── extension-blockquote │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── blockquote.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-bold │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── bold.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-bullet-list │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── bullet-list.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-code-block │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── CodeBlockNodeView.less │ │ ├── CodeBlockNodeView.tsx │ │ ├── code-block.ts │ │ ├── index.ts │ │ ├── languages.ts │ │ └── utils.ts │ └── tsconfig.json ├── extension-code │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── code.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-emoji │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── EmojiPanel.less │ │ ├── EmojiPanel.tsx │ │ ├── InsertEmojiButton.tsx │ │ ├── emoji.ts │ │ ├── emojis.ts │ │ ├── index.ts │ │ ├── suggestion.ts │ │ └── utils.ts │ └── tsconfig.json ├── extension-horizontal-rule │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── horizontal-rule.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-image │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── NodeView │ │ │ ├── ImageBubbleMenu.tsx │ │ │ ├── ImageNodeView.less │ │ │ ├── ImageNodeView.tsx │ │ │ └── resize.tsx │ │ ├── image-extension.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-indentation │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── indentation.ts │ │ └── index.ts │ └── tsconfig.json ├── extension-italic │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── italic.ts │ └── tsconfig.json ├── extension-link │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ ├── link.ts │ │ └── menu │ │ │ ├── LinkBubbleMenu.tsx │ │ │ ├── LinkEditPopup.less │ │ │ └── LinkEditPopup.tsx │ └── tsconfig.json ├── extension-list-item │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── list-item.ts │ └── tsconfig.json ├── extension-lists-indentation │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── lists-indentation.ts │ └── tsconfig.json ├── extension-markdown │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── clipboardCopy.ts │ │ ├── clipboardPaste.ts │ │ ├── index.ts │ │ ├── markdown.ts │ │ └── utils.ts │ └── tsconfig.json ├── extension-mention │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── MentionList.tsx │ │ ├── index.ts │ │ ├── mention.ts │ │ └── utils.ts │ └── tsconfig.json ├── extension-menubar │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── MenuBar.less │ │ ├── MenuBar.tsx │ │ ├── MenuBarContext.tsx │ │ ├── TextBubbleMenu.tsx │ │ ├── components │ │ │ ├── Button.tsx │ │ │ ├── MenuBarDivider.tsx │ │ │ ├── MenuBarItem.tsx │ │ │ ├── Tooltip.tsx │ │ │ ├── index.ts │ │ │ └── items │ │ │ │ ├── Blockquote.tsx │ │ │ │ ├── Bold.tsx │ │ │ │ ├── BulletList.tsx │ │ │ │ ├── Code.tsx │ │ │ │ ├── CodeBlock.tsx │ │ │ │ ├── Emoji.tsx │ │ │ │ ├── Fullscreen.tsx │ │ │ │ ├── Heading.tsx │ │ │ │ ├── HorizontalRule.tsx │ │ │ │ ├── Image.tsx │ │ │ │ ├── Italic.tsx │ │ │ │ ├── Link.tsx │ │ │ │ ├── OrderedList.tsx │ │ │ │ ├── Redo.tsx │ │ │ │ ├── Strike.tsx │ │ │ │ ├── Table.tsx │ │ │ │ ├── TaskList.tsx │ │ │ │ ├── Undo.tsx │ │ │ │ └── index.ts │ │ ├── index.ts │ │ └── utils.ts │ └── tsconfig.json ├── extension-ordered-list │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── ordered-list.ts │ └── tsconfig.json ├── extension-strike │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── strike.ts │ └── tsconfig.json ├── extension-table │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── components │ │ │ ├── TableGrid.less │ │ │ └── TableGrid.tsx │ │ ├── index.ts │ │ ├── menu │ │ │ ├── InsertTableButton.less │ │ │ ├── InsertTableButton.tsx │ │ │ └── TableCellBubbleMenu.tsx │ │ ├── table-cell │ │ │ └── index.ts │ │ ├── table-header │ │ │ └── index.ts │ │ ├── table-row │ │ │ └── index.ts │ │ ├── table │ │ │ ├── TableView.ts │ │ │ ├── columnresizing.ts │ │ │ └── index.ts │ │ └── utilities │ │ │ └── index.ts │ └── tsconfig.json ├── extension-task-item │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── task-item.ts │ └── tsconfig.json ├── extension-uploader │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── image │ │ │ ├── placeholder.less │ │ │ ├── placeholder.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ └── types.ts │ └── tsconfig.json ├── react │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── BubbleMenu.tsx │ │ ├── Editor.ts │ │ ├── EditorContent.tsx │ │ ├── NodeViewContent.tsx │ │ ├── NodeViewWrapper.tsx │ │ ├── ReactNodeViewRenderer.tsx │ │ ├── ReactRenderer.tsx │ │ ├── SelectionBubbleMenu.tsx │ │ ├── index.ts │ │ ├── useEditor.ts │ │ ├── useReactNodeView.ts │ │ └── utils.ts │ └── tsconfig.json ├── starter-kit │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── index.ts │ │ └── starter-kit.ts │ └── tsconfig.json ├── theme │ ├── CHANGELOG.md │ ├── README.md │ ├── README.zh-CN.md │ ├── package.json │ ├── script.ts │ ├── src │ │ ├── index.tsx │ │ └── variable.less │ └── tsconfig.json └── tsconfig │ ├── CHANGELOG.md │ ├── base.json │ ├── package.json │ ├── react.json │ ├── type.d.ts │ └── vite.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── presets └── mentions │ ├── CHANGELOG.md │ ├── package.json │ ├── rollup.config.js │ ├── src │ ├── components │ │ ├── Avatar │ │ │ ├── getTextAvatarColor.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── Loading │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── MentionNoResult │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── contexts │ │ ├── constants.ts │ │ ├── context.tsx │ │ ├── index.ts │ │ ├── types.ts │ │ ├── useMergedBulkFetcher.ts │ │ └── useRemoteData.ts │ ├── index.ts │ ├── mention-issue │ │ ├── Icons │ │ │ ├── assets │ │ │ │ ├── type-1.svg │ │ │ │ ├── type-2.svg │ │ │ │ └── type-3.svg │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── ItemRender │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── NodeView │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── index.ts │ │ ├── mention-issue.tsx │ │ └── types.ts │ ├── mention-member │ │ ├── ItemRender │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── NodeView │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── index.ts │ │ ├── mention-member.tsx │ │ └── types.ts │ └── mention-pull-request │ │ ├── Icons │ │ ├── PullRequestIcon.tsx │ │ └── index.less │ │ ├── ItemRender │ │ ├── index.less │ │ └── index.tsx │ │ ├── NodeView │ │ ├── index.less │ │ └── index.tsx │ │ ├── index.ts │ │ ├── mention-pull-request.tsx │ │ └── types.ts │ └── tsconfig.json ├── script └── rollup.common.js └── turbo.json /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/bright-crabs-look.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | '@gitee/tide-presets-mentions': minor 30 | --- 31 | 32 | Fix code-block, emoji, bubble-menu bugs. 33 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": ["demo"] 11 | } 12 | -------------------------------------------------------------------------------- /.changeset/curly-bugs-clean.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | Fix mention, emoji, link bugs. 31 | -------------------------------------------------------------------------------- /.changeset/dry-dryers-beg.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | 'eslint-config-custom': minor 5 | '@gitee/tide-extension-blockquote': minor 6 | '@gitee/tide-extension-bold': minor 7 | '@gitee/tide-extension-bubble-menu': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-markdown': minor 28 | '@gitee/tide-react': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | --- 32 | 33 | legacy add options 34 | -------------------------------------------------------------------------------- /.changeset/eighty-clouds-tease.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | 'tsconfig': minor 30 | '@gitee/tide-presets-mentions': minor 31 | --- 32 | 33 | Remove @gitee/tide-extension-bubble-menu 34 | -------------------------------------------------------------------------------- /.changeset/few-baboons-attack.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | UI optimize. 31 | -------------------------------------------------------------------------------- /.changeset/gold-bottles-kneel.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | Fix bugs. 31 | -------------------------------------------------------------------------------- /.changeset/gold-snakes-care.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | '@gitee/tide-presets-mentions': minor 30 | --- 31 | 32 | Fix code-block select a empty paragraph throw error. 33 | -------------------------------------------------------------------------------- /.changeset/great-shirts-turn.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Fix @gitee/tide-legacy type error 35 | -------------------------------------------------------------------------------- /.changeset/green-cycles-dance.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-extension-image': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide-editor': minor 5 | '@gitee/tide-extension-blockquote': minor 6 | '@gitee/tide-extension-bold': minor 7 | '@gitee/tide-extension-bubble-menu': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | --- 30 | 31 | Bug fix and UI improvements. 32 | -------------------------------------------------------------------------------- /.changeset/healthy-baboons-live.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | Fix table tab, image click update. 31 | -------------------------------------------------------------------------------- /.changeset/honest-llamas-argue.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | --- 30 | 31 | Fix emoji undefined error from localStorage. 32 | -------------------------------------------------------------------------------- /.changeset/hungry-knives-taste.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | --- 30 | 31 | Fix types. 32 | -------------------------------------------------------------------------------- /.changeset/large-apples-enjoy.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | Refactor menubar, fix emoji, task list style. 31 | -------------------------------------------------------------------------------- /.changeset/late-flowers-dress.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-extension-bubble-menu': minor 3 | '@gitee/tide-extension-code-block': minor 4 | '@gitee/tide-extension-mention': minor 5 | '@gitee/tide-extension-menubar': minor 6 | '@gitee/tide-extension-emoji': minor 7 | '@gitee/tide-extension-image': minor 8 | '@gitee/tide-extension-table': minor 9 | '@gitee/tide-extension-link': minor 10 | '@gitee/tide-react': minor 11 | '@gitee/tide-common': minor 12 | '@gitee/tide-editor': minor 13 | '@gitee/tide-extension-blockquote': minor 14 | '@gitee/tide-extension-bold': minor 15 | '@gitee/tide-extension-bullet-list': minor 16 | '@gitee/tide-extension-code': minor 17 | '@gitee/tide-extension-horizontal-rule': minor 18 | '@gitee/tide-extension-italic': minor 19 | '@gitee/tide-extension-list-item': minor 20 | '@gitee/tide-extension-lists-indentation': minor 21 | '@gitee/tide-extension-markdown': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | Refactor @gitee/tide-extension-bubble-menu. 31 | -------------------------------------------------------------------------------- /.changeset/light-rice-try.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | 'eslint-config-custom': minor 5 | '@gitee/tide-extension-blockquote': minor 6 | '@gitee/tide-extension-bold': minor 7 | '@gitee/tide-extension-bubble-menu': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-markdown': minor 28 | '@gitee/tide-react': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | --- 32 | 33 | update legacy 34 | -------------------------------------------------------------------------------- /.changeset/nasty-pillows-breathe.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | 'eslint-config-custom': minor 5 | '@gitee/tide-extension-blockquote': minor 6 | '@gitee/tide-extension-bold': minor 7 | '@gitee/tide-extension-bubble-menu': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-markdown': minor 28 | '@gitee/tide-react': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | update mentions 35 | -------------------------------------------------------------------------------- /.changeset/neat-jokes-draw.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Fix EditorRender, EditorContent editor prop allow null 35 | -------------------------------------------------------------------------------- /.changeset/olive-roses-study.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Export EditorLayout, EditorMenu, EditorContent components 35 | -------------------------------------------------------------------------------- /.changeset/pink-bees-carry.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bubble-menu': minor 9 | '@gitee/tide-extension-bullet-list': minor 10 | '@gitee/tide-extension-code': minor 11 | '@gitee/tide-extension-code-block': minor 12 | '@gitee/tide-extension-emoji': minor 13 | '@gitee/tide-extension-horizontal-rule': minor 14 | '@gitee/tide-extension-image': minor 15 | '@gitee/tide-extension-indentation': minor 16 | '@gitee/tide-extension-italic': minor 17 | '@gitee/tide-extension-link': minor 18 | '@gitee/tide-extension-list-item': minor 19 | '@gitee/tide-extension-lists-indentation': minor 20 | '@gitee/tide-extension-markdown': minor 21 | '@gitee/tide-extension-mention': minor 22 | '@gitee/tide-extension-menubar': minor 23 | '@gitee/tide-extension-ordered-list': minor 24 | '@gitee/tide-extension-strike': minor 25 | '@gitee/tide-extension-table': minor 26 | '@gitee/tide-extension-task-item': minor 27 | '@gitee/tide-extension-uploader': minor 28 | '@gitee/tide-react': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Bump the version to 0.2.0-alpha.0 35 | -------------------------------------------------------------------------------- /.changeset/rare-forks-rule.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-menubar': minor 20 | '@gitee/tide-extension-ordered-list': minor 21 | '@gitee/tide-extension-strike': minor 22 | '@gitee/tide-extension-table': minor 23 | '@gitee/tide-extension-task-item': minor 24 | '@gitee/tide-extension-uploader': minor 25 | '@gitee/tide-markdown': minor 26 | '@gitee/tide-react': minor 27 | '@gitee/tide-theme': minor 28 | --- 29 | 30 | UI optimize and bug fix. 31 | -------------------------------------------------------------------------------- /.changeset/rare-kings-sit.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Fix emoji panel error, useEditor types, add repository to package.json 35 | -------------------------------------------------------------------------------- /.changeset/real-trainers-turn.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-common': minor 3 | '@gitee/tide-editor': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-italic': minor 14 | '@gitee/tide-extension-link': minor 15 | '@gitee/tide-extension-list-item': minor 16 | '@gitee/tide-extension-lists-indentation': minor 17 | '@gitee/tide-extension-markdown': minor 18 | '@gitee/tide-extension-mention': minor 19 | '@gitee/tide-extension-ordered-list': minor 20 | '@gitee/tide-extension-strike': minor 21 | '@gitee/tide-extension-table': minor 22 | '@gitee/tide-extension-task-item': minor 23 | '@gitee/tide-extension-uploader': minor 24 | '@gitee/tide-markdown': minor 25 | '@gitee/tide-react': minor 26 | --- 27 | 28 | Bump the first version. 29 | -------------------------------------------------------------------------------- /.changeset/shy-seas-fly.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Refactor @gitee/tide, use TideEditor class and useEditor hook 35 | -------------------------------------------------------------------------------- /.changeset/tame-beds-attend.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | 'eslint-config-custom': minor 5 | '@gitee/tide-extension-blockquote': minor 6 | '@gitee/tide-extension-bold': minor 7 | '@gitee/tide-extension-bubble-menu': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-markdown': minor 28 | '@gitee/tide-react': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | --- 32 | 33 | update build script 34 | -------------------------------------------------------------------------------- /.changeset/tough-sheep-scream.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide-extension-blockquote': minor 5 | '@gitee/tide-extension-bold': minor 6 | '@gitee/tide-extension-bubble-menu': minor 7 | '@gitee/tide-extension-bullet-list': minor 8 | '@gitee/tide-extension-code': minor 9 | '@gitee/tide-extension-code-block': minor 10 | '@gitee/tide-extension-emoji': minor 11 | '@gitee/tide-extension-horizontal-rule': minor 12 | '@gitee/tide-extension-image': minor 13 | '@gitee/tide-extension-indentation': minor 14 | '@gitee/tide-extension-italic': minor 15 | '@gitee/tide-extension-link': minor 16 | '@gitee/tide-extension-list-item': minor 17 | '@gitee/tide-extension-lists-indentation': minor 18 | '@gitee/tide-extension-markdown': minor 19 | '@gitee/tide-extension-mention': minor 20 | '@gitee/tide-extension-menubar': minor 21 | '@gitee/tide-extension-ordered-list': minor 22 | '@gitee/tide-extension-strike': minor 23 | '@gitee/tide-extension-table': minor 24 | '@gitee/tide-extension-task-item': minor 25 | '@gitee/tide-extension-uploader': minor 26 | '@gitee/tide-markdown': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-theme': minor 29 | '@gitee/tide-presets-mentions': minor 30 | --- 31 | 32 | feat(code-block): 选区为连续多个段落时创建代码块将合并内容 33 | -------------------------------------------------------------------------------- /.changeset/tricky-toys-walk.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide-legacy': minor 3 | '@gitee/tide-common': minor 4 | '@gitee/tide': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Bump the version to 0.2.0-beta.0 35 | -------------------------------------------------------------------------------- /.changeset/young-onions-wink.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@gitee/tide': minor 3 | '@gitee/tide-legacy': minor 4 | '@gitee/tide-common': minor 5 | 'eslint-config-custom': minor 6 | '@gitee/tide-extension-blockquote': minor 7 | '@gitee/tide-extension-bold': minor 8 | '@gitee/tide-extension-bullet-list': minor 9 | '@gitee/tide-extension-code': minor 10 | '@gitee/tide-extension-code-block': minor 11 | '@gitee/tide-extension-emoji': minor 12 | '@gitee/tide-extension-horizontal-rule': minor 13 | '@gitee/tide-extension-image': minor 14 | '@gitee/tide-extension-indentation': minor 15 | '@gitee/tide-extension-italic': minor 16 | '@gitee/tide-extension-link': minor 17 | '@gitee/tide-extension-list-item': minor 18 | '@gitee/tide-extension-lists-indentation': minor 19 | '@gitee/tide-extension-markdown': minor 20 | '@gitee/tide-extension-mention': minor 21 | '@gitee/tide-extension-menubar': minor 22 | '@gitee/tide-extension-ordered-list': minor 23 | '@gitee/tide-extension-strike': minor 24 | '@gitee/tide-extension-table': minor 25 | '@gitee/tide-extension-task-item': minor 26 | '@gitee/tide-extension-uploader': minor 27 | '@gitee/tide-react': minor 28 | '@gitee/tide-starter-kit': minor 29 | '@gitee/tide-theme': minor 30 | 'tsconfig': minor 31 | '@gitee/tide-presets-mentions': minor 32 | --- 33 | 34 | Add @gitee/tide-starter-kit extension 35 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | pnpm-lock.yaml 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ["custom"], 4 | }; 5 | -------------------------------------------------------------------------------- /.gitee/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: Bug 反馈 2 | description: Bug 反馈 3 | title: "[Bug]: " 4 | labels: ["bug"] 5 | assignees: 6 | - bluishoul 7 | body: 8 | - type: checkboxes 9 | attributes: 10 | label: 这个问题是否已经存在? 11 | options: 12 | - label: 我已经搜索过 [现有的问题](../issues),无重复问题出现 13 | required: true 14 | - type: textarea 15 | attributes: 16 | label: 如何复现 17 | description: 请详细告诉我们如何复现你遇到的问题。如果可以的话,上传任何关于 bug 的截图。 18 | validations: 19 | required: true 20 | - type: textarea 21 | attributes: 22 | label: 预期结果 23 | description: 请告诉我们你预期会发生什么。 24 | validations: 25 | -------------------------------------------------------------------------------- /.gitee/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.gitee/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- 1 | name: 功能/特性建议 2 | description: 向 Tide 提出一个功能/特性建议 3 | title: "[Feature]: " 4 | labels: ["feature"] 5 | body: 6 | - type: checkboxes 7 | attributes: 8 | label: 是否已存在相同的 Issue? 9 | description: 请搜索以查看此功能建议是否已存在。 10 | options: 11 | - label: 我搜索了[现有的 Issue](https://gitee.com/oschina/tide/issues),确认没有相同的 Issue 12 | required: true 13 | - type: textarea 14 | id: scene 15 | attributes: 16 | label: 功能场景 17 | description: 清晰并简洁地描述你遇到了什么问题,例如,当我...时,我总是感到困扰。 18 | validations: 19 | required: false 20 | - type: textarea 21 | id: solution 22 | attributes: 23 | label: 解决方案 24 | description: | 25 | 清晰并简洁地描述你希望 Tide 能够做什么。可以考虑附上一些展示你想象的内容,如:`图片` / `视频` / `代码示例` 26 | 27 | 如果这个是非要由 Tide 直接提供的能力,比如可以通过扩展或插件的方式提供,也许你考虑开发和发布这样的拓展包而不是提交 Issue。 28 | validations: 29 | required: true 30 | - type: textarea 31 | id: alternatives 32 | attributes: 33 | label: 你考虑过哪些替代方案? 34 | description: 清晰并简洁地描述你考虑过的任何替代解决方案或功能。 35 | validations: 36 | required: false 37 | - type: checkboxes 38 | attributes: 39 | label: 意向参与贡献 40 | options: 41 | - label: 我有意向参与具体功能的开发实现并将代码贡献回到上游社区 42 | required: false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .turbo 4 | *.log 5 | dist 6 | dist-ssr 7 | *.local 8 | .env 9 | .cache 10 | server/dist 11 | public/dist 12 | 13 | .idea 14 | .vscode 15 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | pnpm lint-staged 5 | -------------------------------------------------------------------------------- /.lintstagedrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "./**/*.{ts,tsx,js,jsx,md,json}": "prettier --write", 3 | "./**/*.{ts,tsx,js,jsx}": ["eslint --fix"] 4 | } 5 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers = true 2 | registry=https://registry.npmjs.org 3 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5" 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Gitee.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apps/demo/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ["custom"], 4 | }; 5 | -------------------------------------------------------------------------------- /apps/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | tide 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/demo/src/components/Editor/extensions/mention-member/MentionListItemRender.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { MentionMemberItemDataType } from './types'; 3 | 4 | const MentionListItemRender: React.FC<{ item: MentionMemberItemDataType }> = ({ 5 | item, 6 | }) => { 7 | if (!item.attrs) { 8 | return null; 9 | } 10 | return ( 11 | <> 12 | {item.label} 13 | 19 | {item.desc} 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default MentionListItemRender; 26 | -------------------------------------------------------------------------------- /apps/demo/src/components/Editor/extensions/mention-member/MentionMemberNodeView.module.less: -------------------------------------------------------------------------------- 1 | @import (reference) '@gitee/tide-theme/dist/variable.less'; 2 | 3 | .mention { 4 | display: inline-block; 5 | border-radius: 1em; 6 | padding: 0 8px; 7 | text-decoration: inherit; 8 | font-size: 1em; 9 | line-height: 1.125; 10 | color: @text-color; 11 | background-color: @theme-bg-color; 12 | 13 | .avatar { 14 | display: inline-block; 15 | padding: 2px; 16 | margin: 0 2px 0 -8px; 17 | vertical-align: -0.25em; 18 | 19 | img { 20 | display: block; 21 | width: 1em; 22 | height: 1em; 23 | overflow: hidden; 24 | border-radius: 50%; 25 | background-color: #fff; 26 | } 27 | } 28 | } 29 | 30 | a.mention { 31 | cursor: pointer; 32 | 33 | &:hover { 34 | text-decoration: inherit !important; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /apps/demo/src/components/Editor/extensions/mention-member/index.ts: -------------------------------------------------------------------------------- 1 | import { MentionMember } from './mention-member'; 2 | 3 | export * from './mention-member'; 4 | 5 | export default MentionMember; 6 | -------------------------------------------------------------------------------- /apps/demo/src/components/Editor/extensions/mention-member/types.ts: -------------------------------------------------------------------------------- 1 | import { MentionItemDataType } from '@gitee/tide-extension-mention'; 2 | 3 | export type MentionMemberAttributes = { 4 | /** 姓名 */ 5 | name: string; 6 | 7 | /** 用户名 */ 8 | username: string; 9 | 10 | /** 链接 */ 11 | url: string; 12 | }; 13 | 14 | export type MentionMemberItemDataType = 15 | MentionItemDataType & { 16 | label: string; 17 | desc?: string; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/demo/src/components/HeaderBar/index.css: -------------------------------------------------------------------------------- 1 | .demo-header-bar { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | margin-bottom: 8px; 6 | } 7 | .demo-header-bar-left { 8 | display: flex; 9 | align-items: center; 10 | } 11 | .demo-header-bar-left .link-repository { 12 | display: flex; 13 | align-items: center; 14 | flex-direction: row; 15 | color: black; 16 | } 17 | .demo-header-bar-left .link-repository img { 18 | margin-right: 8px; 19 | } 20 | .demo-header-bar-right { 21 | display: flex; 22 | align-items: center; 23 | } 24 | .demo-header-bar-right .select-theme, 25 | .demo-header-bar-right .btn-dev-tool, 26 | .demo-header-bar-right .btn-clear, 27 | .demo-header-bar-right .btn-share, 28 | .demo-header-bar-right .env-tag { 29 | margin-left: 10px; 30 | } 31 | .demo-header-bar-right label { 32 | display: flex; 33 | align-items: center; 34 | line-height: 1; 35 | } 36 | .demo-header-bar-right .env-tag { 37 | font-size: 12px; 38 | } 39 | -------------------------------------------------------------------------------- /apps/demo/src/components/InspectPanel/userWorker.ts: -------------------------------------------------------------------------------- 1 | import { loader } from '@monaco-editor/react'; 2 | import * as monaco from 'monaco-editor'; 3 | import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; 4 | import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'; 5 | import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'; 6 | import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'; 7 | import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; 8 | 9 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 10 | // @ts-ignore 11 | self.MonacoEnvironment = { 12 | getWorker(_, label: string) { 13 | if (label === 'json') { 14 | return new jsonWorker(); 15 | } 16 | if (label === 'css' || label === 'scss' || label === 'less') { 17 | return new cssWorker(); 18 | } 19 | if (label === 'html' || label === 'handlebars' || label === 'razor') { 20 | return new htmlWorker(); 21 | } 22 | if (label === 'typescript' || label === 'javascript') { 23 | return new tsWorker(); 24 | } 25 | return new editorWorker(); 26 | }, 27 | }; 28 | 29 | loader.config({ monaco }); 30 | -------------------------------------------------------------------------------- /apps/demo/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module 'lz-string' { 4 | function compressToBase64(input: string): string; 5 | function decompressFromBase64(input: string): string; 6 | 7 | function compressToUTF16(input: string): string; 8 | function decompressFromUTF16(compressed: string): string; 9 | 10 | function compressToUint8Array(uncompressed: string): Uint8Array; 11 | function decompressFromUint8Array(compressed: Uint8Array): string; 12 | 13 | function compressToEncodedURIComponent(input: string): string; 14 | function decompressFromEncodedURIComponent(compressed: string): string; 15 | 16 | function compress(input: string): string; 17 | function decompress(compressed: string): string; 18 | } 19 | 20 | declare const __BUILD_TIME__: string; 21 | -------------------------------------------------------------------------------- /apps/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /apps/demo/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/demo/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import fs from 'fs'; 3 | import fg from 'fast-glob'; 4 | import { resolve } from 'path'; 5 | import react from '@vitejs/plugin-react'; 6 | import { format } from 'date-fns'; 7 | 8 | const getPkgName = (path) => { 9 | const json = fs.readFileSync(`${path}/package.json`, { 10 | encoding: 'utf-8', 11 | }); 12 | const { name } = JSON.parse(json); 13 | return { name, path }; 14 | }; 15 | 16 | const alias = [ 17 | { find: /^~/, replacement: '' }, 18 | ...fg 19 | .sync(['../../packages/*', '../../presets/*'], { onlyDirectories: true }) 20 | .map((path) => getPkgName(path)) 21 | .map(({ name, path }) => { 22 | return { 23 | find: new RegExp(`${name}$`), 24 | replacement: resolve(`${path}/src/index.ts`), 25 | }; 26 | }), 27 | ]; 28 | 29 | // https://vitejs.dev/config/ 30 | export default defineConfig(({ mode }) => { 31 | const prod = mode === 'production'; 32 | return { 33 | base: prod ? '/tide' : '/', 34 | define: { 35 | __BUILD_TIME__: JSON.stringify(format(new Date(), 'yyyy-MM-dd HH:mm:ss')), 36 | }, 37 | plugins: [react()], 38 | resolve: { 39 | alias: prod ? [] : alias, 40 | }, 41 | // css: { 42 | // modules: { 43 | // localsConvention: 'camelCase', 44 | // }, 45 | // }, 46 | }; 47 | }); 48 | -------------------------------------------------------------------------------- /apps/legacy/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ["custom"], 4 | }; 5 | -------------------------------------------------------------------------------- /apps/legacy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | tide 8 | 16 | 17 | 18 |

Legacy 版本

19 |
20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /apps/legacy/rollup.config.js: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import { createRollupConfig, autoExternal } from '../../script/rollup.common'; 3 | import packageJson from './package.json'; 4 | 5 | export default createRollupConfig({ 6 | input: 'src/lib.ts', 7 | pkg: packageJson, 8 | projectPath: __dirname, 9 | tsconfigPath: path.resolve(__dirname, 'tsconfig.lib.json'), 10 | // 自定义 external (排除掉 peerDependencies 中的 react react-dom, 其它打进包内) 11 | external: autoExternal(['react', 'react-dom']), 12 | }); 13 | -------------------------------------------------------------------------------- /apps/legacy/src/demo/mock_members.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "我是 GIT", 4 | "username": "git", 5 | "avatar_url": "http://gitee.my/assets/no_portrait.png" 6 | }, 7 | { 8 | "name": "测试", 9 | "username": "ceshi", 10 | "avatar_url": "https://file.nancode.cn/1677149696919-189052581.png" 11 | }, 12 | { 13 | "name": "尼尔", 14 | "username": "nanzm", 15 | "avatar_url": "http://gitee.my/assets/no_portrait.png" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /apps/legacy/src/demo/mock_pull_requests.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 69, 4 | "iid": 60, 5 | "state": "opened", 6 | "title": "123123123", 7 | "lightweight": false, 8 | "project_id": 1, 9 | "project_path": "nanzm/java-web-demo" 10 | }, 11 | { 12 | "id": 68, 13 | "iid": 59, 14 | "state": "opened", 15 | "title": "qeqweqwewqe", 16 | "lightweight": false, 17 | "project_id": 1, 18 | "project_path": "nanzm/java-web-demo" 19 | }, 20 | { 21 | "id": 67, 22 | "iid": 58, 23 | "state": "closed", 24 | "title": "create-pr test", 25 | "lightweight": false, 26 | "project_id": 1, 27 | "project_path": "nanzm/java-web-demo" 28 | }, 29 | { 30 | "id": 66, 31 | "iid": 57, 32 | "state": "closed", 33 | "title": "【轻量级 PR】:12312311231231123123231231123123112312323123112312311231232312311231231123123231231123123112312323123112312311231232312311231231123123112312311231231123123112312311231231", 34 | "lightweight": true, 35 | "project_id": 1, 36 | "project_path": "nanzm/java-web-demo" 37 | }, 38 | { 39 | "id": 65, 40 | "iid": 56, 41 | "state": "opened", 42 | "title": "【轻量级 PR】:sssss", 43 | "lightweight": true, 44 | "project_id": 1, 45 | "project_path": "nanzm/java-web-demo" 46 | } 47 | ] 48 | -------------------------------------------------------------------------------- /apps/legacy/src/lib.ts: -------------------------------------------------------------------------------- 1 | export * from './editor'; 2 | 3 | export function replaceExternalLink(dom: HTMLElement) { 4 | const GITEE_BASE_URL = window.location.origin; 5 | 6 | const links: NodeListOf = 7 | dom.querySelectorAll('.ProseMirror a'); 8 | if (links.length < 1) { 9 | return; 10 | } 11 | 12 | const locationDomain = window.location.hostname 13 | .split('.') 14 | .slice(-2) 15 | .join('.'); 16 | const locationRegex = new RegExp(`^https?://[^/]*?${locationDomain}`); 17 | const whiteListRegex = /^https?:\/\/[^/]*?(gitee|oschina)\.(com|cn|net|io)/; 18 | 19 | links.forEach((link) => { 20 | const { href } = link; 21 | if ( 22 | !href || 23 | locationRegex.test(link.href) || 24 | whiteListRegex.test(link.href) 25 | ) { 26 | return; 27 | } 28 | try { 29 | link.setAttribute( 30 | 'href', 31 | `${GITEE_BASE_URL}/link?target=${encodeURIComponent(href)}` 32 | ); 33 | link.setAttribute('target', '_blank'); 34 | } catch (e) { 35 | console.error(e); 36 | } 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /apps/legacy/src/type.ts: -------------------------------------------------------------------------------- 1 | import { UploaderFunc } from '@gitee/tide-extension-uploader'; 2 | import type { 3 | MentionMemberItemDataType, 4 | MentionIssueItemDataType, 5 | MentionPullRequestItemDataType, 6 | BulkFetcherRequestFunc, 7 | } from '@gitee/tide-presets-mentions'; 8 | 9 | export type MentionType = { 10 | fetchMentionMember: ( 11 | query: string 12 | ) => Promise; 13 | fetchMentionIssue: ( 14 | query: string 15 | ) => Promise; 16 | fetchMentionPR: ( 17 | query: string 18 | ) => Promise; 19 | }; 20 | 21 | export type LegacyExtOpts = { 22 | mention: MentionType; 23 | imageUpload: UploaderFunc; 24 | fetchResources: BulkFetcherRequestFunc; 25 | }; 26 | -------------------------------------------------------------------------------- /apps/legacy/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/legacy/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /apps/legacy/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declarationDir": "./dist/types", 6 | "emitDeclarationOnly": true, 7 | "resolveJsonModule": true 8 | }, 9 | "include": ["src"], 10 | "exclude": ["node_modules"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/legacy/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | [ 4 | '@babel/preset-env', 5 | { 6 | useBuiltIns: 'usage', 7 | corejs: 3, 8 | }, 9 | ], 10 | '@babel/preset-typescript', 11 | '@babel/preset-react', 12 | ], 13 | plugins: [ 14 | [ 15 | '@babel/plugin-transform-runtime', 16 | { 17 | corejs: 3, 18 | }, 19 | ], 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /docs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 贡献 2 | 3 | ## 开发 4 | 5 | ```shell 6 | git clone https://gitee.com/oschina/tide.git 7 | 8 | cd tide 9 | 10 | # 安装依赖 11 | pnpm i 12 | 13 | # 构建 packages 14 | pnpm build 15 | 16 | # 运行 demo 方便开发 17 | pnpm dev:demo 18 | ``` 19 | 20 | ## 部署 pages 21 | 22 | 以下脚本执行一次就行,使用 git worktree 将 Pages 部署分支挂载为子目录: 23 | 24 | ```shell 25 | git checkout -b demo-pages origin/demo-pages 26 | git checkout master 27 | git worktree add apps/demo/dist demo-pages 28 | ``` 29 | 30 | ## 构建并发布 31 | 32 | ```shell 33 | pnpm build:app_demo 34 | pnpm pages 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/images/tide-screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oschina/tide/13a7342a83a3f45a9df42ef8e20e601c6ff21097/docs/images/tide-screenshot.jpg -------------------------------------------------------------------------------- /docs/images/tide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oschina/tide/13a7342a83a3f45a9df42ef8e20e601c6ff21097/docs/images/tide.jpg -------------------------------------------------------------------------------- /packages/common/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-common 2 | 3 | ## Introduction 4 | 5 | This package provides commonly used `Command`, `Extension`, `Helpers`, `Input Rule`, and other functionalities for the editor. 6 | 7 | ## Features 8 | 9 | ### Extensions 10 | 11 | - Commands 12 | - toggleList 13 | - sinkListItem 14 | - liftListItem 15 | - listBackspace 16 | - markLeftExit 17 | - LowPriorityKeymap 18 | - HighPriorityKeymap 19 | 20 | ### Helpers 21 | 22 | - isActive 23 | - isMarkActive 24 | - isList 25 | - isListItem 26 | - joinListBackwards 27 | - joinListForwards 28 | - listBackspace 29 | - transformer 30 | - isWindows 31 | - selectionInfo 32 | 33 | ### Input Rules 34 | 35 | - textblockTypeInputRule 36 | - wrappingInputRule 37 | - wrapInListInputRule 38 | -------------------------------------------------------------------------------- /packages/common/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-common 2 | 3 | ## 介绍 4 | 5 | 本包为编辑器提供常用的 `Command`、`Extension`、`Helpers`、`Input Rule` 等。 6 | 7 | ## 功能 8 | 9 | ### Extensions 10 | 11 | - Commands 12 | - toggleList 13 | - sinkListItem 14 | - liftListItem 15 | - listBackspace 16 | - markLeftExit 17 | - LowPriorityKeymap 18 | - HighPriorityKeymap 19 | 20 | ### Helpers 21 | 22 | - isActive 23 | - isMarkActive 24 | - isList 25 | - isListItem 26 | - joinListBackwards 27 | - joinListForwards 28 | - listBackspace 29 | - transformer 30 | - isWindows 31 | - selectionInfo 32 | 33 | ### Input Rules 34 | 35 | - textblockTypeInputRule 36 | - wrappingInputRule 37 | - wrapInListInputRule 38 | -------------------------------------------------------------------------------- /packages/common/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-common", 3 | "version": "0.2.0-beta.1", 4 | "main": "dist/index.js", 5 | "module": "dist/index.esm.js", 6 | "files": [ 7 | "dist" 8 | ], 9 | "types": "dist/types/index.d.ts", 10 | "license": "MIT", 11 | "scripts": { 12 | "dev": "rollup -c rollup.config.js -w", 13 | "build": "rollup -c rollup.config.js", 14 | "lint": "TIMING=1 eslint \"**/*.ts\"", 15 | "clear": "rm -rf dist" 16 | }, 17 | "dependencies": { 18 | "@babel/runtime-corejs3": "^7.21.0", 19 | "zeed-dom": "^0.10.4" 20 | }, 21 | "devDependencies": { 22 | "@tiptap/core": "^2.0.3", 23 | "@tiptap/pm": "^2.0.3", 24 | "eslint-config-custom": "workspace:*", 25 | "tsconfig": "workspace:*", 26 | "typescript": "^4.9.5" 27 | }, 28 | "peerDependencies": { 29 | "@tiptap/core": "^2.0.0", 30 | "@tiptap/pm": "^2.0.0" 31 | }, 32 | "repository": { 33 | "type": "git", 34 | "url": "https://gitee.com/oschina/tide", 35 | "directory": "packages/common" 36 | }, 37 | "sideEffects": false 38 | } 39 | -------------------------------------------------------------------------------- /packages/common/rollup.config.js: -------------------------------------------------------------------------------- 1 | import { createRollupConfig } from '../../script/rollup.common'; 2 | import packageJson from './package.json'; 3 | 4 | export default createRollupConfig({ pkg: packageJson, projectPath: __dirname }); 5 | -------------------------------------------------------------------------------- /packages/common/src/commands/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleList'; 2 | export * from './sinkListItem'; 3 | export * from './liftListItem'; 4 | export * from './listBackspace'; 5 | export * from './markLeftExit'; 6 | -------------------------------------------------------------------------------- /packages/common/src/commands/liftListItem.ts: -------------------------------------------------------------------------------- 1 | import { RawCommands } from '@tiptap/core'; 2 | import { dedentList } from '../utilities/list/list-command-dedent'; 3 | 4 | export const liftListItem: RawCommands['liftListItem'] = 5 | () => 6 | ({ tr }) => { 7 | return dedentList(tr); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/common/src/commands/listBackspace.ts: -------------------------------------------------------------------------------- 1 | import { RawCommands } from '@tiptap/core'; 2 | import { listBackspace as originalListBackspace } from '../helpers/listBackspace'; 3 | 4 | declare module '@tiptap/core' { 5 | interface Commands { 6 | listBackspace: { 7 | /** 8 | * Handle backspace in a list item. 9 | */ 10 | listBackspace: () => ReturnType; 11 | }; 12 | } 13 | } 14 | 15 | export const listBackspace: RawCommands['listBackspace'] = 16 | () => 17 | ({ tr, state, dispatch, view }) => 18 | originalListBackspace(tr, state, dispatch, view); 19 | -------------------------------------------------------------------------------- /packages/common/src/commands/markLeftExit.ts: -------------------------------------------------------------------------------- 1 | import { RawCommands } from '@tiptap/core'; 2 | import { TextSelection } from '@tiptap/pm/state'; 3 | 4 | declare module '@tiptap/core' { 5 | interface Commands { 6 | markLeftExit: { 7 | /** 8 | * Handle mark left exit. 9 | */ 10 | markLeftExit: (markName: string) => ReturnType; 11 | }; 12 | } 13 | } 14 | 15 | export const markLeftExit: RawCommands['markLeftExit'] = 16 | (markName) => 17 | ({ tr, state, dispatch }) => { 18 | const { selection } = state; 19 | const currentPos = selection.$from; 20 | const isAtStart = currentPos.pos === currentPos.start(); 21 | 22 | if (isAtStart) { 23 | const currentMarks = currentPos.marks(); 24 | const mark = currentMarks.find((m) => m?.type.name === markName); 25 | 26 | if (!mark) { 27 | return false; 28 | } 29 | 30 | if (mark) { 31 | tr.removeStoredMark(mark); 32 | } 33 | 34 | tr.insertText(' ', currentPos.pos); 35 | tr.setSelection(TextSelection.near(tr.doc.resolve(currentPos.pos))); 36 | 37 | dispatch(tr); 38 | 39 | return true; 40 | } 41 | 42 | return false; 43 | }; 44 | -------------------------------------------------------------------------------- /packages/common/src/commands/sinkListItem.ts: -------------------------------------------------------------------------------- 1 | import { RawCommands } from '@tiptap/core'; 2 | import { indentList } from '../utilities/list/list-command-indent'; 3 | 4 | export const sinkListItem: RawCommands['sinkListItem'] = 5 | () => 6 | ({ tr }) => { 7 | return indentList(tr); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/common/src/extensions/commands.ts: -------------------------------------------------------------------------------- 1 | import { Extension } from '@tiptap/core'; 2 | import * as commands from '../commands'; 3 | 4 | export const Commands = Extension.create({ 5 | name: 'coreCommands', 6 | 7 | // !! 警告 !! 8 | // tiptap extension 加载顺序是按 priority 从高到低 加载 9 | // 但 commands 是通过 reduce 重组的, 后面覆盖前面, 所以此处优先级应设置最低 10 | priority: 1, 11 | 12 | addCommands() { 13 | return { 14 | ...commands, 15 | }; 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /packages/common/src/extensions/index.ts: -------------------------------------------------------------------------------- 1 | export { Commands } from './commands'; 2 | export { LowPriorityKeymap } from './low-priority-keymap'; 3 | export { HighPriorityKeymap } from './high-priority-keymap'; 4 | -------------------------------------------------------------------------------- /packages/common/src/extensions/low-priority-keymap.ts: -------------------------------------------------------------------------------- 1 | import { Extension } from '@tiptap/core'; 2 | 3 | export const LowPriorityKeymap = Extension.create({ 4 | name: 'lowPriorityKeymap', 5 | 6 | priority: 1, 7 | 8 | addKeyboardShortcuts() { 9 | return { 10 | // prevent default tab, shift-tab behavior 11 | Tab: () => true, 12 | 'Shift-Tab': () => true, 13 | }; 14 | }, 15 | }); 16 | -------------------------------------------------------------------------------- /packages/common/src/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './isActive'; 2 | export * from './isMarkActive'; 3 | export * from './isList'; 4 | export * from './isListItem'; 5 | export * from './joinListBackwards'; 6 | export * from './joinListForwards'; 7 | export * from './listBackspace'; 8 | export * from './transformer'; 9 | export * from './isWindows'; 10 | export * from './selectionInfo'; 11 | -------------------------------------------------------------------------------- /packages/common/src/helpers/isActive.ts: -------------------------------------------------------------------------------- 1 | import { findParentNode, isNodeActive } from '@tiptap/core'; 2 | import type { EditorState } from '@tiptap/pm/state'; 3 | import { isList } from './isList'; 4 | import { isMarkActive } from './isMarkActive'; 5 | 6 | export function isActive( 7 | state: EditorState, 8 | name: string | null, 9 | attributes: Record = {} 10 | ): boolean { 11 | if (!name) { 12 | return ( 13 | isNodeActive(state, null, attributes) || 14 | isMarkActive(state, null, attributes) 15 | ); 16 | } 17 | 18 | if (state.schema.nodes[name]) { 19 | // nested lists of different types 20 | const isListNode = isList(state.schema.nodes[name]); 21 | if (isListNode) { 22 | const parentList = findParentNode((node) => isList(node.type))( 23 | state.selection 24 | ); 25 | return parentList && parentList.node.type.name === name; 26 | } 27 | 28 | return isNodeActive(state, name, attributes); 29 | } 30 | 31 | if (state.schema.marks[name]) { 32 | return isMarkActive(state, name, attributes); 33 | } 34 | 35 | return false; 36 | } 37 | -------------------------------------------------------------------------------- /packages/common/src/helpers/isList.ts: -------------------------------------------------------------------------------- 1 | import { NodeType } from '@tiptap/pm/model'; 2 | 3 | export function isList(type: NodeType): boolean { 4 | return !!type.spec.group?.split(' ').includes('list'); 5 | } 6 | -------------------------------------------------------------------------------- /packages/common/src/helpers/isListItem.ts: -------------------------------------------------------------------------------- 1 | import { NodeType } from '@tiptap/pm/model'; 2 | 3 | export function isListItem(type: NodeType): boolean { 4 | return !!type.spec.group?.split(' ').includes('listItem'); 5 | } 6 | -------------------------------------------------------------------------------- /packages/common/src/helpers/isWindows.ts: -------------------------------------------------------------------------------- 1 | export function isWindows() { 2 | if (navigator.userAgent.indexOf('Windows') > -1) { 3 | return true; 4 | } 5 | return false; 6 | } 7 | -------------------------------------------------------------------------------- /packages/common/src/helpers/joinListBackwards.ts: -------------------------------------------------------------------------------- 1 | import { Node as ProseMirrorNode } from '@tiptap/pm/model'; 2 | import { Transaction } from '@tiptap/pm/state'; 3 | import { canJoin } from '@tiptap/pm/transform'; 4 | import { findParentNode } from '@tiptap/core'; 5 | import { isList } from './isList'; 6 | 7 | export const joinListBackwards = ( 8 | tr: Transaction, 9 | canJoinFn?: (node: ProseMirrorNode) => boolean 10 | ): boolean => { 11 | const list = findParentNode((node) => isList(node.type))(tr.selection); 12 | 13 | if (!list) { 14 | return false; 15 | } 16 | 17 | const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth); 18 | 19 | if (before === undefined) { 20 | return false; 21 | } 22 | 23 | const nodeBefore = tr.doc.nodeAt(before); 24 | const canJoinBackwards = 25 | nodeBefore && 26 | (!canJoinFn ? list.node.type === nodeBefore.type : canJoinFn(nodeBefore)) && 27 | canJoin(tr.doc, list.pos); 28 | 29 | if (!canJoinBackwards) { 30 | return false; 31 | } 32 | 33 | tr.join(list.pos); 34 | 35 | return true; 36 | }; 37 | -------------------------------------------------------------------------------- /packages/common/src/helpers/joinListForwards.ts: -------------------------------------------------------------------------------- 1 | import { Node as ProseMirrorNode } from '@tiptap/pm/model'; 2 | import { Transaction } from '@tiptap/pm/state'; 3 | import { canJoin } from '@tiptap/pm/transform'; 4 | import { findParentNode } from '@tiptap/core'; 5 | import { isList } from './isList'; 6 | 7 | export const joinListForwards = ( 8 | tr: Transaction, 9 | canJoinFn?: (node: ProseMirrorNode) => boolean 10 | ): boolean => { 11 | const list = findParentNode((node) => isList(node.type))(tr.selection); 12 | 13 | if (!list) { 14 | return false; 15 | } 16 | 17 | const after = tr.doc.resolve(list.start).after(list.depth); 18 | 19 | if (after === undefined) { 20 | return false; 21 | } 22 | 23 | const nodeAfter = tr.doc.nodeAt(after); 24 | const canJoinForwards = 25 | nodeAfter && 26 | (!canJoinFn ? list.node.type === nodeAfter.type : canJoinFn(nodeAfter)) && 27 | canJoin(tr.doc, after); 28 | 29 | if (!canJoinForwards) { 30 | return false; 31 | } 32 | 33 | tr.join(after); 34 | 35 | return true; 36 | }; 37 | -------------------------------------------------------------------------------- /packages/common/src/helpers/selectionInfo.ts: -------------------------------------------------------------------------------- 1 | import { EditorView } from '@tiptap/pm/view'; 2 | import { findParentNode } from '@tiptap/core'; 3 | 4 | export function getElementContentWidth(element) { 5 | const styles = window.getComputedStyle(element); 6 | const padding = 7 | parseFloat(styles.paddingLeft) + parseFloat(styles.paddingRight); 8 | 9 | return element.clientWidth - padding; 10 | } 11 | 12 | // 获取选区 在单元格信息 13 | export const selectionCellInfo = (view: EditorView) => { 14 | let isInTableCel = false; 15 | let tableCellWidth = 0; 16 | const predicate = (node) => node.type === view.state.schema.nodes.tableCell; 17 | const tableCell = findParentNode(predicate)(view.state.selection); 18 | if (tableCell) { 19 | isInTableCel = true; 20 | 21 | const el = view.nodeDOM(tableCell.pos); 22 | if (el) { 23 | tableCellWidth = getElementContentWidth(el as Element); 24 | } 25 | } 26 | return { isInTableCel, tableCellWidth }; 27 | }; 28 | -------------------------------------------------------------------------------- /packages/common/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './extensions'; 2 | export * from './helpers'; 3 | export * from './inputRules'; 4 | -------------------------------------------------------------------------------- /packages/common/src/inputRules/index.ts: -------------------------------------------------------------------------------- 1 | export * from './textblockTypeInputRule'; 2 | export * from './wrappingInputRule'; 3 | export * from './wrapInListInputRule'; 4 | -------------------------------------------------------------------------------- /packages/common/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declarationDir": "./dist/types", 6 | "emitDeclarationOnly": true 7 | }, 8 | "include": ["src"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/editor/rollup.config.js: -------------------------------------------------------------------------------- 1 | import copy from 'rollup-plugin-copy'; 2 | import { createRollupConfig } from '../../script/rollup.common'; 3 | import packageJson from './package.json'; 4 | 5 | export default createRollupConfig({ 6 | pkg: packageJson, 7 | projectPath: __dirname, 8 | plugins: [ 9 | copy({ 10 | targets: [ 11 | { 12 | src: 'src/*.less', 13 | dest: 'dist/styles', 14 | transform: (contents) => 15 | contents 16 | .toString() 17 | .replaceAll(/^@import.+/g, '') 18 | .trimStart(), 19 | }, 20 | ], 21 | }), 22 | ], 23 | }); 24 | -------------------------------------------------------------------------------- /packages/editor/src/components/EditorContent.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import { EditorContent as TEditorContent } from '@gitee/tide-react'; 4 | import type { TideEditor } from '../TideEditor'; 5 | 6 | import './EditorContent.less'; 7 | 8 | export type EditorContentProps = { 9 | editor: TideEditor | null; 10 | contentClassName?: string; 11 | contentStyle?: React.CSSProperties; 12 | children?: React.ReactNode; 13 | }; 14 | 15 | export const EditorContent: React.FC = ({ 16 | editor, 17 | contentClassName, 18 | contentStyle, 19 | children, 20 | }) => { 21 | const cls = classNames('tide-content', contentClassName); 22 | 23 | if (editor && editor.isEmpty && editor.isReadOnly) { 24 | return ( 25 |
26 | {editor.readOnlyEmptyView || null} 27 |
28 | ); 29 | } 30 | 31 | return ( 32 | 33 | {children} 34 | 35 | ); 36 | }; 37 | 38 | EditorContent.displayName = 'EditorContent'; 39 | -------------------------------------------------------------------------------- /packages/editor/src/components/EditorLayout.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@gitee/tide-theme/dist/variable.less'; 2 | 3 | .tide-editor { 4 | position: relative; 5 | display: flex; 6 | flex-direction: column; 7 | background-color: @background-color; 8 | border: 1px solid @border-color; 9 | box-sizing: border-box; 10 | min-height: 200px; 11 | 12 | &--fullscreen { 13 | position: fixed; 14 | top: 0; 15 | left: 0; 16 | right: 0; 17 | bottom: 0; 18 | z-index: 1800; 19 | width: 100%; 20 | height: 100%; 21 | border: 0; 22 | 23 | > .tide-menu-bar { 24 | justify-content: center; 25 | } 26 | 27 | .tide-content { 28 | .ProseMirror { 29 | max-width: 864px; 30 | margin: 0 auto; 31 | padding: 40px 32px !important; 32 | } 33 | } 34 | } 35 | 36 | .tide-content { 37 | flex: 1; 38 | min-height: 0; 39 | overflow-x: hidden; 40 | overflow-y: auto; 41 | position: relative; 42 | 43 | .ProseMirror { 44 | min-height: 100%; 45 | padding: 24px 32px; 46 | } 47 | } 48 | 49 | .tide-editor-popup { 50 | position: relative; 51 | overflow: hidden; 52 | background-color: @popup-bg-color; 53 | box-shadow: @popup-shadow-color; 54 | border-radius: 4px; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /packages/editor/src/components/EditorLayout.tsx: -------------------------------------------------------------------------------- 1 | import React, { PropsWithChildren, useState } from 'react'; 2 | import classNames from 'classnames'; 3 | import { 4 | EditorContextProvider, 5 | useEditorContext, 6 | } from '../context/EditorContext'; 7 | 8 | import type { TideEditor } from '../TideEditor'; 9 | 10 | import './EditorLayout.less'; 11 | 12 | const Layout: React.FC< 13 | PropsWithChildren<{ 14 | className?: string; 15 | style?: React.CSSProperties; 16 | }> 17 | > = ({ style, className, children }) => { 18 | const { fullscreen } = useEditorContext(); 19 | const cls = classNames( 20 | 'tide-editor', 21 | { 'tide-editor--fullscreen': fullscreen }, 22 | className 23 | ); 24 | 25 | return ( 26 |
27 | {children} 28 |
29 | ); 30 | }; 31 | 32 | export const EditorLayout: React.FC< 33 | PropsWithChildren<{ 34 | editor: TideEditor | null; 35 | className?: string; 36 | style?: React.CSSProperties; 37 | }> 38 | > = ({ editor, className, style, children }) => { 39 | return ( 40 | 41 | 42 | {children} 43 | 44 | 45 | ); 46 | }; 47 | -------------------------------------------------------------------------------- /packages/editor/src/components/index.tsx: -------------------------------------------------------------------------------- 1 | export * from './EditorContent'; 2 | export * from './EditorLayout'; 3 | export * from './EditorMenu'; 4 | -------------------------------------------------------------------------------- /packages/editor/src/index.ts: -------------------------------------------------------------------------------- 1 | import { useEditor as useEditorOriginal } from '@gitee/tide-react'; 2 | import { TideEditor } from './TideEditor'; 3 | 4 | import type { DependencyList } from 'react'; 5 | import type { TideEditorOptions } from './TideEditor'; 6 | 7 | export * from './components/EditorLayout'; 8 | export * from './components/EditorMenu'; 9 | export * from './components/EditorContent'; 10 | 11 | export * from './context/EditorContext'; 12 | 13 | export * from './EditorRender'; 14 | export * from './TideEditor'; 15 | 16 | export * from './types'; 17 | 18 | export const useEditor: ( 19 | options: Partial, 20 | deps?: DependencyList 21 | ) => TideEditor | null = (options, deps) => 22 | useEditorOriginal(TideEditor, options, deps); 23 | -------------------------------------------------------------------------------- /packages/editor/src/types.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | Content, 3 | HTMLContent, 4 | JSONContent, 5 | Extension, 6 | Extensions, 7 | ExtensionConfig, 8 | Command, 9 | Commands, 10 | NodeView, 11 | NodeViewProps, 12 | NodeConfig, 13 | MarkConfig, 14 | } from '@tiptap/core'; 15 | -------------------------------------------------------------------------------- /packages/editor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declarationDir": "./dist/types", 6 | "emitDeclarationOnly": true 7 | }, 8 | "include": ["src"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/eslint-config-custom/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # eslint-config-custom 2 | 3 | ## 0.2.0-beta.1 4 | 5 | **Note:** Version bump only for package eslint-config-custom 6 | 7 | ## 0.2.0-beta.0 8 | 9 | ### Minor Changes 10 | 11 | - Bump the version to 0.2.0-beta.0 12 | 13 | ## 0.2.0-alpha.6 14 | 15 | **Note:** Version bump only for package eslint-config-custom 16 | 17 | ## 0.2.0-alpha.5 18 | 19 | **Note:** Version bump only for package eslint-config-custom 20 | 21 | ## 0.2.0-alpha.4 22 | 23 | **Note:** Version bump only for package eslint-config-custom 24 | 25 | ## 0.2.0-alpha.3 26 | 27 | **Note:** Version bump only for package eslint-config-custom 28 | 29 | ## 0.2.0-alpha.2 30 | 31 | **Note:** Version bump only for package eslint-config-custom 32 | 33 | ## 0.2.0-alpha.1 34 | 35 | **Note:** Version bump only for package eslint-config-custom 36 | 37 | ## 0.2.0-alpha.0 38 | 39 | ### Minor Changes 40 | 41 | - Bump the version to 0.2.0-alpha.0 42 | 43 | ## 0.1.0-alpha.3 44 | 45 | ### Minor Changes 46 | 47 | - update mentions 48 | 49 | ## 0.1.0-alpha.2 50 | 51 | ### Minor Changes 52 | 53 | - update legacy 54 | 55 | ## 0.1.0-alpha.1 56 | 57 | ### Minor Changes 58 | 59 | - legacy add options 60 | 61 | ## 0.1.0-alpha.0 62 | 63 | ### Minor Changes 64 | 65 | - update build script 66 | -------------------------------------------------------------------------------- /packages/eslint-config-custom/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, 4 | }, 5 | parser: '@typescript-eslint/parser', 6 | extends: [ 7 | 'eslint:recommended', 8 | 'plugin:react/recommended', 9 | 'plugin:@typescript-eslint/recommended', 10 | 'prettier', 11 | ], 12 | plugins: ['@typescript-eslint'], 13 | parserOptions: { 14 | sourceType: 'module', 15 | ecmaVersion: 2020, 16 | }, 17 | rules: { 18 | '@typescript-eslint/no-non-null-assertion': 'off', 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /packages/eslint-config-custom/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-config-custom", 3 | "version": "0.2.0-beta.1", 4 | "main": "index.js", 5 | "private": true, 6 | "license": "MIT", 7 | "dependencies": { 8 | "@typescript-eslint/eslint-plugin": "^5.30.7", 9 | "@typescript-eslint/parser": "^5.30.7", 10 | "eslint-config-prettier": "^8.5.0", 11 | "eslint-plugin-react": "^7.32.2" 12 | }, 13 | "publishConfig": { 14 | "access": "public" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/extension-blockquote/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-blockquote 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use the blockquote (similar to the HTML tag `
`) in the editor, which is generally used to quote content or comments from other sources. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-blockquote`: 10 | 11 | - Shortcut: Ctrl/Command + Shift + . to insert or cancel blockquote 12 | - Input rule: Quickly create blockquote by typing `> ` or `》 ` at the beginning of a line 13 | - Paste rule: Automatically converts content in the format of `> quote` to blockquote when pasted 14 | -------------------------------------------------------------------------------- /packages/extension-blockquote/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-blockquote 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「块引用」功能(类似于 HTML 标签 `
`),一般用于引用其他来源的内容或注释。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-blockquote` 修改了如下内容: 10 | 11 | - 快捷键:Ctrl/Command + Shift + . 插入或取消块引用 12 | - 输入规则:在行首输入 `> ` 或 `》 ` 快速创建块引用 13 | - 粘贴规则:粘贴 `> 引文` 格式的内容,自动转换为块引用 14 | -------------------------------------------------------------------------------- /packages/extension-blockquote/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-blockquote", 3 | "version": "0.2.0-beta.1", 4 | "main": "dist/index.js", 5 | "module": "dist/index.esm.js", 6 | "files": [ 7 | "dist" 8 | ], 9 | "types": "dist/types/index.d.ts", 10 | "license": "MIT", 11 | "scripts": { 12 | "dev": "rollup -c rollup.config.js -w", 13 | "build": "rollup -c rollup.config.js", 14 | "lint": "TIMING=1 eslint \"**/*.ts\"", 15 | "clear": "rm -rf dist" 16 | }, 17 | "dependencies": { 18 | "@babel/runtime-corejs3": "^7.21.0", 19 | "@gitee/tide-common": "workspace:*", 20 | "@tiptap/extension-blockquote": "^2.0.3" 21 | }, 22 | "devDependencies": { 23 | "@tiptap/core": "^2.0.3", 24 | "eslint-config-custom": "workspace:*", 25 | "tsconfig": "workspace:*", 26 | "typescript": "^4.9.5" 27 | }, 28 | "peerDependencies": { 29 | "@tiptap/core": "^2.0.0" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "https://gitee.com/oschina/tide", 34 | "directory": "packages/blockquote" 35 | }, 36 | "sideEffects": false 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-blockquote/rollup.config.js: -------------------------------------------------------------------------------- 1 | import { createRollupConfig } from '../../script/rollup.common'; 2 | import packageJson from './package.json'; 3 | 4 | export default createRollupConfig({ pkg: packageJson, projectPath: __dirname }); 5 | -------------------------------------------------------------------------------- /packages/extension-blockquote/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './blockquote'; 2 | -------------------------------------------------------------------------------- /packages/extension-blockquote/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declarationDir": "./dist/types", 6 | "emitDeclarationOnly": true 7 | }, 8 | "include": ["src"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/extension-bold/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-bold 2 | 3 | ## Introduction 4 | 5 | Use this extension to render text in **bold**. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-bold`: 10 | 11 | - Input rule: Automatically converts `**text**` or `__text__` to bold text when Space is entered after it. 12 | -------------------------------------------------------------------------------- /packages/extension-bold/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-bold 2 | 3 | ## 介绍 4 | 5 | 本扩展可为文本添加**粗体**效果。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-bold` 修改了如下内容: 10 | 11 | - 输入规则:输入 `**text**` 或 `__text__` 且在后面输入 空格 时,自动转换为粗体文本 12 | -------------------------------------------------------------------------------- /packages/extension-bold/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-bold", 3 | "version": "0.2.0-beta.1", 4 | "main": "dist/index.js", 5 | "module": "dist/index.esm.js", 6 | "files": [ 7 | "dist" 8 | ], 9 | "types": "dist/types/index.d.ts", 10 | "license": "MIT", 11 | "scripts": { 12 | "dev": "rollup -c rollup.config.js -w", 13 | "build": "rollup -c rollup.config.js", 14 | "lint": "TIMING=1 eslint \"**/*.ts\"", 15 | "clear": "rm -rf dist" 16 | }, 17 | "dependencies": { 18 | "@babel/runtime-corejs3": "^7.21.0", 19 | "@tiptap/extension-bold": "^2.0.3" 20 | }, 21 | "devDependencies": { 22 | "@tiptap/core": "^2.0.3", 23 | "eslint-config-custom": "workspace:*", 24 | "tsconfig": "workspace:*", 25 | "typescript": "^4.9.5" 26 | }, 27 | "peerDependencies": { 28 | "@tiptap/core": "^2.0.0" 29 | }, 30 | "repository": { 31 | "type": "git", 32 | "url": "https://gitee.com/oschina/tide", 33 | "directory": "packages/extension-bold" 34 | }, 35 | "sideEffects": false 36 | } 37 | -------------------------------------------------------------------------------- /packages/extension-bold/rollup.config.js: -------------------------------------------------------------------------------- 1 | import { createRollupConfig } from '../../script/rollup.common'; 2 | import packageJson from './package.json'; 3 | 4 | export default createRollupConfig({ pkg: packageJson, projectPath: __dirname }); 5 | -------------------------------------------------------------------------------- /packages/extension-bold/src/bold.ts: -------------------------------------------------------------------------------- 1 | import { markInputRule, markPasteRule } from '@tiptap/core'; 2 | import { 3 | Bold as TBold, 4 | BoldOptions as TBoldOptions, 5 | } from '@tiptap/extension-bold'; 6 | 7 | export type BoldOptions = TBoldOptions; 8 | 9 | export const starInputRegex = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))\s$/; 10 | export const starPasteRegex = /(?:^|\s)((?:\*\*)((?:[^*]+))(?:\*\*))/g; 11 | export const underscoreInputRegex = /(?:^|\s)((?:__)((?:[^__]+))(?:__))\s$/; 12 | export const underscorePasteRegex = /(?:^|\s)((?:__)((?:[^__]+))(?:__))/g; 13 | 14 | export const Bold = TBold.extend({ 15 | addInputRules() { 16 | return [ 17 | markInputRule({ 18 | find: starInputRegex, 19 | type: this.type, 20 | }), 21 | markInputRule({ 22 | find: underscoreInputRegex, 23 | type: this.type, 24 | }), 25 | ]; 26 | }, 27 | 28 | addPasteRules() { 29 | return [ 30 | markPasteRule({ 31 | find: starPasteRegex, 32 | type: this.type, 33 | }), 34 | markPasteRule({ 35 | find: underscorePasteRegex, 36 | type: this.type, 37 | }), 38 | ]; 39 | }, 40 | }); 41 | -------------------------------------------------------------------------------- /packages/extension-bold/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './bold'; 2 | -------------------------------------------------------------------------------- /packages/extension-bold/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declarationDir": "./dist/types", 6 | "emitDeclarationOnly": true 7 | }, 8 | "include": ["src"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-bullet-list 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use bullet lists (similar to the HTML tag `