refactor
This commit is contained in:
		
							parent
							
								
									49a0b6c48b
								
							
						
					
					
						commit
						58bfb4dca4
					
				
					 83 changed files with 353 additions and 353 deletions
				
			
		|  | @ -28,7 +28,7 @@ | ||||||
| import { ref, shallowRef } from 'vue'; | import { ref, shallowRef } from 'vue'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import MkWindow from '@/components/MkWindow.vue'; | import MkWindow from '@/components/MkWindow.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -51,10 +51,10 @@ | ||||||
| import { computed, defineAsyncComponent, onMounted, onUnmounted, Ref } from 'vue'; | import { computed, defineAsyncComponent, onMounted, onUnmounted, Ref } from 'vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import { AsUiComponent } from '@/scripts/aiscript/ui'; | import { AsUiComponent } from '@/scripts/aiscript/ui'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -42,8 +42,8 @@ | ||||||
| import { onBeforeUnmount, onMounted, ref, shallowRef } from 'vue'; | import { onBeforeUnmount, onMounted, ref, shallowRef } from 'vue'; | ||||||
| import MkModal from '@/components/MkModal.vue'; | import MkModal from '@/components/MkModal.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| 
 | 
 | ||||||
| type Input = { | type Input = { | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import * as Misskey from 'misskey-js'; | import * as Misskey from 'misskey-js'; | ||||||
| import MkModalWindow from '@/components/MkModalWindow.vue'; | import MkModalWindow from '@/components/MkModalWindow.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue'; | import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkModalWindow from '@/components/MkModalWindow.vue'; | import MkModalWindow from '@/components/MkModalWindow.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { instance } from '@/instance'; | import { instance } from '@/instance'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -17,34 +17,34 @@ | ||||||
| 	<MkSpacer :margin-min="20" :margin-max="32"> | 	<MkSpacer :margin-min="20" :margin-max="32"> | ||||||
| 		<div class="xkpnjxcv _gaps_m"> | 		<div class="xkpnjxcv _gaps_m"> | ||||||
| 			<template v-for="item in Object.keys(form).filter(item => !form[item].hidden)"> | 			<template v-for="item in Object.keys(form).filter(item => !form[item].hidden)"> | ||||||
| 				<FormInput v-if="form[item].type === 'number'" v-model="values[item]" type="number" :step="form[item].step || 1"> | 				<MkInput v-if="form[item].type === 'number'" v-model="values[item]" type="number" :step="form[item].step || 1"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormInput v-else-if="form[item].type === 'string' && !form[item].multiline" v-model="values[item]" type="text"> | 				<MkInput v-else-if="form[item].type === 'string' && !form[item].multiline" v-model="values[item]" type="text"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormTextarea v-else-if="form[item].type === 'string' && form[item].multiline" v-model="values[item]"> | 				<MkTextarea v-else-if="form[item].type === 'string' && form[item].multiline" v-model="values[item]"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | ||||||
| 				</FormTextarea> | 				</MkTextarea> | ||||||
| 				<MkSwitch v-else-if="form[item].type === 'boolean'" v-model="values[item]"> | 				<MkSwitch v-else-if="form[item].type === 'boolean'" v-model="values[item]"> | ||||||
| 					<span v-text="form[item].label || item"></span> | 					<span v-text="form[item].label || item"></span> | ||||||
| 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | ||||||
| 				</MkSwitch> | 				</MkSwitch> | ||||||
| 				<FormSelect v-else-if="form[item].type === 'enum'" v-model="values[item]"> | 				<MkSelect v-else-if="form[item].type === 'enum'" v-model="values[item]"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<option v-for="item in form[item].enum" :key="item.value" :value="item.value">{{ item.label }}</option> | 					<option v-for="item in form[item].enum" :key="item.value" :value="item.value">{{ item.label }}</option> | ||||||
| 				</FormSelect> | 				</MkSelect> | ||||||
| 				<FormRadios v-else-if="form[item].type === 'radio'" v-model="values[item]"> | 				<MkRadios v-else-if="form[item].type === 'radio'" v-model="values[item]"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<option v-for="item in form[item].options" :key="item.value" :value="item.value">{{ item.label }}</option> | 					<option v-for="item in form[item].options" :key="item.value" :value="item.value">{{ item.label }}</option> | ||||||
| 				</FormRadios> | 				</MkRadios> | ||||||
| 				<FormRange v-else-if="form[item].type === 'range'" v-model="values[item]" :min="form[item].min" :max="form[item].max" :step="form[item].step" :text-converter="form[item].textConverter"> | 				<MkRange v-else-if="form[item].type === 'range'" v-model="values[item]" :min="form[item].min" :max="form[item].max" :step="form[item].step" :text-converter="form[item].textConverter"> | ||||||
| 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | 					<template #label><span v-text="form[item].label || item"></span><span v-if="form[item].required === false"> ({{ $ts.optional }})</span></template> | ||||||
| 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | 					<template v-if="form[item].description" #caption>{{ form[item].description }}</template> | ||||||
| 				</FormRange> | 				</MkRange> | ||||||
| 				<MkButton v-else-if="form[item].type === 'button'" @click="form[item].action($event, values)"> | 				<MkButton v-else-if="form[item].type === 'button'" @click="form[item].action($event, values)"> | ||||||
| 					<span v-text="form[item].content || item"></span> | 					<span v-text="form[item].content || item"></span> | ||||||
| 				</MkButton> | 				</MkButton> | ||||||
|  | @ -56,25 +56,25 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent } from 'vue'; | import { defineComponent } from 'vue'; | ||||||
| import FormInput from './form/input.vue'; | import MkInput from './MkInput.vue'; | ||||||
| import FormTextarea from './form/textarea.vue'; | import MkTextarea from './MkTextarea.vue'; | ||||||
| import MkSwitch from './MkSwitch.vue'; | import MkSwitch from './MkSwitch.vue'; | ||||||
| import FormSelect from './form/select.vue'; | import MkSelect from './MkSelect.vue'; | ||||||
| import FormRange from './form/range.vue'; | import MkRange from './MkRange.vue'; | ||||||
| import MkButton from './MkButton.vue'; | import MkButton from './MkButton.vue'; | ||||||
| import FormRadios from './form/radios.vue'; | import MkRadios from './MkRadios.vue'; | ||||||
| import MkModalWindow from '@/components/MkModalWindow.vue'; | import MkModalWindow from '@/components/MkModalWindow.vue'; | ||||||
| 
 | 
 | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
| 		MkModalWindow, | 		MkModalWindow, | ||||||
| 		FormInput, | 		MkInput, | ||||||
| 		FormTextarea, | 		MkTextarea, | ||||||
| 		MkSwitch, | 		MkSwitch, | ||||||
| 		FormSelect, | 		MkSelect, | ||||||
| 		FormRange, | 		MkRange, | ||||||
| 		MkButton, | 		MkButton, | ||||||
| 		FormRadios, | 		MkRadios, | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	props: { | 	props: { | ||||||
|  |  | ||||||
|  | @ -78,7 +78,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { onMounted } from 'vue'; | import { onMounted } from 'vue'; | ||||||
| import { Chart } from 'chart.js'; | import { Chart } from 'chart.js'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkChart from '@/components/MkChart.vue'; | import MkChart from '@/components/MkChart.vue'; | ||||||
| import { useChartTooltip } from '@/scripts/use-chart-tooltip'; | import { useChartTooltip } from '@/scripts/use-chart-tooltip'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -49,8 +49,8 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { ref, watch } from 'vue'; | import { ref, watch } from 'vue'; | ||||||
| import MkInput from './form/input.vue'; | import MkInput from './MkInput.vue'; | ||||||
| import MkSelect from './form/select.vue'; | import MkSelect from './MkSelect.vue'; | ||||||
| import MkSwitch from './MkSwitch.vue'; | import MkSwitch from './MkSwitch.vue'; | ||||||
| import MkButton from './MkButton.vue'; | import MkButton from './MkButton.vue'; | ||||||
| import { formatDateTimeString } from '@/scripts/format-time-string'; | import { formatDateTimeString } from '@/scripts/format-time-string'; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent, h } from 'vue'; | import { defineComponent, h } from 'vue'; | ||||||
| import MkRadio from './radio.vue'; | import MkRadio from './MkRadio.vue'; | ||||||
| 
 | 
 | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
|  | @ -30,10 +30,10 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent } from 'vue'; | import { defineComponent } from 'vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkRadio from '@/components/form/radio.vue'; | import MkRadio from '@/components/MkRadio.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import * as config from '@/config'; | import * as config from '@/config'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -53,7 +53,7 @@ import { defineAsyncComponent } from 'vue'; | ||||||
| import { toUnicode } from 'punycode/'; | import { toUnicode } from 'punycode/'; | ||||||
| import { showSuspendedDialog } from '../scripts/show-suspended-dialog'; | import { showSuspendedDialog } from '../scripts/show-suspended-dialog'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkInfo from '@/components/MkInfo.vue'; | import MkInfo from '@/components/MkInfo.vue'; | ||||||
| import { apiUrl, host as configHost } from '@/config'; | import { apiUrl, host as configHost } from '@/config'; | ||||||
| import { byteify, hexify } from '@/scripts/2fa'; | import { byteify, hexify } from '@/scripts/2fa'; | ||||||
|  |  | ||||||
|  | @ -69,7 +69,7 @@ import { } from 'vue'; | ||||||
| import getPasswordStrength from 'syuilo-password-strength'; | import getPasswordStrength from 'syuilo-password-strength'; | ||||||
| import { toUnicode } from 'punycode/'; | import { toUnicode } from 'punycode/'; | ||||||
| import MkButton from './MkButton.vue'; | import MkButton from './MkButton.vue'; | ||||||
| import MkInput from './form/input.vue'; | import MkInput from './MkInput.vue'; | ||||||
| import MkSwitch from './MkSwitch.vue'; | import MkSwitch from './MkSwitch.vue'; | ||||||
| import MkCaptcha from '@/components/MkCaptcha.vue'; | import MkCaptcha from '@/components/MkCaptcha.vue'; | ||||||
| import * as config from '@/config'; | import * as config from '@/config'; | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import { permissions as kinds } from 'misskey-js'; | import { permissions as kinds } from 'misskey-js'; | ||||||
| import MkInput from './form/input.vue'; | import MkInput from './MkInput.vue'; | ||||||
| import MkSwitch from './MkSwitch.vue'; | import MkSwitch from './MkSwitch.vue'; | ||||||
| import MkButton from './MkButton.vue'; | import MkButton from './MkButton.vue'; | ||||||
| import MkInfo from './MkInfo.vue'; | import MkInfo from './MkInfo.vue'; | ||||||
|  |  | ||||||
|  | @ -54,7 +54,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { nextTick, onMounted } from 'vue'; | import { nextTick, onMounted } from 'vue'; | ||||||
| import * as misskey from 'misskey-js'; | import * as misskey from 'misskey-js'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import MkModalWindow from '@/components/MkModalWindow.vue'; | import MkModalWindow from '@/components/MkModalWindow.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -45,7 +45,7 @@ export type DefaultStoredWidget = { | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineAsyncComponent, reactive, ref, computed } from 'vue'; | import { defineAsyncComponent, reactive, ref, computed } from 'vue'; | ||||||
| import { v4 as uuid } from 'uuid'; | import { v4 as uuid } from 'uuid'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import { widgets as widgetDefs } from '@/widgets'; | import { widgets as widgetDefs } from '@/widgets'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { computed, defineComponent, PropType } from 'vue'; | import { computed, defineComponent, PropType } from 'vue'; | ||||||
| import MkInput from '../form/input.vue'; | import MkInput from '../MkInput.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { Hpml } from '@/scripts/hpml/evaluator'; | import { Hpml } from '@/scripts/hpml/evaluator'; | ||||||
| import { NumberInputVarBlock } from '@/scripts/hpml/block'; | import { NumberInputVarBlock } from '@/scripts/hpml/block'; | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { defineComponent, PropType } from 'vue'; | import { defineComponent, PropType } from 'vue'; | ||||||
| import MkTextarea from '../form/textarea.vue'; | import MkTextarea from '../MkTextarea.vue'; | ||||||
| import MkButton from '../MkButton.vue'; | import MkButton from '../MkButton.vue'; | ||||||
| import { apiUrl } from '@/config'; | import { apiUrl } from '@/config'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { computed, defineComponent, PropType } from 'vue'; | import { computed, defineComponent, PropType } from 'vue'; | ||||||
| import MkRadio from '../form/radio.vue'; | import MkRadio from '../MkRadio.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { Hpml } from '@/scripts/hpml/evaluator'; | import { Hpml } from '@/scripts/hpml/evaluator'; | ||||||
| import { RadioButtonVarBlock } from '@/scripts/hpml/block'; | import { RadioButtonVarBlock } from '@/scripts/hpml/block'; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { computed, defineComponent, PropType } from 'vue'; | import { computed, defineComponent, PropType } from 'vue'; | ||||||
| import MkInput from '../form/input.vue'; | import MkInput from '../MkInput.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { Hpml } from '@/scripts/hpml/evaluator'; | import { Hpml } from '@/scripts/hpml/evaluator'; | ||||||
| import { TextInputVarBlock } from '@/scripts/hpml/block'; | import { TextInputVarBlock } from '@/scripts/hpml/block'; | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| import { computed, defineComponent, PropType } from 'vue'; | import { computed, defineComponent, PropType } from 'vue'; | ||||||
| import MkTextarea from '../form/textarea.vue'; | import MkTextarea from '../MkTextarea.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { Hpml } from '@/scripts/hpml/evaluator'; | import { Hpml } from '@/scripts/hpml/evaluator'; | ||||||
| import { HpmlTextInput } from '@/scripts/hpml'; | import { HpmlTextInput } from '@/scripts/hpml'; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| import { TextBlock } from '@/scripts/hpml/block'; | import { TextBlock } from '@/scripts/hpml/block'; | ||||||
| import { Hpml } from '@/scripts/hpml/evaluator'; | import { Hpml } from '@/scripts/hpml/evaluator'; | ||||||
| import { defineComponent, PropType } from 'vue'; | import { defineComponent, PropType } from 'vue'; | ||||||
| import MkTextarea from '../form/textarea.vue'; | import MkTextarea from '../MkTextarea.vue'; | ||||||
| 
 | 
 | ||||||
| export default defineComponent({ | export default defineComponent({ | ||||||
| 	components: { | 	components: { | ||||||
|  |  | ||||||
|  | @ -32,8 +32,8 @@ | ||||||
| import { defineComponent, computed } from 'vue'; | import { defineComponent, computed } from 'vue'; | ||||||
| import XEmoji from './emojis.emoji.vue'; | import XEmoji from './emojis.emoji.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkFolder from '@/components/MkFolder.vue'; | import MkFolder from '@/components/MkFolder.vue'; | ||||||
| import MkTab from '@/components/MkTab.vue'; | import MkTab from '@/components/MkTab.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -47,8 +47,8 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed } from 'vue'; | import { computed } from 'vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkPagination from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
| import MkInstanceCardMini from '@/components/MkInstanceCardMini.vue'; | import MkInstanceCardMini from '@/components/MkInstanceCardMini.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
|  |  | ||||||
|  | @ -50,8 +50,8 @@ | ||||||
| import { computed } from 'vue'; | import { computed } from 'vue'; | ||||||
| 
 | 
 | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkPagination from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
| import XAbuseReport from '@/components/MkAbuseReport.vue'; | import XAbuseReport from '@/components/MkAbuseReport.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -11,12 +11,12 @@ | ||||||
| 				<MkInput v-model="ad.imageUrl"> | 				<MkInput v-model="ad.imageUrl"> | ||||||
| 					<template #label>{{ i18n.ts.imageUrl }}</template> | 					<template #label>{{ i18n.ts.imageUrl }}</template> | ||||||
| 				</MkInput> | 				</MkInput> | ||||||
| 				<FormRadios v-model="ad.place"> | 				<MkRadios v-model="ad.place"> | ||||||
| 					<template #label>Form</template> | 					<template #label>Form</template> | ||||||
| 					<option value="square">square</option> | 					<option value="square">square</option> | ||||||
| 					<option value="horizontal">horizontal</option> | 					<option value="horizontal">horizontal</option> | ||||||
| 					<option value="horizontal-big">horizontal-big</option> | 					<option value="horizontal-big">horizontal-big</option> | ||||||
| 				</FormRadios> | 				</MkRadios> | ||||||
| 				<!-- | 				<!-- | ||||||
| 			<div style="margin: 32px 0;"> | 			<div style="margin: 32px 0;"> | ||||||
| 				{{ i18n.ts.priority }} | 				{{ i18n.ts.priority }} | ||||||
|  | @ -50,9 +50,9 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -30,8 +30,8 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import { definePageMetadata } from '@/scripts/page-metadata'; | import { definePageMetadata } from '@/scripts/page-metadata'; | ||||||
|  |  | ||||||
|  | @ -2,50 +2,50 @@ | ||||||
| <div> | <div> | ||||||
| 	<FormSuspense :p="init"> | 	<FormSuspense :p="init"> | ||||||
| 		<div class="_gaps_m"> | 		<div class="_gaps_m"> | ||||||
| 			<FormRadios v-model="provider"> | 			<MkRadios v-model="provider"> | ||||||
| 				<option :value="null">{{ i18n.ts.none }} ({{ i18n.ts.notRecommended }})</option> | 				<option :value="null">{{ i18n.ts.none }} ({{ i18n.ts.notRecommended }})</option> | ||||||
| 				<option value="hcaptcha">hCaptcha</option> | 				<option value="hcaptcha">hCaptcha</option> | ||||||
| 				<option value="recaptcha">reCAPTCHA</option> | 				<option value="recaptcha">reCAPTCHA</option> | ||||||
| 				<option value="turnstile">Turnstile</option> | 				<option value="turnstile">Turnstile</option> | ||||||
| 			</FormRadios> | 			</MkRadios> | ||||||
| 
 | 
 | ||||||
| 			<template v-if="provider === 'hcaptcha'"> | 			<template v-if="provider === 'hcaptcha'"> | ||||||
| 				<FormInput v-model="hcaptchaSiteKey"> | 				<MkInput v-model="hcaptchaSiteKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template> | 					<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormInput v-model="hcaptchaSecretKey"> | 				<MkInput v-model="hcaptchaSecretKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template> | 					<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormSlot> | 				<FormSlot> | ||||||
| 					<template #label>{{ i18n.ts.preview }}</template> | 					<template #label>{{ i18n.ts.preview }}</template> | ||||||
| 					<MkCaptcha provider="hcaptcha" :sitekey="hcaptchaSiteKey || '10000000-ffff-ffff-ffff-000000000001'"/> | 					<MkCaptcha provider="hcaptcha" :sitekey="hcaptchaSiteKey || '10000000-ffff-ffff-ffff-000000000001'"/> | ||||||
| 				</FormSlot> | 				</FormSlot> | ||||||
| 			</template> | 			</template> | ||||||
| 			<template v-else-if="provider === 'recaptcha'"> | 			<template v-else-if="provider === 'recaptcha'"> | ||||||
| 				<FormInput v-model="recaptchaSiteKey"> | 				<MkInput v-model="recaptchaSiteKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.recaptchaSiteKey }}</template> | 					<template #label>{{ i18n.ts.recaptchaSiteKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormInput v-model="recaptchaSecretKey"> | 				<MkInput v-model="recaptchaSecretKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.recaptchaSecretKey }}</template> | 					<template #label>{{ i18n.ts.recaptchaSecretKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormSlot v-if="recaptchaSiteKey"> | 				<FormSlot v-if="recaptchaSiteKey"> | ||||||
| 					<template #label>{{ i18n.ts.preview }}</template> | 					<template #label>{{ i18n.ts.preview }}</template> | ||||||
| 					<MkCaptcha provider="recaptcha" :sitekey="recaptchaSiteKey"/> | 					<MkCaptcha provider="recaptcha" :sitekey="recaptchaSiteKey"/> | ||||||
| 				</FormSlot> | 				</FormSlot> | ||||||
| 			</template> | 			</template> | ||||||
| 			<template v-else-if="provider === 'turnstile'"> | 			<template v-else-if="provider === 'turnstile'"> | ||||||
| 				<FormInput v-model="turnstileSiteKey"> | 				<MkInput v-model="turnstileSiteKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.turnstileSiteKey }}</template> | 					<template #label>{{ i18n.ts.turnstileSiteKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormInput v-model="turnstileSecretKey"> | 				<MkInput v-model="turnstileSecretKey"> | ||||||
| 					<template #prefix><i class="ti ti-key"></i></template> | 					<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 					<template #label>{{ i18n.ts.turnstileSecretKey }}</template> | 					<template #label>{{ i18n.ts.turnstileSecretKey }}</template> | ||||||
| 				</FormInput> | 				</MkInput> | ||||||
| 				<FormSlot> | 				<FormSlot> | ||||||
| 					<template #label>{{ i18n.ts.preview }}</template> | 					<template #label>{{ i18n.ts.preview }}</template> | ||||||
| 					<MkCaptcha provider="turnstile" :sitekey="turnstileSiteKey || '1x00000000000000000000AA'"/> | 					<MkCaptcha provider="turnstile" :sitekey="turnstileSiteKey || '1x00000000000000000000AA'"/> | ||||||
|  | @ -60,8 +60,8 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineAsyncComponent } from 'vue'; | import { defineAsyncComponent } from 'vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import FormSlot from '@/components/form/slot.vue'; | import FormSlot from '@/components/form/slot.vue'; | ||||||
|  |  | ||||||
|  | @ -10,29 +10,29 @@ | ||||||
| 				</MkSwitch> | 				</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 				<template v-if="enableEmail"> | 				<template v-if="enableEmail"> | ||||||
| 					<FormInput v-model="email" type="email"> | 					<MkInput v-model="email" type="email"> | ||||||
| 						<template #label>{{ i18n.ts.emailAddress }}</template> | 						<template #label>{{ i18n.ts.emailAddress }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormSection> | 					<FormSection> | ||||||
| 						<template #label>{{ i18n.ts.smtpConfig }}</template> | 						<template #label>{{ i18n.ts.smtpConfig }}</template> | ||||||
| 
 | 
 | ||||||
| 						<div class="_gaps_m"> | 						<div class="_gaps_m"> | ||||||
| 							<FormSplit :min-width="280"> | 							<FormSplit :min-width="280"> | ||||||
| 								<FormInput v-model="smtpHost"> | 								<MkInput v-model="smtpHost"> | ||||||
| 									<template #label>{{ i18n.ts.smtpHost }}</template> | 									<template #label>{{ i18n.ts.smtpHost }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 								<FormInput v-model="smtpPort" type="number"> | 								<MkInput v-model="smtpPort" type="number"> | ||||||
| 									<template #label>{{ i18n.ts.smtpPort }}</template> | 									<template #label>{{ i18n.ts.smtpPort }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 							</FormSplit> | 							</FormSplit> | ||||||
| 							<FormSplit :min-width="280"> | 							<FormSplit :min-width="280"> | ||||||
| 								<FormInput v-model="smtpUser"> | 								<MkInput v-model="smtpUser"> | ||||||
| 									<template #label>{{ i18n.ts.smtpUser }}</template> | 									<template #label>{{ i18n.ts.smtpUser }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 								<FormInput v-model="smtpPass" type="password"> | 								<MkInput v-model="smtpPass" type="password"> | ||||||
| 									<template #label>{{ i18n.ts.smtpPass }}</template> | 									<template #label>{{ i18n.ts.smtpPass }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 							</FormSplit> | 							</FormSplit> | ||||||
| 							<FormInfo>{{ i18n.ts.emptyToDisableSmtpAuth }}</FormInfo> | 							<FormInfo>{{ i18n.ts.emptyToDisableSmtpAuth }}</FormInfo> | ||||||
| 							<MkSwitch v-model="smtpSecure"> | 							<MkSwitch v-model="smtpSecure"> | ||||||
|  | @ -52,7 +52,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkModalWindow from '@/components/MkModalWindow.vue'; | import MkModalWindow from '@/components/MkModalWindow.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { unique } from '@/scripts/array'; | import { unique } from '@/scripts/array'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -71,7 +71,7 @@ | ||||||
| import { computed, defineAsyncComponent, defineComponent, ref, shallowRef } from 'vue'; | import { computed, defineAsyncComponent, defineComponent, ref, shallowRef } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkPagination from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
| import MkTab from '@/components/MkTab.vue'; | import MkTab from '@/components/MkTab.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
|  |  | ||||||
|  | @ -37,8 +37,8 @@ import { computed, defineAsyncComponent } from 'vue'; | ||||||
| import * as Acct from 'misskey-js/built/acct'; | import * as Acct from 'misskey-js/built/acct'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkFileListForAdmin from '@/components/MkFileListForAdmin.vue'; | import MkFileListForAdmin from '@/components/MkFileListForAdmin.vue'; | ||||||
| import bytes from '@/filters/bytes'; | import bytes from '@/filters/bytes'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -3,10 +3,10 @@ | ||||||
| 	<template #header><XHeader :actions="headerActions" :tabs="headerTabs"/></template> | 	<template #header><XHeader :actions="headerActions" :tabs="headerTabs"/></template> | ||||||
| 	<MkSpacer :content-max="700" :margin-min="16" :margin-max="32"> | 	<MkSpacer :content-max="700" :margin-min="16" :margin-max="32"> | ||||||
| 		<FormSuspense :p="init"> | 		<FormSuspense :p="init"> | ||||||
| 			<FormTextarea v-model="blockedHosts"> | 			<MkTextarea v-model="blockedHosts"> | ||||||
| 				<span>{{ i18n.ts.blockedInstances }}</span> | 				<span>{{ i18n.ts.blockedInstances }}</span> | ||||||
| 				<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template> | 				<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template> | ||||||
| 			</FormTextarea> | 			</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 			<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 			<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| 		</FormSuspense> | 		</FormSuspense> | ||||||
|  | @ -18,7 +18,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { fetchInstance } from '@/instance'; | import { fetchInstance } from '@/instance'; | ||||||
|  |  | ||||||
|  | @ -8,15 +8,15 @@ | ||||||
| 		<template v-if="enableDiscordIntegration"> | 		<template v-if="enableDiscordIntegration"> | ||||||
| 			<FormInfo>Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo> | 			<FormInfo>Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="discordClientId"> | 			<MkInput v-model="discordClientId"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client ID</template> | 				<template #label>Client ID</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="discordClientSecret"> | 			<MkInput v-model="discordClientSecret"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client Secret</template> | 				<template #label>Client Secret</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
|  | @ -27,7 +27,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
|  |  | ||||||
|  | @ -8,15 +8,15 @@ | ||||||
| 		<template v-if="enableGithubIntegration"> | 		<template v-if="enableGithubIntegration"> | ||||||
| 			<FormInfo>Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo> | 			<FormInfo>Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="githubClientId"> | 			<MkInput v-model="githubClientId"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client ID</template> | 				<template #label>Client ID</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="githubClientSecret"> | 			<MkInput v-model="githubClientSecret"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Client Secret</template> | 				<template #label>Client Secret</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
|  | @ -27,7 +27,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
|  |  | ||||||
|  | @ -8,15 +8,15 @@ | ||||||
| 		<template v-if="enableTwitterIntegration"> | 		<template v-if="enableTwitterIntegration"> | ||||||
| 			<FormInfo>Callback URL: {{ `${uri}/api/tw/cb` }}</FormInfo> | 			<FormInfo>Callback URL: {{ `${uri}/api/tw/cb` }}</FormInfo> | ||||||
| 		 | 		 | ||||||
| 			<FormInput v-model="twitterConsumerKey"> | 			<MkInput v-model="twitterConsumerKey"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Consumer Key</template> | 				<template #label>Consumer Key</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 
 | 
 | ||||||
| 			<FormInput v-model="twitterConsumerSecret"> | 			<MkInput v-model="twitterConsumerSecret"> | ||||||
| 				<template #prefix><i class="ti ti-key"></i></template> | 				<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 				<template #label>Consumer Secret</template> | 				<template #label>Consumer Secret</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 		</template> | 		</template> | ||||||
| 
 | 
 | ||||||
| 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 		<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
|  | @ -27,7 +27,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineComponent } from 'vue'; | import { defineComponent } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
|  |  | ||||||
|  | @ -7,41 +7,41 @@ | ||||||
| 				<MkSwitch v-model="useObjectStorage">{{ i18n.ts.useObjectStorage }}</MkSwitch> | 				<MkSwitch v-model="useObjectStorage">{{ i18n.ts.useObjectStorage }}</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 				<template v-if="useObjectStorage"> | 				<template v-if="useObjectStorage"> | ||||||
| 					<FormInput v-model="objectStorageBaseUrl"> | 					<MkInput v-model="objectStorageBaseUrl"> | ||||||
| 						<template #label>{{ i18n.ts.objectStorageBaseUrl }}</template> | 						<template #label>{{ i18n.ts.objectStorageBaseUrl }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.objectStorageBaseUrlDesc }}</template> | 						<template #caption>{{ i18n.ts.objectStorageBaseUrlDesc }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="objectStorageBucket"> | 					<MkInput v-model="objectStorageBucket"> | ||||||
| 						<template #label>{{ i18n.ts.objectStorageBucket }}</template> | 						<template #label>{{ i18n.ts.objectStorageBucket }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.objectStorageBucketDesc }}</template> | 						<template #caption>{{ i18n.ts.objectStorageBucketDesc }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="objectStoragePrefix"> | 					<MkInput v-model="objectStoragePrefix"> | ||||||
| 						<template #label>{{ i18n.ts.objectStoragePrefix }}</template> | 						<template #label>{{ i18n.ts.objectStoragePrefix }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.objectStoragePrefixDesc }}</template> | 						<template #caption>{{ i18n.ts.objectStoragePrefixDesc }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="objectStorageEndpoint"> | 					<MkInput v-model="objectStorageEndpoint"> | ||||||
| 						<template #label>{{ i18n.ts.objectStorageEndpoint }}</template> | 						<template #label>{{ i18n.ts.objectStorageEndpoint }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.objectStorageEndpointDesc }}</template> | 						<template #caption>{{ i18n.ts.objectStorageEndpointDesc }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="objectStorageRegion"> | 					<MkInput v-model="objectStorageRegion"> | ||||||
| 						<template #label>{{ i18n.ts.objectStorageRegion }}</template> | 						<template #label>{{ i18n.ts.objectStorageRegion }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.objectStorageRegionDesc }}</template> | 						<template #caption>{{ i18n.ts.objectStorageRegionDesc }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormSplit :min-width="280"> | 					<FormSplit :min-width="280"> | ||||||
| 						<FormInput v-model="objectStorageAccessKey"> | 						<MkInput v-model="objectStorageAccessKey"> | ||||||
| 							<template #prefix><i class="ti ti-key"></i></template> | 							<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 							<template #label>Access key</template> | 							<template #label>Access key</template> | ||||||
| 						</FormInput> | 						</MkInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="objectStorageSecretKey"> | 						<MkInput v-model="objectStorageSecretKey"> | ||||||
| 							<template #prefix><i class="ti ti-key"></i></template> | 							<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 							<template #label>Secret key</template> | 							<template #label>Secret key</template> | ||||||
| 						</FormInput> | 						</MkInput> | ||||||
| 					</FormSplit> | 					</FormSplit> | ||||||
| 
 | 
 | ||||||
| 					<MkSwitch v-model="objectStorageUseSSL"> | 					<MkSwitch v-model="objectStorageUseSSL"> | ||||||
|  | @ -72,7 +72,7 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import MkHeatmap from '@/components/MkHeatmap.vue'; | import MkHeatmap from '@/components/MkHeatmap.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| 
 | 
 | ||||||
| let src = $ref('active-users'); | let src = $ref('active-users'); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -26,17 +26,17 @@ | ||||||
| 					<div class="_gaps_m"> | 					<div class="_gaps_m"> | ||||||
| 						<span>{{ i18n.ts._sensitiveMediaDetection.description }}</span> | 						<span>{{ i18n.ts._sensitiveMediaDetection.description }}</span> | ||||||
| 
 | 
 | ||||||
| 						<FormRadios v-model="sensitiveMediaDetection"> | 						<MkRadios v-model="sensitiveMediaDetection"> | ||||||
| 							<option value="none">{{ i18n.ts.none }}</option> | 							<option value="none">{{ i18n.ts.none }}</option> | ||||||
| 							<option value="all">{{ i18n.ts.all }}</option> | 							<option value="all">{{ i18n.ts.all }}</option> | ||||||
| 							<option value="local">{{ i18n.ts.localOnly }}</option> | 							<option value="local">{{ i18n.ts.localOnly }}</option> | ||||||
| 							<option value="remote">{{ i18n.ts.remoteOnly }}</option> | 							<option value="remote">{{ i18n.ts.remoteOnly }}</option> | ||||||
| 						</FormRadios> | 						</MkRadios> | ||||||
| 
 | 
 | ||||||
| 						<FormRange v-model="sensitiveMediaDetectionSensitivity" :min="0" :max="4" :step="1" :text-converter="(v) => `${v + 1}`"> | 						<MkRange v-model="sensitiveMediaDetectionSensitivity" :min="0" :max="4" :step="1" :text-converter="(v) => `${v + 1}`"> | ||||||
| 							<template #label>{{ i18n.ts._sensitiveMediaDetection.sensitivity }}</template> | 							<template #label>{{ i18n.ts._sensitiveMediaDetection.sensitivity }}</template> | ||||||
| 							<template #caption>{{ i18n.ts._sensitiveMediaDetection.sensitivityDescription }}</template> | 							<template #caption>{{ i18n.ts._sensitiveMediaDetection.sensitivityDescription }}</template> | ||||||
| 						</FormRange> | 						</MkRange> | ||||||
| 
 | 
 | ||||||
| 						<MkSwitch v-model="enableSensitiveMediaDetectionForVideos"> | 						<MkSwitch v-model="enableSensitiveMediaDetectionForVideos"> | ||||||
| 							<template #label>{{ i18n.ts._sensitiveMediaDetection.analyzeVideos }}<span class="_beta">{{ i18n.ts.beta }}</span></template> | 							<template #label>{{ i18n.ts._sensitiveMediaDetection.analyzeVideos }}<span class="_beta">{{ i18n.ts.beta }}</span></template> | ||||||
|  | @ -87,10 +87,10 @@ | ||||||
| 					<template #label>Summaly Proxy</template> | 					<template #label>Summaly Proxy</template> | ||||||
| 
 | 
 | ||||||
| 					<div class="_gaps_m"> | 					<div class="_gaps_m"> | ||||||
| 						<FormInput v-model="summalyProxy"> | 						<MkInput v-model="summalyProxy"> | ||||||
| 							<template #prefix><i class="ti ti-link"></i></template> | 							<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 							<template #label>Summaly Proxy URL</template> | 							<template #label>Summaly Proxy URL</template> | ||||||
| 						</FormInput> | 						</MkInput> | ||||||
| 
 | 
 | ||||||
| 						<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 						<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| 					</div> | 					</div> | ||||||
|  | @ -106,12 +106,12 @@ import { } from 'vue'; | ||||||
| import XBotProtection from './bot-protection.vue'; | import XBotProtection from './bot-protection.vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import FormRange from '@/components/form/range.vue'; | import MkRange from '@/components/MkRange.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { fetchInstance } from '@/instance'; | import { fetchInstance } from '@/instance'; | ||||||
|  |  | ||||||
|  | @ -5,34 +5,34 @@ | ||||||
| 		<MkSpacer :content-max="700" :margin-min="16" :margin-max="32"> | 		<MkSpacer :content-max="700" :margin-min="16" :margin-max="32"> | ||||||
| 			<FormSuspense :p="init"> | 			<FormSuspense :p="init"> | ||||||
| 				<div class="_gaps_m"> | 				<div class="_gaps_m"> | ||||||
| 					<FormInput v-model="name"> | 					<MkInput v-model="name"> | ||||||
| 						<template #label>{{ i18n.ts.instanceName }}</template> | 						<template #label>{{ i18n.ts.instanceName }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormTextarea v-model="description"> | 					<MkTextarea v-model="description"> | ||||||
| 						<template #label>{{ i18n.ts.instanceDescription }}</template> | 						<template #label>{{ i18n.ts.instanceDescription }}</template> | ||||||
| 					</FormTextarea> | 					</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-model="tosUrl"> | 					<MkInput v-model="tosUrl"> | ||||||
| 						<template #prefix><i class="ti ti-link"></i></template> | 						<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 						<template #label>{{ i18n.ts.tosUrl }}</template> | 						<template #label>{{ i18n.ts.tosUrl }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 
 | 
 | ||||||
| 					<FormSplit :min-width="300"> | 					<FormSplit :min-width="300"> | ||||||
| 						<FormInput v-model="maintainerName"> | 						<MkInput v-model="maintainerName"> | ||||||
| 							<template #label>{{ i18n.ts.maintainerName }}</template> | 							<template #label>{{ i18n.ts.maintainerName }}</template> | ||||||
| 						</FormInput> | 						</MkInput> | ||||||
| 
 | 
 | ||||||
| 						<FormInput v-model="maintainerEmail" type="email"> | 						<MkInput v-model="maintainerEmail" type="email"> | ||||||
| 							<template #prefix><i class="ti ti-mail"></i></template> | 							<template #prefix><i class="ti ti-mail"></i></template> | ||||||
| 							<template #label>{{ i18n.ts.maintainerEmail }}</template> | 							<template #label>{{ i18n.ts.maintainerEmail }}</template> | ||||||
| 						</FormInput> | 						</MkInput> | ||||||
| 					</FormSplit> | 					</FormSplit> | ||||||
| 
 | 
 | ||||||
| 					<FormTextarea v-model="pinnedUsers"> | 					<MkTextarea v-model="pinnedUsers"> | ||||||
| 						<template #label>{{ i18n.ts.pinnedUsers }}</template> | 						<template #label>{{ i18n.ts.pinnedUsers }}</template> | ||||||
| 						<template #caption>{{ i18n.ts.pinnedUsersDescription }}</template> | 						<template #caption>{{ i18n.ts.pinnedUsersDescription }}</template> | ||||||
| 					</FormTextarea> | 					</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 					<FormSection> | 					<FormSection> | ||||||
| 						<div class="_gaps_s"> | 						<div class="_gaps_s"> | ||||||
|  | @ -58,36 +58,36 @@ | ||||||
| 						<template #label>{{ i18n.ts.theme }}</template> | 						<template #label>{{ i18n.ts.theme }}</template> | ||||||
| 
 | 
 | ||||||
| 						<div class="_gaps_m"> | 						<div class="_gaps_m"> | ||||||
| 							<FormInput v-model="iconUrl"> | 							<MkInput v-model="iconUrl"> | ||||||
| 								<template #prefix><i class="ti ti-link"></i></template> | 								<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 								<template #label>{{ i18n.ts.iconUrl }}</template> | 								<template #label>{{ i18n.ts.iconUrl }}</template> | ||||||
| 							</FormInput> | 							</MkInput> | ||||||
| 
 | 
 | ||||||
| 							<FormInput v-model="bannerUrl"> | 							<MkInput v-model="bannerUrl"> | ||||||
| 								<template #prefix><i class="ti ti-link"></i></template> | 								<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 								<template #label>{{ i18n.ts.bannerUrl }}</template> | 								<template #label>{{ i18n.ts.bannerUrl }}</template> | ||||||
| 							</FormInput> | 							</MkInput> | ||||||
| 
 | 
 | ||||||
| 							<FormInput v-model="backgroundImageUrl"> | 							<MkInput v-model="backgroundImageUrl"> | ||||||
| 								<template #prefix><i class="ti ti-link"></i></template> | 								<template #prefix><i class="ti ti-link"></i></template> | ||||||
| 								<template #label>{{ i18n.ts.backgroundImageUrl }}</template> | 								<template #label>{{ i18n.ts.backgroundImageUrl }}</template> | ||||||
| 							</FormInput> | 							</MkInput> | ||||||
| 
 | 
 | ||||||
| 							<FormInput v-model="themeColor"> | 							<MkInput v-model="themeColor"> | ||||||
| 								<template #prefix><i class="ti ti-palette"></i></template> | 								<template #prefix><i class="ti ti-palette"></i></template> | ||||||
| 								<template #label>{{ i18n.ts.themeColor }}</template> | 								<template #label>{{ i18n.ts.themeColor }}</template> | ||||||
| 								<template #caption>#RRGGBB</template> | 								<template #caption>#RRGGBB</template> | ||||||
| 							</FormInput> | 							</MkInput> | ||||||
| 
 | 
 | ||||||
| 							<FormTextarea v-model="defaultLightTheme"> | 							<MkTextarea v-model="defaultLightTheme"> | ||||||
| 								<template #label>{{ i18n.ts.instanceDefaultLightTheme }}</template> | 								<template #label>{{ i18n.ts.instanceDefaultLightTheme }}</template> | ||||||
| 								<template #caption>{{ i18n.ts.instanceDefaultThemeDescription }}</template> | 								<template #caption>{{ i18n.ts.instanceDefaultThemeDescription }}</template> | ||||||
| 							</FormTextarea> | 							</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 							<FormTextarea v-model="defaultDarkTheme"> | 							<MkTextarea v-model="defaultDarkTheme"> | ||||||
| 								<template #label>{{ i18n.ts.instanceDefaultDarkTheme }}</template> | 								<template #label>{{ i18n.ts.instanceDefaultDarkTheme }}</template> | ||||||
| 								<template #caption>{{ i18n.ts.instanceDefaultThemeDescription }}</template> | 								<template #caption>{{ i18n.ts.instanceDefaultThemeDescription }}</template> | ||||||
| 							</FormTextarea> | 							</MkTextarea> | ||||||
| 						</div> | 						</div> | ||||||
| 					</FormSection> | 					</FormSection> | ||||||
| 
 | 
 | ||||||
|  | @ -101,17 +101,17 @@ | ||||||
| 							</MkSwitch> | 							</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 							<FormSplit :min-width="280"> | 							<FormSplit :min-width="280"> | ||||||
| 								<FormInput v-model="localDriveCapacityMb" type="number"> | 								<MkInput v-model="localDriveCapacityMb" type="number"> | ||||||
| 									<template #label>{{ i18n.ts.driveCapacityPerLocalAccount }}</template> | 									<template #label>{{ i18n.ts.driveCapacityPerLocalAccount }}</template> | ||||||
| 									<template #suffix>MB</template> | 									<template #suffix>MB</template> | ||||||
| 									<template #caption>{{ i18n.ts.inMb }}</template> | 									<template #caption>{{ i18n.ts.inMb }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 
 | 
 | ||||||
| 								<FormInput v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles"> | 								<MkInput v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles"> | ||||||
| 									<template #label>{{ i18n.ts.driveCapacityPerRemoteAccount }}</template> | 									<template #label>{{ i18n.ts.driveCapacityPerRemoteAccount }}</template> | ||||||
| 									<template #suffix>MB</template> | 									<template #suffix>MB</template> | ||||||
| 									<template #caption>{{ i18n.ts.inMb }}</template> | 									<template #caption>{{ i18n.ts.inMb }}</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 							</FormSplit> | 							</FormSplit> | ||||||
| 						</div> | 						</div> | ||||||
| 					</FormSection> | 					</FormSection> | ||||||
|  | @ -126,15 +126,15 @@ | ||||||
| 							</MkSwitch> | 							</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 							<template v-if="enableServiceWorker"> | 							<template v-if="enableServiceWorker"> | ||||||
| 								<FormInput v-model="swPublicKey"> | 								<MkInput v-model="swPublicKey"> | ||||||
| 									<template #prefix><i class="ti ti-key"></i></template> | 									<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 									<template #label>Public key</template> | 									<template #label>Public key</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 
 | 
 | ||||||
| 								<FormInput v-model="swPrivateKey"> | 								<MkInput v-model="swPrivateKey"> | ||||||
| 									<template #prefix><i class="ti ti-key"></i></template> | 									<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 									<template #label>Private key</template> | 									<template #label>Private key</template> | ||||||
| 								</FormInput> | 								</MkInput> | ||||||
| 							</template> | 							</template> | ||||||
| 						</div> | 						</div> | ||||||
| 					</FormSection> | 					</FormSection> | ||||||
|  | @ -143,10 +143,10 @@ | ||||||
| 						<template #label>DeepL Translation</template> | 						<template #label>DeepL Translation</template> | ||||||
| 
 | 
 | ||||||
| 						<div class="_gaps_m"> | 						<div class="_gaps_m"> | ||||||
| 							<FormInput v-model="deeplAuthKey"> | 							<MkInput v-model="deeplAuthKey"> | ||||||
| 								<template #prefix><i class="ti ti-key"></i></template> | 								<template #prefix><i class="ti ti-key"></i></template> | ||||||
| 								<template #label>DeepL Auth Key</template> | 								<template #label>DeepL Auth Key</template> | ||||||
| 							</FormInput> | 							</MkInput> | ||||||
| 							<MkSwitch v-model="deeplIsPro"> | 							<MkSwitch v-model="deeplIsPro"> | ||||||
| 								<template #label>Pro account</template> | 								<template #label>Pro account</template> | ||||||
| 							</MkSwitch> | 							</MkSwitch> | ||||||
|  | @ -163,8 +163,8 @@ | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
|  |  | ||||||
|  | @ -55,8 +55,8 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed } from 'vue'; | import { computed } from 'vue'; | ||||||
| import XHeader from './_header_.vue'; | import XHeader from './_header_.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkPagination from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { lookupUser } from '@/scripts/lookup-user'; | import { lookupUser } from '@/scripts/lookup-user'; | ||||||
|  |  | ||||||
|  | @ -33,8 +33,8 @@ import { ref } from 'vue'; | ||||||
| import JSON5 from 'json5'; | import JSON5 from 'json5'; | ||||||
| import { Endpoints } from 'misskey-js'; | import { Endpoints } from 'misskey-js'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { definePageMetadata } from '@/scripts/page-metadata'; | import { definePageMetadata } from '@/scripts/page-metadata'; | ||||||
|  |  | ||||||
|  | @ -28,9 +28,9 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, inject, watch } from 'vue'; | import { computed, inject, watch } from 'vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import { selectFile } from '@/scripts/select-file'; | import { selectFile } from '@/scripts/select-file'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { useRouter } from '@/router'; | import { useRouter } from '@/router'; | ||||||
|  |  | ||||||
|  | @ -34,8 +34,8 @@ import { computed, watch } from 'vue'; | ||||||
| import XFeatured from './explore.featured.vue'; | import XFeatured from './explore.featured.vue'; | ||||||
| import XUsers from './explore.users.vue'; | import XUsers from './explore.users.vue'; | ||||||
| import MkFolder from '@/components/MkFolder.vue'; | import MkFolder from '@/components/MkFolder.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import number from '@/filters/number'; | import number from '@/filters/number'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { definePageMetadata } from '@/scripts/page-metadata'; | import { definePageMetadata } from '@/scripts/page-metadata'; | ||||||
|  |  | ||||||
|  | @ -28,8 +28,8 @@ import * as os from '@/os'; | ||||||
| import { url } from '@/config'; | import { url } from '@/config'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import { definePageMetadata } from '@/scripts/page-metadata'; | import { definePageMetadata } from '@/scripts/page-metadata'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import { useRouter } from '@/router'; | import { useRouter } from '@/router'; | ||||||
| 
 | 
 | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
|  |  | ||||||
|  | @ -66,7 +66,7 @@ import MkAsUi from '@/components/MkAsUi.vue'; | ||||||
| import { AsUiComponent, AsUiRoot, patch, registerAsUiLib, render } from '@/scripts/aiscript/ui'; | import { AsUiComponent, AsUiRoot, patch, registerAsUiLib, render } from '@/scripts/aiscript/ui'; | ||||||
| import { createAiScriptEnv } from '@/scripts/aiscript/api'; | import { createAiScriptEnv } from '@/scripts/aiscript/api'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| 
 | 
 | ||||||
| const props = defineProps<{ | const props = defineProps<{ | ||||||
| 	id: string; | 	id: string; | ||||||
|  |  | ||||||
|  | @ -3,13 +3,13 @@ | ||||||
| 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | ||||||
| 	<MkSpacer :content-max="800" :margin-min="16" :margin-max="32"> | 	<MkSpacer :content-max="800" :margin-min="16" :margin-max="32"> | ||||||
| 		<FormSuspense :p="init"> | 		<FormSuspense :p="init"> | ||||||
| 			<FormInput v-model="title"> | 			<MkInput v-model="title"> | ||||||
| 				<template #label>{{ i18n.ts.title }}</template> | 				<template #label>{{ i18n.ts.title }}</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 
 | 
 | ||||||
| 			<FormTextarea v-model="description" :max="500"> | 			<MkTextarea v-model="description" :max="500"> | ||||||
| 				<template #label>{{ i18n.ts.description }}</template> | 				<template #label>{{ i18n.ts.description }}</template> | ||||||
| 			</FormTextarea> | 			</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 			<div class=""> | 			<div class=""> | ||||||
| 				<div v-for="file in files" :key="file.id" class="wqugxsfx" :style="{ backgroundImage: file ? `url(${ file.thumbnailUrl })` : null }"> | 				<div v-for="file in files" :key="file.id" class="wqugxsfx" :style="{ backgroundImage: file ? `url(${ file.thumbnailUrl })` : null }"> | ||||||
|  | @ -33,8 +33,8 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, inject, watch } from 'vue'; | import { computed, inject, watch } from 'vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import { selectFiles } from '@/scripts/select-file'; | import { selectFiles } from '@/scripts/select-file'; | ||||||
|  |  | ||||||
|  | @ -45,7 +45,7 @@ | ||||||
| import { computed, defineComponent, watch } from 'vue'; | import { computed, defineComponent, watch } from 'vue'; | ||||||
| import XUserList from '@/components/MkUserList.vue'; | import XUserList from '@/components/MkUserList.vue'; | ||||||
| import MkFolder from '@/components/MkFolder.vue'; | import MkFolder from '@/components/MkFolder.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkTab from '@/components/MkTab.vue'; | import MkTab from '@/components/MkTab.vue'; | ||||||
| import MkPagination from '@/components/MkPagination.vue'; | import MkPagination from '@/components/MkPagination.vue'; | ||||||
|  |  | ||||||
|  | @ -120,7 +120,7 @@ import MkLink from '@/components/MkLink.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import MkKeyValue from '@/components/MkKeyValue.vue'; | import MkKeyValue from '@/components/MkKeyValue.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import number from '@/filters/number'; | import number from '@/filters/number'; | ||||||
|  |  | ||||||
|  | @ -313,7 +313,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineComponent } from 'vue'; | import { defineComponent } from 'vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import { definePageMetadata } from '@/scripts/page-metadata'; | import { definePageMetadata } from '@/scripts/page-metadata'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import { instance } from '@/instance'; | import { instance } from '@/instance'; | ||||||
|  |  | ||||||
|  | @ -50,9 +50,9 @@ | ||||||
| import { watch } from 'vue'; | import { watch } from 'vue'; | ||||||
| import * as Acct from 'misskey-js/built/acct'; | import * as Acct from 'misskey-js/built/acct'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ | ||||||
| /* eslint-disable vue/no-mutating-props */ | /* eslint-disable vue/no-mutating-props */ | ||||||
| import { watch } from 'vue'; | import { watch } from 'vue'; | ||||||
| import XContainer from '../page-editor.container.vue'; | import XContainer from '../page-editor.container.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import XNote from '@/components/MkNote.vue'; | import XNote from '@/components/MkNote.vue'; | ||||||
| import XNoteDetailed from '@/components/MkNoteDetailed.vue'; | import XNoteDetailed from '@/components/MkNoteDetailed.vue'; | ||||||
|  |  | ||||||
|  | @ -59,11 +59,11 @@ | ||||||
| import { defineAsyncComponent, computed, provide, watch } from 'vue'; | import { defineAsyncComponent, computed, provide, watch } from 'vue'; | ||||||
| import { v4 as uuid } from 'uuid'; | import { v4 as uuid } from 'uuid'; | ||||||
| import XBlocks from './page-editor.blocks.vue'; | import XBlocks from './page-editor.blocks.vue'; | ||||||
| import MkTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import { url } from '@/config'; | import { url } from '@/config'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { selectFile } from '@/scripts/select-file'; | import { selectFile } from '@/scripts/select-file'; | ||||||
|  |  | ||||||
|  | @ -21,9 +21,9 @@ | ||||||
| 					</MkKeyValue> | 					</MkKeyValue> | ||||||
| 				</FormSplit> | 				</FormSplit> | ||||||
| 				 | 				 | ||||||
| 				<FormTextarea v-model="valueForEditor" tall class="_monospace"> | 				<MkTextarea v-model="valueForEditor" tall class="_monospace"> | ||||||
| 					<template #label>{{ i18n.ts.value }} (JSON)</template> | 					<template #label>{{ i18n.ts.value }} (JSON)</template> | ||||||
| 				</FormTextarea> | 				</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 				<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 				<MkButton primary @click="save"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| 
 | 
 | ||||||
|  | @ -49,7 +49,7 @@ import FormLink from '@/components/form/link.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkKeyValue from '@/components/MkKeyValue.vue'; | import MkKeyValue from '@/components/MkKeyValue.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,10 +3,10 @@ | ||||||
| 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | 	<template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> | ||||||
| 	<MkSpacer v-if="token" :content-max="700" :margin-min="16" :margin-max="32"> | 	<MkSpacer v-if="token" :content-max="700" :margin-min="16" :margin-max="32"> | ||||||
| 		<div class="_gaps_m"> | 		<div class="_gaps_m"> | ||||||
| 			<FormInput v-model="password" type="password"> | 			<MkInput v-model="password" type="password"> | ||||||
| 				<template #prefix><i class="ti ti-lock"></i></template> | 				<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 				<template #label>{{ i18n.ts.newPassword }}</template> | 				<template #label>{{ i18n.ts.newPassword }}</template> | ||||||
| 			</FormInput> | 			</MkInput> | ||||||
| 		 | 		 | ||||||
| 			<MkButton primary @click="save">{{ i18n.ts.save }}</MkButton> | 			<MkButton primary @click="save">{{ i18n.ts.save }}</MkButton> | ||||||
| 		</div> | 		</div> | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineAsyncComponent, onMounted } from 'vue'; | import { defineAsyncComponent, onMounted } from 'vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ import { hostname } from '@/config'; | ||||||
| import { byteify, hexify, stringify } from '@/scripts/2fa'; | import { byteify, hexify, stringify } from '@/scripts/2fa'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInfo from '@/components/MkInfo.vue'; | import MkInfo from '@/components/MkInfo.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { $i } from '@/account'; | import { $i } from '@/account'; | ||||||
|  |  | ||||||
|  | @ -2,15 +2,15 @@ | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormInfo warn>{{ i18n.ts.customCssWarn }}</FormInfo> | 	<FormInfo warn>{{ i18n.ts.customCssWarn }}</FormInfo> | ||||||
| 
 | 
 | ||||||
