Merge d3cb24443e into f8f17a44d4
				
					
				
			This commit is contained in:
		
						commit
						5fa14ff09e
					
				|  | @ -47,6 +47,7 @@ export default [ | |||
| 			'@typescript-eslint/no-empty-interface': ['error', { | ||||
| 				allowSingleExtends: true, | ||||
| 			}], | ||||
| 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
 | ||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
 | ||||
| 			'id-denylist': ['error', 'window', 'e'], | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ | |||
|  * 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 Misskey from 'misskey-js'; | ||||
| import { host } from '@@/js/config.js'; | ||||
|  |  | |||
|  | @ -22,7 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| <script lang="ts" setup> | ||||
| import { useTemplateRef } from '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 * as Misskey from 'misskey-js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
| 		"allowSyntheticDefaultImports": true, | ||||
| 		"isolatedModules": true, | ||||
| 		"useDefineForClassFields": true, | ||||
| 		"verbatimModuleSyntax": true, | ||||
| 		"baseUrl": ".", | ||||
| 		"paths": { | ||||
| 			"@/*": ["./src/*"], | ||||
|  |  | |||
|  | @ -52,6 +52,7 @@ export default [ | |||
| 			'@typescript-eslint/no-empty-interface': ['error', { | ||||
| 				allowSingleExtends: true, | ||||
| 			}], | ||||
| 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
 | ||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
 | ||||
| 			'id-denylist': ['error', 'window', 'e'], | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| 		"experimentalDecorators": true, | ||||
| 		"noImplicitReturns": true, | ||||
| 		"esModuleInterop": true, | ||||
| 		"verbatimModuleSyntax": true, | ||||
| 		"baseUrl": ".", | ||||
| 		"paths": { | ||||
| 			"@/*": ["./*"], | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ | |||
|  * 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 { action } from '@storybook/addon-actions'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -47,6 +47,7 @@ export default [ | |||
| 			'@typescript-eslint/no-empty-interface': ['error', { | ||||
| 				allowSingleExtends: true, | ||||
| 			}], | ||||
| 			'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], | ||||
| 			// window の禁止理由: グローバルスコープと衝突し、予期せぬ結果を招くため
 | ||||
| 			// e の禁止理由: error や event など、複数のキーワードの頭文字であり分かりにくいため
 | ||||
| 			'id-denylist': ['error', 'window', 'e'], | ||||
|  |  | |||
|  | @ -4,8 +4,8 @@ | |||
|  */ | ||||
| 
 | ||||
| import { generate } from 'astring'; | ||||
| import * as estree from 'estree'; | ||||
| 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 { Plugin } from 'vite'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ | |||
|  * 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 { version, lang, updateLocale, locale } from '@@/js/config.js'; | ||||
| import widgets from '@/widgets/index.js'; | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| import { createApp, defineAsyncComponent, markRaw } from 'vue'; | ||||
| import { ui } from '@@/js/config.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 { i18n } from '@/i18n.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 { emojiPicker } from '@/scripts/emoji-picker.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'; | ||||
| 
 | ||||
| export async function mainBoot() { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { userDetailed } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import { userDetailed } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { userDetailed } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 MkAnalogClock from './MkAnalogClock.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import MkAnnouncementDialog from './MkAnnouncementDialog.vue'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import MkAntennaEditor from './MkAntennaEditor.vue'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import MkAntennaEditorDialog from './MkAntennaEditorDialog.vue'; | ||||
|  |  | |||
|  | @ -63,14 +63,15 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <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 MkButton from '@/components/MkButton.vue'; | ||||
| import MkInput from '@/components/MkInput.vue'; | ||||
| import MkSwitch from '@/components/MkSwitch.vue'; | ||||
| import MkTextarea from '@/components/MkTextarea.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 MkPostForm from '@/components/MkPostForm.vue'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| 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 { userDetailed } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -57,7 +57,8 @@ import { i18n } from '@/i18n.js'; | |||
| import { miLocalStorage } from '@/local-storage.js'; | ||||
| import { customEmojis } from '@/custom-emojis.js'; | ||||
| import { MFM_TAGS, MFM_PARAMS } from '@@/js/const.js'; | ||||
| import { searchEmoji, EmojiDef } from '@/scripts/search-emoji.js'; | ||||
| import { searchEmoji } from '@/scripts/search-emoji.js'; | ||||
| import type { EmojiDef } from '@/scripts/search-emoji.js'; | ||||
| 
 | ||||
| const lib = emojilist.filter(x => x.category !== 'flags'); | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { userDetailed } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkButton from './MkButton.vue'; | ||||
| export const Default = { | ||||
| 	render(args) { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { expect, userEvent, within } from '@storybook/test'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { channel } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -20,7 +20,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 
 | ||||
| <script lang="ts" setup> | ||||
| 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 { infoImageUrl } from '@/instance.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { channel } from '../../.storybook/fakes.js'; | ||||
| import MkChannelPreview from './MkChannelPreview.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { http } from 'msw'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import { getChartResolver } from '../../.storybook/charts.js'; | ||||
|  |  | |||
|  | @ -14,7 +14,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 
 | ||||
| <script lang="ts" setup> | ||||
| 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 type = shallowRef<string>(); | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { expect, userEvent, within } from '@storybook/test'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { clip } from '../../.storybook/fakes.js'; | ||||
| import MkClipPreview from './MkClipPreview.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkCode from './MkCode.vue'; | ||||
| const code = `for (let i, 100) {
 | ||||
| 	<: if (i % 15 == 0) "FizzBuzz" | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import MkCodeEditor from './MkCodeEditor.vue'; | ||||
| const code = `for (let i, 100) {
 | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkCodeInline from './MkCodeInline.vue'; | ||||
| export const Default = { | ||||
| 	render(args) { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import MkColorInput from './MkColorInput.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { userEvent, within } from '@storybook/test'; | ||||
| import MkContextMenu from './MkContextMenu.vue'; | ||||
| import * as os from '@/os.js'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { HttpResponse, http } from 'msw'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { file } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { emojiDetailed } from '../../.storybook/fakes.js'; | ||||
| import MkCustomEmojiDetailedDialog from './MkCustomEmojiDetailedDialog.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { expect, userEvent, within } from '@storybook/test'; | ||||
| import { file } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -4,14 +4,15 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| --> | ||||
| 
 | ||||
| <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 { isDebuggerEnabled, stackTraceInstances } from '@/debug.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { instance } from '@/instance.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({ | ||||
| 	props: { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| 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 MkDialog from './MkDialog.vue'; | ||||
| const Base = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 MkDigitalClock from './MkDigitalClock.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { onBeforeUnmount } from 'vue'; | ||||
| import MkDonation from './MkDonation.vue'; | ||||
| import { instance } from '@/instance.js'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| 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 { file } from '../../.storybook/fakes.js'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { http, HttpResponse } from 'msw'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import MkDrive_folder from './MkDrive.folder.vue'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { http, HttpResponse } from 'msw'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import MkDrive from './MkDrive.vue'; | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
|  * SPDX-License-Identifier: AGPL-3.0-only | ||||
|  */ | ||||
| 
 | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkDriveFileThumbnail from './MkDriveFileThumbnail.vue'; | ||||
| import { file } from '../../.storybook/fakes.js'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -61,8 +61,10 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { ref, computed, Ref } from 'vue'; | ||||
| import { CustomEmojiFolderTree, getEmojiName } from '@@/js/emojilist.js'; | ||||
| import { ref, computed } from 'vue'; | ||||
| import type { Ref } from 'vue'; | ||||
| import { getEmojiName } from '@@/js/emojilist.js'; | ||||
| import type { CustomEmojiFolderTree } from '@@/js/emojilist.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { customEmojis } from '@/custom-emojis.js'; | ||||
| import MkEmojiPickerSection from '@/components/MkEmojiPicker.section.vue'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| 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 MkEmojiPicker from './MkEmojiPicker.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -120,12 +120,14 @@ import * as Misskey from 'misskey-js'; | |||
| import { | ||||
| 	emojilist, | ||||
| 	emojiCharByCategory, | ||||
| 	UnicodeEmojiDef, | ||||
| 	unicodeEmojiCategories as categories, | ||||
| 	getEmojiName, | ||||
| 	CustomEmojiFolderTree, | ||||
| 	getUnicodeEmoji, | ||||
| } from '@@/js/emojilist.js'; | ||||
| import type { | ||||
| 	UnicodeEmojiDef, | ||||
| 	CustomEmojiFolderTree, | ||||
| } from '@@/js/emojilist.js'; | ||||
| import XSection from '@/components/MkEmojiPicker.section.vue'; | ||||
| import MkRippleEffect from '@/components/MkRippleEffect.vue'; | ||||
| import * as os from '@/os.js'; | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
|  * SPDX-License-Identifier: AGPL-3.0-only | ||||
|  */ | ||||
| 
 | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkExtensionInstaller from './MkExtensionInstaller.vue'; | ||||
| import lightTheme from '@@/themes/_light.json5'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
|  * SPDX-License-Identifier: AGPL-3.0-only | ||||
|  */ | ||||
| 
 | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkFlashPreview from './MkFlashPreview.vue'; | ||||
| import { flash } from './../../.storybook/fakes.js'; | ||||
| export const Public = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { expect, userEvent, waitFor, within } from '@storybook/test'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { galleryPost } from '../../.storybook/fakes.js'; | ||||
| import MkGalleryPostPreview from './MkGalleryPostPreview.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -44,12 +44,14 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { onMounted, onUnmounted, nextTick, ref, shallowRef, watch, computed, toRefs, InputHTMLAttributes } from 'vue'; | ||||
| import { onMounted, onUnmounted, nextTick, ref, shallowRef, watch, computed, toRefs } from 'vue'; | ||||
| import type { InputHTMLAttributes } from 'vue'; | ||||
| import { debounce } from 'throttle-debounce'; | ||||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import { useInterval } from '@@/js/use-interval.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { Autocomplete, SuggestionType } from '@/scripts/autocomplete.js'; | ||||
| import { Autocomplete } from '@/scripts/autocomplete.js'; | ||||
| import type { SuggestionType } from '@/scripts/autocomplete.js'; | ||||
| 
 | ||||
| const props = defineProps<{ | ||||
| 	modelValue: string | number | null; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { federationInstance } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -94,7 +94,8 @@ import * as os from '@/os.js'; | |||
| import { misskeyApiGet } from '@/scripts/misskey-api.js'; | ||||
| import { instance } from '@/instance.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import MkHeatmap, { type HeatmapSource } from '@/components/MkHeatmap.vue'; | ||||
| import MkHeatmap from '@/components/MkHeatmap.vue'; | ||||
| import type { HeatmapSource } from '@/components/MkHeatmap.vue'; | ||||
| import MkFoldableSection from '@/components/MkFoldableSection.vue'; | ||||
| import MkRetentionHeatmap from '@/components/MkRetentionHeatmap.vue'; | ||||
| import MkRetentionLineChart from '@/components/MkRetentionLineChart.vue'; | ||||
|  |  | |||
|  | @ -11,7 +11,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { computed, type CSSProperties } from 'vue'; | ||||
| import { computed } from 'vue'; | ||||
| import type { CSSProperties } from 'vue'; | ||||
| import { instanceName as localInstanceName } from '@@/js/config.js'; | ||||
| import { instance as localInstance } from '@/instance.js'; | ||||
| import { getProxiedImageUrlNullable } from '@/scripts/media-proxy.js'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { userDetailed, inviteCode } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ import { url as local } from '@@/js/config.js'; | |||
| import { useTooltip } from '@/scripts/use-tooltip.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { isEnabledUrlPreview } from '@/instance.js'; | ||||
| import { MkABehavior } from '@/components/global/MkA.vue'; | ||||
| import type { MkABehavior } from '@/components/global/MkA.vue'; | ||||
| 
 | ||||
| const props = withDefaults(defineProps<{ | ||||
| 	url: string; | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ import type { MenuItem } from '@/types/menu.js'; | |||
| import { defaultStore } from '@/store.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| import bytes from '@/filters/bytes.js'; | ||||
| import { hms } from '@/filters/hms.js'; | ||||
| import MkMediaRange from '@/components/MkMediaRange.vue'; | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { computed, ModelRef } from 'vue'; | ||||
| import { computed } from 'vue'; | ||||
| 
 | ||||
| withDefaults(defineProps<{ | ||||
| 	buffer?: number; | ||||
|  | @ -28,8 +28,7 @@ const emit = defineEmits<{ | |||
| 	(ev: 'dragEnded', value: number): void; | ||||
| }>(); | ||||
| 
 | ||||
| // eslint-disable-next-line no-undef | ||||
| const model = defineModel({ required: true }) as ModelRef<string | number>; | ||||
| const model = defineModel<string | number>({ required: true }); | ||||
| const modelValue = computed({ | ||||
| 	get: () => typeof model.value === 'number' ? model.value : parseFloat(model.value), | ||||
| 	set: v => { model.value = v; }, | ||||
|  |  | |||
|  | @ -112,7 +112,7 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| import { ref, shallowRef, computed, watch, onDeactivated, onActivated, onMounted } from 'vue'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import type { MenuItem } from '@/types/menu.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| import bytes from '@/filters/bytes.js'; | ||||
| import { hms } from '@/filters/hms.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ import { host as localHost } from '@@/js/config.js'; | |||
| import { $i } from '@/account.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
| import { getStaticImageUrl } from '@/scripts/media-proxy.js'; | ||||
| import { MkABehavior } from '@/components/global/MkA.vue'; | ||||
| import type { MkABehavior } from '@/components/global/MkA.vue'; | ||||
| 
 | ||||
| const props = defineProps<{ | ||||
| 	username: string; | ||||
|  |  | |||
|  | @ -178,11 +178,11 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| <script lang="ts"> | ||||
| import { computed, defineAsyncComponent, inject, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, unref, watch } from 'vue'; | ||||
| import MkSwitchButton from '@/components/MkSwitch.button.vue'; | ||||
| import { MenuItem, InnerMenuItem, MenuPending, MenuAction, MenuSwitch, MenuRadio, MenuRadioOption, MenuParent } from '@/types/menu.js'; | ||||
| import type { MenuItem, InnerMenuItem, MenuPending, MenuAction, MenuSwitch, MenuRadio, MenuRadioOption, MenuParent } from '@/types/menu.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { isTouchUsing } from '@/scripts/touch.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| import { isFocusable } from '@/scripts/focus.js'; | ||||
| import { getNodeOrNull } from '@/scripts/get-dom-node-or-null.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ import * as os from '@/os.js'; | |||
| import { isTouchUsing } from '@/scripts/touch.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
| import { deviceKind } from '@/scripts/device-kind.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| import { focusTrap } from '@/scripts/focus-trap.js'; | ||||
| import { focusParent } from '@/scripts/focus.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -177,7 +177,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { computed, inject, onMounted, ref, shallowRef, Ref, watch, provide } from 'vue'; | ||||
| import { computed, inject, onMounted, ref, shallowRef, watch, provide } from 'vue'; | ||||
| import type { Ref } from 'vue'; | ||||
| import * as mfm from 'mfm-js'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import { isLink } from '@@/js/is-link.js'; | ||||
|  | @ -195,7 +196,8 @@ import MkPoll from '@/components/MkPoll.vue'; | |||
| import MkUsersTooltip from '@/components/MkUsersTooltip.vue'; | ||||
| import MkUrlPreview from '@/components/MkUrlPreview.vue'; | ||||
| import MkInstanceTicker from '@/components/MkInstanceTicker.vue'; | ||||
| import { pleaseLogin, type OpenOnRemoteOptions } from '@/scripts/please-login.js'; | ||||
| import { pleaseLogin } from '@/scripts/please-login.js'; | ||||
| import type { OpenOnRemoteOptions } from '@/scripts/please-login.js'; | ||||
| import { checkWordMute } from '@/scripts/check-word-mute.js'; | ||||
| import { notePage } from '@/filters/note.js'; | ||||
| import { userPage } from '@/filters/user.js'; | ||||
|  | @ -217,7 +219,7 @@ import { getNoteSummary } from '@/scripts/get-note-summary.js'; | |||
| import MkRippleEffect from '@/components/MkRippleEffect.vue'; | ||||
| import { showMovedDialog } from '@/scripts/show-moved-dialog.js'; | ||||
| import { isEnabledUrlPreview } from '@/instance.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| import { focusPrev, focusNext } from '@/scripts/focus.js'; | ||||
| import { getAppearNote } from '@/scripts/get-appear-note.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -225,7 +225,8 @@ import MkPoll from '@/components/MkPoll.vue'; | |||
| import MkUsersTooltip from '@/components/MkUsersTooltip.vue'; | ||||
| import MkUrlPreview from '@/components/MkUrlPreview.vue'; | ||||
| import MkInstanceTicker from '@/components/MkInstanceTicker.vue'; | ||||
| import { pleaseLogin, type OpenOnRemoteOptions } from '@/scripts/please-login.js'; | ||||
| import { pleaseLogin } from '@/scripts/please-login.js'; | ||||
| import type { OpenOnRemoteOptions } from '@/scripts/please-login.js'; | ||||
| import { checkWordMute } from '@/scripts/check-word-mute.js'; | ||||
| import { userPage } from '@/filters/user.js'; | ||||
| import { notePage } from '@/filters/note.js'; | ||||
|  | @ -246,12 +247,13 @@ import { claimAchievement } from '@/scripts/achievements.js'; | |||
| import MkRippleEffect from '@/components/MkRippleEffect.vue'; | ||||
| import { showMovedDialog } from '@/scripts/show-moved-dialog.js'; | ||||
| import MkUserCardMini from '@/components/MkUserCardMini.vue'; | ||||
| import MkPagination, { type Paging } from '@/components/MkPagination.vue'; | ||||
| import MkPagination from '@/components/MkPagination.vue'; | ||||
| import type { Paging } from '@/components/MkPagination.vue'; | ||||
| import MkReactionIcon from '@/components/MkReactionIcon.vue'; | ||||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import { isEnabledUrlPreview } from '@/instance.js'; | ||||
| import { getAppearNote } from '@/scripts/get-appear-note.js'; | ||||
| import { type Keymap } from '@/scripts/hotkey.js'; | ||||
| import type { Keymap } from '@/scripts/hotkey.js'; | ||||
| 
 | ||||
| const props = withDefaults(defineProps<{ | ||||
| 	note: Misskey.entities.Note; | ||||
|  |  | |||
|  | @ -4,37 +4,37 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| --> | ||||
| 
 | ||||
| <template> | ||||
| 	<template v-for="file in note.files"> | ||||
| 		<div | ||||
| 			v-if="(defaultStore.state.nsfw === 'force' || file.isSensitive) && defaultStore.state.nsfw !== 'ignore' && !showingFiles.has(file.id)" | ||||
| 			:class="[$style.filePreview, { [$style.square]: square }]" | ||||
| 			@click="showingFiles.add(file.id)" | ||||
| 		> | ||||
| 			<MkDriveFileThumbnail | ||||
| 				:file="file" | ||||
| 				fit="cover" | ||||
| 				:highlightWhenSensitive="defaultStore.state.highlightSensitiveMedia" | ||||
| 				:forceBlurhash="true" | ||||
| 				:large="true" | ||||
| 				:class="$style.file" | ||||
| 			/> | ||||
| 			<div :class="$style.sensitive"> | ||||
| 				<div> | ||||
| 					<div><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}</div> | ||||
| 					<div>{{ i18n.ts.clickToShow }}</div> | ||||
| 				</div> | ||||
| <template v-for="file in note.files"> | ||||
| 	<div | ||||
| 		v-if="(defaultStore.state.nsfw === 'force' || file.isSensitive) && defaultStore.state.nsfw !== 'ignore' && !showingFiles.has(file.id)" | ||||
| 		:class="[$style.filePreview, { [$style.square]: square }]" | ||||
| 		@click="showingFiles.add(file.id)" | ||||
| 	> | ||||
| 		<MkDriveFileThumbnail | ||||
| 			:file="file" | ||||
| 			fit="cover" | ||||
| 			:highlightWhenSensitive="defaultStore.state.highlightSensitiveMedia" | ||||
| 			:forceBlurhash="true" | ||||
| 			:large="true" | ||||
| 			:class="$style.file" | ||||
| 		/> | ||||
| 		<div :class="$style.sensitive"> | ||||
| 			<div> | ||||
| 				<div><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}</div> | ||||
| 				<div>{{ i18n.ts.clickToShow }}</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<MkA v-else :class="[$style.filePreview, { [$style.square]: square }]" :to="notePage(note)"> | ||||
| 			<MkDriveFileThumbnail | ||||
| 				:file="file" | ||||
| 				fit="cover" | ||||
| 				:highlightWhenSensitive="defaultStore.state.highlightSensitiveMedia" | ||||
| 				:large="true" | ||||
| 				:class="$style.file" | ||||
| 			/> | ||||
| 		</MkA> | ||||
| 	</template> | ||||
| 	</div> | ||||
| 	<MkA v-else :class="[$style.filePreview, { [$style.square]: square }]" :to="notePage(note)"> | ||||
| 		<MkDriveFileThumbnail | ||||
| 			:file="file" | ||||
| 			fit="cover" | ||||
| 			:highlightWhenSensitive="defaultStore.state.highlightSensitiveMedia" | ||||
| 			:large="true" | ||||
| 			:class="$style.file" | ||||
| 		/> | ||||
| 	</MkA> | ||||
| </template> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
|  |  | |||
|  | @ -35,7 +35,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| import { shallowRef } from 'vue'; | ||||
| import MkNote from '@/components/MkNote.vue'; | ||||
| import MkDateSeparatedList from '@/components/MkDateSeparatedList.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 { infoImageUrl } from '@/instance.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { ref, Ref, shallowRef } from 'vue'; | ||||
| import { ref, shallowRef } from 'vue'; | ||||
| import type { Ref } from 'vue'; | ||||
| import MkSwitch from './MkSwitch.vue'; | ||||
| import MkInfo from './MkInfo.vue'; | ||||
| import MkButton from './MkButton.vue'; | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ import MkDateSeparatedList from '@/components/MkDateSeparatedList.vue'; | |||
| import MkNote from '@/components/MkNote.vue'; | ||||
| import { useStream } from '@/stream.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { notificationTypes } from '@@/js/const.js'; | ||||
| import type { notificationTypes } from '@@/js/const.js'; | ||||
| import { infoImageUrl } from '@/instance.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
| import MkPullToRefresh from '@/components/MkPullToRefresh.vue'; | ||||
|  |  | |||
|  | @ -38,7 +38,8 @@ import { popout as _popout } from '@/scripts/popout.js'; | |||
| import { copyToClipboard } from '@/scripts/copy-to-clipboard.js'; | ||||
| import { useScrollPositionManager } from '@/nirax.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { PageMetadata, provideMetadataReceiver, provideReactiveMetadata } from '@/scripts/page-metadata.js'; | ||||
| import { provideMetadataReceiver, provideReactiveMetadata } from '@/scripts/page-metadata.js'; | ||||
| import type { PageMetadata } from '@/scripts/page-metadata.js'; | ||||
| import { openingWindowsCount } from '@/os.js'; | ||||
| import { claimAchievement } from '@/scripts/achievements.js'; | ||||
| import { useRouterFactory } from '@/router/supplier.js'; | ||||
|  |  | |||
|  | @ -43,14 +43,15 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { computed, ComputedRef, isRef, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onDeactivated, ref, shallowRef, watch } from 'vue'; | ||||
| import { computed, isRef, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onDeactivated, ref, shallowRef, watch } from 'vue'; | ||||
| import type { ComputedRef } from 'vue'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import { useDocumentVisibility } from '@@/js/use-document-visibility.js'; | ||||
| import { onScrollTop, isTopVisible, getBodyScrollHeight, getScrollContainer, onScrollBottom, scrollToBottom, scroll, isBottomVisible } from '@@/js/scroll.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { misskeyApi } from '@/scripts/misskey-api.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
| import { MisskeyEntity } from '@/types/date-separated-list.js'; | ||||
| import type { MisskeyEntity } from '@/types/date-separated-list.js'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| 
 | ||||
| const SECOND_FETCH_LIMIT = 30; | ||||
|  |  | |||
|  | @ -100,7 +100,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { inject, watch, nextTick, onMounted, defineAsyncComponent, provide, shallowRef, ref, computed, type ShallowRef } from 'vue'; | ||||
| import { inject, watch, nextTick, onMounted, defineAsyncComponent, provide, shallowRef, ref, computed } from 'vue'; | ||||
| import type { ShallowRef } from 'vue'; | ||||
| import * as mfm from 'mfm-js'; | ||||
| import * as Misskey from 'misskey-js'; | ||||
| import insertTextAtCursor from 'insert-text-at-cursor'; | ||||
|  | @ -110,7 +111,8 @@ import type { PostFormProps } from '@/types/post-form.js'; | |||
| import MkNoteSimple from '@/components/MkNoteSimple.vue'; | ||||
| import MkNotePreview from '@/components/MkNotePreview.vue'; | ||||
| import XPostFormAttaches from '@/components/MkPostFormAttaches.vue'; | ||||
| import MkPollEditor, { type PollEditorModelValue } from '@/components/MkPollEditor.vue'; | ||||
| import MkPollEditor from '@/components/MkPollEditor.vue'; | ||||
| import type { PollEditorModelValue } from '@/components/MkPollEditor.vue'; | ||||
| import { erase, unique } from '@/scripts/array.js'; | ||||
| import { extractMentions } from '@/scripts/extract-mentions.js'; | ||||
| import { formatTimeString } from '@/scripts/format-time-string.js'; | ||||
|  |  | |||
|  | @ -4,7 +4,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| --> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import { VNode, defineComponent, h, ref, watch } from 'vue'; | ||||
| import { defineComponent, h, ref, watch } from 'vue'; | ||||
| import type { VNode } from 'vue'; | ||||
| import MkRadio from './MkRadio.vue'; | ||||
| 
 | ||||
| export default defineComponent({ | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { http, HttpResponse } from 'msw'; | ||||
| import { role } from '../../.storybook/fakes.js'; | ||||
| import { commonHandlers } from '../../.storybook/mocks.js'; | ||||
|  |  | |||
|  | @ -40,7 +40,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { onMounted, nextTick, ref, watch, computed, toRefs, VNode, useSlots, VNodeChild } from 'vue'; | ||||
| import { onMounted, nextTick, ref, watch, computed, toRefs, useSlots } from 'vue'; | ||||
| import type { VNode, VNodeChild } from 'vue'; | ||||
| import { useInterval } from '@@/js/use-interval.js'; | ||||
| import type { MenuItem } from '@/types/menu.js'; | ||||
| import * as os from '@/os.js'; | ||||
|  |  | |||
|  | @ -77,7 +77,8 @@ import { i18n } from '@/i18n.js'; | |||
| import * as os from '@/os.js'; | ||||
| 
 | ||||
| import XInput from '@/components/MkSignin.input.vue'; | ||||
| import XPassword, { type PwResponse } from '@/components/MkSignin.password.vue'; | ||||
| import XPassword from '@/components/MkSignin.password.vue'; | ||||
| import type { PwResponse } from '@/components/MkSignin.password.vue'; | ||||
| import XTotp from '@/components/MkSignin.totp.vue'; | ||||
| import XPasskey from '@/components/MkSignin.passkey.vue'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -85,7 +85,8 @@ import * as Misskey from 'misskey-js'; | |||
| import * as config from '@@/js/config.js'; | ||||
| import MkButton from './MkButton.vue'; | ||||
| import MkInput from './MkInput.vue'; | ||||
| import MkCaptcha, { type Captcha } from '@/components/MkCaptcha.vue'; | ||||
| import MkCaptcha from '@/components/MkCaptcha.vue'; | ||||
| import type { Captcha } from '@/components/MkCaptcha.vue'; | ||||
| import * as os from '@/os.js'; | ||||
| import { misskeyApi } from '@/scripts/misskey-api.js'; | ||||
| import { login } from '@/account.js'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { expect, userEvent, waitFor, within } from '@storybook/test'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { onBeforeUnmount } from 'vue'; | ||||
| import MkSignupServerRules from './MkSignupDialog.rules.vue'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
|  |  | |||
|  | @ -27,9 +27,9 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| import { toRefs } from 'vue'; | ||||
| import MkTagItem from '@/components/MkTagItem.vue'; | ||||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import { MenuItem } from '@/types/menu.js'; | ||||
| import type { MenuItem } from '@/types/menu.js'; | ||||
| import * as os from '@/os.js'; | ||||
| import { SortOrder } from '@/components/MkSortOrderEditor.define.js'; | ||||
| import type { SortOrder } from '@/components/MkSortOrderEditor.define.js'; | ||||
| 
 | ||||
| const emit = defineEmits<{ | ||||
| 	(ev: 'update', sortOrders: SortOrder<T>[]): void; | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ export type SuperMenuDef = { | |||
| 		text: string; | ||||
| 		danger?: boolean; | ||||
| 		active?: boolean; | ||||
| 		action: (ev: MouseEvent) => void; | ||||
| 		action: (ev: MouseEvent) => void | Promise<void>; | ||||
| 	} | { | ||||
| 		type?: 'link'; | ||||
| 		to: string; | ||||
|  |  | |||
|  | @ -19,7 +19,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { toRefs, Ref } from 'vue'; | ||||
| import { toRefs } from 'vue'; | ||||
| import type { Ref } from 'vue'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| 
 | ||||
| const props = withDefaults(defineProps<{ | ||||
|  |  | |||
|  | @ -27,7 +27,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| </template> | ||||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import { toRefs, Ref } from 'vue'; | ||||
| import { toRefs } from 'vue'; | ||||
| import type { Ref } from 'vue'; | ||||
| import XButton from '@/components/MkSwitch.button.vue'; | ||||
| 
 | ||||
| const props = defineProps<{ | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ import { computed, onMounted, ref, shallowRef, toRefs } from 'vue'; | |||
| import * as Misskey from 'misskey-js'; | ||||
| import MkInput from '@/components/MkInput.vue'; | ||||
| import MkSwitch from '@/components/MkSwitch.vue'; | ||||
| import { | ||||
| import type { | ||||
| 	MkSystemWebhookEditorProps, | ||||
| 	MkSystemWebhookResult, | ||||
| 	SystemWebhookEventType, | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| /* eslint-disable import/no-default-export */ | ||||
| import { action } from '@storybook/addon-actions'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkTagItem from './MkTagItem.vue'; | ||||
| 
 | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -40,7 +40,8 @@ import { onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs, shallow | |||
| import { debounce } from 'throttle-debounce'; | ||||
| import MkButton from '@/components/MkButton.vue'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| import { Autocomplete, SuggestionType } from '@/scripts/autocomplete.js'; | ||||
| import { Autocomplete } from '@/scripts/autocomplete.js'; | ||||
| import type { SuggestionType } from '@/scripts/autocomplete.js'; | ||||
| 
 | ||||
| const props = defineProps<{ | ||||
| 	modelValue: string | null; | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ import * as sound from '@/scripts/sound.js'; | |||
| import { $i } from '@/account.js'; | ||||
| import { instance } from '@/instance.js'; | ||||
| import { defaultStore } from '@/store.js'; | ||||
| import { Paging } from '@/components/MkPagination.vue'; | ||||
| import type { Paging } from '@/components/MkPagination.vue'; | ||||
| 
 | ||||
| const props = withDefaults(defineProps<{ | ||||
| 	src: BasicTimelineType | 'mentions' | 'directs' | 'list' | 'antenna' | 'channel' | 'role'; | ||||
|  |  | |||
|  | @ -22,7 +22,8 @@ SPDX-License-Identifier: AGPL-3.0-only | |||
| 
 | ||||
| <script lang="ts" setup> | ||||
| import MkUserInfo from '@/components/MkUserInfo.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 { infoImageUrl } from '@/instance.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import { userDetailed } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -38,7 +38,8 @@ import * as Misskey from 'misskey-js'; | |||
| import { i18n } from '@/i18n.js'; | ||||
| import MkFolder from '@/components/MkFolder.vue'; | ||||
| import XUser from '@/components/MkUserSetupDialog.User.vue'; | ||||
| import MkPagination, { type Paging } from '@/components/MkPagination.vue'; | ||||
| import MkPagination from '@/components/MkPagination.vue'; | ||||
| import type { Paging } from '@/components/MkPagination.vue'; | ||||
| 
 | ||||
| const pinnedUsers: Paging = { | ||||
| 	endpoint: 'pinned-users', | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkUserSetupDialog_Privacy from './MkUserSetupDialog.Privacy.vue'; | ||||
| export const Default = { | ||||
| 	render(args) { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkUserSetupDialog_Profile from './MkUserSetupDialog.Profile.vue'; | ||||
| export const Default = { | ||||
| 	render(args) { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { userDetailed } from '../../.storybook/fakes.js'; | ||||
| import MkUserSetupDialog_User from './MkUserSetupDialog.User.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* 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 { commonHandlers } from '../../.storybook/mocks.js'; | ||||
| import { userDetailed } from '../../.storybook/fakes.js'; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { expect, userEvent, within } from '@storybook/test'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkA from './MkA.vue'; | ||||
| import { tick } from '@/scripts/test-utils.js'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { userDetailed } from '../../../.storybook/fakes.js'; | ||||
| import MkAcct from './MkAcct.vue'; | ||||
| export const Default = { | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { expect, userEvent, waitFor, within } from '@storybook/test'; | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkAd from './MkAd.vue'; | ||||
| import { i18n } from '@/i18n.js'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import { userDetailed } from '../../../.storybook/fakes.js'; | ||||
| import MkAvatar from './MkAvatar.vue'; | ||||
| const common = { | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|  */ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||||
| import { StoryObj } from '@storybook/vue3'; | ||||
| import type { StoryObj } from '@storybook/vue3'; | ||||
| import MkCondensedLine from './MkCondensedLine.vue'; | ||||
| export const Default = { | ||||
| 	render(args) { | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue