├── .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 |`) 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 ` `) in the editor. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-bullet-list`: 10 | 11 | - Input rule: Quickly create bullet list by typing `- ` or `* ` at the beginning of a line 12 | - If there is a bullet list before or after the created bullet list item, it will be automatically merged into one bullet list 13 | - Within ordered lists and task lists, typing the above input rules at the beginning of a list item will quickly convert it to a bullet list 14 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-bullet-list 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「无序列表」功能(类似于 HTML 标签 `
`)。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-bullet-list` 修改了如下内容: 10 | 11 | - 输入规则:在行首输入 `- ` 或 `* ` 快速创建无序列表 12 | - 若在创建无序列表项的前、后位置存在无序列表,将自动合并为一个无序列表 13 | - 在 有序列表、任务列表 内,通过在 列表项 开头输入符合上述输入规则的内容,快速转换为 无序列表 14 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-bullet-list", 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 | "@gitee/tide-common": "workspace:*", 19 | "@tiptap/extension-bullet-list": "^2.0.3", 20 | "@babel/runtime-corejs3": "^7.21.0" 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/extension-bullet-list" 35 | }, 36 | "sideEffects": false 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/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-bullet-list/src/bullet-list.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BulletList as TBulletList, 3 | BulletListOptions as TBulletListOptions, 4 | } from '@tiptap/extension-bullet-list'; 5 | import { wrapInListInputRule, wrappingInputRule } from '@gitee/tide-common'; 6 | import { getNodeType } from '@tiptap/core'; 7 | 8 | export type BulletListOptions = TBulletListOptions; 9 | 10 | export const inputRegex = /^\s*([-*])\s$/; 11 | 12 | export const BulletList = TBulletList.extend
({ 13 | addInputRules() { 14 | const listItemType = getNodeType('listItem', this.editor.schema); 15 | return [ 16 | wrappingInputRule({ 17 | find: inputRegex, 18 | type: this.type, 19 | }), 20 | wrapInListInputRule({ 21 | find: inputRegex, 22 | listType: this.type, 23 | itemType: listItemType, 24 | extensions: this.editor.extensionManager.extensions, 25 | }), 26 | ]; 27 | }, 28 | }); 29 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './bullet-list'; 2 | -------------------------------------------------------------------------------- /packages/extension-bullet-list/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-code-block/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-code-block/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './code-block'; 2 | -------------------------------------------------------------------------------- /packages/extension-code-block/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { Selection } from '@tiptap/pm/state'; 2 | import { Node } from '@tiptap/pm/model'; 3 | 4 | export function getSelectedLineRange( 5 | selection: Selection, 6 | codeBlockNode: Node 7 | ) { 8 | const { $from, from, to } = selection; 9 | const text = codeBlockNode.textContent || ''; 10 | const lines = text.split('\n'); 11 | const lineLastIndexMap = lines.reduce((acc, line, index) => { 12 | acc[index] = (acc[index - 1] || 0) + line.length + (index === 0 ? 0 : 1); 13 | return acc; 14 | }, {} as { [key: number]: number }); 15 | const selectedTextStart = $from.parentOffset; 16 | const selectedTextEnd = $from.parentOffset + to - from; 17 | const lineKeys = Object.keys(lineLastIndexMap) as unknown as number[]; 18 | const selectedLineStart: number | undefined = lineKeys.find( 19 | (index) => lineLastIndexMap[index] >= selectedTextStart 20 | ); 21 | const selectedLineEnd: number | undefined = lineKeys.find( 22 | (index) => lineLastIndexMap[index] >= selectedTextEnd 23 | ); 24 | return { 25 | start: selectedLineStart, 26 | end: selectedLineEnd, 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /packages/extension-code-block/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-code/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-code 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use the inline code (similar to the HTML tag ` `) in the editor. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-code`: 10 | 11 | - Input rule: Automatically converts
\`code\`
or `·code·` to inline code when Space is entered after it. 12 | - Shortcut: Press ← to exit inline code when the cursor is at the beginning of a line of inline code. 13 | -------------------------------------------------------------------------------- /packages/extension-code/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-code 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「行内代码」功能(类似于 HTML 标签 ``)。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-code` 修改了如下内容: 10 | 11 | - 输入规则:输入
\`code\`
或 `·code·` 且在后面输入 空格 时,自动转换为行内代码 12 | - 快捷键:当「行内代码」位于行首时,在它的左侧按下 ← 可退出行内代码。 13 | -------------------------------------------------------------------------------- /packages/extension-code/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-code", 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 | "@tiptap/extension-code": "^2.0.3", 19 | "@babel/runtime-corejs3": "^7.21.0" 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-code" 34 | }, 35 | "sideEffects": false 36 | } 37 | -------------------------------------------------------------------------------- /packages/extension-code/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-code/src/code.ts: -------------------------------------------------------------------------------- 1 | import { markInputRule, markPasteRule } from '@tiptap/core'; 2 | import { 3 | Code as TCode, 4 | CodeOptions as TCodeOptions, 5 | } from '@tiptap/extension-code'; 6 | 7 | export type CodeOptions = TCodeOptions; 8 | 9 | declare module '@tiptap/core' { 10 | interface Commands{ 11 | markLeftExit: { 12 | /** 13 | * Handle mark left exit. 14 | */ 15 | markLeftExit: (markName: string) => ReturnType; 16 | }; 17 | } 18 | } 19 | 20 | export const inputRegex = /(?:^|\s)((?:[`·])((?:[^`·]+))(?:[`·]))\s$/; 21 | export const pasteRegex = /(?:^|\s)((?:`)((?:[^`]+))(?:`))/g; 22 | 23 | export const Code = TCode.extend ({ 24 | exitable: true, 25 | 26 | addInputRules() { 27 | return [ 28 | markInputRule({ 29 | find: inputRegex, 30 | type: this.type, 31 | }), 32 | ]; 33 | }, 34 | 35 | addPasteRules() { 36 | return [ 37 | markPasteRule({ 38 | find: pasteRegex, 39 | type: this.type, 40 | }), 41 | ]; 42 | }, 43 | 44 | addKeyboardShortcuts() { 45 | return { 46 | ...this.parent?.(), 47 | ArrowLeft: () => this.editor.commands.markLeftExit(this.name), 48 | }; 49 | }, 50 | }); 51 | -------------------------------------------------------------------------------- /packages/extension-code/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './code'; 2 | -------------------------------------------------------------------------------- /packages/extension-code/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-emoji/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-emoji 2 | 3 | ## Introduction 4 | 5 | This extension renders emojis as an inline node. 6 | 7 | ## Features 8 | 9 | - Provides an emoji panel: emoji search, category filtering, recently used records, and supports keyboard operations 10 | - Supports using `:smile:` syntax to input emojis 11 | - Supports using emoji symbols to input emojis (such as `<3`) 12 | - Supports using images to render emojis that are not supported by the device 13 | - Supports custom emojis 14 | -------------------------------------------------------------------------------- /packages/extension-emoji/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-emoji 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「Emoji」功能,可以在文本中插入表情。 6 | 7 | ## 功能 8 | 9 | - 提供表情面板:表情搜索、分类筛选、最近使用记录,支持键盘操作 10 | - 支持使用 `:smile:` 语法输入表情 11 | - 支持使用表情符号输入表情(如 `<3`) 12 | - 支持使用图片渲染设备不支持的 Emoji 表情 13 | - 支持自定义 Emoji 表情 14 | -------------------------------------------------------------------------------- /packages/extension-emoji/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-emoji/src/InsertEmojiButton.tsx: -------------------------------------------------------------------------------- 1 | import React, { cloneElement, forwardRef, useRef } from 'react'; 2 | import Tippy from '@tippyjs/react'; 3 | import { Editor } from '@tiptap/core'; 4 | import EmojiPanel from './EmojiPanel'; 5 | 6 | export type InsertEmojiButtonProps = { 7 | editor: Editor; 8 | children: React.ReactElement; 9 | }; 10 | 11 | export const InsertEmojiButton = forwardRef< 12 | HTMLElement, 13 | InsertEmojiButtonProps 14 | >(({ editor, children }, ref) => { 15 | const emojiPanelRef = useRef(null); 16 | return ( 17 | 29 | } 30 | placement="bottom-end" 31 | trigger="click" 32 | interactive 33 | hideOnClick 34 | onShow={() => emojiPanelRef.current?.onShow()} 35 | maxWidth={null} 36 | > 37 | {cloneElement(children, { 38 | ref, 39 | })} 40 | 41 | ); 42 | }); 43 | 44 | InsertEmojiButton.displayName = 'InsertEmojiButton'; 45 | -------------------------------------------------------------------------------- /packages/extension-emoji/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './emoji'; 2 | export * from './emojis'; 3 | export * from './suggestion'; 4 | export * from './InsertEmojiButton'; 5 | -------------------------------------------------------------------------------- /packages/extension-emoji/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-horizontal-rule/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-horizontal-rule 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use the horizontal rule (similar to the HTML tag `
`) in the editor. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-horizontal-rule`: 10 | 11 | - Shortcut: Command + Option + S (Mac) or Ctrl + Alt + S (Windows/Linux) to insert a horizontal rule. 12 | -------------------------------------------------------------------------------- /packages/extension-horizontal-rule/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-horizontal-rule 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「分割线」功能(类似于 HTML 标签 `
`)。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-horizontal-rule` 修改了如下内容: 10 | 11 | - 快捷键:Command + Option + S (Mac) 或 Ctrl + Alt + S (Windows/Linux) 插入分割线 12 | -------------------------------------------------------------------------------- /packages/extension-horizontal-rule/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-horizontal-rule", 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 | "@tiptap/extension-horizontal-rule": "^2.0.3", 19 | "@babel/runtime-corejs3": "^7.21.0" 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-horizontal-rule" 34 | }, 35 | "sideEffects": false 36 | } 37 | -------------------------------------------------------------------------------- /packages/extension-horizontal-rule/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-horizontal-rule/src/horizontal-rule.ts: -------------------------------------------------------------------------------- 1 | import { 2 | HorizontalRule as THorizontalRule, 3 | HorizontalRuleOptions as THorizontalRuleOptions, 4 | } from '@tiptap/extension-horizontal-rule'; 5 | 6 | export type HorizontalRuleOptions = THorizontalRuleOptions; 7 | 8 | export const HorizontalRule = THorizontalRule.extend({ 9 | addKeyboardShortcuts() { 10 | return { 11 | 'Mod-Alt-s': () => this.editor.commands.setHorizontalRule(), 12 | }; 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /packages/extension-horizontal-rule/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './horizontal-rule'; 2 | -------------------------------------------------------------------------------- /packages/extension-horizontal-rule/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-image/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-image 2 | 3 | ## Introduction 4 | 5 | This extension enables to render image in the editor, which allows you to insert image blocks and supports scaling and alignment. 6 | 7 | ## Features 8 | 9 | - Supports using Markdown syntax `` or `` to insert images 10 | - Supports scaling images 11 | - Supports left, center, and right alignment of images 12 | -------------------------------------------------------------------------------- /packages/extension-image/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-image 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「图片」功能,可以插入图片块,支持缩放、对齐。 6 | 7 | ## 功能 8 | 9 | - 支持使用 Markdown 语法 `` 或 `` 插入图片 10 | - 支持对图片进行缩放操作 11 | - 支持图片居左、居中、居右对齐 12 | -------------------------------------------------------------------------------- /packages/extension-image/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-image/src/index.ts: -------------------------------------------------------------------------------- 1 | export { ImageBubbleMenu } from './NodeView/ImageBubbleMenu'; 2 | export * from './image-extension'; 3 | -------------------------------------------------------------------------------- /packages/extension-image/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-indentation/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-indentation 2 | 3 | ## Introduction 4 | 5 | This extension enables indentation for nodes in the editor, such as paragraphs and headings. 6 | 7 | ## Features 8 | 9 | - Adds indentation for specified types of `node` (default is paragraph and heading) 10 | - Supports limiting the minimum and maximum levels of indentation 11 | - Shortcut support: Increase indentation by Tab, decrease indentation by Shift + Tab or Backspace 12 | -------------------------------------------------------------------------------- /packages/extension-indentation/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-indentation 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器的 `node` 节点启用缩进功能,例如段落、标题。 6 | 7 | ## 功能 8 | 9 | - 为指定类型的 `node` 增加缩进功能(默认为段落、标题) 10 | - 支持限制最小、最大层级 11 | - 快捷键支持:通过 Tab 增加缩进,通过 Shift + Tab 或 Backspace 减少缩进 12 | -------------------------------------------------------------------------------- /packages/extension-indentation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-indentation", 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 | }, 20 | "devDependencies": { 21 | "@tiptap/core": "^2.0.3", 22 | "@tiptap/pm": "^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 | "@tiptap/pm": "^2.0.0" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "https://gitee.com/oschina/tide", 34 | "directory": "packages/extension-indentation" 35 | }, 36 | "sideEffects": false 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-indentation/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-indentation/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './indentation'; 2 | -------------------------------------------------------------------------------- /packages/extension-indentation/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-italic/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-italic 2 | 3 | ## Introduction 4 | 5 | Use this extension to render text in _italic_. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-italic`: 10 | 11 | - Input rule: Automatically converts `*text*` or `_text_` to italic text when 空格 is entered after it. 12 | -------------------------------------------------------------------------------- /packages/extension-italic/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-italic 2 | 3 | ## 介绍 4 | 5 | 本扩展可为文本添加*斜体*效果。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-italic` 修改了如下内容: 10 | 11 | - 输入规则:输入 `*text*` 或 `_text_` 且在后面输入 空格 时,自动转换为斜体文本 12 | -------------------------------------------------------------------------------- /packages/extension-italic/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-italic", 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 | "@tiptap/extension-italic": "^2.0.3", 19 | "@babel/runtime-corejs3": "^7.21.0" 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-italic" 34 | }, 35 | "sideEffects": false 36 | } 37 | -------------------------------------------------------------------------------- /packages/extension-italic/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-italic/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './italic'; 2 | -------------------------------------------------------------------------------- /packages/extension-italic/src/italic.ts: -------------------------------------------------------------------------------- 1 | import { markInputRule, markPasteRule } from '@tiptap/core'; 2 | import { 3 | Italic as TItalic, 4 | ItalicOptions as TItalicOptions, 5 | } from '@tiptap/extension-italic'; 6 | 7 | export type ItalicOptions = TItalicOptions; 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 Italic = TItalic.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-italic/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-link/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-link 2 | 3 | ## Introduction 4 | 5 | This extension enables to render link (similar to the HTML tag ``) in the editor, providing an interface for adding, modifying, and deleting links. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-link`: 10 | 11 | - Provides an interface for adding, modifying, and deleting links 12 | - Supports using Markdown syntax `[link text](link URL)` to insert links 13 | - Supports using shortcut Ctrl/Command + K to insert or remove links 14 | -------------------------------------------------------------------------------- /packages/extension-link/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-link 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「链接」功能(类似于 HTML 标签 ``),提供添加、修改、删除链接的界面。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-link` 修改了如下内容: 10 | 11 | - 提供添加、修改、删除链接的界面 12 | - 支持使用 Markdown 语法 `[链接文本](链接地址)` 插入链接 13 | - 支持使用快捷键 Ctrl/Command + K 插入或移除链接 14 | -------------------------------------------------------------------------------- /packages/extension-link/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-link/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './link'; 2 | export * from './menu/LinkBubbleMenu'; 3 | -------------------------------------------------------------------------------- /packages/extension-link/src/menu/LinkEditPopup.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@gitee/tide-theme/dist/variable.less'; 2 | 3 | .tide-editor-popup.tide-link-popup { 4 | padding: 16px; 5 | font-size: 14px; 6 | } 7 | .tide-link-popup { 8 | &__row { 9 | margin-bottom: 16px; 10 | } 11 | 12 | &__label { 13 | display: block; 14 | line-height: 20px; 15 | margin-bottom: 8px; 16 | } 17 | &__input { 18 | display: block; 19 | width: 210px; 20 | padding: 7px 8px; 21 | background: @background-color; 22 | border-radius: 3px; 23 | border: 1px solid @border-color; 24 | color: inherit; 25 | outline: 0; 26 | &:focus { 27 | border-color: @theme-color; 28 | box-shadow: 0 0 0 1px @theme-color; 29 | } 30 | } 31 | &__btn-group { 32 | display: flex; 33 | justify-content: flex-end; 34 | } 35 | 36 | &__button { 37 | width: 60px; 38 | height: 32px; 39 | outline: 0; 40 | border-radius: 4px; 41 | margin-left: 8px; 42 | cursor: pointer; 43 | 44 | &--primary { 45 | color: @background-color; 46 | background-color: @theme-color; 47 | border: 1px solid @theme-color; 48 | } 49 | 50 | &--basic { 51 | color: @text-color; 52 | background-color: @background-color; 53 | border: 1px solid @border-color; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /packages/extension-link/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-list-item/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-list-item 2 | 3 | ## Introduction 4 | 5 | This extension enables the list item (similar to the HTML tag ` - `) in the editor, which depends on the ordered list or bullet list extension. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-list-item`: 10 | 11 | - Specifies `group` as `listItem` to automatically merge with the previous and next lists when creating list items. 12 | -------------------------------------------------------------------------------- /packages/extension-list-item/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-list-item 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「列表项」功能(类似于 HTML 标签 `
- `),依赖 有序列表 或 无序列表 扩展。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-list-item` 修改了如下内容: 10 | 11 | - 指定 `group` 为 `listItem`,用于创建列表项时自动与前、后列表合并 12 | -------------------------------------------------------------------------------- /packages/extension-list-item/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-list-item", 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 | "@tiptap/extension-list-item": "^2.0.3", 19 | "@babel/runtime-corejs3": "^7.21.0" 20 | }, 21 | "devDependencies": { 22 | "eslint-config-custom": "workspace:*", 23 | "tsconfig": "workspace:*", 24 | "typescript": "^4.9.5" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "https://gitee.com/oschina/tide", 29 | "directory": "packages/extension-list-item" 30 | }, 31 | "sideEffects": false 32 | } 33 | -------------------------------------------------------------------------------- /packages/extension-list-item/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-list-item/src/index.ts: -------------------------------------------------------------------------------- 1 | import { ListItem } from './list-item'; 2 | 3 | export * from './list-item'; 4 | 5 | export default ListItem; 6 | -------------------------------------------------------------------------------- /packages/extension-list-item/src/list-item.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ListItem as TListItem, 3 | ListItemOptions as TListItemOptions, 4 | } from '@tiptap/extension-list-item'; 5 | 6 | export type ListItemOptions = TListItemOptions; 7 | 8 | export const ListItem = TListItem.extend
({ 9 | group: 'listItem', 10 | }); 11 | -------------------------------------------------------------------------------- /packages/extension-list-item/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-lists-indentation/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-lists-indentation 2 | 3 | ## Introduction 4 | 5 | This extension is used to add indentation meta and list symbol type to list items in ordered lists, bullet lists, and task lists. 6 | 7 | ## Features 8 | 9 | - Adds the `data-list-indent-level` attribute to list items to indicate their indentation information 10 | - Adds the `data-list-style-type` attribute to list items to indicate their list symbol type (to implement different list symbol types for list items at different levels) 11 | -------------------------------------------------------------------------------- /packages/extension-lists-indentation/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-lists-indentation 2 | 3 | ## 介绍 4 | 5 | 本扩展用于为列表(有序列表、无序列表、任务列表)的列表项添加层级信息、列表符号类型。 6 | 7 | ## 功能 8 | 9 | - 为列表项增加 `data-list-indent-level` 属性,用于表示列表项的层级信息 10 | - 为列表项增加 `data-list-style-type` 属性,用于表示列表项的列表符号类型(实现不同层级的列表项使用不同的列表符号类型) 11 | -------------------------------------------------------------------------------- /packages/extension-lists-indentation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-lists-indentation", 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 | }, 20 | "devDependencies": { 21 | "@tiptap/core": "^2.0.3", 22 | "@tiptap/pm": "^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 | "@tiptap/pm": "^2.0.0" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "https://gitee.com/oschina/tide", 34 | "directory": "packages/extension-lists-indentation" 35 | }, 36 | "sideEffects": false 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-lists-indentation/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-lists-indentation/src/index.ts: -------------------------------------------------------------------------------- 1 | import { ListsIndentation } from './lists-indentation'; 2 | 3 | export * from './lists-indentation'; 4 | 5 | export default ListsIndentation; 6 | -------------------------------------------------------------------------------- /packages/extension-lists-indentation/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-markdown/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-markdown 2 | 3 | ## Introduction 4 | 5 | This extension enables Markdown format support for the editor, based on `tiptap-markdown`. 6 | 7 | ## Features 8 | 9 | - Supports input and output of Markdown format content (`setContent()`, `getMarkdown()`) 10 | - Supports pasting Markdown format text into the editor 11 | - Supports copying the editor's content as Markdown format text 12 | -------------------------------------------------------------------------------- /packages/extension-markdown/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-markdown 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用 Markdown 格式支持,基于 `tiptap-markdown` 开发。 6 | 7 | ## 功能 8 | 9 | - 支持 Markdown 格式内容的输入、输出(`setContent()`、`getMarkdown()`) 10 | - 支持粘贴 Markdown 格式的文本到编辑器 11 | - 支持将编辑器的内容复制为 Markdown 格式的文本 12 | -------------------------------------------------------------------------------- /packages/extension-markdown/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-markdown", 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-markdown": "^0.7.2" 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/extension-markdown" 36 | }, 37 | "sideEffects": false 38 | } 39 | -------------------------------------------------------------------------------- /packages/extension-markdown/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-markdown/src/clipboardCopy.ts: -------------------------------------------------------------------------------- 1 | import { Plugin, PluginKey } from '@tiptap/pm/state'; 2 | import { Extension } from '@tiptap/core'; 3 | 4 | export const MarkdownClipboardCopy = Extension.create({ 5 | name: 'markdownClipboardCopy', 6 | 7 | addProseMirrorPlugins() { 8 | return [ 9 | new Plugin({ 10 | key: new PluginKey('markdownClipboardCopy'), 11 | props: { 12 | clipboardTextSerializer: (slice) => { 13 | const doc = this.editor.schema.topNodeType.createAndFill( 14 | undefined, 15 | slice.content 16 | ); 17 | if (!doc) { 18 | return ''; 19 | } 20 | return this.editor.storage.markdown?.getMarkdown?.(doc) || ''; 21 | }, 22 | }, 23 | }), 24 | ]; 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/extension-markdown/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | export * from './markdown'; 3 | -------------------------------------------------------------------------------- /packages/extension-markdown/src/markdown.ts: -------------------------------------------------------------------------------- 1 | import { Node } from '@tiptap/pm/model'; 2 | import { Markdown as TiptapMarkdown } from 'tiptap-markdown'; 3 | import { MarkdownClipboardCopy } from './clipboardCopy'; 4 | import { MarkdownClipboardPaste } from './clipboardPaste'; 5 | 6 | export type MarkdownOptions = { 7 | html?: boolean; 8 | tightLists?: boolean; 9 | tightListClass?: string; 10 | bulletListMarker?: string; 11 | linkify?: boolean; 12 | breaks?: boolean; 13 | paste?: boolean; 14 | copy?: boolean; 15 | }; 16 | 17 | export const Markdown = TiptapMarkdown.extend ({ 18 | name: 'markdown', 19 | 20 | priority: 50, 21 | 22 | addOptions() { 23 | return { 24 | ...this.parent?.(), 25 | paste: true, 26 | copy: true, 27 | }; 28 | }, 29 | 30 | onBeforeCreate() { 31 | this.parent?.(); 32 | 33 | this.editor.storage.markdown.getMarkdown = (content?: Node) => { 34 | return this.editor.storage.markdown.serializer.serialize( 35 | content ?? this.editor.state.doc 36 | ); 37 | }; 38 | }, 39 | 40 | addExtensions() { 41 | return [ 42 | ...(this.options.copy ? [MarkdownClipboardCopy] : []), 43 | ...(this.options.paste ? [MarkdownClipboardPaste] : []), 44 | ]; 45 | }, 46 | }); 47 | -------------------------------------------------------------------------------- /packages/extension-markdown/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-mention/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-mention 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use the mention for the editor, which is generally used to implement user mentions like `@user`. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-mention`: 10 | 11 | - Provides a universal `MentionList` component for the mention list 12 | - Provides a utility method for quickly creating `SuggestionOptions` configuration. 13 | -------------------------------------------------------------------------------- /packages/extension-mention/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-mention 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「提及」功能,一般用于实现 `@user` 提及用户。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-mention` 修改了如下内容: 10 | 11 | - 提供提及列表通用组件 `MentionList` 12 | - 提供工具方法快速创建 `SuggestionOptions` 配置 13 | -------------------------------------------------------------------------------- /packages/extension-mention/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-mention/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mention'; 2 | export * from './utils'; 3 | export * from './MentionList'; 4 | -------------------------------------------------------------------------------- /packages/extension-mention/src/mention.ts: -------------------------------------------------------------------------------- 1 | import { Mention as TMention } from '@tiptap/extension-mention'; 2 | import type { MentionOptions as TMentionOptions } from '@tiptap/extension-mention'; 3 | import type { SuggestionOptions } from '@tiptap/suggestion'; 4 | 5 | export type MentionOptions = TMentionOptions & { 6 | suggestion: Omit , 'editor'>; 7 | }; 8 | 9 | export const Mention = TMention.extend ({ 10 | name: 'mention', 11 | 12 | group: 'inline', 13 | 14 | inline: true, 15 | 16 | selectable: false, 17 | 18 | atom: true, 19 | 20 | addOptions() { 21 | const parentOptions = this.parent?.(); 22 | return { 23 | ...parentOptions, 24 | HTMLAttributes: { 25 | ...parentOptions?.HTMLAttributes, 26 | class: 'mention', 27 | }, 28 | }; 29 | }, 30 | }); 31 | -------------------------------------------------------------------------------- /packages/extension-mention/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-menubar/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-menubar 2 | 3 | ## Introduction 4 | 5 | This extension enables the menu for the editor, including a toolbar and a bubble menu. 6 | 7 | ## Features 8 | 9 | - Provides a toolbar component 10 | - Provides menu buttons for common functions 11 | - Provides a custom menu button component 12 | - Provides a text bubble menu component (bold, italic, strikethrough, link) 13 | -------------------------------------------------------------------------------- /packages/extension-menubar/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-menubar 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「菜单」功能,包括工具栏和气泡菜单。 6 | 7 | ## 功能 8 | 9 | - 提供工具栏组件 10 | - 提供常用功能的菜单按钮 11 | - 提供自定义菜单按钮组件 12 | - 提供文本气泡菜单组件(加粗、斜体、删除线、链接) 13 | -------------------------------------------------------------------------------- /packages/extension-menubar/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-menubar/src/MenuBar.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import classNames from 'classnames'; 3 | 4 | import './MenuBar.less'; 5 | 6 | type MenuBarProps = { 7 | className?: string; 8 | style?: React.CSSProperties | undefined; 9 | children?: React.ReactNode; 10 | }; 11 | 12 | export const MenuBar: React.FC = ({ 13 | className, 14 | style, 15 | children, 16 | }) => ( 17 | 18 | {children} 19 |20 | ); 21 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/Button.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React, { forwardRef } from 'react'; 3 | 4 | export type ButtonProps = { 5 | disabled?: boolean; 6 | isActive?: boolean; 7 | children: React.ReactNode; 8 | onClick?: (e: React.MouseEvent) => void; 9 | }; 10 | 11 | export const Button = forwardRef ( 12 | ({ disabled, isActive, children, onClick }, ref) => { 13 | return ( 14 | 25 | ); 26 | } 27 | ); 28 | 29 | Button.displayName = 'Button'; 30 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/MenuBarDivider.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import classNames from 'classnames'; 3 | 4 | export type MenuBarDividerProps = { 5 | className?: string; 6 | }; 7 | 8 | export const MenuBarDivider: React.FC = ({ 9 | className, 10 | }) => { 11 | return ; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/MenuBarItem.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import classNames from 'classnames'; 3 | 4 | export type MenuBarItemProps = { 5 | className?: string; 6 | style?: React.CSSProperties; 7 | children: React.ReactNode; 8 | }; 9 | 10 | export const MenuBarItem: React.FC = ({ 11 | className, 12 | style, 13 | children, 14 | }) => { 15 | return ( 16 | 20 | {children} 21 | 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/Tooltip.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Tippy, { TippyProps } from '@tippyjs/react'; 3 | 4 | export type TooltipProps = TippyProps & { 5 | text?: string; 6 | }; 7 | 8 | export const Tooltip: React.FC = ({ 9 | text, 10 | content, 11 | children, 12 | ...props 13 | }) => { 14 | return ( 15 | {text} 19 | } 20 | {...props} 21 | > 22 | {children} 23 | 24 | ); 25 | }; 26 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './items'; 2 | export * from './Button'; 3 | export * from './MenuBarDivider'; 4 | export * from './MenuBarItem'; 5 | export * from './Tooltip'; 6 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Bold.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconBoldBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type BoldProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Bold: React.FC= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'bold'), 19 | disabled: () => 20 | !editor.state.schema.marks.bold || 21 | !editor.can().chain().focus().toggleBold?.().run(), 22 | })); 23 | return ( 24 | 25 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Code.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconCodeBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type CodeProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Code: React.FC26 | 33 | 34 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'code'), 19 | disabled: () => 20 | !editor.state.schema.marks.code || 21 | !editor.can().chain().focus().toggleCode?.().run(), 22 | })); 23 | return ( 24 | 25 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/CodeBlock.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconCodeSquareBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | 9 | export type CodeBlockProps = { 10 | className?: string; 11 | style?: React.CSSProperties; 12 | title?: string; 13 | }; 14 | 15 | export const CodeBlock: React.FC26 | 33 | 34 |= ({ 16 | className, 17 | style, 18 | title, 19 | }) => { 20 | const { editor, statusMap } = useStatusMap(() => ({ 21 | isActive: () => isActive(editor.state, 'codeBlock'), 22 | disabled: () => 23 | !editor.state.schema.nodes.codeBlock || 24 | !editor.can().chain().focus().toggleCodeBlock?.().run(), 25 | })); 26 | return ( 27 | 28 | 38 | ); 39 | }; 40 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Emoji.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconSmileCircleBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { InsertEmojiButton } from '@gitee/tide-extension-emoji'; 5 | import { MenuBarItem } from '../MenuBarItem'; 6 | import { useStatusMap } from '../../MenuBarContext'; 7 | import { Tooltip } from '../Tooltip'; 8 | import { Button } from '../Button'; 9 | 10 | export type EmojiProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Emoji: React.FC29 | 36 | 37 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'emoji'), 19 | disabled: () => 20 | !editor.state.schema.nodes.emoji || 21 | !editor.can().chain().focus().insertEmoji?.('smile').run(), 22 | })); 23 | return ( 24 | 25 | 33 | ); 34 | }; 35 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Fullscreen.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconMaximizeBold, IconMinimizeBold } from '@gitee/icons-react'; 3 | import { Button } from '../Button'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { Tooltip } from '../Tooltip'; 6 | 7 | export type FullscreenProps = { 8 | className?: string; 9 | style?: React.CSSProperties; 10 | title?: string; 11 | fullscreen: boolean; 12 | onFullscreenChange: (fullscreen: boolean) => void; 13 | }; 14 | 15 | export const Fullscreen: React.FC26 | 32 |27 | 30 | 31 |= ({ 16 | className, 17 | style, 18 | title, 19 | fullscreen, 20 | onFullscreenChange, 21 | }) => ( 22 | 23 | 32 | ); 33 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Image.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconImageBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { selectImageUpload } from '@gitee/tide-extension-uploader'; 5 | import { MenuBarItem } from '../MenuBarItem'; 6 | import { useStatusMap } from '../../MenuBarContext'; 7 | import { Tooltip } from '../Tooltip'; 8 | import { Button } from '../Button'; 9 | 10 | export type ImageProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Image: React.FC24 | 30 | 31 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'image'), 19 | disabled: () => 20 | !editor.state.schema.nodes.image || 21 | !editor.can().chain().focus().uploadImage?.([]).run(), 22 | })); 23 | return ( 24 | 25 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Italic.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconItalicBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type ItalicProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Italic: React.FC26 | 33 | 34 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'italic'), 19 | disabled: () => 20 | !editor.state.schema.marks.italic || 21 | !editor.can().chain().focus().toggleItalic?.().run(), 22 | })); 23 | return ( 24 | 25 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Link.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconChainBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type LinkProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Link: React.FC26 | 33 | 34 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'link'), 19 | disabled: () => 20 | !editor.state.schema.marks.link || 21 | !editor.can().chain().focus().toggleMark('link').run(), 22 | })); 23 | return ( 24 | 25 | 37 | ); 38 | }; 39 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Redo.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconRedoBold } from '@gitee/icons-react'; 3 | import { MenuBarItem } from '../MenuBarItem'; 4 | import { useStatusMap } from '../../MenuBarContext'; 5 | import { Tooltip } from '../Tooltip'; 6 | import { Button } from '../Button'; 7 | import { command } from '../../utils'; 8 | 9 | export type RedoProps = { 10 | className?: string; 11 | style?: React.CSSProperties; 12 | title?: string; 13 | }; 14 | 15 | export const Redo: React.FC26 | 35 | 36 |= ({ className, style, title }) => { 16 | const { editor, statusMap } = useStatusMap(() => ({ 17 | disabled: () => !editor.can().chain().focus().redo?.().run(), 18 | })); 19 | return ( 20 | 21 | 30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Strike.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconStrikethroughBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type StrikeProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Strike: React.FC22 | 28 | 29 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'strike'), 19 | disabled: () => 20 | !editor.state.schema.marks.strike || 21 | !editor.can().chain().focus().toggleStrike?.().run(), 22 | })); 23 | return ( 24 | 25 | 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Table.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconTableBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { InsertTableButton } from '@gitee/tide-extension-table'; 5 | import { MenuBarItem } from '../MenuBarItem'; 6 | import { useStatusMap } from '../../MenuBarContext'; 7 | import { Tooltip } from '../Tooltip'; 8 | import { Button } from '../Button'; 9 | 10 | export type TableProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const Table: React.FC26 | 33 | 34 |= ({ className, style, title }) => { 17 | const { editor, statusMap } = useStatusMap(() => ({ 18 | isActive: () => isActive(editor.state, 'table'), 19 | disabled: () => 20 | !editor.state.schema.nodes.table || 21 | !editor.can().chain().focus().insertTable?.().run(), 22 | })); 23 | return ( 24 | 25 | 33 | ); 34 | }; 35 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/TaskList.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconListTaskBold } from '@gitee/icons-react'; 3 | import { isActive } from '@gitee/tide-common'; 4 | import { MenuBarItem } from '../MenuBarItem'; 5 | import { useStatusMap } from '../../MenuBarContext'; 6 | import { Tooltip } from '../Tooltip'; 7 | import { Button } from '../Button'; 8 | import { command } from '../../utils'; 9 | 10 | export type TaskListProps = { 11 | className?: string; 12 | style?: React.CSSProperties; 13 | title?: string; 14 | }; 15 | 16 | export const TaskList: React.FC26 | 32 |27 | 30 | 31 |= ({ 17 | className, 18 | style, 19 | title, 20 | }) => { 21 | const { editor, statusMap } = useStatusMap(() => ({ 22 | isActive: () => isActive(editor.state, 'taskList'), 23 | disabled: () => 24 | !editor.state.schema.nodes.taskList || 25 | !editor.can().chain().focus().toggleTaskList?.().run(), 26 | })); 27 | return ( 28 | 29 | 39 | ); 40 | }; 41 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/Undo.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconUndoBold } from '@gitee/icons-react'; 3 | import { MenuBarItem } from '../MenuBarItem'; 4 | import { useStatusMap } from '../../MenuBarContext'; 5 | import { Tooltip } from '../Tooltip'; 6 | import { Button } from '../Button'; 7 | import { command } from '../../utils'; 8 | 9 | export type UndoProps = { 10 | className?: string; 11 | style?: React.CSSProperties; 12 | title?: string; 13 | }; 14 | 15 | export const Undo: React.FC30 | 37 | 38 |= ({ className, style, title }) => { 16 | const { editor, statusMap } = useStatusMap(() => ({ 17 | disabled: () => !editor.can().chain().focus().undo?.().run(), 18 | })); 19 | return ( 20 | 21 | 30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/components/items/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Blockquote'; 2 | export * from './Bold'; 3 | export * from './BulletList'; 4 | export * from './Code'; 5 | export * from './CodeBlock'; 6 | export * from './Emoji'; 7 | export * from './Fullscreen'; 8 | export * from './Heading'; 9 | export * from './HorizontalRule'; 10 | export * from './Image'; 11 | export * from './Italic'; 12 | export * from './Link'; 13 | export * from './OrderedList'; 14 | export * from './Redo'; 15 | export * from './Strike'; 16 | export * from './Table'; 17 | export * from './TaskList'; 18 | export * from './Undo'; 19 | -------------------------------------------------------------------------------- /packages/extension-menubar/src/utils.ts: -------------------------------------------------------------------------------- 1 | import { isWindows } from '@gitee/tide-common'; 2 | 3 | export const command = isWindows() ? 'Ctrl' : '⌘'; 4 | 5 | export const option = isWindows() ? 'Alt' : 'Option'; 6 | -------------------------------------------------------------------------------- /packages/extension-menubar/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-ordered-list/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-ordered-list 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use ordered lists (similar to the HTML tag `22 | 28 | 29 |`) in the editor. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-ordered-list`: 10 | 11 | - Input rule: Quickly creates an ordered list by typing `1. `, `1) `, or `1) ` (can be any number) at the beginning of a line 12 | - If there is an ordered list before or after creating an ordered list item, it will automatically merge into one ordered list 13 | - In a bullet list or task list, you can quickly convert it to an ordered list by typing content that meets the above input rules at the beginning of a list item. 14 | -------------------------------------------------------------------------------- /packages/extension-ordered-list/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-ordered-list 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「有序列表」功能(类似于 HTML 标签 `
`)。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-ordered-list` 修改了如下内容: 10 | 11 | - 输入规则:在行首输入 `1. `、`1) ` 或 `1) `(可以是任意数字)快速创建有序列表 12 | - 若在创建有序列表项的前、后位置存在有序列表,将自动合并为一个有序列表 13 | - 在 无序列表、任务列表 内,通过在 列表项 开头输入符合上述输入规则的内容,快速转换为 有序列表 14 | -------------------------------------------------------------------------------- /packages/extension-ordered-list/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-ordered-list", 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 | "@gitee/tide-common": "workspace:*", 19 | "@tiptap/extension-ordered-list": "^2.0.3", 20 | "@babel/runtime-corejs3": "^7.21.0" 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/extension-ordered-list" 35 | }, 36 | "sideEffects": false 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-ordered-list/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-ordered-list/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ordered-list'; 2 | -------------------------------------------------------------------------------- /packages/extension-ordered-list/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-strike/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-strike 2 | 3 | ## Introduction 4 | 5 | Use this extension to render ~~strikethrough text~~. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-strike`: 10 | 11 | - Input rule: Automatically converts `~~text~~` or `~~text~~` to strikethrough text when Space is entered after it. 12 | -------------------------------------------------------------------------------- /packages/extension-strike/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-strike 2 | 3 | ## 介绍 4 | 5 | 本扩展可为文本添加~~删除线~~效果。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-strike` 修改了如下内容: 10 | 11 | - 输入规则:输入 `~~text~~` 或 `~~text~~` 且在后面输入 空格 时,自动转换为删除线文本 12 | -------------------------------------------------------------------------------- /packages/extension-strike/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-strike", 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 | "@tiptap/extension-strike": "^2.0.3", 19 | "@babel/runtime-corejs3": "^7.21.0" 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-strike" 34 | }, 35 | "sideEffects": false 36 | } 37 | -------------------------------------------------------------------------------- /packages/extension-strike/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-strike/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './strike'; 2 | -------------------------------------------------------------------------------- /packages/extension-strike/src/strike.ts: -------------------------------------------------------------------------------- 1 | import { markInputRule, markPasteRule } from '@tiptap/core'; 2 | import { 3 | Strike as TStrike, 4 | StrikeOptions as TStrikeOptions, 5 | } from '@tiptap/extension-strike'; 6 | 7 | export type StrikeOptions = TStrikeOptions; 8 | 9 | export const inputRegex = /(?:^|\s)((?:[~~]{2})((?:[^~~]+))(?:[~~]{2}))\s$/; 10 | export const pasteRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))/g; 11 | 12 | export const Strike = TStrike.extend
({ 13 | addInputRules() { 14 | return [ 15 | markInputRule({ 16 | find: inputRegex, 17 | type: this.type, 18 | }), 19 | ]; 20 | }, 21 | 22 | addPasteRules() { 23 | return [ 24 | markPasteRule({ 25 | find: pasteRegex, 26 | type: this.type, 27 | }), 28 | ]; 29 | }, 30 | }); 31 | -------------------------------------------------------------------------------- /packages/extension-strike/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-table/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-table 2 | 3 | ## Introduction 4 | 5 | This extension enables you to use tables in the editor. 6 | 7 | ## Features 8 | 9 | This extension modifies the following features based on `@tiptap/extension-table`: 10 | 11 | - Supports adjusting column width of cells 12 | - Supports inserting or deleting table rows and columns 13 | - Supports merging or splitting cells 14 | - Supports aligning cell content to left, center, or right 15 | - Input rule: Quickly creates a table by typing `||` or `||` (two or more vertical bars, each additional vertical bar represents one more column) 16 | - Keyboard shortcuts: 17 | - ←, →, ↑, ↓ Move the cell cursor within the table 18 | - Ctrl/Command + A Selects the content of the cell where the cursor is located. Press it again to select the entire cell. Press it again to select the entire table. 19 | -------------------------------------------------------------------------------- /packages/extension-table/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-table 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器启用「表格」功能。 6 | 7 | ## 功能 8 | 9 | 本扩展基于 `@tiptap/extension-table` 修改了如下内容: 10 | 11 | - 支持调整单元格列宽大小 12 | - 支持插入或删除表格行、列 13 | - 支持合并或拆分单元格 14 | - 支持单元格内居左、居中、居右对齐 15 | - 输入规则:输入 `||` 或 `||`(两个竖线或以上,每多一个竖线表示多一列)快速创建表格 16 | - 快捷键: 17 | - ←、→、↑、↓ 在表格内移动单元格光标 18 | - Ctrl/Command + A 选中光标所在单元格的内容,再按一次选中所在单元格,再按一次选中整个表格 19 | -------------------------------------------------------------------------------- /packages/extension-table/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-table/src/components/TableGrid.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@gitee/tide-theme/dist/variable.less'; 2 | 3 | .tide-editor-table-grid { 4 | cursor: pointer; 5 | margin: -2px; 6 | 7 | &__row { 8 | display: flex; 9 | flex-direction: row; 10 | } 11 | 12 | &__cell { 13 | flex-shrink: 0; 14 | height: 16px; 15 | width: 16px; 16 | margin: 2px; 17 | border: solid 1px @border-color; 18 | background-color: @table-grid-bg-color; 19 | border-radius: 2px; 20 | 21 | &--selected { 22 | border-color: @table-grid-active-border-color; 23 | background-color: @table-grid-active-bg-color; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/extension-table/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './table'; 2 | export * from './table-cell'; 3 | export * from './table-header'; 4 | export * from './table-row'; 5 | export * from './menu/TableCellBubbleMenu'; 6 | export * from './menu/InsertTableButton'; 7 | -------------------------------------------------------------------------------- /packages/extension-table/src/menu/InsertTableButton.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@gitee/tide-theme/dist/variable.less'; 2 | 3 | .tide-editor-popup.tide-insert-table-popup { 4 | padding: 16px; 5 | } 6 | 7 | .tide-insert-table-popup { 8 | &__header { 9 | display: flex; 10 | align-items: center; 11 | justify-content: space-between; 12 | margin-bottom: 4px; 13 | color: @text-color; 14 | line-height: 20px; 15 | font-size: 14px; 16 | } 17 | 18 | &__size { 19 | color: #C1C7D0; 20 | } 21 | 22 | &__divider { 23 | margin: 8px 0; 24 | border: none; 25 | border-top: 1PX solid @border-color; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/extension-table/src/table-row/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | TableRow as TTableRow, 3 | TableRowOptions as TTableRowOptions, 4 | } from '@tiptap/extension-table-row'; 5 | 6 | export type TableRowOptions = TTableRowOptions; 7 | 8 | export const TableRow = TTableRow.extend ({ 9 | content: 'tableCell*', 10 | }); 11 | -------------------------------------------------------------------------------- /packages/extension-table/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-task-item/README.md: -------------------------------------------------------------------------------- 1 | # @gitee# @gitee/tide-extension-task-item 2 | 3 | ## Introduction 4 | 5 | This extension is used to render the list items for task lists, which has a checkbox to indicate the selection status and depends on the task list extension. 6 | 7 | ## Features 8 | 9 | This extension re-implements the following features based on `@tiptap/extension-task-item`: 10 | 11 | - Allows modifying the selection status in read-only mode 12 | - Input rule: Quickly creates a task list by typing `[ ] `, `[x] `, `【 】 `, or `【x】 ` at the beginning of a line 13 | - Paste rule: Automatically converts content in the format of `[ ] text` or `[x] text` to a task list item when pasted 14 | - If there is a task list before or after creating a task list item, it will automatically merge into one task list 15 | - In a bullet list or ordered list, you can quickly convert it to a task list by typing content that meets the above input rules at the beginning of a list item. 16 | -------------------------------------------------------------------------------- /packages/extension-task-item/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-task-item 2 | 3 | ## 介绍 4 | 5 | 本扩展用于渲染「任务列表」功能的列表项,有一个复选框表示选中状态,依赖 任务列表 扩展。 6 | 7 | ## 功能 8 | 9 | 本扩展参考 `@tiptap/extension-task-item` 重新实现了如下内容: 10 | 11 | - 允许在只读模式下修改选中状态 12 | - 输入规则:在行首输入 `[ ] `、`[x] `、`【 】 `、`【x】 ` 快速创建任务列表 13 | - 粘贴规则:粘贴 `[ ] 文字` 或 `[x] 文字` 格式的内容,自动转换为任务列表项 14 | - 若在创建任务列表项的前、后位置存在任务列表,将自动合并为一个任务列表 15 | - 在 无序列表、有序列表 内,通过在 列表项 开头输入符合上述输入规则的内容,快速转换为 任务列表 16 | -------------------------------------------------------------------------------- /packages/extension-task-item/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-task-item", 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 | "@gitee/tide-common": "workspace:*", 19 | "@babel/runtime-corejs3": "^7.21.0" 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/extension-task-item" 36 | }, 37 | "sideEffects": false 38 | } 39 | -------------------------------------------------------------------------------- /packages/extension-task-item/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-task-item/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './task-item'; 2 | -------------------------------------------------------------------------------- /packages/extension-task-item/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-uploader/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-uploader 2 | 3 | ## Introduction 4 | 5 | This extension provides a unified file upload handler for the editor, supporting pasting, dragging and dropping, and selecting local files for upload. 6 | 7 | > Currently, only image files can be uploaded, and more file types will be supported in the future. 8 | 9 | ## Features 10 | 11 | - Provides the ability to paste and drag and drop files for upload 12 | - Provides the ability to select local files for upload (calls the `uploadImage` command) 13 | -------------------------------------------------------------------------------- /packages/extension-uploader/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-extension-uploader 2 | 3 | ## 介绍 4 | 5 | 本扩展可为编辑器提供统一的文件上传功能,支持粘贴、拖拽、选择本地文件上传。 6 | 7 | > 暂时仅支持上传图片类型的文件,后续将支持更多文件类型。 8 | 9 | ## 功能 10 | 11 | - 提供粘贴、拖拽上传文件的功能 12 | - 提供选择本地文件上传的功能(调用 `uploadImage` Command) 13 | -------------------------------------------------------------------------------- /packages/extension-uploader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-extension-uploader", 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 | "@gitee/tide-theme": "workspace:*", 19 | "@gitee/tide-common": "workspace:*", 20 | "browser-fs-access": "^0.31.1", 21 | "@babel/runtime-corejs3": "^7.21.0" 22 | }, 23 | "devDependencies": { 24 | "@tiptap/core": "^2.0.3", 25 | "@tiptap/pm": "^2.0.3", 26 | "eslint-config-custom": "workspace:*", 27 | "tsconfig": "workspace:*", 28 | "tslib": "^2.5.3", 29 | "typescript": "^4.9.5" 30 | }, 31 | "peerDependencies": { 32 | "@tiptap/core": "^2.0.0", 33 | "@tiptap/pm": "^2.0.0" 34 | }, 35 | "repository": { 36 | "type": "git", 37 | "url": "https://gitee.com/oschina/tide", 38 | "directory": "packages/extension-uploader" 39 | }, 40 | "sideEffects": false 41 | } 42 | -------------------------------------------------------------------------------- /packages/extension-uploader/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-uploader/src/image/utils.ts: -------------------------------------------------------------------------------- 1 | import { Editor } from '@tiptap/core'; 2 | import { fileOpen } from 'browser-fs-access'; 3 | import { UploaderFunc } from '../types'; 4 | 5 | // 模拟 ajax 上传 6 | export const defaultImgUploader: UploaderFunc = async ( 7 | file, 8 | progressCallBack 9 | ) => { 10 | const src = URL.createObjectURL(file); 11 | 12 | return new Promise((resolve) => { 13 | let mockProgress = 1; 14 | const t = setInterval(() => { 15 | mockProgress++; 16 | progressCallBack(mockProgress * 10); 17 | 18 | if (mockProgress >= 10) { 19 | clearInterval(t); 20 | resolve(src); 21 | } 22 | }, 300); 23 | }); 24 | }; 25 | 26 | export const getImageFileList = (files: FileList) => 27 | Array.prototype.slice 28 | .call(files || '') 29 | .filter((file) => file.type.includes('image')); 30 | 31 | export async function selectImageUpload(editor: Editor): Promise { 32 | const files = await fileOpen({ 33 | mimeTypes: ['image/*'], 34 | multiple: true, 35 | }); 36 | editor.commands.uploadImage(files); 37 | } 38 | -------------------------------------------------------------------------------- /packages/extension-uploader/src/types.ts: -------------------------------------------------------------------------------- 1 | export type UploaderFunc = ( 2 | file: File, 3 | progressCallback: (progress: number) => void 4 | ) => Promise ; 5 | -------------------------------------------------------------------------------- /packages/extension-uploader/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/react/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-react 2 | 3 | ## Introduction 4 | 5 | This extension is a React wrapper for `tiptap` and is used to use `tiptap` in React. 6 | 7 | > This extension is based on `@tiptap/react` and fixes the `Queue flushSync call` issue. It will be removed once the official package is updated. 8 | > 9 | > Related links: 10 | > 11 | > 1. [#3533 fix: Queue flushSync call](https://github.com/ueberdosis/tiptap/pull/3533) 12 | > 2. [#4000 Destroy editor in safe](https://github.com/ueberdosis/tiptap/pull/4000) 13 | 14 | ## TODO 15 | 16 | - [ ] Remove this package and use the official package directly. 17 | -------------------------------------------------------------------------------- /packages/react/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-react 2 | 3 | ## 介绍 4 | 5 | 本扩展是 `tiptap` 的 React 封装,用于在 React 中使用 `tiptap`。 6 | 7 | > 本扩展是在 `@tiptap/react` 基础上,修复了 `Queue flushSync call` 问题,未来待官方更新后将移除本扩展。 8 | > 9 | > 相关链接: 10 | > 11 | > 1. [#3533 fix: Queue flushSync call](https://github.com/ueberdosis/tiptap/pull/3533) 12 | > 2. [#4000 Destroy editor in safe](https://github.com/ueberdosis/tiptap/pull/4000) 13 | 14 | ## TODO 15 | 16 | - [ ] 移除此包,直接使用官方包 17 | -------------------------------------------------------------------------------- /packages/react/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-react", 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 | "@tiptap/extension-bubble-menu": "^2.0.3", 19 | "tippy.js": "^6.3.7", 20 | "@babel/runtime-corejs3": "^7.21.0" 21 | }, 22 | "devDependencies": { 23 | "@tiptap/core": "^2.0.3", 24 | "@tiptap/pm": "^2.0.3", 25 | "@types/react": "^16.14.0", 26 | "@types/react-dom": "^16.9.19", 27 | "eslint-config-custom": "workspace:*", 28 | "react": "^16.14.0", 29 | "react-dom": "^16.14.0", 30 | "tsconfig": "workspace:*", 31 | "tslib": "^2.5.3", 32 | "typescript": "^4.9.5" 33 | }, 34 | "peerDependencies": { 35 | "@tiptap/core": "^2.0.0", 36 | "@tiptap/pm": "^2.0.0", 37 | "react": "^16.14.0 || ^17.0.0 || ^18.0.0", 38 | "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0" 39 | }, 40 | "repository": { 41 | "type": "git", 42 | "url": "https://gitee.com/oschina/tide", 43 | "directory": "packages/react" 44 | }, 45 | "sideEffects": false 46 | } 47 | -------------------------------------------------------------------------------- /packages/react/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/react/src/Editor.ts: -------------------------------------------------------------------------------- 1 | import { Editor as CoreEditor } from '@tiptap/core' 2 | import React from 'react' 3 | 4 | import { EditorContentProps, EditorContentState } from './EditorContent' 5 | import { ReactRenderer } from './ReactRenderer' 6 | 7 | type ContentComponent = React.Component & { 8 | setRenderer(id: string, renderer: ReactRenderer): void; 9 | removeRenderer(id: string): void; 10 | } 11 | 12 | export class Editor extends CoreEditor { 13 | public contentComponent: ContentComponent | null = null 14 | } 15 | -------------------------------------------------------------------------------- /packages/react/src/NodeViewContent.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { useReactNodeView } from './useReactNodeView' 4 | 5 | export interface NodeViewContentProps { 6 | [key: string]: any, 7 | as?: React.ElementType, 8 | } 9 | 10 | export const NodeViewContent: React.FC = props => { 11 | const Tag = props.as || 'div' 12 | const { nodeViewContentRef } = useReactNodeView() 13 | 14 | return ( 15 | 24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /packages/react/src/NodeViewWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { useReactNodeView } from './useReactNodeView' 4 | 5 | export interface NodeViewWrapperProps { 6 | [key: string]: any, 7 | as?: React.ElementType, 8 | } 9 | 10 | export const NodeViewWrapper: React.FC = React.forwardRef((props, ref) => { 11 | const { onDragStart } = useReactNodeView() 12 | const Tag = props.as || 'div' 13 | 14 | return ( 15 | 25 | ) 26 | }) 27 | -------------------------------------------------------------------------------- /packages/react/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './BubbleMenu'; 2 | export { Editor } from './Editor'; 3 | export * from './EditorContent'; 4 | export * from './NodeViewContent'; 5 | export * from './NodeViewWrapper'; 6 | export * from './ReactNodeViewRenderer'; 7 | export * from './ReactRenderer'; 8 | export * from './useEditor'; 9 | export * from '@tiptap/core'; 10 | 11 | export * from './SelectionBubbleMenu'; 12 | export * from './utils'; 13 | -------------------------------------------------------------------------------- /packages/react/src/useReactNodeView.ts: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from 'react' 2 | 3 | export interface ReactNodeViewContextProps { 4 | onDragStart: (event: DragEvent) => void, 5 | nodeViewContentRef: (element: HTMLElement | null) => void, 6 | } 7 | 8 | export const ReactNodeViewContext = createContext >({ 9 | onDragStart: undefined, 10 | }) 11 | 12 | export const useReactNodeView = () => useContext(ReactNodeViewContext) 13 | -------------------------------------------------------------------------------- /packages/react/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/starter-kit/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-starter-kit 2 | 3 | ## Introduction 4 | 5 | A collection of StarterKit extensions. The basic extensions are enabled by default. 6 | -------------------------------------------------------------------------------- /packages/starter-kit/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-starter-kit 2 | 3 | ## 介绍 4 | 5 | StarterKit 扩展的集合。默认开启基础扩展。 6 | -------------------------------------------------------------------------------- /packages/starter-kit/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/starter-kit/src/index.ts: -------------------------------------------------------------------------------- 1 | import { StarterKit } from './starter-kit'; 2 | 3 | export type { StarterKitOptions } from './starter-kit'; 4 | export * from './starter-kit'; 5 | 6 | export default StarterKit; 7 | -------------------------------------------------------------------------------- /packages/starter-kit/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/theme/README.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-theme 2 | 3 | ## Introduction 4 | 5 | This package export the `less` style files of each extension and theme variables (including multiple sets of theme colors). 6 | -------------------------------------------------------------------------------- /packages/theme/README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # @gitee/tide-theme 2 | 3 | ## 介绍 4 | 5 | 本包用于导出各个扩展的 `less` 样式文件,以及主题变量(包含多套主题色)。 6 | -------------------------------------------------------------------------------- /packages/theme/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gitee/tide-theme", 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 | "build": "tsx ./script.ts", 13 | "lint": "TIMING=1 eslint \"**/*.ts\"", 14 | "clear": "rm -rf dist" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^18.13.0", 18 | "@types/less": "^3.0.3", 19 | "tsx": "^3.12.3", 20 | "fast-glob": "^3.2.12", 21 | "fs-extra": "^11.1.0", 22 | "replace-in-file": "^6.3.5", 23 | "less": "^4.1.3", 24 | "tsconfig": "workspace:*" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "https://gitee.com/oschina/tide", 29 | "directory": "packages/theme" 30 | }, 31 | "sideEffects": false 32 | } 33 | -------------------------------------------------------------------------------- /packages/theme/src/index.tsx: -------------------------------------------------------------------------------- 1 | import './variable.less'; 2 | -------------------------------------------------------------------------------- /packages/theme/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react.json", 3 | "compilerOptions": { 4 | "declarationDir": "./dist/types", 5 | "esModuleInterop": true, 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["src", "script.ts"], 9 | "exclude": ["node_modules"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/tsconfig/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # tsconfig 2 | 3 | ## 0.2.0-beta.1 4 | 5 | **Note:** Version bump only for package tsconfig 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 tsconfig 16 | 17 | ## 0.2.0-alpha.5 18 | 19 | **Note:** Version bump only for package tsconfig 20 | 21 | ## 0.2.0-alpha.4 22 | 23 | **Note:** Version bump only for package tsconfig 24 | 25 | ## 0.2.0-alpha.3 26 | 27 | **Note:** Version bump only for package tsconfig 28 | 29 | ## 0.2.0-alpha.2 30 | 31 | **Note:** Version bump only for package tsconfig 32 | 33 | ## 0.2.0-alpha.1 34 | 35 | **Note:** Version bump only for package tsconfig 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/tsconfig/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Default", 4 | "compilerOptions": { 5 | "composite": false, 6 | "declaration": true, 7 | "declarationMap": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "inlineSources": false, 11 | "isolatedModules": true, 12 | "moduleResolution": "node", 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false, 15 | "preserveWatchOutput": true, 16 | "skipLibCheck": true, 17 | "strict": false, 18 | "sourceMap": true 19 | }, 20 | "exclude": ["node_modules"] 21 | } 22 | -------------------------------------------------------------------------------- /packages/tsconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tsconfig", 3 | "version": "0.2.0-beta.1", 4 | "private": true, 5 | "license": "MIT", 6 | "publishConfig": { 7 | "access": "public" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/tsconfig/react.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./base.json", 3 | "compilerOptions": { 4 | "lib": [ 5 | "ESNext", 6 | "DOM" 7 | ], 8 | "module": "ESNext", 9 | "target": "ES6", 10 | "jsx": "react-jsx" 11 | }, 12 | "files": [ 13 | "./type.d.ts" 14 | ], 15 | "exclude": [ 16 | "node_modules" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /packages/tsconfig/type.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.less'; 2 | declare module '*.svg'; 3 | -------------------------------------------------------------------------------- /packages/tsconfig/vite.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./base.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "lib": ["ESNext", "DOM"], 8 | "sourceMap": true, 9 | "resolveJsonModule": true, 10 | "noEmit": true, 11 | "noUnusedLocals": true, 12 | "noUnusedParameters": true, 13 | "noImplicitReturns": true 14 | }, 15 | "exclude": ["node_modules"] 16 | } 17 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "apps/*" 3 | - "presets/*" 4 | - "packages/*" 5 | -------------------------------------------------------------------------------- /presets/mentions/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 | -------------------------------------------------------------------------------- /presets/mentions/src/components/Avatar/getTextAvatarColor.ts: -------------------------------------------------------------------------------- 1 | // 提取旧版 gitee Avatar 生成文字头像背景色的逻辑 2 | const getTextAvatarColor = (name: string) => { 3 | const colours = [ 4 | '#1abc9c', 5 | '#2ecc71', 6 | '#3498db', 7 | '#9b59b6', 8 | '#34495e', 9 | '#16a085', 10 | '#27ae60', 11 | '#2980b9', 12 | '#8e44ad', 13 | '#2c3e50', 14 | '#f1c40f', 15 | '#e67e22', 16 | '#e74c3c', 17 | '#eca0f1', 18 | '#95a5a6', 19 | '#f39c12', 20 | '#d35400', 21 | '#c0392b', 22 | '#bdc3c7', 23 | '#7f8c8d', 24 | ]; 25 | const nameSplit = String(name).toUpperCase().split(' '); 26 | let initials; 27 | if (nameSplit.length === 1) { 28 | initials = nameSplit[0] ? nameSplit[0].charAt(0) : '?'; 29 | } else { 30 | initials = nameSplit[0].charAt(0) + nameSplit[1].charAt(0); 31 | } 32 | const charIndex = (initials === '?' ? 72 : initials.charCodeAt(0)) - 64; 33 | const colourIndex = charIndex % 20; 34 | // 保留旧版的 bug, 因为 canvas 默认背景是黑色, 而此处计算的 colourIndex 可能是负数 (T开头昵称), 故默认返回黑色 35 | return colours[colourIndex - 1] || '#000000'; 36 | }; 37 | export default getTextAvatarColor; 38 | -------------------------------------------------------------------------------- /presets/mentions/src/components/Avatar/index.less: -------------------------------------------------------------------------------- 1 | .tide-member-avatar { 2 | position: relative; 3 | display: inline-flex; 4 | width: 1em; 5 | height: 1em; 6 | line-height: 1; 7 | white-space: nowrap; 8 | text-align: center; 9 | vertical-align: middle; 10 | background-color: #ccc; 11 | overflow: hidden; 12 | border-radius: 50%; 13 | } 14 | 15 | .tide-member-avatar__text { 16 | position: absolute; 17 | top: 50%; 18 | left: 50%; 19 | font-size: 0.7em; 20 | transform-origin: 0 center; 21 | transform: translate(-50%, -50%); 22 | color: #fff; 23 | } 24 | 25 | .tide-member-avatar__img { 26 | width: 100%; 27 | height: 100%; 28 | } -------------------------------------------------------------------------------- /presets/mentions/src/components/Avatar/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import cls from 'classnames'; 3 | import getTextAvatarColor from './getTextAvatarColor'; 4 | import './index.less'; 5 | 6 | const Avatar = ({ 7 | className, 8 | src, 9 | username, 10 | }: { 11 | className?: string; 12 | src: string; 13 | username: string; 14 | size?: string; 15 | }) => { 16 | const matchFlag = 'no_portrait.png'; 17 | 18 | if ( 19 | src && 20 | typeof src === 'string' && 21 | src.startsWith('http') && 22 | !src.endsWith(matchFlag) 23 | ) { 24 | return ( 25 | 26 | 27 | 28 | ); 29 | } 30 | 31 | const showLetter = username.charAt(0).toUpperCase(); 32 | const backgroundColor = getTextAvatarColor(username); 33 | return ( 34 | 38 | {showLetter} 39 | 40 | ); 41 | }; 42 | 43 | export default Avatar; 44 | -------------------------------------------------------------------------------- /presets/mentions/src/components/Loading/index.less: -------------------------------------------------------------------------------- 1 | .tide-loading { 2 | width: 1em; 3 | height: 1em; 4 | color: #999999; 5 | animation: tide-spin 1s linear infinite; 6 | 7 | @keyframes tide-spin { 8 | from { 9 | transform: rotate(0deg); 10 | } 11 | to { 12 | transform: rotate(360deg); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /presets/mentions/src/components/Loading/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import cls from 'classnames'; 3 | import './index.less'; 4 | 5 | const Loading = ({ className }: { className?: string }) => { 6 | return ( 7 | 27 | ); 28 | }; 29 | 30 | export default Loading; 31 | -------------------------------------------------------------------------------- /presets/mentions/src/components/MentionNoResult/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-no-result { 2 | font-size: 14px; 3 | color: #ccc; 4 | } -------------------------------------------------------------------------------- /presets/mentions/src/components/MentionNoResult/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.less'; 3 | 4 | // todo 国际化 5 | const NoResult = ({ text = '没有数据' }: { text?: string }) => { 6 | return
{text}; 7 | }; 8 | 9 | export default NoResult; 10 | -------------------------------------------------------------------------------- /presets/mentions/src/contexts/constants.ts: -------------------------------------------------------------------------------- 1 | import { EntityType } from './types'; 2 | 3 | export const entityPKMap = { 4 | [EntityType.MEMBER]: 'username', 5 | [EntityType.ISSUE]: 'ident', 6 | [EntityType.PULL_REQUEST]: 'id', 7 | }; 8 | -------------------------------------------------------------------------------- /presets/mentions/src/contexts/context.tsx: -------------------------------------------------------------------------------- 1 | import React, { createContext, useContext } from 'react'; 2 | import { 3 | useMergedBulkFetcher, 4 | BulkFetcherRequestFunc, 5 | } from './useMergedBulkFetcher'; 6 | import { EntityPKValueType, EntityResultType, EntityType } from './types'; 7 | 8 | export type EditorRemoteDataContextType = { 9 | fetchData:( 10 | type: T, 11 | pkValue: EntityPKValueType[T] 12 | ) => Promise ; 13 | }; 14 | 15 | const EditorRemoteDataContext = createContext ({ 16 | fetchData: async () => null, 17 | }); 18 | 19 | export const useEditorRemoteDataContext = () => 20 | useContext(EditorRemoteDataContext); 21 | 22 | export type EditorRemoteDataProviderProps = { 23 | children: React.ReactNode; 24 | fetchResources: BulkFetcherRequestFunc; 25 | }; 26 | 27 | export const EditorRemoteDataProvider: React.FC< 28 | EditorRemoteDataProviderProps 29 | > = ({ fetchResources, children }) => { 30 | const { fetch } = useMergedBulkFetcher({ 31 | request: fetchResources, 32 | wait: 500, 33 | }); 34 | 35 | const ctx: EditorRemoteDataContextType = { 36 | fetchData: (type, pkValue) => fetch(type, pkValue), 37 | }; 38 | 39 | return ( 40 | 41 | {children} 42 | 43 | ); 44 | }; 45 | -------------------------------------------------------------------------------- /presets/mentions/src/contexts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | export * from './context'; 3 | export * from './types'; 4 | export * from './useRemoteData'; 5 | export * from './useMergedBulkFetcher'; 6 | -------------------------------------------------------------------------------- /presets/mentions/src/contexts/types.ts: -------------------------------------------------------------------------------- 1 | export enum EntityType { 2 | MEMBER = 'users', 3 | ISSUE = 'issues', 4 | PULL_REQUEST = 'pull_requests', 5 | } 6 | 7 | export type EntityPKValueType = { 8 | [EntityType.MEMBER]: string; 9 | [EntityType.ISSUE]: string; 10 | [EntityType.PULL_REQUEST]: number; 11 | }; 12 | 13 | export type EntityResultType = { 14 | [EntityType.MEMBER]: any; 15 | [EntityType.ISSUE]: any; 16 | [EntityType.PULL_REQUEST]: any; 17 | }; 18 | -------------------------------------------------------------------------------- /presets/mentions/src/contexts/useRemoteData.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { EntityPKValueType, EntityResultType, EntityType } from './types'; 3 | import { useEditorRemoteDataContext } from './context'; 4 | 5 | export const useRemoteData:( 6 | type: T, 7 | pkValue: EntityPKValueType[T] 8 | ) => { 9 | loading: boolean; 10 | data: EntityResultType[T] | null; 11 | } = (type, pkValue) => { 12 | const { fetchData } = useEditorRemoteDataContext(); 13 | const [loading, setLoading] = useState(true); 14 | const [data, setData] = useState (null); 15 | 16 | const doRequest = async () => { 17 | setLoading(true); 18 | const data = pkValue ? await fetchData(type, pkValue) : null; 19 | setData(data); 20 | setLoading(false); 21 | }; 22 | 23 | useEffect(() => { 24 | doRequest(); 25 | }, [type, pkValue]); 26 | 27 | return { 28 | loading, 29 | data, 30 | refresh: fetchData, 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /presets/mentions/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './contexts'; 2 | export * from './mention-issue'; 3 | export * from './mention-member'; 4 | export * from './mention-pull-request'; 5 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/Icons/assets/type-1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/Icons/index.less: -------------------------------------------------------------------------------- 1 | .tide-issue-type-icon { 2 | display: inline-flex; 3 | width: 1em; 4 | height: 1em; 5 | 6 | img { 7 | width: 100%; 8 | height: 100%; 9 | } 10 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/ItemRender/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-issue__pop-item { 2 | width: 100%; 3 | display: flex; 4 | align-items: center; 5 | } 6 | 7 | .tide-mention-issue__pop-item-icon { 8 | margin-right: 8px; 9 | display: flex; 10 | align-items: center; 11 | } 12 | 13 | .tide-mention-issue__pop-item-id { 14 | flex-shrink: 0; 15 | margin-right: 8px; 16 | background: #f5f6f8; 17 | border: 0; 18 | border-radius: 2px; 19 | color: #909aaa; 20 | cursor: pointer; 21 | display: inline-block; 22 | font-family: Roboto Mono, Andale Mono, Consolas, Courier New, monospace; 23 | font-size: 12px; 24 | line-height: 18px; 25 | padding: 0 5px; 26 | white-space: nowrap; 27 | } 28 | 29 | .tide-mention-issue__pop-item-title { 30 | overflow: hidden; 31 | text-overflow: ellipsis; 32 | white-space: nowrap; 33 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/ItemRender/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Icons, { IssueCategory } from '../Icons'; 3 | import { MentionIssueItemDataType } from '../types'; 4 | import './index.less'; 5 | 6 | export const MentionIssueItemRender: React.FC<{ 7 | item: MentionIssueItemDataType; 8 | }> = ({ item }) => { 9 | if (!item.attrs) { 10 | return null; 11 | } 12 | const category = item.attrs.issue_type?.category as IssueCategory; 13 | 14 | return ( 15 | 16 | 17 |26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/NodeView/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-issue { 2 | display: inline-flex; 3 | align-items: center; 4 | text-decoration: none; 5 | } 6 | 7 | .tide-mention-issue__icon { 8 | margin-right: 5px; 9 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/index.ts: -------------------------------------------------------------------------------- 1 | import { MentionIssue } from './mention-issue'; 2 | 3 | export * from './mention-issue'; 4 | export * from './types'; 5 | 6 | export default MentionIssue; 7 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-issue/types.ts: -------------------------------------------------------------------------------- 1 | import { MentionItemDataType } from '@gitee/tide-extension-mention'; 2 | 3 | export interface IssueType { 4 | id: number; 5 | enterprise_id: number; 6 | title: string; 7 | created_at: string; 8 | updated_at: string; 9 | serial: number; 10 | template: string; 11 | ident: string; 12 | is_system: boolean; 13 | color: string; 14 | category: string; 15 | description: string; 16 | state: number; 17 | } 18 | 19 | export type MentionIssueAttributes = { 20 | id: number; 21 | iid: number; 22 | ident: string; 23 | title: string; 24 | issue_type: Partial18 | 19 | 20 | #{item.attrs.ident} 21 | 22 | 23 | {item.attrs.title} 24 | 25 | ; 25 | url: string; 26 | }; 27 | 28 | export type MentionIssueItemDataType = 29 | MentionItemDataType ; 30 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-member/ItemRender/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-member__list-item { 2 | display: flex; 3 | align-items: center; 4 | } 5 | 6 | .tide-mention-member__list-avatar { 7 | display: inline-flex; 8 | margin-right: 5px; 9 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-member/ItemRender/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { MentionMemberItemDataType } from '../types'; 3 | import Avatar from '../../components/Avatar'; 4 | import './index.less'; 5 | 6 | export const MentionListItemRender: React.FC<{ 7 | item: MentionMemberItemDataType; 8 | }> = ({ item }) => { 9 | if (!item.attrs) { 10 | return null; 11 | } 12 | return ( 13 | 14 | 15 |21 | ); 22 | }; 23 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-member/NodeView/index.less: -------------------------------------------------------------------------------- 1 | @import (reference) '~@gitee/tide-theme/dist/variable.less'; 2 | 3 | .tide-mention-member__item { 4 | display: inline-flex; 5 | align-items: center; 6 | border-radius: 1em; 7 | height: calc(1em + 4px); 8 | padding: 0 4px; 9 | background-color: @theme-bg-color; 10 | text-decoration: none; 11 | 12 | &:hover { 13 | text-decoration: none !important; 14 | } 15 | } 16 | 17 | .tide-mention-member__avatar { 18 | display: inline-flex; 19 | width: 1em; 20 | height: 1em; 21 | margin-right: 5px; 22 | } 23 | 24 | .tide-mention-member__name { 25 | max-width: 8em; 26 | min-width: 0; 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | white-space: nowrap; 30 | } 31 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-member/index.ts: -------------------------------------------------------------------------------- 1 | import { MentionMember } from './mention-member'; 2 | 3 | export * from './mention-member'; 4 | export * from './types'; 5 | 6 | export default MentionMember; 7 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-member/types.ts: -------------------------------------------------------------------------------- 1 | import { MentionItemDataType } from '@gitee/tide-extension-mention'; 2 | 3 | export type MentionMemberAttributes = { 4 | name: string; 5 | username: string; 6 | avatar_url: string; 7 | url: string; 8 | }; 9 | 10 | export type MentionMemberItemDataType = 11 | MentionItemDataType16 | 17 | 18 | {item.attrs.name} 19 | 20 | ; 12 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/Icons/PullRequestIcon.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import { IconPr } from '@gitee/icons-react'; 4 | import './index.less'; 5 | 6 | export function StateIcon({ 7 | state, 8 | className, 9 | ...props 10 | }: { 11 | state: string; 12 | className?: string; 13 | style?: React.CSSProperties; 14 | }) { 15 | const stateColors: Record = { 16 | opened: 'tide-pr-state-blue', 17 | closed: 'tide-pr-state-muted', 18 | merged: 'tide-pr-state-green', 19 | }; 20 | return ( 21 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/Icons/index.less: -------------------------------------------------------------------------------- 1 | .tide-pr-state-blue { 2 | color: #2C7EF8; 3 | } 4 | 5 | .tide-pr-state-muted { 6 | color: #909AAA; 7 | } 8 | 9 | .tide-pr-state-green { 10 | color: #36B37E; 11 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/ItemRender/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-pull-request__pop-item { 2 | width: 100%; 3 | display: flex; 4 | align-items: center; 5 | } 6 | 7 | .tide-mention-pull-request__pop-item-icon { 8 | flex-shrink: 0; 9 | margin-right: 8px; 10 | display: flex; 11 | align-items: center; 12 | } 13 | 14 | .tide-mention-pull-request__pop-item-id { 15 | flex-shrink: 0; 16 | margin-right: 8px; 17 | background: #f5f6f8; 18 | border: 0; 19 | border-radius: 2px; 20 | color: #909aaa; 21 | cursor: pointer; 22 | display: inline-block; 23 | font-family: Roboto Mono, Andale Mono, Consolas, Courier New, monospace; 24 | font-size: 12px; 25 | line-height: 18px; 26 | padding: 0 5px; 27 | white-space: nowrap; 28 | } 29 | 30 | .tide-mention-pull-request__pop-item-title { 31 | overflow: hidden; 32 | text-overflow: ellipsis; 33 | white-space: nowrap; 34 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/ItemRender/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { MentionPullRequestItemDataType } from '../types'; 3 | import { StateIcon } from '../Icons/PullRequestIcon'; 4 | import './index.less'; 5 | 6 | const MentionPullRequestItemRender: React.FC<{ 7 | item: MentionPullRequestItemDataType; 8 | }> = ({ item }) => { 9 | if (!item.attrs) { 10 | return null; 11 | } 12 | const state = item.attrs.state; 13 | 14 | return ( 15 | 16 |27 | ); 28 | }; 29 | 30 | export default MentionPullRequestItemRender; 31 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/NodeView/index.less: -------------------------------------------------------------------------------- 1 | .tide-mention-pull-request { 2 | 3 | } 4 | 5 | .tide-mention-pull-request__icon { 6 | margin-right: 5px; 7 | 8 | svg { 9 | display: inline-block; 10 | vertical-align: -0.155em; 11 | } 12 | } 13 | 14 | .tide-mention-pull-request__title { 15 | 16 | } -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/index.ts: -------------------------------------------------------------------------------- 1 | import { MentionPullRequest } from './mention-pull-request'; 2 | 3 | export * from './mention-pull-request'; 4 | export * from './types'; 5 | 6 | export default MentionPullRequest; 7 | -------------------------------------------------------------------------------- /presets/mentions/src/mention-pull-request/types.ts: -------------------------------------------------------------------------------- 1 | import { MentionItemDataType } from '@gitee/tide-extension-mention'; 2 | 3 | export type MentionPullRequestAttributes = { 4 | id: number; 5 | iid: number; 6 | state: string; 7 | title: string; 8 | lightweight: boolean; 9 | project_id: number; 10 | project_path: string; 11 | url: string; 12 | }; 13 | 14 | export type MentionPullRequestItemDataType = 15 | MentionItemDataType20 | 21 | !{item.attrs.iid} 22 | 23 | 24 | {item.attrs.title} 25 | 26 | ; 16 | -------------------------------------------------------------------------------- /presets/mentions/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 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "pipeline": { 4 | "build": { 5 | "dependsOn": ["^build"], 6 | "outputs": ["dist/**"] 7 | }, 8 | "dev": { 9 | "dependsOn": ["^dev"], 10 | "outputs": ["dist/**"] 11 | }, 12 | "lint": { 13 | "outputs": [] 14 | }, 15 | "clear": {} 16 | } 17 | } 18 | --------------------------------------------------------------------------------