| 	<FormTextarea v-model="localCustomCss" manual-save tall class="_monospace" style="tab-size: 2;"> | 	<MkTextarea v-model="localCustomCss" manual-save tall class="_monospace" style="tab-size: 2;"> | ||||||
| 		<template #label>CSS</template> | 		<template #label>CSS</template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { ref, watch } from 'vue'; | import { ref, watch } from 'vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { unisonReload } from '@/scripts/unison-reload'; | import { unisonReload } from '@/scripts/unison-reload'; | ||||||
|  |  | ||||||
|  | @ -4,11 +4,11 @@ | ||||||
| 
 | 
 | ||||||
| 	<MkSwitch v-model="alwaysShowMainColumn">{{ i18n.ts._deck.alwaysShowMainColumn }}</MkSwitch> | 	<MkSwitch v-model="alwaysShowMainColumn">{{ i18n.ts._deck.alwaysShowMainColumn }}</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 	<FormRadios v-model="columnAlign"> | 	<MkRadios v-model="columnAlign"> | ||||||
| 		<template #label>{{ i18n.ts._deck.columnAlign }}</template> | 		<template #label>{{ i18n.ts._deck.columnAlign }}</template> | ||||||
| 		<option value="left">{{ i18n.ts.left }}</option> | 		<option value="left">{{ i18n.ts.left }}</option> | ||||||
| 		<option value="center">{{ i18n.ts.center }}</option> | 		<option value="center">{{ i18n.ts.center }}</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  | @ -16,8 +16,8 @@ | ||||||
| import { computed, watch } from 'vue'; | import { computed, watch } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormLink from '@/components/form/link.vue'; | import FormLink from '@/components/form/link.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import { deckStore } from '@/ui/deck/deck-store'; | import { deckStore } from '@/ui/deck/deck-store'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { unisonReload } from '@/scripts/unison-reload'; | import { unisonReload } from '@/scripts/unison-reload'; | ||||||
|  |  | ||||||
|  | @ -2,11 +2,11 @@ | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormSection first> | 	<FormSection first> | ||||||
| 		<template #label>{{ i18n.ts.emailAddress }}</template> | 		<template #label>{{ i18n.ts.emailAddress }}</template> | ||||||
| 		<FormInput v-model="emailAddress" type="email" manual-save> | 		<MkInput v-model="emailAddress" type="email" manual-save> | ||||||
| 			<template #prefix><i class="ti ti-mail"></i></template> | 			<template #prefix><i class="ti ti-mail"></i></template> | ||||||
| 			<template v-if="$i.email && !$i.emailVerified" #caption>{{ i18n.ts.verificationEmailSent }}</template> | 			<template v-if="$i.email && !$i.emailVerified" #caption>{{ i18n.ts.verificationEmailSent }}</template> | ||||||
| 			<template v-else-if="emailAddress === $i.email && $i.emailVerified" #caption><i class="ti ti-check" style="color: var(--success);"></i> {{ i18n.ts.emailVerified }}</template> | 			<template v-else-if="emailAddress === $i.email && $i.emailVerified" #caption><i class="ti ti-check" style="color: var(--success);"></i> {{ i18n.ts.emailVerified }}</template> | ||||||
| 		</FormInput> | 		</MkInput> | ||||||
| 	</FormSection> | 	</FormSection> | ||||||
| 
 | 
 | ||||||
