From 0aec531a1568082d30dce01e2cf7bf0c4c78a300 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 18:12:52 +0800 Subject: [PATCH 01/12] Add rich text editor supports for comment widget Signed-off-by: Ryan Wang --- package.json | 14 +- packages/comment-widget/package.json | 15 +- .../comment-widget/src/base-comment-item.ts | 21 +- packages/comment-widget/src/base-form.ts | 33 +- packages/comment-widget/src/comment-editor.ts | 210 ++ packages/comment-widget/src/emoji-button.ts | 6 +- packages/comment-widget/uno.config.ts | 4 + packages/comment-widget/vite.config.ts | 23 + pnpm-lock.yaml | 2805 +++++++++++++++-- 9 files changed, 2812 insertions(+), 319 deletions(-) create mode 100644 packages/comment-widget/src/comment-editor.ts create mode 100644 packages/comment-widget/uno.config.ts create mode 100644 packages/comment-widget/vite.config.ts diff --git a/package.json b/package.json index 887e57d..a04d3fb 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,17 @@ "husky": "^9.1.7", "lint-staged": "^16.1.2", "typescript": "~5.3.3", - "vite": "^5.1.4" + "vite": "^7.0.6", + "vite-plugin-dts": "^4.5.4" }, - "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" + "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39", + "pnpm": { + "overrides": { + "vite": "npm:rolldown-vite@7.0.10" + } + }, + "dependencies": { + "@tiptap/extensions": "^3.0.9", + "github-markdown-css": "^5.8.1" + } } diff --git a/packages/comment-widget/package.json b/packages/comment-widget/package.json index 41ec396..f3c05e5 100644 --- a/packages/comment-widget/package.json +++ b/packages/comment-widget/package.json @@ -27,16 +27,19 @@ "var.css" ], "scripts": { - "build": "tsc", - "dev": "tsc -w", - "locale:extract": "lit-localize extract", - "locale:build": "lit-localize build" + "build": "vite build", + "dev": "vite build --watch", + "locale:build": "lit-localize build", + "locale:extract": "lit-localize extract" }, "dependencies": { "@emoji-mart/data": "^1.2.1", "@halo-dev/api-client": "^2.21.1", "@lit/context": "^1.1.6", "@lit/localize": "^0.12.2", + "@tiptap/core": "^3.0.9", + "@tiptap/pm": "^3.0.9", + "@tiptap/starter-kit": "^3.0.9", "dayjs": "^1.11.13", "emoji-mart": "^5.6.0", "es-toolkit": "^1.39.8", @@ -44,7 +47,9 @@ "lit": "^3.3.1" }, "devDependencies": { + "@iconify/json": "^2.2.367", "@lit/localize-tools": "^0.8.0", - "lit-analyzer": "^2.0.3" + "lit-analyzer": "^2.0.3", + "unocss": "^66.4.1" } } diff --git a/packages/comment-widget/src/base-comment-item.ts b/packages/comment-widget/src/base-comment-item.ts index 30d9660..aa35956 100644 --- a/packages/comment-widget/src/base-comment-item.ts +++ b/packages/comment-widget/src/base-comment-item.ts @@ -1,7 +1,9 @@ import './user-avatar'; import { msg } from '@lit/localize'; -import { css, html, LitElement } from 'lit'; +import contentStyles from 'github-markdown-css/github-markdown-light.css?inline'; +import { css, html, LitElement, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; +import { unsafeHTML } from 'lit/directives/unsafe-html.js'; import baseStyles from './styles/base'; import varStyles from './styles/var'; import { formatDate, timeAgo } from './utils/date'; @@ -40,7 +42,11 @@ export class BaseCommentItem extends LitElement {
${ this.userWebsite - ? html` + ? html` ${this.userDisplayName} ` : html`
${this.userDisplayName}
` @@ -48,11 +54,15 @@ export class BaseCommentItem extends LitElement {
${timeAgo(this.creationTime)}
- ${!this.approved ? html`
${msg('Reviewing')}
` : ''} + ${ + !this.approved + ? html`
${msg('Reviewing')}
` + : '' + }
-
-
${this.content}
+
+
${unsafeHTML(this.content)}
@@ -67,6 +77,7 @@ export class BaseCommentItem extends LitElement { static override styles = [ varStyles, baseStyles, + unsafeCSS(contentStyles), css` .item { display: flex; diff --git a/packages/comment-widget/src/base-form.ts b/packages/comment-widget/src/base-form.ts index 8f05a0e..08e1934 100644 --- a/packages/comment-widget/src/base-form.ts +++ b/packages/comment-widget/src/base-form.ts @@ -14,13 +14,14 @@ import { nameContext, toastContext, } from './context'; -import './emoji-button'; import './icons/icon-loading'; import { msg } from '@lit/localize'; import type { ToastManager } from './lit-toast'; import baseStyles from './styles/base'; import varStyles from './styles/var'; import type { ConfigMapData } from './types'; +import './comment-editor'; +import type { CommentEditor } from './comment-editor'; export class BaseForm extends LitElement { @consume({ context: baseUrlContext }) @@ -64,6 +65,8 @@ export class BaseForm extends LitElement { textareaRef: Ref = createRef(); + editorRef: Ref = createRef(); + get customAccount() { return JSON.parse( localStorage.getItem('halo-comment-custom-account') || '{}' @@ -168,14 +171,6 @@ export class BaseForm extends LitElement { target.style.height = `${target.scrollHeight}px`; } - onEmojiSelect(e: CustomEvent) { - const data = e.detail; - if (this.textareaRef.value) { - this.textareaRef.value.value += data.native; - this.textareaRef.value.focus(); - } - } - onKeydown(e: KeyboardEvent) { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) { const form = this.shadowRoot?.querySelector('form'); @@ -197,15 +192,7 @@ export class BaseForm extends LitElement { override render() { return html`
- + ${ !this.currentUser && this.allowAnonymousComments @@ -269,7 +256,6 @@ export class BaseForm extends LitElement { : '' } - `; +
`; } static override styles = [ @@ -125,6 +128,8 @@ export class EmojiButton extends LitElement { display: inline-flex; } + @unocss-placeholder; + em-emoji-picker { --rgb-color: var(--component-emoji-picker-rgb-color); --rgb-accent: var(--component-emoji-picker-rgb-accent); @@ -134,16 +139,6 @@ export class EmojiButton extends LitElement { --color-border-over: var(--component-emoji-picker-color-border-over); } - .emoji-button { - color: var(--base-color); - display: inline-flex; - position: relative; - } - - .emoji-button:hover icon-emoji { - opacity: 0.8; - } - .form__emoji-panel { position: absolute; top: 2em; From cd667c36879795d21784b2c3c98ee2da45158fb0 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 19:05:13 +0800 Subject: [PATCH 03/12] Add vscode settings file Signed-off-by: Ryan Wang --- .gitignore | 3 --- .vscode/settings.json | 9 +++++++++ packages/comment-widget/.vscode/settings.json | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 packages/comment-widget/.vscode/settings.json diff --git a/.gitignore b/.gitignore index 1b6267f..e9fdd2f 100755 --- a/.gitignore +++ b/.gitignore @@ -62,9 +62,6 @@ nbdist/ *.tar.gz *.rar -### VSCode -.vscode - ### Local file application-local.yml application-local.yaml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b3c9625 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.codeActionsOnSave": { + "source.fixAll.biome": "explicit", + "source.organizeImports.biome": "explicit" + } + } +} diff --git a/packages/comment-widget/.vscode/settings.json b/packages/comment-widget/.vscode/settings.json new file mode 100644 index 0000000..9d49e1d --- /dev/null +++ b/packages/comment-widget/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "i18n-ally.localesPaths": ["src/generated/locales"] +} From feaef217b5b5dda59878503969c4daa7a320831a Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 19:05:32 +0800 Subject: [PATCH 04/12] Add vscode settings file Signed-off-by: Ryan Wang --- packages/comment-widget/.vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 packages/comment-widget/.vscode/settings.json diff --git a/packages/comment-widget/.vscode/settings.json b/packages/comment-widget/.vscode/settings.json deleted file mode 100644 index 9d49e1d..0000000 --- a/packages/comment-widget/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "i18n-ally.localesPaths": ["src/generated/locales"] -} From 6c4bf4645f5c451ef4e04e479584da8c03fe8041 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 23:18:14 +0800 Subject: [PATCH 05/12] Refine UI Signed-off-by: Ryan Wang --- packages/comment-widget/src/comment-editor.ts | 5 ++- packages/comment-widget/src/comment-widget.ts | 2 +- packages/comment-widget/src/emoji-button.ts | 1 - .../comment-widget/src/icons/icon-emoji.ts | 31 ------------------- 4 files changed, 5 insertions(+), 34 deletions(-) delete mode 100644 packages/comment-widget/src/icons/icon-emoji.ts diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 1bbe40e..3d40a49 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -77,6 +77,9 @@ export class CommentEditor extends LitElement { extensions: [ StarterKit.configure({ heading: false, + link: { + openOnClick: false, + }, }), Placeholder.configure({ placeholder: msg('Write a comment'), @@ -104,7 +107,7 @@ export class CommentEditor extends LitElement { protected override render() { return html` ${this.renderSkeleton()}
- - `; - } - - static override styles = css` - :host { - display: inline-flex; - } - svg { - height: 1.25em; - width: 1.25em; - } - `; -} - -customElements.get('icon-emoji') || - customElements.define('icon-emoji', IconEmoji); - -declare global { - interface HTMLElementTagNameMap { - 'icon-emoji': IconEmoji; - } -} From c63da62ef27cc05fc06f0ec48fca5ea71ae49384 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 23:34:07 +0800 Subject: [PATCH 06/12] Refine UI Signed-off-by: Ryan Wang --- packages/comment-widget/src/comment-editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 3d40a49..2287cb0 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -114,7 +114,7 @@ export class CommentEditor extends LitElement { id="editor-container" class="p-4 markdown-body !bg-transparent" >
-
    +
      ${repeat(actionItems, (item) => this.renderActionItem(item, this.editor) )} From c6a4709b367bb1a5c166f015bad76836db146ec5 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 23:39:43 +0800 Subject: [PATCH 07/12] Refine UI Signed-off-by: Ryan Wang --- packages/comment-widget/src/comment-editor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 2287cb0..8507bec 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -191,7 +191,7 @@ export class CommentEditor extends LitElement { .tiptap p { padding: 0; - margin: 0; + margin-bottom: 10px; } .tiptap p.is-editor-empty:first-child::before { From 10b0a678235667170e988d6fefb9ebb8c9f47b06 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 7 Aug 2025 23:56:29 +0800 Subject: [PATCH 08/12] Refine UI Signed-off-by: Ryan Wang --- package.json | 4 +- packages/comment-widget/src/comment-editor.ts | 12 +- pnpm-lock.yaml | 337 ++++++++++++++++++ 3 files changed, 351 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a04d3fb..9e77fea 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,8 @@ }, "dependencies": { "@tiptap/extensions": "^3.0.9", - "github-markdown-css": "^5.8.1" + "github-markdown-css": "^5.8.1", + "shiki": "^3.9.2", + "tiptap-extension-code-block-shiki": "^0.5.1" } } diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 8507bec..1c5806e 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -5,6 +5,7 @@ import { state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import './emoji-button'; import contentStyles from 'github-markdown-css/github-markdown-light.css?inline'; +import CodeBlockShiki from 'tiptap-extension-code-block-shiki'; interface ActionItem { type: 'action' | 'separator'; @@ -80,10 +81,15 @@ export class CommentEditor extends LitElement { link: { openOnClick: false, }, + codeBlock: false, }), Placeholder.configure({ placeholder: msg('Write a comment'), }), + + CodeBlockShiki.configure({ + defaultTheme: 'github-dark', + }), ], }); } @@ -114,7 +120,7 @@ export class CommentEditor extends LitElement { id="editor-container" class="p-4 markdown-body !bg-transparent" >
-
    +
      ${repeat(actionItems, (item) => this.renderActionItem(item, this.editor) )} @@ -201,6 +207,10 @@ export class CommentEditor extends LitElement { height: 0; pointer-events: none; } + + .tiptap code br { + display: block; + } `, ]; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ab5f98..263332f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,12 @@ importers: github-markdown-css: specifier: ^5.8.1 version: 5.8.1 + shiki: + specifier: ^3.9.2 + version: 3.9.2 + tiptap-extension-code-block-shiki: + specifier: ^0.5.1 + version: 0.5.1(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/extension-code-block@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(shiki@3.9.2) devDependencies: '@biomejs/biome': specifier: ^2.1.2 @@ -847,6 +853,27 @@ packages: '@rushstack/ts-command-line@5.0.2': resolution: {integrity: sha512-+AkJDbu1GFMPIU8Sb7TLVXDv/Q7Mkvx+wAjEl8XiXVVq+p1FmWW6M3LYpJMmoHNckSofeMecgWg5lfMwNAAsEQ==} + '@shikijs/core@3.9.2': + resolution: {integrity: sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==} + + '@shikijs/engine-javascript@3.9.2': + resolution: {integrity: sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==} + + '@shikijs/engine-oniguruma@3.9.2': + resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==} + + '@shikijs/langs@3.9.2': + resolution: {integrity: sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==} + + '@shikijs/themes@3.9.2': + resolution: {integrity: sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==} + + '@shikijs/types@3.9.2': + resolution: {integrity: sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} @@ -991,12 +1018,18 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} @@ -1006,6 +1039,12 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unocss/astro@66.4.1': resolution: {integrity: sha512-UPfpg1FGf8lMugnMYuFxpVqNvO9cIVdi7e3yXpBnzf0uQ4Pib7KvOTPB4VOAVoqDK2A0kPxCzeR9MxCk4c+wxw==} peerDependencies: @@ -1235,6 +1274,9 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1243,6 +1285,12 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1279,6 +1327,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@14.0.0: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} @@ -1328,6 +1379,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} @@ -1335,6 +1390,9 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean2@4.1.0: resolution: {integrity: sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig==} engines: {node: '>=10.13'} @@ -1522,10 +1580,19 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -1731,6 +1798,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} @@ -1741,6 +1811,21 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -1812,6 +1897,12 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} @@ -1865,6 +1956,9 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + prosemirror-changeset@2.3.1: resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} @@ -1951,6 +2045,15 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + relative-time-format@1.1.6: resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==} @@ -2051,6 +2154,9 @@ packages: engines: {node: '>=10'} hasBin: true + shiki@3.9.2: + resolution: {integrity: sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -2094,6 +2200,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -2109,6 +2218,9 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2144,6 +2256,14 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tiptap-extension-code-block-shiki@0.5.1: + resolution: {integrity: sha512-8KAH5vWve5dzToOpH2R3lVyMWihNBfzI4V9HwFxif7yCTWrSA+7SjOWoDIPTHMzz4UcLhgsH6LeQni9M4RmreA==} + peerDependencies: + '@tiptap/core': ^2.3.0 + '@tiptap/extension-code-block': ^2.3.0 + '@tiptap/pm': ^2.3.0 + shiki: ^3.0.0 + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2152,6 +2272,9 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + ts-simple-type@2.0.0-next.0: resolution: {integrity: sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==} @@ -2194,6 +2317,21 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -2217,6 +2355,12 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: @@ -2325,6 +2469,9 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@ampproject/remapping@2.3.0': @@ -2948,6 +3095,39 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@shikijs/core@3.9.2': + dependencies: + '@shikijs/types': 3.9.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.9.2': + dependencies: + '@shikijs/types': 3.9.2 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.9.2': + dependencies: + '@shikijs/types': 3.9.2 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.9.2': + dependencies: + '@shikijs/types': 3.9.2 + + '@shikijs/themes@3.9.2': + dependencies: + '@shikijs/types': 3.9.2 + + '@shikijs/types@3.9.2': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -3111,6 +3291,10 @@ snapshots: '@types/estree@1.0.8': {} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/linkify-it@5.0.0': {} '@types/markdown-it@14.1.2': @@ -3118,6 +3302,10 @@ snapshots: '@types/linkify-it': 5.0.0 '@types/mdurl': 2.0.0 + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/mdurl@2.0.0': {} '@types/node@18.19.18': @@ -3126,6 +3314,10 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.3.0': {} + '@unocss/astro@66.4.1(vite@7.0.6(@types/node@18.19.18)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: '@unocss/core': 66.4.1 @@ -3422,6 +3614,8 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 + ccount@2.0.1: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -3430,6 +3624,10 @@ snapshots: chalk@5.4.1: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -3475,6 +3673,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@14.0.0: {} compare-versions@6.1.1: {} @@ -3506,10 +3706,16 @@ snapshots: delayed-stream@1.0.0: {} + dequal@2.0.3: {} + destr@2.0.5: {} detect-libc@2.0.4: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + didyoumean2@4.1.0: dependencies: '@babel/runtime': 7.23.9 @@ -3697,8 +3903,28 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + he@1.2.0: {} + html-void-elements@3.0.0: {} + husky@9.1.7: {} import-lazy@4.0.0: {} @@ -3897,12 +4123,41 @@ snapshots: math-intrinsics@1.1.0: {} + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + mdn-data@2.12.2: {} mdurl@2.0.0: {} merge2@1.4.1: {} + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + micromatch@4.0.5: dependencies: braces: 3.0.2 @@ -3964,6 +4219,14 @@ snapshots: dependencies: mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + orderedmap@2.1.1: {} package-manager-detector@1.3.0: {} @@ -4010,6 +4273,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + property-information@7.1.0: {} + prosemirror-changeset@2.3.1: dependencies: prosemirror-transform: 1.10.4 @@ -4133,6 +4398,16 @@ snapshots: regenerator-runtime@0.14.1: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + relative-time-format@1.1.6: {} require-directory@2.1.1: {} @@ -4239,6 +4514,17 @@ snapshots: dependencies: lru-cache: 6.0.0 + shiki@3.9.2: + dependencies: + '@shikijs/core': 3.9.2 + '@shikijs/engine-javascript': 3.9.2 + '@shikijs/engine-oniguruma': 3.9.2 + '@shikijs/langs': 3.9.2 + '@shikijs/themes': 3.9.2 + '@shikijs/types': 3.9.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -4294,6 +4580,8 @@ snapshots: source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} + sprintf-js@1.0.3: {} string-argv@0.3.2: {} @@ -4310,6 +4598,11 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4339,12 +4632,21 @@ snapshots: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 + tiptap-extension-code-block-shiki@0.5.1(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/extension-code-block@3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9)(shiki@3.9.2): + dependencies: + '@tiptap/core': 3.0.9(@tiptap/pm@3.0.9) + '@tiptap/extension-code-block': 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) + '@tiptap/pm': 3.0.9 + shiki: 3.9.2 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 totalist@3.0.1: {} + trim-lines@3.0.1: {} + ts-simple-type@2.0.0-next.0: {} tsconfig-paths@4.2.0: @@ -4376,6 +4678,29 @@ snapshots: undici-types@5.26.5: {} + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@2.0.0: {} unocss@66.4.1(postcss@8.5.6)(vite@7.0.6(@types/node@18.19.18)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)): @@ -4414,6 +4739,16 @@ snapshots: dependencies: punycode: 2.3.1 + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + vite-plugin-dts@4.5.4(@types/node@18.19.18)(rolldown-vite@7.0.10(@types/node@18.19.18)(esbuild@0.25.8)(jiti@2.5.1)(yaml@2.8.0))(rollup@4.46.2)(typescript@5.3.3): dependencies: '@microsoft/api-extractor': 7.52.10(@types/node@18.19.18) @@ -4512,3 +4847,5 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + + zwitch@2.0.4: {} From 20cc186e37aecae6b75d9281aef5ae041958f9a2 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 8 Aug 2025 11:03:26 +0800 Subject: [PATCH 09/12] Refine styles Signed-off-by: Ryan Wang --- .../comment-widget/src/base-comment-item.ts | 2 +- packages/comment-widget/src/comment-editor.ts | 2 +- .../comment-widget/src/styles/content.css | 419 ++++++++++++++++++ 3 files changed, 421 insertions(+), 2 deletions(-) create mode 100644 packages/comment-widget/src/styles/content.css diff --git a/packages/comment-widget/src/base-comment-item.ts b/packages/comment-widget/src/base-comment-item.ts index aa35956..66f9982 100644 --- a/packages/comment-widget/src/base-comment-item.ts +++ b/packages/comment-widget/src/base-comment-item.ts @@ -1,10 +1,10 @@ import './user-avatar'; import { msg } from '@lit/localize'; -import contentStyles from 'github-markdown-css/github-markdown-light.css?inline'; import { css, html, LitElement, unsafeCSS } from 'lit'; import { property } from 'lit/decorators.js'; import { unsafeHTML } from 'lit/directives/unsafe-html.js'; import baseStyles from './styles/base'; +import contentStyles from './styles/content.css?inline'; import varStyles from './styles/var'; import { formatDate, timeAgo } from './utils/date'; diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 1c5806e..dd223d4 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -4,8 +4,8 @@ import { css, html, LitElement, type PropertyValues, unsafeCSS } from 'lit'; import { state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import './emoji-button'; -import contentStyles from 'github-markdown-css/github-markdown-light.css?inline'; import CodeBlockShiki from 'tiptap-extension-code-block-shiki'; +import contentStyles from './styles/content.css?inline'; interface ActionItem { type: 'action' | 'separator'; diff --git a/packages/comment-widget/src/styles/content.css b/packages/comment-widget/src/styles/content.css new file mode 100644 index 0000000..8da4c12 --- /dev/null +++ b/packages/comment-widget/src/styles/content.css @@ -0,0 +1,419 @@ +/* forked from https://github.com/sindresorhus/github-markdown-css/blob/main/github-markdown.css */ +.markdown-body { + color-scheme: light; + --base-size-16: 1rem; + --base-size-24: 1.5rem; + --base-size-40: 2.5rem; + --base-text-weight-semibold: 600; + --fontStack-monospace: + ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, + monospace; + + /* light */ + --focus-outlineColor: #0969da; + --fgColor-default: #1f2328; + --fgColor-muted: #59636e; + --fgColor-accent: #0969da; + --bgColor-muted: #f6f8fa; + --bgColor-neutral-muted: #818b981f; + --bgColor-attention-muted: #fff8c5; + --borderColor-default: #d1d9e0; + --borderColor-muted: #d1d9e0b3; +} + +.color-scheme-dark, +.dark, +[data-color-scheme="dark"] comment-widget { + /* dark */ + color-scheme: dark; + --focus-outlineColor: #1f6feb; + --fgColor-default: #f0f6fc; + --fgColor-muted: #9198a1; + --fgColor-accent: #4493f8; + --bgColor-muted: #151b23; + --bgColor-neutral-muted: #656c7633; + --bgColor-attention-muted: #bb800926; + --borderColor-default: #3d444d; + --borderColor-muted: #3d444db3; +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: var(--fgColor-default); + font-family: var(--base-font-family); + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body a { + background-color: transparent; + color: var(--fgColor-accent); + text-decoration: none; +} + +.markdown-body b, +.markdown-body strong { + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body h1 { + margin: 0.67em 0; + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: 0.3em; + font-size: 2em; + border-bottom: 1px solid var(--borderColor-muted); +} + +.markdown-body mark { + background-color: var(--bgColor-attention-muted); + color: var(--fgColor-default); +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; +} + +.markdown-body code, +.markdown-body pre { + font-family: monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em var(--base-size-40); +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid var(--borderColor-muted); + height: 0.25em; + padding: 0; + margin: var(--base-size-24) 0; + background-color: var(--borderColor-default); + border: 0; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body a:focus { + outline: 2px solid var(--focus-outlineColor); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:focus:not(:focus-visible) { + outline: solid 1px transparent; +} + +.markdown-body a:focus-visible { + outline: 2px solid var(--focus-outlineColor); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:not([class]):focus, +.markdown-body a:not([class]):focus-visible { + outline-offset: 0; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: var(--base-size-24); + margin-bottom: var(--base-size-16); + font-weight: var(--base-text-weight-semibold, 600); + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: 0.3em; + font-size: 1.5em; + border-bottom: 1px solid var(--borderColor-muted); +} + +.markdown-body h3 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1em; +} + +.markdown-body h5 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 0.875em; +} + +.markdown-body h6 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 0.85em; + color: var(--fgColor-muted); +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: var(--fgColor-muted); + border-left: 0.25em solid var(--borderColor-default); +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body code { + font-family: var( + --fontStack-monospace, + ui-monospace, + SFMono-Regular, + SF Mono, + Menlo, + Consolas, + Liberation Mono, + monospace + ); + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: var( + --fontStack-monospace, + ui-monospace, + SFMono-Regular, + SF Mono, + Menlo, + Consolas, + Liberation Mono, + monospace + ); + font-size: 12px; + word-wrap: normal; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body > *:first-child { + margin-top: 0 !important; +} + +.markdown-body > *:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: var(--base-size-16); +} + +.markdown-body blockquote > :first-child { + margin-top: 0; +} + +.markdown-body blockquote > :last-child { + margin-bottom: 0; +} + +.markdown-body h1 code, +.markdown-body h2 code, +.markdown-body h3 code, +.markdown-body h4 code, +.markdown-body h5 code, +.markdown-body h6 code { + padding: 0 0.2em; + font-size: inherit; +} + +.markdown-body summary h1, +.markdown-body summary h2, +.markdown-body summary h3, +.markdown-body summary h4, +.markdown-body summary h5, +.markdown-body summary h6 { + display: inline-block; +} + +.markdown-body summary h1, +.markdown-body summary h2 { + padding-bottom: 0; + border-bottom: 0; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li > p { + margin-top: var(--base-size-16); +} + +.markdown-body li + li { + margin-top: 0.25em; +} + +.markdown-body code { + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + white-space: break-spaces; + background-color: var(--bgColor-neutral-muted); + border-radius: 6px; +} + +.markdown-body code br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre > code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body pre { + padding: var(--base-size-16); + overflow: auto; + font-size: 85%; + line-height: 1.45; + color: var(--fgColor-default); + background-color: var(--bgColor-muted); + border-radius: 6px; +} + +.markdown-body pre code { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body summary:focus:not(:focus-visible), +.markdown-body a:focus:not(:focus-visible) { + outline: none; + box-shadow: none; +} + +.markdown-body > *:first-child > .heading-element:first-child { + margin-top: 0 !important; +} From 083ff6813bc60daa29c528691307d2c2c6687b28 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 8 Aug 2025 11:31:39 +0800 Subject: [PATCH 10/12] Check characterCount Signed-off-by: Ryan Wang --- packages/comment-widget/src/base-form.ts | 8 ++++++++ packages/comment-widget/src/comment-editor.ts | 3 +++ packages/comment-widget/src/generated/locales/es.ts | 1 + packages/comment-widget/src/generated/locales/zh-CN.ts | 1 + packages/comment-widget/src/generated/locales/zh-TW.ts | 1 + packages/comment-widget/xliff/es.xlf | 4 ++++ packages/comment-widget/xliff/zh-CN.xlf | 4 ++++ packages/comment-widget/xliff/zh-TW.xlf | 4 ++++ 8 files changed, 26 insertions(+) diff --git a/packages/comment-widget/src/base-form.ts b/packages/comment-widget/src/base-form.ts index 08e1934..17683a3 100644 --- a/packages/comment-widget/src/base-form.ts +++ b/packages/comment-widget/src/base-form.ts @@ -286,6 +286,14 @@ export class BaseForm extends LitElement { private debouncedSubmit = debounce((data: Record) => { const content = this.editorRef.value?.editor?.getHTML() || ''; + const characterCount = + this.editorRef.value?.editor?.storage.characterCount.characters(); + + if (!characterCount) { + this.toastManager?.warn(msg('Please enter content')); + this.editorRef.value?.setFocus(); + return; + } const event = new CustomEvent('submit', { detail: { diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index dd223d4..95f455b 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -4,6 +4,7 @@ import { css, html, LitElement, type PropertyValues, unsafeCSS } from 'lit'; import { state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import './emoji-button'; +import { CharacterCount } from '@tiptap/extensions'; import CodeBlockShiki from 'tiptap-extension-code-block-shiki'; import contentStyles from './styles/content.css?inline'; @@ -90,6 +91,8 @@ export class CommentEditor extends LitElement { CodeBlockShiki.configure({ defaultTheme: 'github-dark', }), + + CharacterCount, ], }); } diff --git a/packages/comment-widget/src/generated/locales/es.ts b/packages/comment-widget/src/generated/locales/es.ts index 9c2e674..c412d42 100644 --- a/packages/comment-widget/src/generated/locales/es.ts +++ b/packages/comment-widget/src/generated/locales/es.ts @@ -16,6 +16,7 @@ 's0fbf6dc6a1966408': `Siguiente`, 's1c6fefb092506753': `Error al cargar la lista de comentarios, por favor intente más tarde`, 's1e3e30a26025484c': `Error al cargar la lista de respuestas, por favor intente más tarde`, +'s26e4d65f2801ac9c': `Por favor, ingrese el contenido`, 's299b10f3a58a09fd': `Haga clic en OK para ir a la página de cierre de sesión, Por favor, asegúrese de que el contenido editado haya sido guardado.`, 's3fb33d17bad61aa9': `Comentario enviado con éxito, pendiente de revisión`, 's4c0e15f9073382e6': `Error al obtener el código de verificación`, diff --git a/packages/comment-widget/src/generated/locales/zh-CN.ts b/packages/comment-widget/src/generated/locales/zh-CN.ts index 1135d08..45749b4 100644 --- a/packages/comment-widget/src/generated/locales/zh-CN.ts +++ b/packages/comment-widget/src/generated/locales/zh-CN.ts @@ -16,6 +16,7 @@ 's0fbf6dc6a1966408': `下一页`, 's1c6fefb092506753': `加载评论列表失败,请稍后重试`, 's1e3e30a26025484c': `加载回复列表失败,请稍后重试`, +'s26e4d65f2801ac9c': `请输入内容`, 's299b10f3a58a09fd': `点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。`, 's3fb33d17bad61aa9': `评论成功,请等待审核`, 's4c0e15f9073382e6': `获取验证码失败`, diff --git a/packages/comment-widget/src/generated/locales/zh-TW.ts b/packages/comment-widget/src/generated/locales/zh-TW.ts index 5e8c093..92facba 100644 --- a/packages/comment-widget/src/generated/locales/zh-TW.ts +++ b/packages/comment-widget/src/generated/locales/zh-TW.ts @@ -16,6 +16,7 @@ 's0fbf6dc6a1966408': `下一頁`, 's1c6fefb092506753': `載入評論列表失敗,請稍後重試`, 's1e3e30a26025484c': `載入回覆列表失敗,請稍後重試`, +'s26e4d65f2801ac9c': `請輸入內容`, 's299b10f3a58a09fd': `点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。`, 's3fb33d17bad61aa9': `評論成功,請等待審核`, 's4c0e15f9073382e6': `獲取驗證碼失敗`, diff --git a/packages/comment-widget/xliff/es.xlf b/packages/comment-widget/xliff/es.xlf index 0ffafa4..e7ef096 100644 --- a/packages/comment-widget/xliff/es.xlf +++ b/packages/comment-widget/xliff/es.xlf @@ -110,6 +110,10 @@ Click OK to jump to the logout page, Please make sure the content being edited has been saved. Haga clic en OK para ir a la página de cierre de sesión, Por favor, asegúrese de que el contenido editado haya sido guardado. + + Please enter content + Por favor, ingrese el contenido + diff --git a/packages/comment-widget/xliff/zh-CN.xlf b/packages/comment-widget/xliff/zh-CN.xlf index fe1d050..0660d15 100644 --- a/packages/comment-widget/xliff/zh-CN.xlf +++ b/packages/comment-widget/xliff/zh-CN.xlf @@ -110,6 +110,10 @@ Click OK to jump to the logout page, Please make sure the content being edited has been saved. 点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。 + + Please enter content + 请输入内容 + diff --git a/packages/comment-widget/xliff/zh-TW.xlf b/packages/comment-widget/xliff/zh-TW.xlf index 428380b..f18afe5 100644 --- a/packages/comment-widget/xliff/zh-TW.xlf +++ b/packages/comment-widget/xliff/zh-TW.xlf @@ -110,6 +110,10 @@ Click OK to jump to the logout page, Please make sure the content being edited has been saved. 点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。 + + Please enter content + 請輸入內容 + From b34b90d90fe556fcff5006732f57c120e7ddedc9 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 8 Aug 2025 11:45:28 +0800 Subject: [PATCH 11/12] Update ui Signed-off-by: Ryan Wang --- packages/comment-widget/src/comment-editor.ts | 32 +++++++++++++++++-- .../src/generated/locales/es.ts | 7 ++++ .../src/generated/locales/zh-CN.ts | 7 ++++ .../src/generated/locales/zh-TW.ts | 7 ++++ packages/comment-widget/xliff/es.xlf | 28 ++++++++++++++++ packages/comment-widget/xliff/zh-CN.xlf | 28 ++++++++++++++++ packages/comment-widget/xliff/zh-TW.xlf | 28 ++++++++++++++++ 7 files changed, 135 insertions(+), 2 deletions(-) diff --git a/packages/comment-widget/src/comment-editor.ts b/packages/comment-widget/src/comment-editor.ts index 95f455b..22edcc6 100644 --- a/packages/comment-widget/src/comment-editor.ts +++ b/packages/comment-widget/src/comment-editor.ts @@ -9,6 +9,8 @@ import CodeBlockShiki from 'tiptap-extension-code-block-shiki'; import contentStyles from './styles/content.css?inline'; interface ActionItem { + name?: string; + displayName?: () => string; type: 'action' | 'separator'; icon?: string; run?: (editor?: Editor) => void; @@ -16,26 +18,36 @@ interface ActionItem { const actionItems: ActionItem[] = [ { + name: 'bold', + displayName: () => msg('Bold'), type: 'action', icon: 'i-mingcute-bold-line', run: (editor?: Editor) => editor?.chain().focus().toggleBold().run(), }, { + name: 'italic', + displayName: () => msg('Italic'), type: 'action', icon: 'i-mingcute-italic-line', run: (editor?: Editor) => editor?.chain().focus().toggleItalic().run(), }, { + name: 'underline', + displayName: () => msg('Underline'), type: 'action', icon: 'i-mingcute-underline-line', run: (editor?: Editor) => editor?.chain().focus().toggleUnderline().run(), }, { + name: 'strike', + displayName: () => msg('Strike'), type: 'action', icon: 'i-mingcute-strikethrough-line', run: (editor?: Editor) => editor?.chain().focus().toggleStrike().run(), }, { + name: 'code', + displayName: () => msg('Code'), type: 'action', icon: 'i-mingcute-code-line', run: (editor?: Editor) => editor?.chain().focus().toggleCode().run(), @@ -44,11 +56,15 @@ const actionItems: ActionItem[] = [ type: 'separator', }, { + name: 'blockquote', + displayName: () => msg('Blockquote'), type: 'action', icon: 'i-mingcute-quote-left-line', run: (editor?: Editor) => editor?.chain().focus().toggleBlockquote().run(), }, { + name: 'codeBlock', + displayName: () => msg('Code Block'), type: 'action', icon: 'i-mingcute-code-line', run: (editor?: Editor) => editor?.chain().focus().toggleCodeBlock().run(), @@ -94,6 +110,15 @@ export class CommentEditor extends LitElement { CharacterCount, ], + onUpdate: () => { + this.requestUpdate(); + }, + onSelectionUpdate: () => { + this.requestUpdate(); + }, + onTransaction: () => { + this.requestUpdate(); + }, }); } @@ -161,18 +186,21 @@ export class CommentEditor extends LitElement { private renderActionItem(item: ActionItem, editor?: Editor) { if (item.type === 'separator') { - return html`
    • + return html`
    • `; } if (item.type === 'action') { + const isActive = item.name ? editor?.isActive(item.name) : false; return html`
    • item.run?.(editor)} role="button" - class="size-7 hover:bg-gray-100 text-gray-500 hover:text-gray-900 rounded-md flex items-center justify-center cursor-pointer" + class="size-7 hover:bg-gray-100 active:bg-gray-200 ${isActive ? 'bg-gray-100 text-gray-900' : 'text-gray-500 hover:text-gray-900'} rounded-md flex items-center justify-center cursor-pointer" >
      diff --git a/packages/comment-widget/src/generated/locales/es.ts b/packages/comment-widget/src/generated/locales/es.ts index c412d42..009979c 100644 --- a/packages/comment-widget/src/generated/locales/es.ts +++ b/packages/comment-widget/src/generated/locales/es.ts @@ -18,9 +18,14 @@ 's1e3e30a26025484c': `Error al cargar la lista de respuestas, por favor intente más tarde`, 's26e4d65f2801ac9c': `Por favor, ingrese el contenido`, 's299b10f3a58a09fd': `Haga clic en OK para ir a la página de cierre de sesión, Por favor, asegúrese de que el contenido editado haya sido guardado.`, +'s35c3125c7750681e': `Cita`, +'s3643189d1abbb7f4': `Código`, 's3fb33d17bad61aa9': `Comentario enviado con éxito, pendiente de revisión`, 's4c0e15f9073382e6': `Error al obtener el código de verificación`, +'s523eb9043213ff0d': `Itálica`, +'s58a3c1ecd4dd06cf': `Tachado`, 's67749057edb2586b': `Cerrar sesión`, +'s6cb61eeccda272d5': `Bloque de código`, 's7437373e541a8037': `Apodo`, 's7584ded3d749c75e': `Cargar más`, 's82665b2ffabc9c0a': `Sitio web`, @@ -29,6 +34,7 @@ 's9f2ed66340f019c6': `Escribir un comentario`, 'sa10fbe3fcd6ae148': `Agregar respuesta`, 'sa8dddacbaa66f8e0': `Por favor, inicie sesión primero`, +'sb206d700d26b14ff': `Subrayado`, 'sb3d4f79d9d8b71e5': `Enviar comentario`, 'sb5a28aa35006ff08': `Comentario enviado con éxito`, 'sc8da3cc71de63832': `Iniciar sesión`, @@ -37,5 +43,6 @@ 'sea7e567ed89dc0d7': `Seleccionar emoticono`, 'sf3ff78cc329d3528': `Anterior`, 'sf77128b082955d42': `(O iniciar sesión)`, +'sf7c0eba7c822e3d6': `Negrita`, }; \ No newline at end of file diff --git a/packages/comment-widget/src/generated/locales/zh-CN.ts b/packages/comment-widget/src/generated/locales/zh-CN.ts index 45749b4..eb4c7b2 100644 --- a/packages/comment-widget/src/generated/locales/zh-CN.ts +++ b/packages/comment-widget/src/generated/locales/zh-CN.ts @@ -18,9 +18,14 @@ 's1e3e30a26025484c': `加载回复列表失败,请稍后重试`, 's26e4d65f2801ac9c': `请输入内容`, 's299b10f3a58a09fd': `点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。`, +'s35c3125c7750681e': `引用`, +'s3643189d1abbb7f4': `代码`, 's3fb33d17bad61aa9': `评论成功,请等待审核`, 's4c0e15f9073382e6': `获取验证码失败`, +'s523eb9043213ff0d': `斜体`, +'s58a3c1ecd4dd06cf': `删除线`, 's67749057edb2586b': `退出登录`, +'s6cb61eeccda272d5': `代码块`, 's7437373e541a8037': `昵称`, 's7584ded3d749c75e': `加载更多`, 's82665b2ffabc9c0a': `网站`, @@ -29,6 +34,7 @@ 's9f2ed66340f019c6': `编写评论`, 'sa10fbe3fcd6ae148': `加入回复`, 'sa8dddacbaa66f8e0': `请先登录`, +'sb206d700d26b14ff': `下划线`, 'sb3d4f79d9d8b71e5': `提交评论`, 'sb5a28aa35006ff08': `评论成功`, 'sc8da3cc71de63832': `登录`, @@ -37,5 +43,6 @@ 'sea7e567ed89dc0d7': `选择表情`, 'sf3ff78cc329d3528': `上一页`, 'sf77128b082955d42': `(或登录账号)`, +'sf7c0eba7c822e3d6': `粗体`, }; \ No newline at end of file diff --git a/packages/comment-widget/src/generated/locales/zh-TW.ts b/packages/comment-widget/src/generated/locales/zh-TW.ts index 92facba..0155683 100644 --- a/packages/comment-widget/src/generated/locales/zh-TW.ts +++ b/packages/comment-widget/src/generated/locales/zh-TW.ts @@ -18,9 +18,14 @@ 's1e3e30a26025484c': `載入回覆列表失敗,請稍後重試`, 's26e4d65f2801ac9c': `請輸入內容`, 's299b10f3a58a09fd': `点击确定将跳转至退出登录页面,请确保正在编辑的内容已保存。`, +'s35c3125c7750681e': `引用`, +'s3643189d1abbb7f4': `程式碼`, 's3fb33d17bad61aa9': `評論成功,請等待審核`, 's4c0e15f9073382e6': `獲取驗證碼失敗`, +'s523eb9043213ff0d': `斜體`, +'s58a3c1ecd4dd06cf': `刪除線`, 's67749057edb2586b': `登出`, +'s6cb61eeccda272d5': `程式碼區塊`, 's7437373e541a8037': `暱稱`, 's7584ded3d749c75e': `載入更多`, 's82665b2ffabc9c0a': `網站`, @@ -29,6 +34,7 @@ 's9f2ed66340f019c6': `撰寫評論`, 'sa10fbe3fcd6ae148': `新增回覆`, 'sa8dddacbaa66f8e0': `請先登入`, +'sb206d700d26b14ff': `底線`, 'sb3d4f79d9d8b71e5': `提交評論`, 'sb5a28aa35006ff08': `評論成功`, 'sc8da3cc71de63832': `登入`, @@ -37,5 +43,6 @@ 'sea7e567ed89dc0d7': `選擇表情`, 'sf3ff78cc329d3528': `上一頁`, 'sf77128b082955d42': `(或登入帳號)`, +'sf7c0eba7c822e3d6': `粗體`, }; \ No newline at end of file diff --git a/packages/comment-widget/xliff/es.xlf b/packages/comment-widget/xliff/es.xlf index e7ef096..dd99137 100644 --- a/packages/comment-widget/xliff/es.xlf +++ b/packages/comment-widget/xliff/es.xlf @@ -114,6 +114,34 @@ Please enter content Por favor, ingrese el contenido + + Bold + Negrita + + + Italic + Itálica + + + Underline + Subrayado + + + Strike + Tachado + + + Code + Código + + + Blockquote + Cita + + + Code Block + Bloque de código + diff --git a/packages/comment-widget/xliff/zh-CN.xlf b/packages/comment-widget/xliff/zh-CN.xlf index 0660d15..63a38f3 100644 --- a/packages/comment-widget/xliff/zh-CN.xlf +++ b/packages/comment-widget/xliff/zh-CN.xlf @@ -114,6 +114,34 @@ Please enter content 请输入内容 + + Bold + 粗体 + + + Italic + 斜体 + + + Underline + 下划线 + + + Strike + 删除线 + + + Code + 代码 + + + Blockquote + 引用 + + + Code Block + 代码块 + diff --git a/packages/comment-widget/xliff/zh-TW.xlf b/packages/comment-widget/xliff/zh-TW.xlf index f18afe5..3f7b19b 100644 --- a/packages/comment-widget/xliff/zh-TW.xlf +++ b/packages/comment-widget/xliff/zh-TW.xlf @@ -114,6 +114,34 @@ Please enter content 請輸入內容 + + Bold + 粗體 + + + Italic + 斜體 + + + Underline + 底線 + + + Strike + 刪除線 + + + Code + 程式碼 + + + Blockquote + 引用 + + + Code Block + 程式碼區塊 + From 5ed1fde3bde560ec131406c002057783bb594250 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 8 Aug 2025 11:46:47 +0800 Subject: [PATCH 12/12] Remove unused deps Signed-off-by: Ryan Wang --- package.json | 1 - pnpm-lock.yaml | 9 --------- 2 files changed, 10 deletions(-) diff --git a/package.json b/package.json index 9e77fea..554465c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ }, "dependencies": { "@tiptap/extensions": "^3.0.9", - "github-markdown-css": "^5.8.1", "shiki": "^3.9.2", "tiptap-extension-code-block-shiki": "^0.5.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 263332f..ecd4f6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,9 +14,6 @@ importers: '@tiptap/extensions': specifier: ^3.0.9 version: 3.0.9(@tiptap/core@3.0.9(@tiptap/pm@3.0.9))(@tiptap/pm@3.0.9) - github-markdown-css: - specifier: ^5.8.1 - version: 5.8.1 shiki: specifier: ^3.9.2 version: 3.9.2 @@ -1537,10 +1534,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - github-markdown-css@5.8.1: - resolution: {integrity: sha512-8G+PFvqigBQSWLQjyzgpa2ThD9bo7+kDsriUIidGcRhXgmcaAWUIpCZf8DavJgc+xifjbCG+GvMyWr0XMXmc7g==} - engines: {node: '>=10'} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3873,8 +3866,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - github-markdown-css@5.8.1: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3