Compare commits
	
		
			21 Commits
		
	
	
		
			2025.2.0-b
			...
			KisaragiEf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | fcb9f8bef4 | ||
|   | 607bf60007 | ||
|   | d008394eb7 | ||
|   | 47a76bbc4c | ||
|   | cfb61289a9 | ||
|   | c548ec9906 | ||
| ![github-actions[bot]](/assets/img/avatar_default.png)  | c634ae37e5 | ||
| ![github-actions[bot]](/assets/img/avatar_default.png)  | b7c3630da9 | ||
|   | 0f0e88e4c7 | ||
|   | fd880660a3 | ||
| ![github-actions[bot]](/assets/img/avatar_default.png)  | 2f4e2a7cca | ||
|   | 23fc79bf06 | ||
|   | fbc6d0de54 | ||
|   | 904da7bad6 | ||
|   | 82d4109339 | ||
|   | 0c634c9675 | ||
|   | 5840c7a945 | ||
|   | cb48853334 | ||
|   | 495d72ed2a | ||
|   | 19857632d0 | ||
|   | 9c70a4e631 | 
							
								
								
									
										4
									
								
								.github/workflows/api-misskey-js.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/api-misskey-js.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,6 +9,10 @@ on: | |||||||
|     paths: |     paths: | ||||||
|       - packages/misskey-js/** |       - packages/misskey-js/** | ||||||
|       - .github/workflows/api-misskey-js.yml |       - .github/workflows/api-misskey-js.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   report: |   report: | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/get-api-diff.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/get-api-diff.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,6 +9,10 @@ on: | |||||||
|     paths: |     paths: | ||||||
|       - packages/backend/** |       - packages/backend/** | ||||||
|       - .github/workflows/get-api-diff.yml |       - .github/workflows/get-api-diff.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   get-from-misskey: |   get-from-misskey: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @@ -28,6 +28,10 @@ on: | |||||||
|       - packages/misskey-reversi/** |       - packages/misskey-reversi/** | ||||||
|       - packages/shared/eslint.config.js |       - packages/shared/eslint.config.js | ||||||
|       - .github/workflows/lint.yml |       - .github/workflows/lint.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   pnpm_install: |   pnpm_install: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/locale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/locale.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,6 +9,10 @@ on: | |||||||
|     paths: |     paths: | ||||||
|       - locales/** |       - locales/** | ||||||
|       - .github/workflows/locale.yml |       - .github/workflows/locale.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   locale_verify: |   locale_verify: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								.github/workflows/on-release-created.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/on-release-created.yml
									
									
									
									
										vendored
									
									
								
							| @@ -6,6 +6,9 @@ on: | |||||||
|  |  | ||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   publish-misskey-js: |   publish-misskey-js: | ||||||
|     name: Publish misskey-js |     name: Publish misskey-js | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								.github/workflows/storybook.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/storybook.yml
									
									
									
									
										vendored
									
									
								
							| @@ -13,6 +13,9 @@ on: | |||||||
|       # This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master. |       # This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master. | ||||||
|       - master |       - master | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build: |   build: | ||||||
|     # chromatic is not likely to be available for fork repositories, so we disable for fork repositories. |     # chromatic is not likely to be available for fork repositories, so we disable for fork repositories. | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/test-backend.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test-backend.yml
									
									
									
									
										vendored
									
									
								
							| @@ -18,6 +18,10 @@ on: | |||||||
|       - packages/misskey-js/** |       - packages/misskey-js/** | ||||||
|       - .github/workflows/test-backend.yml |       - .github/workflows/test-backend.yml | ||||||
|       - .github/misskey/test.yml |       - .github/misskey/test.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   unit: |   unit: | ||||||
|     name: Unit tests (backend) |     name: Unit tests (backend) | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								.github/workflows/test-federation.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/test-federation.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,6 +15,9 @@ on: | |||||||
|       - packages/misskey-js/** |       - packages/misskey-js/** | ||||||
|       - .github/workflows/test-federation.yml |       - .github/workflows/test-federation.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   test: |   test: | ||||||
|     name: Federation test |     name: Federation test | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/test-frontend.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test-frontend.yml
									
									
									
									
										vendored
									
									
								
							| @@ -22,6 +22,10 @@ on: | |||||||
|       - packages/backend/** |       - packages/backend/** | ||||||
|       - .github/workflows/test-frontend.yml |       - .github/workflows/test-frontend.yml | ||||||
|       - .github/misskey/test.yml |       - .github/misskey/test.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   vitest: |   vitest: | ||||||
|     name: Unit tests (frontend) |     name: Unit tests (frontend) | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/test-misskey-js.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test-misskey-js.yml
									
									
									
									
										vendored
									
									
								
							| @@ -14,6 +14,10 @@ on: | |||||||
|     paths: |     paths: | ||||||
|       - packages/misskey-js/** |       - packages/misskey-js/** | ||||||
|       - .github/workflows/test-misskey-js.yml |       - .github/workflows/test-misskey-js.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   test: |   test: | ||||||
|     name: Unit tests (misskey.js) |     name: Unit tests (misskey.js) | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								.github/workflows/test-production.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/test-production.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,6 +9,7 @@ on: | |||||||
|  |  | ||||||
| env: | env: | ||||||
|   NODE_ENV: production |   NODE_ENV: production | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   production: |   production: | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/validate-api-json.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/validate-api-json.yml
									
									
									
									
										vendored
									
									
								
							| @@ -12,6 +12,10 @@ on: | |||||||
|     paths: |     paths: | ||||||
|       - packages/backend/** |       - packages/backend/** | ||||||
|       - .github/workflows/validate-api-json.yml |       - .github/workflows/validate-api-json.yml | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   COREPACK_DEFAULT_TO_LATEST: 0 | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   validate-api-json: |   validate-api-json: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,16 +1,37 @@ | |||||||
| ## 2025.2.0 | ## Unreleased | ||||||
|  |  | ||||||
| ### General | ### General | ||||||
| - | - | ||||||
|  |  | ||||||
| ### Client | ### Client | ||||||
| - Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題  | - Enhance: 投稿フォームの「迷惑になる可能性があります」のダイアログを表示する条件においてCWを考慮するように | ||||||
| - Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正 | - Enhance: アンテナ、リスト等の名前をカラム名のデフォルト値にするように `#13992` | ||||||
|  |  | ||||||
| ### Server | ### Server | ||||||
| - Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正 | - | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## 2025.2.0 | ||||||
|  |  | ||||||
|  | ### General | ||||||
|  | - Fix: Docker のビルドに失敗する問題を修正   | ||||||
|  |   (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/883) | ||||||
|  |  | ||||||
|  | ### Client | ||||||
|  | - Fix: パスキーでパスワードレスログインが出来ない問題を修正 | ||||||
|  | - Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題  | ||||||
|  | - Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正 | ||||||
|  | - Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正 | ||||||
|  | - Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正 | ||||||
|  | - Fix: デッキのプロファイルが新規作成できない問題を修正 | ||||||
|  | - Fix: セキュリティに関する修正 | ||||||
|  | - ローカライゼーションの更新 | ||||||
|  | - Playが実装されたため、ページ機能の「ソースを見る」は削除されました | ||||||
|  |  | ||||||
|  | ### Server | ||||||
|  | - Enhance: ページのURLに使用可能な文字を限定するように | ||||||
|  | - Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正 | ||||||
|  |  | ||||||
| ## 2025.1.0 | ## 2025.1.0 | ||||||
|  |  | ||||||
| ### Note | ### Note | ||||||
|   | |||||||
| @@ -6,6 +6,8 @@ ARG NODE_VERSION=22.11.0-bookworm | |||||||
|  |  | ||||||
| FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder | FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder | ||||||
|  |  | ||||||
|  | ENV COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|  |  | ||||||
| RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ | RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ | ||||||
| 	--mount=type=cache,target=/var/lib/apt,sharing=locked \ | 	--mount=type=cache,target=/var/lib/apt,sharing=locked \ | ||||||
| 	rm -f /etc/apt/apt.conf.d/docker-clean \ | 	rm -f /etc/apt/apt.conf.d/docker-clean \ | ||||||
| @@ -44,6 +46,8 @@ RUN rm -rf .git/ | |||||||
|  |  | ||||||
| FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder | FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder | ||||||
|  |  | ||||||
|  | ENV COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|  |  | ||||||
| RUN apt-get update \ | RUN apt-get update \ | ||||||
| 	&& apt-get install -yqq --no-install-recommends \ | 	&& apt-get install -yqq --no-install-recommends \ | ||||||
| 	build-essential | 	build-essential | ||||||
| @@ -68,6 +72,7 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner | |||||||
|  |  | ||||||
| ARG UID="991" | ARG UID="991" | ||||||
| ARG GID="991" | ARG GID="991" | ||||||
|  | ENV COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|  |  | ||||||
| RUN apt-get update \ | RUN apt-get update \ | ||||||
| 	&& apt-get install -y --no-install-recommends \ | 	&& apt-get install -y --no-install-recommends \ | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								FEDERATION.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								FEDERATION.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | # Federation | ||||||
|  |  | ||||||
|  | ## Supported federation protocols and standards | ||||||
|  |  | ||||||
|  | - [ActivityPub](https://www.w3.org/TR/activitypub/) (Server-to-Server) | ||||||
|  | - [WebFinger](https://webfinger.net/) | ||||||
|  | - [Http Signatures](https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures) | ||||||
|  | - [NodeInfo](https://nodeinfo.diaspora.software/) | ||||||
|  |  | ||||||
|  | ## Supported FEPs | ||||||
|  |  | ||||||
|  | - [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md) | ||||||
|  |  | ||||||
|  | ## ActivityPub | ||||||
|  |  | ||||||
|  | This section is documented on [misskey-hub.net](https://misskey-hub.net/ns). | ||||||
|  |  | ||||||
|  | ## Additional documentation | ||||||
|  |  | ||||||
|  | * https://misskey-hub.net/ns | ||||||
| @@ -1460,9 +1460,6 @@ _pages: | |||||||
|   newPage: "أنشئ صفحة جديدة" |   newPage: "أنشئ صفحة جديدة" | ||||||
|   editPage: "عدّل الصفحة" |   editPage: "عدّل الصفحة" | ||||||
|   readPage: "نُشّط عرض المصدر" |   readPage: "نُشّط عرض المصدر" | ||||||
|   created: "نجح إنشاء الصفحة" |  | ||||||
|   updated: "نجح تعديل الصفحة" |  | ||||||
|   deleted: "نجح حذف الصفحة" |  | ||||||
|   pageSetting: "إعدادات الصفحة" |   pageSetting: "إعدادات الصفحة" | ||||||
|   nameAlreadyExists: "رابط الصفحة موجود مسبقًا" |   nameAlreadyExists: "رابط الصفحة موجود مسبقًا" | ||||||
|   invalidNameTitle: "رابط الصفحة ليس صالحًا" |   invalidNameTitle: "رابط الصفحة ليس صالحًا" | ||||||
|   | |||||||
| @@ -1237,9 +1237,6 @@ _pages: | |||||||
|   newPage: "নতুন পৃষ্ঠা বানান" |   newPage: "নতুন পৃষ্ঠা বানান" | ||||||
|   editPage: "পৃষ্ঠাটি সম্পাদনা করুন" |   editPage: "পৃষ্ঠাটি সম্পাদনা করুন" | ||||||
|   readPage: "উৎস দেখছেন" |   readPage: "উৎস দেখছেন" | ||||||
|   created: "পৃষ্ঠা তৈরি করা হয়েছে" |  | ||||||
|   updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে" |  | ||||||
|   deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে" |  | ||||||
|   pageSetting: "পৃষ্ঠার সেটিংস" |   pageSetting: "পৃষ্ঠার সেটিংস" | ||||||
|   nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে" |   nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে" | ||||||
|   invalidNameTitle: "পৃষ্ঠার URL অবৈধ" |   invalidNameTitle: "পৃষ্ঠার URL অবৈধ" | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "pa" |   newPage: "pa" | ||||||
|   editPage: "Editar la pàgina" |   editPage: "Editar la pàgina" | ||||||
|   readPage: "Veure el codi font d'aquesta pàgina" |   readPage: "Veure el codi font d'aquesta pàgina" | ||||||
|   created: "La pàgina ha sigut creada correctament" |  | ||||||
|   updated: "La pàgina s'ha editat correctament" |  | ||||||
|   deleted: "La pàgina s'ha esborrat sense problemes" |  | ||||||
|   pageSetting: "Configuració de la pàgina" |   pageSetting: "Configuració de la pàgina" | ||||||
|   nameAlreadyExists: "L'adreça URL de la pàgina ja existeix" |   nameAlreadyExists: "L'adreça URL de la pàgina ja existeix" | ||||||
|   invalidNameTitle: "L'adreça URL de la pàgina no és vàlida" |   invalidNameTitle: "L'adreça URL de la pàgina no és vàlida" | ||||||
|   | |||||||
| @@ -1883,9 +1883,6 @@ _pages: | |||||||
|   newPage: "Vytvořit novou stránku" |   newPage: "Vytvořit novou stránku" | ||||||
|   editPage: "Upravit stránku" |   editPage: "Upravit stránku" | ||||||
|   readPage: "Prohlížení zdroje této stránky" |   readPage: "Prohlížení zdroje této stránky" | ||||||
|   created: "Stránka byla úspěšně vytvořena" |  | ||||||
|   updated: "Stránka byla úspěšně aktualizována" |  | ||||||
|   deleted: "Stránka byla úspěšně smazána" |  | ||||||
|   pageSetting: "Nastavení stránky" |   pageSetting: "Nastavení stránky" | ||||||
|   nameAlreadyExists: "Zadaná adresa URL stránky již existuje" |   nameAlreadyExists: "Zadaná adresa URL stránky již existuje" | ||||||
|   invalidNameTitle: "Zadaná adresa URL stránky je neplatná" |   invalidNameTitle: "Zadaná adresa URL stránky je neplatná" | ||||||
|   | |||||||
| @@ -2277,9 +2277,6 @@ _pages: | |||||||
|   newPage: "Seite erstellen" |   newPage: "Seite erstellen" | ||||||
|   editPage: "Seite bearbeiten" |   editPage: "Seite bearbeiten" | ||||||
|   readPage: "Quelltextansicht" |   readPage: "Quelltextansicht" | ||||||
|   created: "Seite erfolgreich erstellt" |  | ||||||
|   updated: "Seite erfolgreich aktualisiert" |  | ||||||
|   deleted: "Seite erfolgreich gelöscht" |  | ||||||
|   pageSetting: "Seiteneinstellungen" |   pageSetting: "Seiteneinstellungen" | ||||||
|   nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits" |   nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits" | ||||||
|   invalidNameTitle: "Die angegebene Seiten-URL ist ungültig" |   invalidNameTitle: "Die angegebene Seiten-URL ist ungültig" | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "Create a new Page" |   newPage: "Create a new Page" | ||||||
|   editPage: "Edit this Page" |   editPage: "Edit this Page" | ||||||
|   readPage: "Viewing this Page's source" |   readPage: "Viewing this Page's source" | ||||||
|   created: "Page successfully created" |  | ||||||
|   updated: "Page successfully edited" |  | ||||||
|   deleted: "Page successfully deleted" |  | ||||||
|   pageSetting: "Page settings" |   pageSetting: "Page settings" | ||||||
|   nameAlreadyExists: "The specified Page URL already exists" |   nameAlreadyExists: "The specified Page URL already exists" | ||||||
|   invalidNameTitle: "The specified Page URL is invalid" |   invalidNameTitle: "The specified Page URL is invalid" | ||||||
| @@ -2775,6 +2772,7 @@ _customEmojisManager: | |||||||
|       confirmUpdateEmojisDescription: "Update {count} Emoji(s). Are you sure to continue?" |       confirmUpdateEmojisDescription: "Update {count} Emoji(s). Are you sure to continue?" | ||||||
|       confirmDeleteEmojisDescription: "Delete checked {count} Emoji(s). Are you sure to continue?" |       confirmDeleteEmojisDescription: "Delete checked {count} Emoji(s). Are you sure to continue?" | ||||||
|       confirmResetDescription: "" |       confirmResetDescription: "" | ||||||
|  |       confirmMovePageDesciption: "Changes have been made to the Emojis on this page.\nIf you leave the page without saving, all changes made on this page will be discarded." | ||||||
|       dialogSelectRoleTitle: "Search by roll set in Emojis" |       dialogSelectRoleTitle: "Search by roll set in Emojis" | ||||||
|     _register: |     _register: | ||||||
|       uploadSettingTitle: "Upload settings" |       uploadSettingTitle: "Upload settings" | ||||||
|   | |||||||
| @@ -2294,9 +2294,6 @@ _pages: | |||||||
|   newPage: "Crear página" |   newPage: "Crear página" | ||||||
|   editPage: "Editar página" |   editPage: "Editar página" | ||||||
|   readPage: "Viendo la fuente" |   readPage: "Viendo la fuente" | ||||||
|   created: "La página fue creada" |  | ||||||
|   updated: "La página fue actualizada" |  | ||||||
|   deleted: "La página borrada" |  | ||||||
|   pageSetting: "Configurar página" |   pageSetting: "Configurar página" | ||||||
|   nameAlreadyExists: "La URL de la página especificada ya existe" |   nameAlreadyExists: "La URL de la página especificada ya existe" | ||||||
|   invalidNameTitle: "URL inválida" |   invalidNameTitle: "URL inválida" | ||||||
|   | |||||||
| @@ -2118,9 +2118,6 @@ _pages: | |||||||
|   newPage: "Créer une page" |   newPage: "Créer une page" | ||||||
|   editPage: "Modifier une page" |   editPage: "Modifier une page" | ||||||
|   readPage: "Affichage de la source en cours" |   readPage: "Affichage de la source en cours" | ||||||
|   created: "La page a été créée !" |  | ||||||
|   updated: "La page a été mise à jour !" |  | ||||||
|   deleted: "La page a été supprimée" |  | ||||||
|   pageSetting: "Paramètres de la Page" |   pageSetting: "Paramètres de la Page" | ||||||
|   nameAlreadyExists: "L'URL de page spécifiée existe déjà" |   nameAlreadyExists: "L'URL de page spécifiée existe déjà" | ||||||
|   invalidNameTitle: "L'URL de page spécifiée n’est pas valide" |   invalidNameTitle: "L'URL de page spécifiée n’est pas valide" | ||||||
|   | |||||||
| @@ -2285,9 +2285,6 @@ _pages: | |||||||
|   newPage: "Buat halaman baru" |   newPage: "Buat halaman baru" | ||||||
|   editPage: "Sunting halaman" |   editPage: "Sunting halaman" | ||||||
|   readPage: "Lihat sumber kode aktif" |   readPage: "Lihat sumber kode aktif" | ||||||
|   created: "Halaman berhasil dibuat" |  | ||||||
|   updated: "Halaman berhasil diperbaharui!" |  | ||||||
|   deleted: "Halaman telah dihapus" |  | ||||||
|   pageSetting: "Pengaturan Halaman" |   pageSetting: "Pengaturan Halaman" | ||||||
|   nameAlreadyExists: "URL Halaman yang ditentukan sudah ada" |   nameAlreadyExists: "URL Halaman yang ditentukan sudah ada" | ||||||
|   invalidNameTitle: "URL Halaman yang ditentukan tidak valid" |   invalidNameTitle: "URL Halaman yang ditentukan tidak valid" | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								locales/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								locales/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -4195,7 +4195,7 @@ export interface Locale extends ILocale { | |||||||
|      */ |      */ | ||||||
|     "invalidParamError": string; |     "invalidParamError": string; | ||||||
|     /** |     /** | ||||||
|      * リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。 |      * リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。 | ||||||
|      */ |      */ | ||||||
|     "invalidParamErrorDescription": string; |     "invalidParamErrorDescription": string; | ||||||
|     /** |     /** | ||||||
| @@ -9180,18 +9180,6 @@ export interface Locale extends ILocale { | |||||||
|          * ソースを表示中 |          * ソースを表示中 | ||||||
|          */ |          */ | ||||||
|         "readPage": string; |         "readPage": string; | ||||||
|         /** |  | ||||||
|          * ページを作成しました |  | ||||||
|          */ |  | ||||||
|         "created": string; |  | ||||||
|         /** |  | ||||||
|          * ページを更新しました |  | ||||||
|          */ |  | ||||||
|         "updated": string; |  | ||||||
|         /** |  | ||||||
|          * ページを削除しました |  | ||||||
|          */ |  | ||||||
|         "deleted": string; |  | ||||||
|         /** |         /** | ||||||
|          * ページ設定 |          * ページ設定 | ||||||
|          */ |          */ | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "Crea pagina" |   newPage: "Crea pagina" | ||||||
|   editPage: "Modifica pagina" |   editPage: "Modifica pagina" | ||||||
|   readPage: "Visualizzando fonte " |   readPage: "Visualizzando fonte " | ||||||
|   created: "Pagina creata!" |  | ||||||
|   updated: "Pagina aggiornata con successo!" |  | ||||||
|   deleted: "Pagina eliminata" |  | ||||||
|   pageSetting: "Impostazioni pagina" |   pageSetting: "Impostazioni pagina" | ||||||
|   nameAlreadyExists: "Esiste già una pagina con lo stesso URL." |   nameAlreadyExists: "Esiste già una pagina con lo stesso URL." | ||||||
|   invalidNameTitle: "L'URL di pagina definito non è valido" |   invalidNameTitle: "L'URL di pagina definito non è valido" | ||||||
|   | |||||||
| @@ -1044,7 +1044,7 @@ youCannotCreateAnymore: "これ以上作成することはできません。" | |||||||
| cannotPerformTemporary: "一時的に利用できません" | cannotPerformTemporary: "一時的に利用できません" | ||||||
| cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。" | cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。" | ||||||
| invalidParamError: "パラメータエラー" | invalidParamError: "パラメータエラー" | ||||||
| invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。" | invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。" | ||||||
| permissionDeniedError: "操作が拒否されました" | permissionDeniedError: "操作が拒否されました" | ||||||
| permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。" | permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。" | ||||||
| preset: "プリセット" | preset: "プリセット" | ||||||
| @@ -2422,9 +2422,6 @@ _pages: | |||||||
|   newPage: "ページの作成" |   newPage: "ページの作成" | ||||||
|   editPage: "ページの編集" |   editPage: "ページの編集" | ||||||
|   readPage: "ソースを表示中" |   readPage: "ソースを表示中" | ||||||
|   created: "ページを作成しました" |  | ||||||
|   updated: "ページを更新しました" |  | ||||||
|   deleted: "ページを削除しました" |  | ||||||
|   pageSetting: "ページ設定" |   pageSetting: "ページ設定" | ||||||
|   nameAlreadyExists: "指定されたページURLは既に存在しています" |   nameAlreadyExists: "指定されたページURLは既に存在しています" | ||||||
|   invalidNameTitle: "不正なページURLです" |   invalidNameTitle: "不正なページURLです" | ||||||
|   | |||||||
| @@ -2357,9 +2357,6 @@ _pages: | |||||||
|   newPage: "ページを作る" |   newPage: "ページを作る" | ||||||
|   editPage: "ページの編集" |   editPage: "ページの編集" | ||||||
|   readPage: "ソースを表示中" |   readPage: "ソースを表示中" | ||||||
|   created: "ページを作成したで" |  | ||||||
|   updated: "ページを更新したで" |  | ||||||
|   deleted: "ページを削除したで" |  | ||||||
|   pageSetting: "ページ設定" |   pageSetting: "ページ設定" | ||||||
|   nameAlreadyExists: "指定されたページURLはもうあるみたいや" |   nameAlreadyExists: "指定されたページURLはもうあるみたいや" | ||||||
|   invalidNameTitle: "正しくないページURLみたいやで" |   invalidNameTitle: "正しくないページURLみたいやで" | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "페이지 만들기" |   newPage: "페이지 만들기" | ||||||
|   editPage: "페이지 수정" |   editPage: "페이지 수정" | ||||||
|   readPage: "소스 표시 중" |   readPage: "소스 표시 중" | ||||||
|   created: "페이지를 만들었습니다" |  | ||||||
|   updated: "페이지를 수정했습니다" |  | ||||||
|   deleted: "페이지가 삭제되었습니다" |  | ||||||
|   pageSetting: "페이지 설정" |   pageSetting: "페이지 설정" | ||||||
|   nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다" |   nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다" | ||||||
|   invalidNameTitle: "유효하지 않은 페이지 URL입니다" |   invalidNameTitle: "유효하지 않은 페이지 URL입니다" | ||||||
|   | |||||||
| @@ -1459,9 +1459,6 @@ _pages: | |||||||
|   newPage: "Utwórz stronę" |   newPage: "Utwórz stronę" | ||||||
|   editPage: "Edytuj tę stronę" |   editPage: "Edytuj tę stronę" | ||||||
|   readPage: "Aktywowano widok źródła" |   readPage: "Aktywowano widok źródła" | ||||||
|   created: "Pomyślnie utworzono stronę!" |  | ||||||
|   updated: "Pomyślnie zaktualizowano stronę!" |  | ||||||
|   deleted: "Strona została usunięta" |  | ||||||
|   pageSetting: "Ustawienia strony" |   pageSetting: "Ustawienia strony" | ||||||
|   nameAlreadyExists: "Określony adres URL strony już istnieje" |   nameAlreadyExists: "Określony adres URL strony już istnieje" | ||||||
|   invalidNameTitle: "Podany adres URL strony jest nieprawidłowy" |   invalidNameTitle: "Podany adres URL strony jest nieprawidłowy" | ||||||
|   | |||||||
| @@ -2357,9 +2357,6 @@ _pages: | |||||||
|   newPage: "Criar uma Página" |   newPage: "Criar uma Página" | ||||||
|   editPage: "Editar essa Página" |   editPage: "Editar essa Página" | ||||||
|   readPage: "Ver a fonte dessa Página" |   readPage: "Ver a fonte dessa Página" | ||||||
|   created: "Página criada com sucesso" |  | ||||||
|   updated: "Página atualizada com sucesso" |  | ||||||
|   deleted: "Página excluída com sucesso" |  | ||||||
|   pageSetting: "Configurações da página" |   pageSetting: "Configurações da página" | ||||||
|   nameAlreadyExists: "O URL de Página especificado já existe" |   nameAlreadyExists: "O URL de Página especificado já existe" | ||||||
|   invalidNameTitle: "O URL de Página especificado é inválido" |   invalidNameTitle: "O URL de Página especificado é inválido" | ||||||
|   | |||||||
| @@ -1976,9 +1976,6 @@ _pages: | |||||||
|   newPage: "Создать страницу" |   newPage: "Создать страницу" | ||||||
|   editPage: "Править страницу" |   editPage: "Править страницу" | ||||||
|   readPage: "Читать страницу" |   readPage: "Читать страницу" | ||||||
|   created: "Страница успешно создана." |  | ||||||
|   updated: "Страница успешно обновлена." |  | ||||||
|   deleted: "Страница успешно удалена." |  | ||||||
|   pageSetting: "Настройки страницы" |   pageSetting: "Настройки страницы" | ||||||
|   nameAlreadyExists: "Указанный адрес страницы уже существует." |   nameAlreadyExists: "Указанный адрес страницы уже существует." | ||||||
|   invalidNameTitle: "Указанный адрес страницы недопустим." |   invalidNameTitle: "Указанный адрес страницы недопустим." | ||||||
|   | |||||||
| @@ -1332,9 +1332,6 @@ _pages: | |||||||
|   newPage: "Vytvoriť novú stránku" |   newPage: "Vytvoriť novú stránku" | ||||||
|   editPage: "Upraviť túto stránku" |   editPage: "Upraviť túto stránku" | ||||||
|   readPage: "Zobrazenie zdroja aktívne" |   readPage: "Zobrazenie zdroja aktívne" | ||||||
|   created: "Stránka úspešne vytvorená" |  | ||||||
|   updated: "Stránka úspešne upravená" |  | ||||||
|   deleted: "Stránka úspešne odstránená" |  | ||||||
|   pageSetting: "Nastavenia stránky" |   pageSetting: "Nastavenia stránky" | ||||||
|   nameAlreadyExists: "Zadaná URL stránku už existuje" |   nameAlreadyExists: "Zadaná URL stránku už existuje" | ||||||
|   invalidNameTitle: "Zadaná URL stránku je nesprávna" |   invalidNameTitle: "Zadaná URL stránku je nesprávna" | ||||||
|   | |||||||
| @@ -2331,9 +2331,6 @@ _pages: | |||||||
|   newPage: "สร้างหน้าเพจใหม่" |   newPage: "สร้างหน้าเพจใหม่" | ||||||
|   editPage: "แก้ไขหน้าเพจ" |   editPage: "แก้ไขหน้าเพจ" | ||||||
|   readPage: "กำลังดูแหล่งที่มาของเพจนี้" |   readPage: "กำลังดูแหล่งที่มาของเพจนี้" | ||||||
|   created: "สร้างหน้าเพจสำเร็จเรียบร้อยแล้ว" |  | ||||||
|   updated: "แก้ไขหน้าเพจสำเร็จเรียบร้อยแล้ว" |  | ||||||
|   deleted: "ลบหน้าเพจสำเร็จเรียบร้อยแล้ว" |  | ||||||
|   pageSetting: "การตั้งค่าหน้าเพจ" |   pageSetting: "การตั้งค่าหน้าเพจ" | ||||||
|   nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว" |   nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว" | ||||||
|   invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง" |   invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง" | ||||||
|   | |||||||
| @@ -1513,9 +1513,6 @@ _pages: | |||||||
|   newPage: "Створити сторінку" |   newPage: "Створити сторінку" | ||||||
|   editPage: "Редагувати сторінку" |   editPage: "Редагувати сторінку" | ||||||
|   readPage: "Перегляд вихідного коду" |   readPage: "Перегляд вихідного коду" | ||||||
|   created: "Сторінка успішно створена." |  | ||||||
|   updated: "Сторінка успішно оновлена." |  | ||||||
|   deleted: "Сторінку видалено" |  | ||||||
|   pageSetting: "Налаштування сторінки" |   pageSetting: "Налаштування сторінки" | ||||||
|   nameAlreadyExists: "Вказана адреса сторінки вже існує." |   nameAlreadyExists: "Вказана адреса сторінки вже існує." | ||||||
|   invalidNameTitle: "Вказана адреса сторінки неприпустима." |   invalidNameTitle: "Вказана адреса сторінки неприпустима." | ||||||
|   | |||||||
| @@ -1004,9 +1004,6 @@ _play: | |||||||
| _pages: | _pages: | ||||||
|   newPage: "Yangi Sahifa yaratish" |   newPage: "Yangi Sahifa yaratish" | ||||||
|   editPage: "Ushbu Sahifani tahrirlash" |   editPage: "Ushbu Sahifani tahrirlash" | ||||||
|   created: "Sahifa muvaffaqiyatli yaratildi" |  | ||||||
|   updated: "Sahifa muvaffaqiyatli tahrirlandi" |  | ||||||
|   deleted: "Sahifa muvaffaqiyatli o'chirildi" |  | ||||||
|   pageSetting: "Sahifa sozlamalari" |   pageSetting: "Sahifa sozlamalari" | ||||||
|   nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud" |   nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud" | ||||||
|   invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz" |   invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz" | ||||||
|   | |||||||
| @@ -1802,9 +1802,6 @@ _pages: | |||||||
|   newPage: "Tạo Trang mới" |   newPage: "Tạo Trang mới" | ||||||
|   editPage: "Sửa Trang này" |   editPage: "Sửa Trang này" | ||||||
|   readPage: "Xem mã nguồn Trang này" |   readPage: "Xem mã nguồn Trang này" | ||||||
|   created: "Trang đã được tạo thành công" |  | ||||||
|   updated: "Trang đã được cập nhật thành công" |  | ||||||
|   deleted: "Trang đã được xóa thành công" |  | ||||||
|   pageSetting: "Cài đặt trang" |   pageSetting: "Cài đặt trang" | ||||||
|   nameAlreadyExists: "URL Trang đã tồn tại" |   nameAlreadyExists: "URL Trang đã tồn tại" | ||||||
|   invalidNameTitle: "URL Trang không hợp lệ" |   invalidNameTitle: "URL Trang không hợp lệ" | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "创建页面" |   newPage: "创建页面" | ||||||
|   editPage: "编辑页面" |   editPage: "编辑页面" | ||||||
|   readPage: "查看页面" |   readPage: "查看页面" | ||||||
|   created: "页面已创建" |  | ||||||
|   updated: "页面已更新" |  | ||||||
|   deleted: "该页面已被删除" |  | ||||||
|   pageSetting: "页面设置" |   pageSetting: "页面设置" | ||||||
|   nameAlreadyExists: "该页面 URL 已存在" |   nameAlreadyExists: "该页面 URL 已存在" | ||||||
|   invalidNameTitle: "无效的页面 URL" |   invalidNameTitle: "无效的页面 URL" | ||||||
|   | |||||||
| @@ -2365,9 +2365,6 @@ _pages: | |||||||
|   newPage: "建立頁面" |   newPage: "建立頁面" | ||||||
|   editPage: "編輯頁面" |   editPage: "編輯頁面" | ||||||
|   readPage: "正在檢視原始碼" |   readPage: "正在檢視原始碼" | ||||||
|   created: "頁面已建立" |  | ||||||
|   updated: "頁面已更新" |  | ||||||
|   deleted: "頁面已被刪除" |  | ||||||
|   pageSetting: "頁面設定" |   pageSetting: "頁面設定" | ||||||
|   nameAlreadyExists: "該頁面 URL 已存在" |   nameAlreadyExists: "該頁面 URL 已存在" | ||||||
|   invalidNameTitle: "無效的頁面 URL" |   invalidNameTitle: "無效的頁面 URL" | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
| 	"name": "misskey", | 	"name": "misskey", | ||||||
| 	"version": "2025.2.0-beta.0", | 	"version": "2025.2.0", | ||||||
| 	"codename": "nasubi", | 	"codename": "nasubi", | ||||||
| 	"repository": { | 	"repository": { | ||||||
| 		"type": "git", | 		"type": "git", | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| { | { | ||||||
| 	"$schema": "https://json.schemastore.org/swcrc", | 	"$schema": "https://swc.rs/schema.json", | ||||||
| 	"jsc": { | 	"jsc": { | ||||||
| 		"parser": { | 		"parser": { | ||||||
| 			"syntax": "typescript", | 			"syntax": "typescript", | ||||||
|   | |||||||
| @@ -118,3 +118,5 @@ export class MiPage { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export const pageNameSchema = { type: 'string', pattern: /^[^\s:\/?#\[\]@!$&'()*+,;=\\%\x00-\x20]{1,256}$/.source } as const; | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ import ms from 'ms'; | |||||||
| import { Inject, Injectable } from '@nestjs/common'; | import { Inject, Injectable } from '@nestjs/common'; | ||||||
| import type { DriveFilesRepository, PagesRepository } from '@/models/_.js'; | import type { DriveFilesRepository, PagesRepository } from '@/models/_.js'; | ||||||
| import { IdService } from '@/core/IdService.js'; | import { IdService } from '@/core/IdService.js'; | ||||||
| import { MiPage } from '@/models/Page.js'; | import { MiPage, pageNameSchema } from '@/models/Page.js'; | ||||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||||
| import { PageEntityService } from '@/core/entities/PageEntityService.js'; | import { PageEntityService } from '@/core/entities/PageEntityService.js'; | ||||||
| import { DI } from '@/di-symbols.js'; | import { DI } from '@/di-symbols.js'; | ||||||
| @@ -51,7 +51,7 @@ export const paramDef = { | |||||||
| 	type: 'object', | 	type: 'object', | ||||||
| 	properties: { | 	properties: { | ||||||
| 		title: { type: 'string' }, | 		title: { type: 'string' }, | ||||||
| 		name: { type: 'string', minLength: 1 }, | 		name: { ...pageNameSchema, minLength: 1 }, | ||||||
| 		summary: { type: 'string', nullable: true }, | 		summary: { type: 'string', nullable: true }, | ||||||
| 		content: { type: 'array', items: { | 		content: { type: 'array', items: { | ||||||
| 			type: 'object', additionalProperties: true, | 			type: 'object', additionalProperties: true, | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import type { PagesRepository, DriveFilesRepository } from '@/models/_.js'; | |||||||
| import { Endpoint } from '@/server/api/endpoint-base.js'; | import { Endpoint } from '@/server/api/endpoint-base.js'; | ||||||
| import { DI } from '@/di-symbols.js'; | import { DI } from '@/di-symbols.js'; | ||||||
| import { ApiError } from '../../error.js'; | import { ApiError } from '../../error.js'; | ||||||
|  | import { pageNameSchema } from '@/models/Page.js'; | ||||||
|  |  | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['pages'], | 	tags: ['pages'], | ||||||
| @@ -31,13 +32,11 @@ export const meta = { | |||||||
| 			code: 'NO_SUCH_PAGE', | 			code: 'NO_SUCH_PAGE', | ||||||
| 			id: '21149b9e-3616-4778-9592-c4ce89f5a864', | 			id: '21149b9e-3616-4778-9592-c4ce89f5a864', | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		accessDenied: { | 		accessDenied: { | ||||||
| 			message: 'Access denied.', | 			message: 'Access denied.', | ||||||
| 			code: 'ACCESS_DENIED', | 			code: 'ACCESS_DENIED', | ||||||
| 			id: '3c15cd52-3b4b-4274-967d-6456fc4f792b', | 			id: '3c15cd52-3b4b-4274-967d-6456fc4f792b', | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		noSuchFile: { | 		noSuchFile: { | ||||||
| 			message: 'No such file.', | 			message: 'No such file.', | ||||||
| 			code: 'NO_SUCH_FILE', | 			code: 'NO_SUCH_FILE', | ||||||
| @@ -56,7 +55,7 @@ export const paramDef = { | |||||||
| 	properties: { | 	properties: { | ||||||
| 		pageId: { type: 'string', format: 'misskey:id' }, | 		pageId: { type: 'string', format: 'misskey:id' }, | ||||||
| 		title: { type: 'string' }, | 		title: { type: 'string' }, | ||||||
| 		name: { type: 'string', minLength: 1 }, | 		name: { ...pageNameSchema, minLength: 1 }, | ||||||
| 		summary: { type: 'string', nullable: true }, | 		summary: { type: 'string', nullable: true }, | ||||||
| 		content: { type: 'array', items: { | 		content: { type: 'array', items: { | ||||||
| 			type: 'object', additionalProperties: true, | 			type: 'object', additionalProperties: true, | ||||||
|   | |||||||
| @@ -17,6 +17,7 @@ services: | |||||||
|       - ./.config/docker.env |       - ./.config/docker.env | ||||||
|     environment: |     environment: | ||||||
|       - NODE_ENV=production |       - NODE_ENV=production | ||||||
|  |       - COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|     volumes: |     volumes: | ||||||
|       - type: bind |       - type: bind | ||||||
|         source: ../../../built |         source: ../../../built | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ services: | |||||||
|     environment: |     environment: | ||||||
|       - NODE_ENV=development |       - NODE_ENV=development | ||||||
|       - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt |       - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt | ||||||
|  |       - COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|     volumes: |     volumes: | ||||||
|       - type: bind |       - type: bind | ||||||
|         source: ../package.json |         source: ../package.json | ||||||
| @@ -85,6 +86,8 @@ services: | |||||||
|     depends_on: |     depends_on: | ||||||
|       redis.test: |       redis.test: | ||||||
|         condition: service_healthy |         condition: service_healthy | ||||||
|  |     environment: | ||||||
|  |       - COREPACK_DEFAULT_TO_LATEST=0 | ||||||
|     volumes: |     volumes: | ||||||
|       - type: bind |       - type: bind | ||||||
|         source: ../package.json |         source: ../package.json | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ export default [ | |||||||
| 			'@typescript-eslint/no-empty-interface': ['error', { | 			'@typescript-eslint/no-empty-interface': ['error', { | ||||||
| 				allowSingleExtends: true, | 				allowSingleExtends: true, | ||||||
| 			}], | 			}], | ||||||
|  | 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | ||||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | ||||||
| 			'id-denylist': ['error', 'window', 'e'], | 			'id-denylist': ['error', 'window', 'e'], | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
|  * SPDX-License-Identifier: AGPL-3.0-only |  * SPDX-License-Identifier: AGPL-3.0-only | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { VNode, h, SetupContext, provide } from 'vue'; | import { h, provide } from 'vue'; | ||||||
|  | import type { VNode, SetupContext } from 'vue'; | ||||||
| import * as mfm from 'mfm-js'; | import * as mfm from 'mfm-js'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import { host } from '@@/js/config.js'; | import { host } from '@@/js/config.js'; | ||||||
|   | |||||||
| @@ -22,7 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { useTemplateRef } from 'vue'; | import { useTemplateRef } from 'vue'; | ||||||
| import EmNote from '@/components/EmNote.vue'; | import EmNote from '@/components/EmNote.vue'; | ||||||
| import EmPagination, { Paging } from '@/components/EmPagination.vue'; | import EmPagination from '@/components/EmPagination.vue'; | ||||||
|  | import type { Paging } from '@/components/EmPagination.vue'; | ||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ | |||||||
| 		"allowSyntheticDefaultImports": true, | 		"allowSyntheticDefaultImports": true, | ||||||
| 		"isolatedModules": true, | 		"isolatedModules": true, | ||||||
| 		"useDefineForClassFields": true, | 		"useDefineForClassFields": true, | ||||||
|  | 		"verbatimModuleSyntax": true, | ||||||
| 		"baseUrl": ".", | 		"baseUrl": ".", | ||||||
| 		"paths": { | 		"paths": { | ||||||
| 			"@/*": ["./src/*"], | 			"@/*": ["./src/*"], | ||||||
|   | |||||||
| @@ -52,6 +52,7 @@ export default [ | |||||||
| 			'@typescript-eslint/no-empty-interface': ['error', { | 			'@typescript-eslint/no-empty-interface': ['error', { | ||||||
| 				allowSingleExtends: true, | 				allowSingleExtends: true, | ||||||
| 			}], | 			}], | ||||||
|  | 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | ||||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | ||||||
| 			'id-denylist': ['error', 'window', 'e'], | 			'id-denylist': ['error', 'window', 'e'], | ||||||
|   | |||||||
| @@ -79,14 +79,6 @@ | |||||||
| 		codeBoolean: '#c59eff', | 		codeBoolean: '#c59eff', | ||||||
| 		deckBg: '#000', | 		deckBg: '#000', | ||||||
| 		htmlThemeColor: '@bg', | 		htmlThemeColor: '@bg', | ||||||
| 		X3: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X4: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X5: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X6: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X7: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X11: 'rgba(0, 0, 0, 0.3)', |  | ||||||
| 		X12: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X13: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	codeHighlighter: { | 	codeHighlighter: { | ||||||
|   | |||||||
| @@ -79,14 +79,6 @@ | |||||||
| 		codeBoolean: '#62b70c', | 		codeBoolean: '#62b70c', | ||||||
| 		deckBg: ':darken<3<@bg', | 		deckBg: ':darken<3<@bg', | ||||||
| 		htmlThemeColor: '@bg', | 		htmlThemeColor: '@bg', | ||||||
| 		X3: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X4: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X5: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X6: 'rgba(0, 0, 0, 0.25)', |  | ||||||
| 		X7: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X11: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X12: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X13: 'rgba(0, 0, 0, 0.15)', |  | ||||||
| 	}, | 	}, | ||||||
|  |  | ||||||
| 	codeHighlighter: { | 	codeHighlighter: { | ||||||
|   | |||||||
| @@ -54,13 +54,5 @@ | |||||||
| 		wallpaperOverlay: 'rgba(0, 0, 0, 0.5)', | 		wallpaperOverlay: 'rgba(0, 0, 0, 0.5)', | ||||||
| 		panelHeaderDivider: 'rgba(0, 0, 0, 0)', | 		panelHeaderDivider: 'rgba(0, 0, 0, 0)', | ||||||
| 		scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)', | 		scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)', | ||||||
| 		X3: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X4: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X5: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X6: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X7: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X11: 'rgba(0, 0, 0, 0.3)', |  | ||||||
| 		X12: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X13: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,17 +3,9 @@ | |||||||
| 	base: 'dark', | 	base: 'dark', | ||||||
| 	name: 'Mi U0 Dark', | 	name: 'Mi U0 Dark', | ||||||
| 	props: { | 	props: { | ||||||
| 		X3: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X4: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X5: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X6: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X7: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		bg: '#172426', | 		bg: '#172426', | ||||||
| 		fg: '#dadada', | 		fg: '#dadada', | ||||||
| 		X10: ':alpha<0.4<@accent', | 		X10: ':alpha<0.4<@accent', | ||||||
| 		X11: 'rgba(0, 0, 0, 0.3)', |  | ||||||
| 		X12: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X13: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X14: ':alpha<0.5<@navBg', | 		X14: ':alpha<0.5<@navBg', | ||||||
| 		X15: ':alpha<0<@panel', | 		X15: ':alpha<0<@panel', | ||||||
| 		X16: ':alpha<0.7<@panel', | 		X16: ':alpha<0.7<@panel', | ||||||
|   | |||||||
| @@ -3,17 +3,9 @@ | |||||||
| 	base: 'light', | 	base: 'light', | ||||||
| 	name: 'Mi U0 Light', | 	name: 'Mi U0 Light', | ||||||
| 	props: { | 	props: { | ||||||
| 		X3: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X4: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X5: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		X6: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X7: 'rgba(255, 255, 255, 0.05)', |  | ||||||
| 		bg: '#e7e7eb', | 		bg: '#e7e7eb', | ||||||
| 		fg: '#5f5f5f', | 		fg: '#5f5f5f', | ||||||
| 		X10: ':alpha<0.4<@accent', | 		X10: ':alpha<0.4<@accent', | ||||||
| 		X11: 'rgba(0, 0, 0, 0.3)', |  | ||||||
| 		X12: 'rgba(255, 255, 255, 0.1)', |  | ||||||
| 		X13: 'rgba(255, 255, 255, 0.15)', |  | ||||||
| 		X14: ':alpha<0.5<@navBg', | 		X14: ':alpha<0.5<@navBg', | ||||||
| 		X15: ':alpha<0<@panel', | 		X15: ':alpha<0<@panel', | ||||||
| 		X16: ':alpha<0.7<@panel', | 		X16: ':alpha<0.7<@panel', | ||||||
|   | |||||||
| @@ -57,13 +57,5 @@ | |||||||
| 		fgTransparentWeak: ':alpha<0.75<@fg', | 		fgTransparentWeak: ':alpha<0.75<@fg', | ||||||
| 		panelHeaderDivider: '@divider', | 		panelHeaderDivider: '@divider', | ||||||
| 		scrollbarHandleHover: 'rgba(0, 0, 0, 0.4)', | 		scrollbarHandleHover: 'rgba(0, 0, 0, 0.4)', | ||||||
| 		X3: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X4: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X5: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X6: 'rgba(0, 0, 0, 0.25)', |  | ||||||
| 		X7: 'rgba(0, 0, 0, 0.05)', |  | ||||||
| 		X11: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X12: 'rgba(0, 0, 0, 0.1)', |  | ||||||
| 		X13: 'rgba(0, 0, 0, 0.15)', |  | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ | |||||||
| 		"experimentalDecorators": true, | 		"experimentalDecorators": true, | ||||||
| 		"noImplicitReturns": true, | 		"noImplicitReturns": true, | ||||||
| 		"esModuleInterop": true, | 		"esModuleInterop": true, | ||||||
|  | 		"verbatimModuleSyntax": true, | ||||||
| 		"baseUrl": ".", | 		"baseUrl": ".", | ||||||
| 		"paths": { | 		"paths": { | ||||||
| 			"@/*": ["./*"], | 			"@/*": ["./*"], | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
|  * SPDX-License-Identifier: AGPL-3.0-only |  * SPDX-License-Identifier: AGPL-3.0-only | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { DefaultBodyType, HttpResponse, HttpResponseResolver, JsonBodyType, PathParams, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
|  | import type { DefaultBodyType, HttpResponseResolver, JsonBodyType, PathParams } from 'msw'; | ||||||
| import seedrandom from 'seedrandom'; | import seedrandom from 'seedrandom'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ export default [ | |||||||
| 			'@typescript-eslint/no-empty-interface': ['error', { | 			'@typescript-eslint/no-empty-interface': ['error', { | ||||||
| 				allowSingleExtends: true, | 				allowSingleExtends: true, | ||||||
| 			}], | 			}], | ||||||
|  | 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため | ||||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため | ||||||
| 			'id-denylist': ['error', 'window', 'e'], | 			'id-denylist': ['error', 'window', 'e'], | ||||||
|   | |||||||
| @@ -4,8 +4,8 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { generate } from 'astring'; | import { generate } from 'astring'; | ||||||
| import * as estree from 'estree'; |  | ||||||
| import { walk } from '../node_modules/estree-walker/src/index.js'; | import { walk } from '../node_modules/estree-walker/src/index.js'; | ||||||
|  | import type * as estree from 'estree'; | ||||||
| import type * as estreeWalker from 'estree-walker'; | import type * as estreeWalker from 'estree-walker'; | ||||||
| import type { Plugin } from 'vite'; | import type { Plugin } from 'vite'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,7 +3,8 @@ | |||||||
|  * SPDX-License-Identifier: AGPL-3.0-only |  * SPDX-License-Identifier: AGPL-3.0-only | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { computed, watch, version as vueVersion, App } from 'vue'; | import { computed, watch, version as vueVersion } from 'vue'; | ||||||
|  | import type { App } from 'vue'; | ||||||
| import { compareVersions } from 'compare-versions'; | import { compareVersions } from 'compare-versions'; | ||||||
| import { version, lang, updateLocale, locale } from '@@/js/config.js'; | import { version, lang, updateLocale, locale } from '@@/js/config.js'; | ||||||
| import widgets from '@/widgets/index.js'; | import widgets from '@/widgets/index.js'; | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| import { createApp, defineAsyncComponent, markRaw } from 'vue'; | import { createApp, defineAsyncComponent, markRaw } from 'vue'; | ||||||
| import { ui } from '@@/js/config.js'; | import { ui } from '@@/js/config.js'; | ||||||
| import { common } from './common.js'; | import { common } from './common.js'; | ||||||
| import type * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import type { Component } from 'vue'; | import type { Component } from 'vue'; | ||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import { alert, confirm, popup, post, toast } from '@/os.js'; | import { alert, confirm, popup, post, toast } from '@/os.js'; | ||||||
| @@ -22,7 +22,8 @@ import { initializeSw } from '@/scripts/initialize-sw.js'; | |||||||
| import { deckStore } from '@/ui/deck/deck-store.js'; | import { deckStore } from '@/ui/deck/deck-store.js'; | ||||||
| import { emojiPicker } from '@/scripts/emoji-picker.js'; | import { emojiPicker } from '@/scripts/emoji-picker.js'; | ||||||
| import { mainRouter } from '@/router/main.js'; | import { mainRouter } from '@/router/main.js'; | ||||||
| import { type Keymap, makeHotkey } from '@/scripts/hotkey.js'; | import { makeHotkey } from '@/scripts/hotkey.js'; | ||||||
|  | import type { Keymap } from '@/scripts/hotkey.js'; | ||||||
| import { addCustomEmoji, removeCustomEmojis, updateCustomEmojis } from '@/custom-emojis.js'; | import { addCustomEmoji, removeCustomEmojis, updateCustomEmojis } from '@/custom-emojis.js'; | ||||||
|  |  | ||||||
| export async function mainBoot() { | export async function mainBoot() { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { userDetailed } from '../../.storybook/fakes.js'; | import { userDetailed } from '../../.storybook/fakes.js'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
| import { userDetailed } from '../../.storybook/fakes.js'; | import { userDetailed } from '../../.storybook/fakes.js'; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { userDetailed } from '../../.storybook/fakes.js'; | import { userDetailed } from '../../.storybook/fakes.js'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import isChromatic from 'chromatic/isChromatic'; | import isChromatic from 'chromatic/isChromatic'; | ||||||
| import MkAnalogClock from './MkAnalogClock.vue'; | import MkAnalogClock from './MkAnalogClock.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
| import MkAnnouncementDialog from './MkAnnouncementDialog.vue'; | import MkAnnouncementDialog from './MkAnnouncementDialog.vue'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
| import MkAntennaEditor from './MkAntennaEditor.vue'; | import MkAntennaEditor from './MkAntennaEditor.vue'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
| import MkAntennaEditorDialog from './MkAntennaEditorDialog.vue'; | import MkAntennaEditorDialog from './MkAntennaEditorDialog.vue'; | ||||||
|   | |||||||
| @@ -63,14 +63,15 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { Ref, ref, computed } from 'vue'; | import { ref, computed } from 'vue'; | ||||||
|  | import type { Ref } from 'vue'; | ||||||
| import * as os from '@/os.js'; | import * as os from '@/os.js'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/MkInput.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkTextarea from '@/components/MkTextarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSelect from '@/components/MkSelect.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import { AsUiComponent, AsUiRoot, AsUiPostFormButton } from '@/scripts/aiscript/ui.js'; | import type { AsUiComponent, AsUiRoot, AsUiPostFormButton } from '@/scripts/aiscript/ui.js'; | ||||||
| import MkFolder from '@/components/MkFolder.vue'; | import MkFolder from '@/components/MkFolder.vue'; | ||||||
| import MkPostForm from '@/components/MkPostForm.vue'; | import MkPostForm from '@/components/MkPostForm.vue'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { expect, userEvent, waitFor, within } from '@storybook/test'; | import { expect, userEvent, waitFor, within } from '@storybook/test'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { userDetailed } from '../../.storybook/fakes.js'; | import { userDetailed } from '../../.storybook/fakes.js'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
|   | |||||||
| @@ -47,8 +47,9 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
| import { markRaw, ref, shallowRef, computed, onUpdated, onMounted, onBeforeUnmount, nextTick, watch } from 'vue'; | import { markRaw, ref, shallowRef, computed, onUpdated, onMounted, onBeforeUnmount, nextTick, watch } from 'vue'; | ||||||
| import sanitizeHtml from 'sanitize-html'; | import sanitizeHtml from 'sanitize-html'; | ||||||
| import { emojilist, getEmojiName } from '@@/js/emojilist.js'; | import { emojilist, getEmojiName } from '@@/js/emojilist.js'; | ||||||
| import contains from '@/scripts/contains.js'; |  | ||||||
| import { char2twemojiFilePath, char2fluentEmojiFilePath } from '@@/js/emoji-base.js'; | import { char2twemojiFilePath, char2fluentEmojiFilePath } from '@@/js/emoji-base.js'; | ||||||
|  | import { MFM_TAGS, MFM_PARAMS } from '@@/js/const.js'; | ||||||
|  | import contains from '@/scripts/contains.js'; | ||||||
| import { acct } from '@/filters/user.js'; | import { acct } from '@/filters/user.js'; | ||||||
| import * as os from '@/os.js'; | import * as os from '@/os.js'; | ||||||
| import { misskeyApi } from '@/scripts/misskey-api.js'; | import { misskeyApi } from '@/scripts/misskey-api.js'; | ||||||
| @@ -56,8 +57,8 @@ import { defaultStore } from '@/store.js'; | |||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import { miLocalStorage } from '@/local-storage.js'; | import { miLocalStorage } from '@/local-storage.js'; | ||||||
| import { customEmojis } from '@/custom-emojis.js'; | import { customEmojis } from '@/custom-emojis.js'; | ||||||
| import { MFM_TAGS, MFM_PARAMS } from '@@/js/const.js'; | import { searchEmoji } from '@/scripts/search-emoji.js'; | ||||||
| import { searchEmoji, EmojiDef } from '@/scripts/search-emoji.js'; | import type { EmojiDef } from '@/scripts/search-emoji.js'; | ||||||
|  |  | ||||||
| const lib = emojilist.filter(x => x.category !== 'flags'); | const lib = emojilist.filter(x => x.category !== 'flags'); | ||||||
|  |  | ||||||
| @@ -407,7 +408,7 @@ onBeforeUnmount(() => { | |||||||
| 	text-overflow: ellipsis; | 	text-overflow: ellipsis; | ||||||
|  |  | ||||||
| 	&:hover { | 	&:hover { | ||||||
| 		background: var(--MI_THEME-X3); | 		background: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	&[data-selected='true'] { | 	&[data-selected='true'] { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { userDetailed } from '../../.storybook/fakes.js'; | import { userDetailed } from '../../.storybook/fakes.js'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import MkButton from './MkButton.vue'; | import MkButton from './MkButton.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
| 	render(args) { | 	render(args) { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { expect, userEvent, within } from '@storybook/test'; | import { expect, userEvent, within } from '@storybook/test'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { channel } from '../../.storybook/fakes.js'; | import { channel } from '../../.storybook/fakes.js'; | ||||||
|   | |||||||
| @@ -20,7 +20,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
|  |  | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import MkChannelPreview from '@/components/MkChannelPreview.vue'; | import MkChannelPreview from '@/components/MkChannelPreview.vue'; | ||||||
| import MkPagination, { Paging } from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
|  | import type { Paging } from '@/components/MkPagination.vue'; | ||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import { infoImageUrl } from '@/instance.js'; | import { infoImageUrl } from '@/instance.js'; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { channel } from '../../.storybook/fakes.js'; | import { channel } from '../../.storybook/fakes.js'; | ||||||
| import MkChannelPreview from './MkChannelPreview.vue'; | import MkChannelPreview from './MkChannelPreview.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { http } from 'msw'; | import { http } from 'msw'; | ||||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | import { commonHandlers } from '../../.storybook/mocks.js'; | ||||||
| import { getChartResolver } from '../../.storybook/charts.js'; | import { getChartResolver } from '../../.storybook/charts.js'; | ||||||
|   | |||||||
| @@ -14,7 +14,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
|  |  | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { shallowRef } from 'vue'; | import { shallowRef } from 'vue'; | ||||||
| import { Chart, LegendItem } from 'chart.js'; | import { Chart } from 'chart.js'; | ||||||
|  | import type { LegendItem } from 'chart.js'; | ||||||
|  |  | ||||||
| const chart = shallowRef<Chart>(); | const chart = shallowRef<Chart>(); | ||||||
| const type = shallowRef<string>(); | const type = shallowRef<string>(); | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { expect, userEvent, within } from '@storybook/test'; | import { expect, userEvent, within } from '@storybook/test'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { clip } from '../../.storybook/fakes.js'; | import { clip } from '../../.storybook/fakes.js'; | ||||||
| import MkClipPreview from './MkClipPreview.vue'; | import MkClipPreview from './MkClipPreview.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import MkCode from './MkCode.vue'; | import MkCode from './MkCode.vue'; | ||||||
| const code = `for (let i, 100) { | const code = `for (let i, 100) { | ||||||
| 	<: if (i % 15 == 0) "FizzBuzz" | 	<: if (i % 15 == 0) "FizzBuzz" | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import MkCodeEditor from './MkCodeEditor.vue'; | import MkCodeEditor from './MkCodeEditor.vue'; | ||||||
| const code = `for (let i, 100) { | const code = `for (let i, 100) { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import MkCodeInline from './MkCodeInline.vue'; | import MkCodeInline from './MkCodeInline.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
| 	render(args) { | 	render(args) { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import MkColorInput from './MkColorInput.vue'; | import MkColorInput from './MkColorInput.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { userEvent, within } from '@storybook/test'; | import { userEvent, within } from '@storybook/test'; | ||||||
| import MkContextMenu from './MkContextMenu.vue'; | import MkContextMenu from './MkContextMenu.vue'; | ||||||
| import * as os from '@/os.js'; | import * as os from '@/os.js'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { HttpResponse, http } from 'msw'; | import { HttpResponse, http } from 'msw'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { file } from '../../.storybook/fakes.js'; | import { file } from '../../.storybook/fakes.js'; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { emojiDetailed } from '../../.storybook/fakes.js'; | import { emojiDetailed } from '../../.storybook/fakes.js'; | ||||||
| import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue'; | import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ function cancel() { | |||||||
| .emojiImgWrapper { | .emojiImgWrapper { | ||||||
|   max-width: 100%; |   max-width: 100%; | ||||||
|   height: 40cqh; |   height: 40cqh; | ||||||
|   background-image: repeating-linear-gradient(45deg, transparent, transparent 8px, var(--MI_THEME-X5) 8px, var(--MI_THEME-X5) 14px); |   background-image: repeating-linear-gradient(45deg, transparent, transparent 8px, light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)) 8px, light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)) 14px); | ||||||
|   border-radius: var(--MI-radius); |   border-radius: var(--MI-radius); | ||||||
|   margin: auto; |   margin: auto; | ||||||
|   overflow-y: hidden; |   overflow-y: hidden; | ||||||
| @@ -101,7 +101,7 @@ function cancel() { | |||||||
|   display: inline-block; |   display: inline-block; | ||||||
|   word-break: break-all; |   word-break: break-all; | ||||||
|   padding: 3px 10px; |   padding: 3px 10px; | ||||||
|   background-color: var(--MI_THEME-X5); |   background-color: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05)); | ||||||
|   border: solid 1px var(--MI_THEME-divider); |   border: solid 1px var(--MI_THEME-divider); | ||||||
|   border-radius: var(--MI-radius); |   border-radius: var(--MI-radius); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| /* eslint-disable import/no-default-export */ | /* eslint-disable import/no-default-export */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { expect, userEvent, within } from '@storybook/test'; | import { expect, userEvent, within } from '@storybook/test'; | ||||||
| import { file } from '../../.storybook/fakes.js'; | import { file } from '../../.storybook/fakes.js'; | ||||||
|   | |||||||
| @@ -4,14 +4,15 @@ SPDX-License-Identifier: AGPL-3.0-only | |||||||
| --> | --> | ||||||
|  |  | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent, h, PropType, TransitionGroup, useCssModule } from 'vue'; | import { defineComponent, h, TransitionGroup, useCssModule } from 'vue'; | ||||||
|  | import type { PropType } from 'vue'; | ||||||
| import MkAd from '@/components/global/MkAd.vue'; | import MkAd from '@/components/global/MkAd.vue'; | ||||||
| import { isDebuggerEnabled, stackTraceInstances } from '@/debug.js'; | import { isDebuggerEnabled, stackTraceInstances } from '@/debug.js'; | ||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import * as os from '@/os.js'; | import * as os from '@/os.js'; | ||||||
| import { instance } from '@/instance.js'; | import { instance } from '@/instance.js'; | ||||||
| import { defaultStore } from '@/store.js'; | import { defaultStore } from '@/store.js'; | ||||||
| import { MisskeyEntity } from '@/types/date-separated-list.js'; | import type { MisskeyEntity } from '@/types/date-separated-list.js'; | ||||||
|  |  | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	props: { | 	props: { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { expect, userEvent, waitFor, within } from '@storybook/test'; | import { expect, userEvent, waitFor, within } from '@storybook/test'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { i18n } from '@/i18n.js'; | import { i18n } from '@/i18n.js'; | ||||||
| import MkDialog from './MkDialog.vue'; | import MkDialog from './MkDialog.vue'; | ||||||
| const Base = { | const Base = { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import isChromatic from 'chromatic/isChromatic'; | import isChromatic from 'chromatic/isChromatic'; | ||||||
| import MkDigitalClock from './MkDigitalClock.vue'; | import MkDigitalClock from './MkDigitalClock.vue'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { onBeforeUnmount } from 'vue'; | import { onBeforeUnmount } from 'vue'; | ||||||
| import MkDonation from './MkDonation.vue'; | import MkDonation from './MkDonation.vue'; | ||||||
| import { instance } from '@/instance.js'; | import { instance } from '@/instance.js'; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import MkDrive_file from './MkDrive.file.vue'; | import MkDrive_file from './MkDrive.file.vue'; | ||||||
| import { file } from '../../.storybook/fakes.js'; | import { file } from '../../.storybook/fakes.js'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { http, HttpResponse } from 'msw'; | import { http, HttpResponse } from 'msw'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import MkDrive_folder from './MkDrive.folder.vue'; | import MkDrive_folder from './MkDrive.folder.vue'; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { action } from '@storybook/addon-actions'; | import { action } from '@storybook/addon-actions'; | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import { http, HttpResponse } from 'msw'; | import { http, HttpResponse } from 'msw'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import MkDrive from './MkDrive.vue'; | import MkDrive from './MkDrive.vue'; | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
|  * SPDX-License-Identifier: AGPL-3.0-only |  * SPDX-License-Identifier: AGPL-3.0-only | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| import { StoryObj } from '@storybook/vue3'; | import type { StoryObj } from '@storybook/vue3'; | ||||||
| import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue'; | import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue'; | ||||||
| import { file } from '../../.storybook/fakes.js'; | import { file } from '../../.storybook/fakes.js'; | ||||||
| export const Default = { | export const Default = { | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user