| 	<FormSection> | 	<FormSection> | ||||||
|  | @ -45,7 +45,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { onMounted, ref, watch } from 'vue'; | import { onMounted, ref, watch } from 'vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { $i } from '@/account'; | import { $i } from '@/account'; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormSelect v-model="lang"> | 	<MkSelect v-model="lang"> | ||||||
| 		<template #label>{{ i18n.ts.uiLanguage }}</template> | 		<template #label>{{ i18n.ts.uiLanguage }}</template> | ||||||
| 		<option v-for="x in langs" :key="x[0]" :value="x[0]">{{ x[1] }}</option> | 		<option v-for="x in langs" :key="x[0]" :value="x[0]">{{ x[1] }}</option> | ||||||
| 		<template #caption> | 		<template #caption> | ||||||
|  | @ -10,15 +10,15 @@ | ||||||
| 				</template> | 				</template> | ||||||
| 			</I18n> | 			</I18n> | ||||||
| 		</template> | 		</template> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 
 | 
 | ||||||
| 	<FormRadios v-model="overridedDeviceKind"> | 	<MkRadios v-model="overridedDeviceKind"> | ||||||
| 		<template #label>{{ i18n.ts.overridedDeviceKind }}</template> | 		<template #label>{{ i18n.ts.overridedDeviceKind }}</template> | ||||||
| 		<option :value="null">{{ i18n.ts.auto }}</option> | 		<option :value="null">{{ i18n.ts.auto }}</option> | ||||||
| 		<option value="smartphone"><i class="ti ti-device-mobile"/> {{ i18n.ts.smartphone }}</option> | 		<option value="smartphone"><i class="ti ti-device-mobile"/> {{ i18n.ts.smartphone }}</option> | ||||||
| 		<option value="tablet"><i class="ti ti-device-tablet"/> {{ i18n.ts.tablet }}</option> | 		<option value="tablet"><i class="ti ti-device-tablet"/> {{ i18n.ts.tablet }}</option> | ||||||
| 		<option value="desktop"><i class="ti ti-device-desktop"/> {{ i18n.ts.desktop }}</option> | 		<option value="desktop"><i class="ti ti-device-desktop"/> {{ i18n.ts.desktop }}</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 
 | 
 | ||||||
| 	<MkSwitch v-model="showFixedPostForm">{{ i18n.ts.showFixedPostForm }}</MkSwitch> | 	<MkSwitch v-model="showFixedPostForm">{{ i18n.ts.showFixedPostForm }}</MkSwitch> | ||||||
| 
 | 
 | ||||||
|  | @ -31,12 +31,12 @@ | ||||||
| 				<MkSwitch v-model="enableInfiniteScroll">{{ i18n.ts.enableInfiniteScroll }}</MkSwitch> | 				<MkSwitch v-model="enableInfiniteScroll">{{ i18n.ts.enableInfiniteScroll }}</MkSwitch> | ||||||
| 				<MkSwitch v-model="useReactionPickerForContextMenu">{{ i18n.ts.useReactionPickerForContextMenu }}</MkSwitch> | 				<MkSwitch v-model="useReactionPickerForContextMenu">{{ i18n.ts.useReactionPickerForContextMenu }}</MkSwitch> | ||||||
| 			</div> | 			</div> | ||||||
| 			<FormSelect v-model="serverDisconnectedBehavior"> | 			<MkSelect v-model="serverDisconnectedBehavior"> | ||||||
| 				<template #label>{{ i18n.ts.whenServerDisconnected }}</template> | 				<template #label>{{ i18n.ts.whenServerDisconnected }}</template> | ||||||
| 				<option value="reload">{{ i18n.ts._serverDisconnectedBehavior.reload }}</option> | 				<option value="reload">{{ i18n.ts._serverDisconnectedBehavior.reload }}</option> | ||||||
| 				<option value="dialog">{{ i18n.ts._serverDisconnectedBehavior.dialog }}</option> | 				<option value="dialog">{{ i18n.ts._serverDisconnectedBehavior.dialog }}</option> | ||||||
| 				<option value="quiet">{{ i18n.ts._serverDisconnectedBehavior.quiet }}</option> | 				<option value="quiet">{{ i18n.ts._serverDisconnectedBehavior.quiet }}</option> | ||||||
| 			</FormSelect> | 			</MkSelect> | ||||||
| 		</div> | 		</div> | ||||||
| 	</FormSection> | 	</FormSection> | ||||||
| 
 | 
 | ||||||
|  | @ -57,22 +57,22 @@ | ||||||
| 				<MkSwitch v-model="disableDrawer">{{ i18n.ts.disableDrawer }}</MkSwitch> | 				<MkSwitch v-model="disableDrawer">{{ i18n.ts.disableDrawer }}</MkSwitch> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div> | 			<div> | ||||||
| 				<FormRadios v-model="emojiStyle"> | 				<MkRadios v-model="emojiStyle"> | ||||||
| 					<template #label>{{ i18n.ts.emojiStyle }}</template> | 					<template #label>{{ i18n.ts.emojiStyle }}</template> | ||||||
| 					<option value="native">{{ i18n.ts.native }}</option> | 					<option value="native">{{ i18n.ts.native }}</option> | ||||||
| 					<option value="fluentEmoji">Fluent Emoji</option> | 					<option value="fluentEmoji">Fluent Emoji</option> | ||||||
| 					<option value="twemoji">Twemoji</option> | 					<option value="twemoji">Twemoji</option> | ||||||
| 				</FormRadios> | 				</MkRadios> | ||||||
| 				<div style="margin: 8px 0 0 0; font-size: 1.5em;"><Mfm :key="emojiStyle" text="🍮🍦🍭🍩🍰🍫🍬🥞🍪"/></div> | 				<div style="margin: 8px 0 0 0; font-size: 1.5em;"><Mfm :key="emojiStyle" text="🍮🍦🍭🍩🍰🍫🍬🥞🍪"/></div> | ||||||
| 			</div> | 			</div> | ||||||
| 
 | 
 | ||||||
| 			<FormRadios v-model="fontSize"> | 			<MkRadios v-model="fontSize"> | ||||||
| 				<template #label>{{ i18n.ts.fontSize }}</template> | 				<template #label>{{ i18n.ts.fontSize }}</template> | ||||||
| 				<option :value="null"><span style="font-size: 14px;">Aa</span></option> | 				<option :value="null"><span style="font-size: 14px;">Aa</span></option> | ||||||
| 				<option value="1"><span style="font-size: 15px;">Aa</span></option> | 				<option value="1"><span style="font-size: 15px;">Aa</span></option> | ||||||
| 				<option value="2"><span style="font-size: 16px;">Aa</span></option> | 				<option value="2"><span style="font-size: 16px;">Aa</span></option> | ||||||
| 				<option value="3"><span style="font-size: 17px;">Aa</span></option> | 				<option value="3"><span style="font-size: 17px;">Aa</span></option> | ||||||
| 			</FormRadios> | 			</MkRadios> | ||||||
| 		</div> | 		</div> | ||||||
| 	</FormSection> | 	</FormSection> | ||||||
| 
 | 
 | ||||||
|  | @ -80,24 +80,24 @@ | ||||||
| 		<MkSwitch v-model="aiChanMode">{{ i18n.ts.aiChanMode }}</MkSwitch> | 		<MkSwitch v-model="aiChanMode">{{ i18n.ts.aiChanMode }}</MkSwitch> | ||||||
| 	</FormSection> | 	</FormSection> | ||||||
| 
 | 
 | ||||||
| 	<FormSelect v-model="instanceTicker"> | 	<MkSelect v-model="instanceTicker"> | ||||||
| 		<template #label>{{ i18n.ts.instanceTicker }}</template> | 		<template #label>{{ i18n.ts.instanceTicker }}</template> | ||||||
| 		<option value="none">{{ i18n.ts._instanceTicker.none }}</option> | 		<option value="none">{{ i18n.ts._instanceTicker.none }}</option> | ||||||
| 		<option value="remote">{{ i18n.ts._instanceTicker.remote }}</option> | 		<option value="remote">{{ i18n.ts._instanceTicker.remote }}</option> | ||||||
| 		<option value="always">{{ i18n.ts._instanceTicker.always }}</option> | 		<option value="always">{{ i18n.ts._instanceTicker.always }}</option> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 
 | 
 | ||||||
| 	<FormSelect v-model="nsfw"> | 	<MkSelect v-model="nsfw"> | ||||||
| 		<template #label>{{ i18n.ts.nsfw }}</template> | 		<template #label>{{ i18n.ts.nsfw }}</template> | ||||||
| 		<option value="respect">{{ i18n.ts._nsfw.respect }}</option> | 		<option value="respect">{{ i18n.ts._nsfw.respect }}</option> | ||||||
| 		<option value="ignore">{{ i18n.ts._nsfw.ignore }}</option> | 		<option value="ignore">{{ i18n.ts._nsfw.ignore }}</option> | ||||||
| 		<option value="force">{{ i18n.ts._nsfw.force }}</option> | 		<option value="force">{{ i18n.ts._nsfw.force }}</option> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 
 | 
 | ||||||
| 	<FormRange v-model="numberOfPageCache" :min="1" :max="10" :step="1" easing> | 	<MkRange v-model="numberOfPageCache" :min="1" :max="10" :step="1" easing> | ||||||
| 		<template #label>{{ i18n.ts.numberOfPageCache }}</template> | 		<template #label>{{ i18n.ts.numberOfPageCache }}</template> | ||||||
| 		<template #caption>{{ i18n.ts.numberOfPageCacheDescription }}</template> | 		<template #caption>{{ i18n.ts.numberOfPageCacheDescription }}</template> | ||||||
| 	</FormRange> | 	</MkRange> | ||||||
| 
 | 
 | ||||||
| 	<FormLink to="/settings/deck">{{ i18n.ts.deck }}</FormLink> | 	<FormLink to="/settings/deck">{{ i18n.ts.deck }}</FormLink> | ||||||
| 
 | 
 | ||||||
|  | @ -108,9 +108,9 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, ref, watch } from 'vue'; | import { computed, ref, watch } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FormRange from '@/components/form/range.vue'; | import MkRange from '@/components/MkRange.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import FormLink from '@/components/form/link.vue'; | import FormLink from '@/components/form/link.vue'; | ||||||
| import MkLink from '@/components/MkLink.vue'; | import MkLink from '@/components/MkLink.vue'; | ||||||
|  |  | ||||||
|  | @ -1,17 +1,17 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<MkInfo>{{ i18n.ts._instanceMute.title }}</MkInfo> | 	<MkInfo>{{ i18n.ts._instanceMute.title }}</MkInfo> | ||||||
| 	<FormTextarea v-model="instanceMutes"> | 	<MkTextarea v-model="instanceMutes"> | ||||||
| 		<template #label>{{ i18n.ts._instanceMute.heading }}</template> | 		<template #label>{{ i18n.ts._instanceMute.heading }}</template> | ||||||
| 		<template #caption>{{ i18n.ts._instanceMute.instanceMuteDescription }}<br>{{ i18n.ts._instanceMute.instanceMuteDescription2 }}</template> | 		<template #caption>{{ i18n.ts._instanceMute.instanceMuteDescription }}<br>{{ i18n.ts._instanceMute.instanceMuteDescription2 }}</template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| 	<MkButton primary :disabled="!changed" @click="save()"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | 	<MkButton primary :disabled="!changed" @click="save()"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> | ||||||
| </div> | </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { ref, watch } from 'vue'; | import { ref, watch } from 'vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkInfo from '@/components/MkInfo.vue'; | import MkInfo from '@/components/MkInfo.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -1,17 +1,17 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormTextarea v-model="items" tall manual-save> | 	<MkTextarea v-model="items" tall manual-save> | ||||||
| 		<template #label>{{ i18n.ts.navbar }}</template> | 		<template #label>{{ i18n.ts.navbar }}</template> | ||||||
| 		<template #caption><button class="_textButton" @click="addItem">{{ i18n.ts.addItem }}</button></template> | 		<template #caption><button class="_textButton" @click="addItem">{{ i18n.ts.addItem }}</button></template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 	<FormRadios v-model="menuDisplay"> | 	<MkRadios v-model="menuDisplay"> | ||||||
| 		<template #label>{{ i18n.ts.display }}</template> | 		<template #label>{{ i18n.ts.display }}</template> | ||||||
| 		<option value="sideFull">{{ i18n.ts._menuDisplay.sideFull }}</option> | 		<option value="sideFull">{{ i18n.ts._menuDisplay.sideFull }}</option> | ||||||
| 		<option value="sideIcon">{{ i18n.ts._menuDisplay.sideIcon }}</option> | 		<option value="sideIcon">{{ i18n.ts._menuDisplay.sideIcon }}</option> | ||||||
| 		<option value="top">{{ i18n.ts._menuDisplay.top }}</option> | 		<option value="top">{{ i18n.ts._menuDisplay.top }}</option> | ||||||
| 		<!-- <MkRadio v-model="menuDisplay" value="hide" disabled>{{ i18n.ts._menuDisplay.hide }}</MkRadio>--> <!-- TODO: サイドバーを完全に隠せるようにすると、別途ハンバーガーボタンのようなものをUIに表示する必要があり面倒 --> | 		<!-- <MkRadio v-model="menuDisplay" value="hide" disabled>{{ i18n.ts._menuDisplay.hide }}</MkRadio>--> <!-- TODO: サイドバーを完全に隠せるようにすると、別途ハンバーガーボタンのようなものをUIに表示する必要があり面倒 --> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 
 | 
 | ||||||
| 	<MkButton danger @click="reset()"><i class="ti ti-reload"></i> {{ i18n.ts.default }}</MkButton> | 	<MkButton danger @click="reset()"><i class="ti ti-reload"></i> {{ i18n.ts.default }}</MkButton> | ||||||
| </div> | </div> | ||||||
|  | @ -19,8 +19,8 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, ref, watch } from 'vue'; | import { computed, ref, watch } from 'vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { navbarItemDef } from '@/navbar'; | import { navbarItemDef } from '@/navbar'; | ||||||
|  |  | ||||||
|  | @ -2,9 +2,9 @@ | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormInfo warn>{{ i18n.ts._plugin.installWarn }}</FormInfo> | 	<FormInfo warn>{{ i18n.ts._plugin.installWarn }}</FormInfo> | ||||||
| 
 | 
 | ||||||
| 	<FormTextarea v-model="code" tall> | 	<MkTextarea v-model="code" tall> | ||||||
| 		<template #label>{{ i18n.ts.code }}</template> | 		<template #label>{{ i18n.ts.code }}</template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 	<div> | 	<div> | ||||||
| 		<MkButton :disabled="code == null" primary inline @click="install"><i class="ti ti-check"></i> {{ i18n.ts.install }}</MkButton> | 		<MkButton :disabled="code == null" primary inline @click="install"><i class="ti ti-check"></i> {{ i18n.ts.install }}</MkButton> | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| import { defineAsyncComponent, nextTick, ref } from 'vue'; | import { defineAsyncComponent, nextTick, ref } from 'vue'; | ||||||
| import { Interpreter, Parser, utils } from '@syuilo/aiscript'; | import { Interpreter, Parser, utils } from '@syuilo/aiscript'; | ||||||
| import { v4 as uuid } from 'uuid'; | import { v4 as uuid } from 'uuid'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInfo from '@/components/MkInfo.vue'; | import FormInfo from '@/components/MkInfo.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -8,13 +8,13 @@ | ||||||
| 		<template #caption>{{ i18n.ts.makeReactionsPublicDescription }}</template> | 		<template #caption>{{ i18n.ts.makeReactionsPublicDescription }}</template> | ||||||
| 	</MkSwitch> | 	</MkSwitch> | ||||||
| 		 | 		 | ||||||
| 	<FormSelect v-model="ffVisibility" @update:model-value="save()"> | 	<MkSelect v-model="ffVisibility" @update:model-value="save()"> | ||||||
| 		<template #label>{{ i18n.ts.ffVisibility }}</template> | 		<template #label>{{ i18n.ts.ffVisibility }}</template> | ||||||
| 		<option value="public">{{ i18n.ts._ffVisibility.public }}</option> | 		<option value="public">{{ i18n.ts._ffVisibility.public }}</option> | ||||||
| 		<option value="followers">{{ i18n.ts._ffVisibility.followers }}</option> | 		<option value="followers">{{ i18n.ts._ffVisibility.followers }}</option> | ||||||
| 		<option value="private">{{ i18n.ts._ffVisibility.private }}</option> | 		<option value="private">{{ i18n.ts._ffVisibility.private }}</option> | ||||||
| 		<template #caption>{{ i18n.ts.ffVisibilityDescription }}</template> | 		<template #caption>{{ i18n.ts.ffVisibilityDescription }}</template> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 		 | 		 | ||||||
| 	<MkSwitch v-model="hideOnlineStatus" @update:model-value="save()"> | 	<MkSwitch v-model="hideOnlineStatus" @update:model-value="save()"> | ||||||
| 		{{ i18n.ts.hideOnlineStatus }} | 		{{ i18n.ts.hideOnlineStatus }} | ||||||
|  | @ -40,12 +40,12 @@ | ||||||
| 				<template v-else-if="defaultNoteVisibility === 'specified'" #suffix>{{ i18n.ts._visibility.specified }}</template> | 				<template v-else-if="defaultNoteVisibility === 'specified'" #suffix>{{ i18n.ts._visibility.specified }}</template> | ||||||
| 
 | 
 | ||||||
| 				<div class="_gaps_m"> | 				<div class="_gaps_m"> | ||||||
| 					<FormSelect v-model="defaultNoteVisibility"> | 					<MkSelect v-model="defaultNoteVisibility"> | ||||||
| 						<option value="public">{{ i18n.ts._visibility.public }}</option> | 						<option value="public">{{ i18n.ts._visibility.public }}</option> | ||||||
| 						<option value="home">{{ i18n.ts._visibility.home }}</option> | 						<option value="home">{{ i18n.ts._visibility.home }}</option> | ||||||
| 						<option value="followers">{{ i18n.ts._visibility.followers }}</option> | 						<option value="followers">{{ i18n.ts._visibility.followers }}</option> | ||||||
| 						<option value="specified">{{ i18n.ts._visibility.specified }}</option> | 						<option value="specified">{{ i18n.ts._visibility.specified }}</option> | ||||||
| 					</FormSelect> | 					</MkSelect> | ||||||
| 					<MkSwitch v-model="defaultNoteLocalOnly">{{ i18n.ts._visibility.localOnly }}</MkSwitch> | 					<MkSwitch v-model="defaultNoteLocalOnly">{{ i18n.ts._visibility.localOnly }}</MkSwitch> | ||||||
| 				</div> | 				</div> | ||||||
| 			</FormFolder> | 			</FormFolder> | ||||||
|  | @ -59,7 +59,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -8,29 +8,29 @@ | ||||||
| 		<MkButton primary rounded class="bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> | 		<MkButton primary rounded class="bannerEdit" @click="changeBanner">{{ i18n.ts._profile.changeBanner }}</MkButton> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="profile.name" :max="30" manual-save> | 	<MkInput v-model="profile.name" :max="30" manual-save> | ||||||
| 		<template #label>{{ i18n.ts._profile.name }}</template> | 		<template #label>{{ i18n.ts._profile.name }}</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormTextarea v-model="profile.description" :max="500" tall manual-save> | 	<MkTextarea v-model="profile.description" :max="500" tall manual-save> | ||||||
| 		<template #label>{{ i18n.ts._profile.description }}</template> | 		<template #label>{{ i18n.ts._profile.description }}</template> | ||||||
| 		<template #caption>{{ i18n.ts._profile.youCanIncludeHashtags }}</template> | 		<template #caption>{{ i18n.ts._profile.youCanIncludeHashtags }}</template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="profile.location" manual-save> | 	<MkInput v-model="profile.location" manual-save> | ||||||
| 		<template #label>{{ i18n.ts.location }}</template> | 		<template #label>{{ i18n.ts.location }}</template> | ||||||
| 		<template #prefix><i class="ti ti-map-pin"></i></template> | 		<template #prefix><i class="ti ti-map-pin"></i></template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="profile.birthday" type="date" manual-save> | 	<MkInput v-model="profile.birthday" type="date" manual-save> | ||||||
| 		<template #label>{{ i18n.ts.birthday }}</template> | 		<template #label>{{ i18n.ts.birthday }}</template> | ||||||
| 		<template #prefix><i class="ti ti-cake"></i></template> | 		<template #prefix><i class="ti ti-cake"></i></template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormSelect v-model="profile.lang"> | 	<MkSelect v-model="profile.lang"> | ||||||
| 		<template #label>{{ i18n.ts.language }}</template> | 		<template #label>{{ i18n.ts.language }}</template> | ||||||
| 		<option v-for="x in Object.keys(langmap)" :key="x" :value="x">{{ langmap[x].nativeName }}</option> | 		<option v-for="x in Object.keys(langmap)" :key="x" :value="x">{{ langmap[x].nativeName }}</option> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 
 | 
 | ||||||
| 	<FormSlot> | 	<FormSlot> | ||||||
| 		<FormFolder> | 		<FormFolder> | ||||||
|  | @ -39,12 +39,12 @@ | ||||||
| 
 | 
 | ||||||
| 			<div class="_gaps_m"> | 			<div class="_gaps_m"> | ||||||
| 				<FormSplit v-for="(record, i) in fields" :min-width="250"> | 				<FormSplit v-for="(record, i) in fields" :min-width="250"> | ||||||
| 					<FormInput v-model="record.name" small> | 					<MkInput v-model="record.name" small> | ||||||
| 						<template #label>{{ i18n.ts._profile.metadataLabel }} #{{ i + 1 }}</template> | 						<template #label>{{ i18n.ts._profile.metadataLabel }} #{{ i + 1 }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 					<FormInput v-model="record.value" small> | 					<MkInput v-model="record.value" small> | ||||||
| 						<template #label>{{ i18n.ts._profile.metadataContent }} #{{ i + 1 }}</template> | 						<template #label>{{ i18n.ts._profile.metadataContent }} #{{ i + 1 }}</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 				</FormSplit> | 				</FormSplit> | ||||||
| 				<div> | 				<div> | ||||||
| 					<MkButton :disabled="fields.length >= 16" inline style="margin-right: 8px;" @click="addField"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton> | 					<MkButton :disabled="fields.length >= 16" inline style="margin-right: 8px;" @click="addField"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton> | ||||||
|  | @ -71,10 +71,10 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { reactive, watch } from 'vue'; | import { reactive, watch } from 'vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import FormSlot from '@/components/form/slot.vue'; | import FormSlot from '@/components/form/slot.vue'; | ||||||
|  |  | ||||||
|  | @ -17,27 +17,27 @@ | ||||||
| 		<template #caption>{{ i18n.ts.reactionSettingDescription2 }} <button class="_textButton" @click="preview">{{ i18n.ts.preview }}</button></template> | 		<template #caption>{{ i18n.ts.reactionSettingDescription2 }} <button class="_textButton" @click="preview">{{ i18n.ts.preview }}</button></template> | ||||||
| 	</FromSlot> | 	</FromSlot> | ||||||
| 
 | 
 | ||||||
| 	<FormRadios v-model="reactionPickerSize"> | 	<MkRadios v-model="reactionPickerSize"> | ||||||
| 		<template #label>{{ i18n.ts.size }}</template> | 		<template #label>{{ i18n.ts.size }}</template> | ||||||
| 		<option :value="1">{{ i18n.ts.small }}</option> | 		<option :value="1">{{ i18n.ts.small }}</option> | ||||||
| 		<option :value="2">{{ i18n.ts.medium }}</option> | 		<option :value="2">{{ i18n.ts.medium }}</option> | ||||||
| 		<option :value="3">{{ i18n.ts.large }}</option> | 		<option :value="3">{{ i18n.ts.large }}</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 	<FormRadios v-model="reactionPickerWidth"> | 	<MkRadios v-model="reactionPickerWidth"> | ||||||
| 		<template #label>{{ i18n.ts.numberOfColumn }}</template> | 		<template #label>{{ i18n.ts.numberOfColumn }}</template> | ||||||
| 		<option :value="1">5</option> | 		<option :value="1">5</option> | ||||||
| 		<option :value="2">6</option> | 		<option :value="2">6</option> | ||||||
| 		<option :value="3">7</option> | 		<option :value="3">7</option> | ||||||
| 		<option :value="4">8</option> | 		<option :value="4">8</option> | ||||||
| 		<option :value="5">9</option> | 		<option :value="5">9</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 	<FormRadios v-model="reactionPickerHeight"> | 	<MkRadios v-model="reactionPickerHeight"> | ||||||
| 		<template #label>{{ i18n.ts.height }}</template> | 		<template #label>{{ i18n.ts.height }}</template> | ||||||
| 		<option :value="1">{{ i18n.ts.small }}</option> | 		<option :value="1">{{ i18n.ts.small }}</option> | ||||||
| 		<option :value="2">{{ i18n.ts.medium }}</option> | 		<option :value="2">{{ i18n.ts.medium }}</option> | ||||||
| 		<option :value="3">{{ i18n.ts.large }}</option> | 		<option :value="3">{{ i18n.ts.large }}</option> | ||||||
| 		<option :value="4">{{ i18n.ts.large }}+</option> | 		<option :value="4">{{ i18n.ts.large }}+</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 
 | 
 | ||||||
| 	<MkSwitch v-model="reactionPickerUseDrawerForMobile"> | 	<MkSwitch v-model="reactionPickerUseDrawerForMobile"> | ||||||
| 		{{ i18n.ts.useDrawerReactionPickerForMobile }} | 		{{ i18n.ts.useDrawerReactionPickerForMobile }} | ||||||
|  | @ -56,8 +56,8 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { defineAsyncComponent, watch } from 'vue'; | import { defineAsyncComponent, watch } from 'vue'; | ||||||
| import Sortable from 'vuedraggable'; | import Sortable from 'vuedraggable'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FromSlot from '@/components/form/slot.vue'; | import FromSlot from '@/components/form/slot.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
|  |  | ||||||
|  | @ -1,12 +1,12 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormSelect v-model="type"> | 	<MkSelect v-model="type"> | ||||||
| 		<template #label>{{ i18n.ts.sound }}</template> | 		<template #label>{{ i18n.ts.sound }}</template> | ||||||
| 		<option v-for="x in soundsTypes" :key="x" :value="x">{{ x == null ? i18n.ts.none : x }}</option> | 		<option v-for="x in soundsTypes" :key="x" :value="x">{{ x == null ? i18n.ts.none : x }}</option> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 	<FormRange v-model="volume" :min="0" :max="1" :step="0.05" :text-converter="(v) => `${Math.floor(v * 100)}%`"> | 	<MkRange v-model="volume" :min="0" :max="1" :step="0.05" :text-converter="(v) => `${Math.floor(v * 100)}%`"> | ||||||
| 		<template #label>{{ i18n.ts.volume }}</template> | 		<template #label>{{ i18n.ts.volume }}</template> | ||||||
| 	</FormRange> | 	</MkRange> | ||||||
| 
 | 
 | ||||||
| 	<div class="_buttons"> | 	<div class="_buttons"> | ||||||
| 		<MkButton inline @click="listen"><i class="ti ti-player-play"></i> {{ i18n.ts.listen }}</MkButton> | 		<MkButton inline @click="listen"><i class="ti ti-player-play"></i> {{ i18n.ts.listen }}</MkButton> | ||||||
|  | @ -17,9 +17,9 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormRange from '@/components/form/range.vue'; | import MkRange from '@/components/MkRange.vue'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
| import { playFile, soundsTypes } from '@/scripts/sound'; | import { playFile, soundsTypes } from '@/scripts/sound'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormRange v-model="masterVolume" :min="0" :max="1" :step="0.05" :text-converter="(v) => `${Math.floor(v * 100)}%`"> | 	<MkRange v-model="masterVolume" :min="0" :max="1" :step="0.05" :text-converter="(v) => `${Math.floor(v * 100)}%`"> | ||||||
| 		<template #label>{{ i18n.ts.masterVolume }}</template> | 		<template #label>{{ i18n.ts.masterVolume }}</template> | ||||||
| 	</FormRange> | 	</MkRange> | ||||||
| 
 | 
 | ||||||
| 	<FormSection> | 	<FormSection> | ||||||
| 		<template #label>{{ i18n.ts.sounds }}</template> | 		<template #label>{{ i18n.ts.sounds }}</template> | ||||||
|  | @ -23,7 +23,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, ref } from 'vue'; | import { computed, ref } from 'vue'; | ||||||
| import XSound from './sounds.sound.vue'; | import XSound from './sounds.sound.vue'; | ||||||
| import FormRange from '@/components/form/range.vue'; | import MkRange from '@/components/MkRange.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormLink from '@/components/form/link.vue'; | import FormLink from '@/components/form/link.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormSelect v-model="statusbar.type" placeholder="Please select"> | 	<MkSelect v-model="statusbar.type" placeholder="Please select"> | ||||||
| 		<template #label>{{ i18n.ts.type }}</template> | 		<template #label>{{ i18n.ts.type }}</template> | ||||||
| 		<option value="rss">RSS</option> | 		<option value="rss">RSS</option> | ||||||
| 		<option value="federation">Federation</option> | 		<option value="federation">Federation</option> | ||||||
| 		<option value="userList">User list timeline</option> | 		<option value="userList">User list timeline</option> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 
 | 
 | ||||||
| 	<MkInput v-model="statusbar.name" manual-save> | 	<MkInput v-model="statusbar.name" manual-save> | ||||||
| 		<template #label>{{ i18n.ts.label }}</template> | 		<template #label>{{ i18n.ts.label }}</template> | ||||||
|  | @ -15,14 +15,14 @@ | ||||||
| 		<template #label>Black</template> | 		<template #label>Black</template> | ||||||
| 	</MkSwitch> | 	</MkSwitch> | ||||||
| 
 | 
 | ||||||
| 	<FormRadios v-model="statusbar.size"> | 	<MkRadios v-model="statusbar.size"> | ||||||
| 		<template #label>{{ i18n.ts.size }}</template> | 		<template #label>{{ i18n.ts.size }}</template> | ||||||
| 		<option value="verySmall">{{ i18n.ts.small }}+</option> | 		<option value="verySmall">{{ i18n.ts.small }}+</option> | ||||||
| 		<option value="small">{{ i18n.ts.small }}</option> | 		<option value="small">{{ i18n.ts.small }}</option> | ||||||
| 		<option value="medium">{{ i18n.ts.medium }}</option> | 		<option value="medium">{{ i18n.ts.medium }}</option> | ||||||
| 		<option value="large">{{ i18n.ts.large }}</option> | 		<option value="large">{{ i18n.ts.large }}</option> | ||||||
| 		<option value="veryLarge">{{ i18n.ts.large }}+</option> | 		<option value="veryLarge">{{ i18n.ts.large }}+</option> | ||||||
| 	</FormRadios> | 	</MkRadios> | ||||||
| 
 | 
 | ||||||
| 	<template v-if="statusbar.type === 'rss'"> | 	<template v-if="statusbar.type === 'rss'"> | ||||||
| 		<MkInput v-model="statusbar.props.url" manual-save type="url"> | 		<MkInput v-model="statusbar.props.url" manual-save type="url"> | ||||||
|  | @ -34,10 +34,10 @@ | ||||||
| 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | ||||||
| 			<template #label>{{ i18n.ts.refreshInterval }}</template> | 			<template #label>{{ i18n.ts.refreshInterval }}</template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 		<FormRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | 		<MkRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | ||||||
| 			<template #label>{{ i18n.ts.speed }}</template> | 			<template #label>{{ i18n.ts.speed }}</template> | ||||||
| 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | ||||||
| 		</FormRange> | 		</MkRange> | ||||||
| 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | ||||||
| 			<template #label>{{ i18n.ts.reverse }}</template> | 			<template #label>{{ i18n.ts.reverse }}</template> | ||||||
| 		</MkSwitch> | 		</MkSwitch> | ||||||
|  | @ -46,10 +46,10 @@ | ||||||
| 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | ||||||
| 			<template #label>{{ i18n.ts.refreshInterval }}</template> | 			<template #label>{{ i18n.ts.refreshInterval }}</template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 		<FormRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | 		<MkRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | ||||||
| 			<template #label>{{ i18n.ts.speed }}</template> | 			<template #label>{{ i18n.ts.speed }}</template> | ||||||
| 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | ||||||
| 		</FormRange> | 		</MkRange> | ||||||
| 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | ||||||
| 			<template #label>{{ i18n.ts.reverse }}</template> | 			<template #label>{{ i18n.ts.reverse }}</template> | ||||||
| 		</MkSwitch> | 		</MkSwitch> | ||||||
|  | @ -58,17 +58,17 @@ | ||||||
| 		</MkSwitch> | 		</MkSwitch> | ||||||
| 	</template> | 	</template> | ||||||
| 	<template v-else-if="statusbar.type === 'userList' && userLists != null"> | 	<template v-else-if="statusbar.type === 'userList' && userLists != null"> | ||||||
| 		<FormSelect v-model="statusbar.props.userListId"> | 		<MkSelect v-model="statusbar.props.userListId"> | ||||||
| 			<template #label>{{ i18n.ts.userList }}</template> | 			<template #label>{{ i18n.ts.userList }}</template> | ||||||
| 			<option v-for="list in userLists" :value="list.id">{{ list.name }}</option> | 			<option v-for="list in userLists" :value="list.id">{{ list.name }}</option> | ||||||
| 		</FormSelect> | 		</MkSelect> | ||||||
| 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | 		<MkInput v-model="statusbar.props.refreshIntervalSec" manual-save type="number"> | ||||||
| 			<template #label>{{ i18n.ts.refreshInterval }}</template> | 			<template #label>{{ i18n.ts.refreshInterval }}</template> | ||||||
| 		</MkInput> | 		</MkInput> | ||||||
| 		<FormRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | 		<MkRange v-model="statusbar.props.marqueeDuration" :min="5" :max="150" :step="1"> | ||||||
| 			<template #label>{{ i18n.ts.speed }}</template> | 			<template #label>{{ i18n.ts.speed }}</template> | ||||||
| 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | 			<template #caption>{{ i18n.ts.fast }} <-> {{ i18n.ts.slow }}</template> | ||||||
| 		</FormRange> | 		</MkRange> | ||||||
| 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | 		<MkSwitch v-model="statusbar.props.marqueeReverse"> | ||||||
| 			<template #label>{{ i18n.ts.reverse }}</template> | 			<template #label>{{ i18n.ts.reverse }}</template> | ||||||
| 		</MkSwitch> | 		</MkSwitch> | ||||||
|  | @ -82,12 +82,12 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, reactive, ref, watch } from 'vue'; | import { computed, reactive, ref, watch } from 'vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormRange from '@/components/form/range.vue'; | import MkRange from '@/components/MkRange.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { defaultStore } from '@/store'; | import { defaultStore } from '@/store'; | ||||||
| import { i18n } from '@/i18n'; | import { i18n } from '@/i18n'; | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ | ||||||
| import { computed, onMounted, ref, watch } from 'vue'; | import { computed, onMounted, ref, watch } from 'vue'; | ||||||
| import { v4 as uuid } from 'uuid'; | import { v4 as uuid } from 'uuid'; | ||||||
| import XStatusbar from './statusbar.statusbar.vue'; | import XStatusbar from './statusbar.statusbar.vue'; | ||||||
| import FormRadios from '@/components/form/radios.vue'; | import MkRadios from '@/components/MkRadios.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormTextarea v-model="installThemeCode"> | 	<MkTextarea v-model="installThemeCode"> | ||||||
| 		<template #label>{{ i18n.ts._theme.code }}</template> | 		<template #label>{{ i18n.ts._theme.code }}</template> | ||||||
| 	</FormTextarea> | 	</MkTextarea> | ||||||
| 
 | 
 | ||||||
| 	<div class="_buttons"> | 	<div class="_buttons"> | ||||||
| 		<MkButton :disabled="installThemeCode == null" inline @click="() => preview(installThemeCode)"><i class="ti ti-eye"></i> {{ i18n.ts.preview }}</MkButton> | 		<MkButton :disabled="installThemeCode == null" inline @click="() => preview(installThemeCode)"><i class="ti ti-eye"></i> {{ i18n.ts.preview }}</MkButton> | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import JSON5 from 'json5'; | import JSON5 from 'json5'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import { applyTheme, validateTheme } from '@/scripts/theme'; | import { applyTheme, validateTheme } from '@/scripts/theme'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormSelect v-model="selectedThemeId"> | 	<MkSelect v-model="selectedThemeId"> | ||||||
| 		<template #label>{{ i18n.ts.theme }}</template> | 		<template #label>{{ i18n.ts.theme }}</template> | ||||||
| 		<optgroup :label="i18n.ts._theme.installedThemes"> | 		<optgroup :label="i18n.ts._theme.installedThemes"> | ||||||
| 			<option v-for="x in installedThemes" :key="x.id" :value="x.id">{{ x.name }}</option> | 			<option v-for="x in installedThemes" :key="x.id" :value="x.id">{{ x.name }}</option> | ||||||
|  | @ -8,18 +8,18 @@ | ||||||
| 		<optgroup :label="i18n.ts._theme.builtinThemes"> | 		<optgroup :label="i18n.ts._theme.builtinThemes"> | ||||||
| 			<option v-for="x in builtinThemes" :key="x.id" :value="x.id">{{ x.name }}</option> | 			<option v-for="x in builtinThemes" :key="x.id" :value="x.id">{{ x.name }}</option> | ||||||
| 		</optgroup> | 		</optgroup> | ||||||
| 	</FormSelect> | 	</MkSelect> | ||||||
| 	<template v-if="selectedTheme"> | 	<template v-if="selectedTheme"> | ||||||
| 		<FormInput readonly :model-value="selectedTheme.author"> | 		<MkInput readonly :model-value="selectedTheme.author"> | ||||||
| 			<template #label>{{ i18n.ts.author }}</template> | 			<template #label>{{ i18n.ts.author }}</template> | ||||||
| 		</FormInput> | 		</MkInput> | ||||||
| 		<FormTextarea v-if="selectedTheme.desc" readonly :model-value="selectedTheme.desc"> | 		<MkTextarea v-if="selectedTheme.desc" readonly :model-value="selectedTheme.desc"> | ||||||
| 			<template #label>{{ i18n.ts._theme.description }}</template> | 			<template #label>{{ i18n.ts._theme.description }}</template> | ||||||
| 		</FormTextarea> | 		</MkTextarea> | ||||||
| 		<FormTextarea readonly tall :model-value="selectedThemeCode"> | 		<MkTextarea readonly tall :model-value="selectedThemeCode"> | ||||||
| 			<template #label>{{ i18n.ts._theme.code }}</template> | 			<template #label>{{ i18n.ts._theme.code }}</template> | ||||||
| 			<template #caption><button class="_textButton" @click="copyThemeCode()">{{ i18n.ts.copy }}</button></template> | 			<template #caption><button class="_textButton" @click="copyThemeCode()">{{ i18n.ts.copy }}</button></template> | ||||||
| 		</FormTextarea> | 		</MkTextarea> | ||||||
| 		<MkButton v-if="!builtinThemes.some(t => t.id == selectedTheme.id)" danger @click="uninstall()"><i class="ti ti-trash"></i> {{ i18n.ts.uninstall }}</MkButton> | 		<MkButton v-if="!builtinThemes.some(t => t.id == selectedTheme.id)" danger @click="uninstall()"><i class="ti ti-trash"></i> {{ i18n.ts.uninstall }}</MkButton> | ||||||
| 	</template> | 	</template> | ||||||
| </div> | </div> | ||||||
|  | @ -28,9 +28,9 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { computed, ref } from 'vue'; | import { computed, ref } from 'vue'; | ||||||
| import JSON5 from 'json5'; | import JSON5 from 'json5'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import { Theme, getBuiltinThemesRef } from '@/scripts/theme'; | import { Theme, getBuiltinThemesRef } from '@/scripts/theme'; | ||||||
| import copyToClipboard from '@/scripts/copy-to-clipboard'; | import copyToClipboard from '@/scripts/copy-to-clipboard'; | ||||||
|  |  | ||||||
|  | @ -27,7 +27,7 @@ | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	<div class="selects"> | 	<div class="selects"> | ||||||
| 		<FormSelect v-model="lightThemeId" large class="select"> | 		<MkSelect v-model="lightThemeId" large class="select"> | ||||||
| 			<template #label>{{ i18n.ts.themeForLightMode }}</template> | 			<template #label>{{ i18n.ts.themeForLightMode }}</template> | ||||||
| 			<template #prefix><i class="ti ti-sun"></i></template> | 			<template #prefix><i class="ti ti-sun"></i></template> | ||||||
| 			<option v-if="instanceLightTheme" :key="'instance:' + instanceLightTheme.id" :value="instanceLightTheme.id">{{ instanceLightTheme.name }}</option> | 			<option v-if="instanceLightTheme" :key="'instance:' + instanceLightTheme.id" :value="instanceLightTheme.id">{{ instanceLightTheme.name }}</option> | ||||||
|  | @ -37,8 +37,8 @@ | ||||||
| 			<optgroup :label="i18n.ts._theme.builtinThemes"> | 			<optgroup :label="i18n.ts._theme.builtinThemes"> | ||||||
| 				<option v-for="x in builtinLightThemes" :key="'builtin:' + x.id" :value="x.id">{{ x.name }}</option> | 				<option v-for="x in builtinLightThemes" :key="'builtin:' + x.id" :value="x.id">{{ x.name }}</option> | ||||||
| 			</optgroup> | 			</optgroup> | ||||||
| 		</FormSelect> | 		</MkSelect> | ||||||
| 		<FormSelect v-model="darkThemeId" large class="select"> | 		<MkSelect v-model="darkThemeId" large class="select"> | ||||||
| 			<template #label>{{ i18n.ts.themeForDarkMode }}</template> | 			<template #label>{{ i18n.ts.themeForDarkMode }}</template> | ||||||
| 			<template #prefix><i class="ti ti-moon"></i></template> | 			<template #prefix><i class="ti ti-moon"></i></template> | ||||||
| 			<option v-if="instanceDarkTheme" :key="'instance:' + instanceDarkTheme.id" :value="instanceDarkTheme.id">{{ instanceDarkTheme.name }}</option> | 			<option v-if="instanceDarkTheme" :key="'instance:' + instanceDarkTheme.id" :value="instanceDarkTheme.id">{{ instanceDarkTheme.name }}</option> | ||||||
|  | @ -48,7 +48,7 @@ | ||||||
| 			<optgroup :label="i18n.ts._theme.builtinThemes"> | 			<optgroup :label="i18n.ts._theme.builtinThemes"> | ||||||
| 				<option v-for="x in builtinDarkThemes" :key="'builtin:' + x.id" :value="x.id">{{ x.name }}</option> | 				<option v-for="x in builtinDarkThemes" :key="'builtin:' + x.id" :value="x.id">{{ x.name }}</option> | ||||||
| 			</optgroup> | 			</optgroup> | ||||||
| 		</FormSelect> | 		</MkSelect> | ||||||
| 	</div> | 	</div> | ||||||
| 
 | 
 | ||||||
| 	<FormSection> | 	<FormSection> | ||||||
|  | @ -69,7 +69,7 @@ | ||||||
| import { computed, onActivated, ref, watch } from 'vue'; | import { computed, onActivated, ref, watch } from 'vue'; | ||||||
| import JSON5 from 'json5'; | import JSON5 from 'json5'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import FormLink from '@/components/form/link.vue'; | import FormLink from '@/components/form/link.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
|  |  | ||||||
|  | @ -1,17 +1,17 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormInput v-model="name"> | 	<MkInput v-model="name"> | ||||||
| 		<template #label>Name</template> | 		<template #label>Name</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="url" type="url"> | 	<MkInput v-model="url" type="url"> | ||||||
| 		<template #label>URL</template> | 		<template #label>URL</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="secret"> | 	<MkInput v-model="secret"> | ||||||
| 		<template #prefix><i class="ti ti-lock"></i></template> | 		<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 		<template #label>Secret</template> | 		<template #label>Secret</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormSection> | 	<FormSection> | ||||||
| 		<template #label>Events</template> | 		<template #label>Events</template> | ||||||
|  | @ -37,7 +37,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
|  |  | ||||||
|  | @ -1,17 +1,17 @@ | ||||||
| <template> | <template> | ||||||
| <div class="_gaps_m"> | <div class="_gaps_m"> | ||||||
| 	<FormInput v-model="name"> | 	<MkInput v-model="name"> | ||||||
| 		<template #label>Name</template> | 		<template #label>Name</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="url" type="url"> | 	<MkInput v-model="url" type="url"> | ||||||
| 		<template #label>URL</template> | 		<template #label>URL</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormInput v-model="secret"> | 	<MkInput v-model="secret"> | ||||||
| 		<template #prefix><i class="ti ti-lock"></i></template> | 		<template #prefix><i class="ti ti-lock"></i></template> | ||||||
| 		<template #label>Secret</template> | 		<template #label>Secret</template> | ||||||
| 	</FormInput> | 	</MkInput> | ||||||
| 
 | 
 | ||||||
| 	<FormSection> | 	<FormSection> | ||||||
| 		<template #label>Events</template> | 		<template #label>Events</template> | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
|  |  | ||||||
|  | @ -7,17 +7,17 @@ | ||||||
| 	<div> | 	<div> | ||||||
| 		<div v-show="tab === 'soft'" class="_gaps_m"> | 		<div v-show="tab === 'soft'" class="_gaps_m"> | ||||||
| 			<MkInfo>{{ i18n.ts._wordMute.softDescription }}</MkInfo> | 			<MkInfo>{{ i18n.ts._wordMute.softDescription }}</MkInfo> | ||||||
| 			<FormTextarea v-model="softMutedWords"> | 			<MkTextarea v-model="softMutedWords"> | ||||||
| 				<span>{{ i18n.ts._wordMute.muteWords }}</span> | 				<span>{{ i18n.ts._wordMute.muteWords }}</span> | ||||||
| 				<template #caption>{{ i18n.ts._wordMute.muteWordsDescription }}<br>{{ i18n.ts._wordMute.muteWordsDescription2 }}</template> | 				<template #caption>{{ i18n.ts._wordMute.muteWordsDescription }}<br>{{ i18n.ts._wordMute.muteWordsDescription2 }}</template> | ||||||
| 			</FormTextarea> | 			</MkTextarea> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div v-show="tab === 'hard'" class="_gaps_m"> | 		<div v-show="tab === 'hard'" class="_gaps_m"> | ||||||
| 			<MkInfo>{{ i18n.ts._wordMute.hardDescription }} {{ i18n.ts.reflectMayTakeTime }}</MkInfo> | 			<MkInfo>{{ i18n.ts._wordMute.hardDescription }} {{ i18n.ts.reflectMayTakeTime }}</MkInfo> | ||||||
| 			<FormTextarea v-model="hardMutedWords"> | 			<MkTextarea v-model="hardMutedWords"> | ||||||
| 				<span>{{ i18n.ts._wordMute.muteWords }}</span> | 				<span>{{ i18n.ts._wordMute.muteWords }}</span> | ||||||
| 				<template #caption>{{ i18n.ts._wordMute.muteWordsDescription }}<br>{{ i18n.ts._wordMute.muteWordsDescription2 }}</template> | 				<template #caption>{{ i18n.ts._wordMute.muteWordsDescription }}<br>{{ i18n.ts._wordMute.muteWordsDescription2 }}</template> | ||||||
| 			</FormTextarea> | 			</MkTextarea> | ||||||
| 			<MkKeyValue v-if="hardWordMutedNotesCount != null"> | 			<MkKeyValue v-if="hardWordMutedNotesCount != null"> | ||||||
| 				<template #key>{{ i18n.ts._wordMute.mutedNotes }}</template> | 				<template #key>{{ i18n.ts._wordMute.mutedNotes }}</template> | ||||||
| 				<template #value>{{ number(hardWordMutedNotesCount) }}</template> | 				<template #value>{{ number(hardWordMutedNotesCount) }}</template> | ||||||
|  | @ -30,7 +30,7 @@ | ||||||
| 
 | 
 | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { ref, watch } from 'vue'; | import { ref, watch } from 'vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkKeyValue from '@/components/MkKeyValue.vue'; | import MkKeyValue from '@/components/MkKeyValue.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInfo from '@/components/MkInfo.vue'; | import MkInfo from '@/components/MkInfo.vue'; | ||||||
|  |  | ||||||
|  | @ -46,9 +46,9 @@ | ||||||
| 				<template #label>{{ i18n.ts.editCode }}</template> | 				<template #label>{{ i18n.ts.editCode }}</template> | ||||||
| 
 | 
 | ||||||
| 				<div class="_gaps_m"> | 				<div class="_gaps_m"> | ||||||
| 					<FormTextarea v-model="themeCode" tall> | 					<MkTextarea v-model="themeCode" tall> | ||||||
| 						<template #label>{{ i18n.ts._theme.code }}</template> | 						<template #label>{{ i18n.ts._theme.code }}</template> | ||||||
| 					</FormTextarea> | 					</MkTextarea> | ||||||
| 					<MkButton primary @click="applyThemeCode">{{ i18n.ts.apply }}</MkButton> | 					<MkButton primary @click="applyThemeCode">{{ i18n.ts.apply }}</MkButton> | ||||||
| 				</div> | 				</div> | ||||||
| 			</FormFolder> | 			</FormFolder> | ||||||
|  | @ -57,9 +57,9 @@ | ||||||
| 				<template #label>{{ i18n.ts.addDescription }}</template> | 				<template #label>{{ i18n.ts.addDescription }}</template> | ||||||
| 
 | 
 | ||||||
| 				<div class="_gaps_m"> | 				<div class="_gaps_m"> | ||||||
| 					<FormTextarea v-model="description"> | 					<MkTextarea v-model="description"> | ||||||
| 						<template #label>{{ i18n.ts._theme.description }}</template> | 						<template #label>{{ i18n.ts._theme.description }}</template> | ||||||
| 					</FormTextarea> | 					</MkTextarea> | ||||||
| 				</div> | 				</div> | ||||||
| 			</FormFolder> | 			</FormFolder> | ||||||
| 		</div> | 		</div> | ||||||
|  | @ -75,7 +75,7 @@ import { v4 as uuid } from 'uuid'; | ||||||
| import JSON5 from 'json5'; | import JSON5 from 'json5'; | ||||||
| 
 | 
 | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| 
 | 
 | ||||||
| import { $i } from '@/account'; | import { $i } from '@/account'; | ||||||
|  |  | ||||||
|  | @ -95,9 +95,9 @@ | ||||||
| 					<MkButton v-if="user.host == null && iAmModerator" inline style="margin-right: 8px;" @click="resetPassword"><i class="ti ti-key"></i> {{ i18n.ts.resetPassword }}</MkButton> | 					<MkButton v-if="user.host == null && iAmModerator" inline style="margin-right: 8px;" @click="resetPassword"><i class="ti ti-key"></i> {{ i18n.ts.resetPassword }}</MkButton> | ||||||
| 					<MkButton v-if="$i.isAdmin" inline danger @click="deleteAccount">{{ i18n.ts.deleteAccount }}</MkButton> | 					<MkButton v-if="$i.isAdmin" inline danger @click="deleteAccount">{{ i18n.ts.deleteAccount }}</MkButton> | ||||||
| 				</div> | 				</div> | ||||||
| 				<FormTextarea v-model="moderationNote" manual-save> | 				<MkTextarea v-model="moderationNote" manual-save> | ||||||
| 					<template #label>Moderation note</template> | 					<template #label>Moderation note</template> | ||||||
| 				</FormTextarea> | 				</MkTextarea> | ||||||
| 				<FormFolder> | 				<FormFolder> | ||||||
| 					<template #label>IP</template> | 					<template #label>IP</template> | ||||||
| 					<MkInfo v-if="!iAmAdmin" warn>{{ i18n.ts.requireAdminForView }}</MkInfo> | 					<MkInfo v-if="!iAmAdmin" warn>{{ i18n.ts.requireAdminForView }}</MkInfo> | ||||||
|  | @ -117,13 +117,13 @@ | ||||||
| 				<FormSection> | 				<FormSection> | ||||||
| 					<template #label>Drive Capacity Override</template> | 					<template #label>Drive Capacity Override</template> | ||||||
| 
 | 
 | ||||||
| 					<FormInput v-if="user.host == null" v-model="driveCapacityOverrideMb" inline :manual-save="true" type="number" :placeholder="i18n.t('defaultValueIs', { value: instance.driveCapacityPerLocalUserMb })" @update:model-value="applyDriveCapacityOverride"> | 					<MkInput v-if="user.host == null" v-model="driveCapacityOverrideMb" inline :manual-save="true" type="number" :placeholder="i18n.t('defaultValueIs', { value: instance.driveCapacityPerLocalUserMb })" @update:model-value="applyDriveCapacityOverride"> | ||||||
| 						<template #label>{{ i18n.ts.driveCapOverrideLabel }}</template> | 						<template #label>{{ i18n.ts.driveCapOverrideLabel }}</template> | ||||||
| 						<template #suffix>MB</template> | 						<template #suffix>MB</template> | ||||||
| 						<template #caption> | 						<template #caption> | ||||||
| 							{{ i18n.ts.driveCapOverrideCaption }} | 							{{ i18n.ts.driveCapOverrideCaption }} | ||||||
| 						</template> | 						</template> | ||||||
| 					</FormInput> | 					</MkInput> | ||||||
| 				</FormSection> | 				</FormSection> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div v-else-if="tab === 'chart'" class="_gaps_m"> | 			<div v-else-if="tab === 'chart'" class="_gaps_m"> | ||||||
|  | @ -158,16 +158,16 @@ import { computed, watch } from 'vue'; | ||||||
| import * as misskey from 'misskey-js'; | import * as misskey from 'misskey-js'; | ||||||
| import MkChart from '@/components/MkChart.vue'; | import MkChart from '@/components/MkChart.vue'; | ||||||
| import MkObjectView from '@/components/MkObjectView.vue'; | import MkObjectView from '@/components/MkObjectView.vue'; | ||||||
| import FormTextarea from '@/components/form/textarea.vue'; | import MkTextarea from '@/components/MkTextarea.vue'; | ||||||
| import MkSwitch from '@/components/MkSwitch.vue'; | import MkSwitch from '@/components/MkSwitch.vue'; | ||||||
| import FormLink from '@/components/form/link.vue'; | import FormLink from '@/components/form/link.vue'; | ||||||
| import FormSection from '@/components/form/section.vue'; | import FormSection from '@/components/form/section.vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import FormInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import FormSplit from '@/components/form/split.vue'; | import FormSplit from '@/components/form/split.vue'; | ||||||
| import FormFolder from '@/components/form/folder.vue'; | import FormFolder from '@/components/form/folder.vue'; | ||||||
| import MkKeyValue from '@/components/MkKeyValue.vue'; | import MkKeyValue from '@/components/MkKeyValue.vue'; | ||||||
| import MkSelect from '@/components/form/select.vue'; | import MkSelect from '@/components/MkSelect.vue'; | ||||||
| import FormSuspense from '@/components/form/suspense.vue'; | import FormSuspense from '@/components/form/suspense.vue'; | ||||||
| import MkFileListForAdmin from '@/components/MkFileListForAdmin.vue'; | import MkFileListForAdmin from '@/components/MkFileListForAdmin.vue'; | ||||||
| import MkInfo from '@/components/MkInfo.vue'; | import MkInfo from '@/components/MkInfo.vue'; | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { } from 'vue'; | import { } from 'vue'; | ||||||
| import MkButton from '@/components/MkButton.vue'; | import MkButton from '@/components/MkButton.vue'; | ||||||
| import MkInput from '@/components/form/input.vue'; | import MkInput from '@/components/MkInput.vue'; | ||||||
| import { host } from '@/config'; | import { host } from '@/config'; | ||||||
| import * as os from '@/os'; | import * as os from '@/os'; | ||||||
| import { login } from '@/account'; | import { login } from '@/account'; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue