Merge branch 'main' into fix/roman-arabic-converter
This commit is contained in:
		
						commit
						67389a3c94
					
				
							
								
								
									
										264
									
								
								.eslintrc-auto-import.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								.eslintrc-auto-import.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,264 @@ | ||||
| { | ||||
|   "globals": { | ||||
|     "Component": true, | ||||
|     "ComponentPublicInstance": true, | ||||
|     "ComputedRef": true, | ||||
|     "EffectScope": true, | ||||
|     "InjectionKey": true, | ||||
|     "PropType": true, | ||||
|     "Ref": true, | ||||
|     "VNode": true, | ||||
|     "asyncComputed": true, | ||||
|     "autoResetRef": true, | ||||
|     "computed": true, | ||||
|     "computedAsync": true, | ||||
|     "computedEager": true, | ||||
|     "computedInject": true, | ||||
|     "computedWithControl": true, | ||||
|     "controlledComputed": true, | ||||
|     "controlledRef": true, | ||||
|     "createApp": true, | ||||
|     "createEventHook": true, | ||||
|     "createGlobalState": true, | ||||
|     "createInjectionState": true, | ||||
|     "createReactiveFn": true, | ||||
|     "createSharedComposable": true, | ||||
|     "createUnrefFn": true, | ||||
|     "customRef": true, | ||||
|     "debouncedRef": true, | ||||
|     "debouncedWatch": true, | ||||
|     "defineAsyncComponent": true, | ||||
|     "defineComponent": true, | ||||
|     "eagerComputed": true, | ||||
|     "effectScope": true, | ||||
|     "extendRef": true, | ||||
|     "getCurrentInstance": true, | ||||
|     "getCurrentScope": true, | ||||
|     "h": true, | ||||
|     "ignorableWatch": true, | ||||
|     "inject": true, | ||||
|     "isDefined": true, | ||||
|     "isProxy": true, | ||||
|     "isReactive": true, | ||||
|     "isReadonly": true, | ||||
|     "isRef": true, | ||||
|     "logicAnd": true, | ||||
|     "logicNot": true, | ||||
|     "logicOr": true, | ||||
|     "makeDestructurable": true, | ||||
|     "markRaw": true, | ||||
|     "nextTick": true, | ||||
|     "onActivated": true, | ||||
|     "onBeforeMount": true, | ||||
|     "onBeforeRouteLeave": true, | ||||
|     "onBeforeRouteUpdate": true, | ||||
|     "onBeforeUnmount": true, | ||||
|     "onBeforeUpdate": true, | ||||
|     "onClickOutside": true, | ||||
|     "onDeactivated": true, | ||||
|     "onErrorCaptured": true, | ||||
|     "onKeyStroke": true, | ||||
|     "onLongPress": true, | ||||
|     "onMounted": true, | ||||
|     "onRenderTracked": true, | ||||
|     "onRenderTriggered": true, | ||||
|     "onScopeDispose": true, | ||||
|     "onServerPrefetch": true, | ||||
|     "onStartTyping": true, | ||||
|     "onUnmounted": true, | ||||
|     "onUpdated": true, | ||||
|     "pausableWatch": true, | ||||
|     "provide": true, | ||||
|     "reactify": true, | ||||
|     "reactifyObject": true, | ||||
|     "reactive": true, | ||||
|     "reactiveComputed": true, | ||||
|     "reactiveOmit": true, | ||||
|     "reactivePick": true, | ||||
|     "readonly": true, | ||||
|     "ref": true, | ||||
|     "refAutoReset": true, | ||||
|     "refDebounced": true, | ||||
|     "refDefault": true, | ||||
|     "refThrottled": true, | ||||
|     "refWithControl": true, | ||||
|     "resolveComponent": true, | ||||
|     "resolveRef": true, | ||||
|     "resolveUnref": true, | ||||
|     "shallowReactive": true, | ||||
|     "shallowReadonly": true, | ||||
|     "shallowRef": true, | ||||
|     "syncRef": true, | ||||
|     "syncRefs": true, | ||||
|     "templateRef": true, | ||||
|     "throttledRef": true, | ||||
|     "throttledWatch": true, | ||||
|     "toRaw": true, | ||||
|     "toReactive": true, | ||||
|     "toRef": true, | ||||
|     "toRefs": true, | ||||
|     "triggerRef": true, | ||||
|     "tryOnBeforeMount": true, | ||||
|     "tryOnBeforeUnmount": true, | ||||
|     "tryOnMounted": true, | ||||
|     "tryOnScopeDispose": true, | ||||
|     "tryOnUnmounted": true, | ||||
|     "unref": true, | ||||
|     "unrefElement": true, | ||||
|     "until": true, | ||||
|     "useActiveElement": true, | ||||
|     "useAsyncQueue": true, | ||||
|     "useAsyncState": true, | ||||
|     "useAttrs": true, | ||||
|     "useBase64": true, | ||||
|     "useBattery": true, | ||||
|     "useBluetooth": true, | ||||
|     "useBreakpoints": true, | ||||
|     "useBroadcastChannel": true, | ||||
|     "useBrowserLocation": true, | ||||
|     "useCached": true, | ||||
|     "useClamp": true, | ||||
|     "useClipboard": true, | ||||
|     "useColorMode": true, | ||||
|     "useConfirmDialog": true, | ||||
|     "useCounter": true, | ||||
|     "useCssModule": true, | ||||
|     "useCssVar": true, | ||||
|     "useCssVars": true, | ||||
|     "useCurrentElement": true, | ||||
|     "useCycleList": true, | ||||
|     "useDark": true, | ||||
|     "useDateFormat": true, | ||||
|     "useDebounce": true, | ||||
|     "useDebounceFn": true, | ||||
|     "useDebouncedRefHistory": true, | ||||
|     "useDeviceMotion": true, | ||||
|     "useDeviceOrientation": true, | ||||
|     "useDevicePixelRatio": true, | ||||
|     "useDevicesList": true, | ||||
|     "useDialog": true, | ||||
|     "useDisplayMedia": true, | ||||
|     "useDocumentVisibility": true, | ||||
|     "useDraggable": true, | ||||
|     "useDropZone": true, | ||||
|     "useElementBounding": true, | ||||
|     "useElementByPoint": true, | ||||
|     "useElementHover": true, | ||||
|     "useElementSize": true, | ||||
|     "useElementVisibility": true, | ||||
|     "useEventBus": true, | ||||
|     "useEventListener": true, | ||||
|     "useEventSource": true, | ||||
|     "useEyeDropper": true, | ||||
|     "useFavicon": true, | ||||
|     "useFetch": true, | ||||
|     "useFileDialog": true, | ||||
|     "useFileSystemAccess": true, | ||||
|     "useFocus": true, | ||||
|     "useFocusWithin": true, | ||||
|     "useFps": true, | ||||
|     "useFullscreen": true, | ||||
|     "useGamepad": true, | ||||
|     "useGeolocation": true, | ||||
|     "useIdle": true, | ||||
|     "useImage": true, | ||||
|     "useInfiniteScroll": true, | ||||
|     "useIntersectionObserver": true, | ||||
|     "useInterval": true, | ||||
|     "useIntervalFn": true, | ||||
|     "useKeyModifier": true, | ||||
|     "useLastChanged": true, | ||||
|     "useLink": true, | ||||
|     "useLoadingBar": true, | ||||
|     "useLocalStorage": true, | ||||
|     "useMagicKeys": true, | ||||
|     "useManualRefHistory": true, | ||||
|     "useMediaControls": true, | ||||
|     "useMediaQuery": true, | ||||
|     "useMemoize": true, | ||||
|     "useMemory": true, | ||||
|     "useMessage": true, | ||||
|     "useMounted": true, | ||||
|     "useMouse": true, | ||||
|     "useMouseInElement": true, | ||||
|     "useMousePressed": true, | ||||
|     "useMutationObserver": true, | ||||
|     "useNavigatorLanguage": true, | ||||
|     "useNetwork": true, | ||||
|     "useNotification": true, | ||||
|     "useNow": true, | ||||
|     "useObjectUrl": true, | ||||
|     "useOffsetPagination": true, | ||||
|     "useOnline": true, | ||||
|     "usePageLeave": true, | ||||
|     "useParallax": true, | ||||
|     "usePermission": true, | ||||
|     "usePointer": true, | ||||
|     "usePointerSwipe": true, | ||||
|     "usePreferredColorScheme": true, | ||||
|     "usePreferredDark": true, | ||||
|     "usePreferredLanguages": true, | ||||
|     "useRafFn": true, | ||||
|     "useRefHistory": true, | ||||
|     "useResizeObserver": true, | ||||
|     "useRoute": true, | ||||
|     "useRouter": true, | ||||
|     "useScreenOrientation": true, | ||||
|     "useScreenSafeArea": true, | ||||
|     "useScriptTag": true, | ||||
|     "useScroll": true, | ||||
|     "useScrollLock": true, | ||||
|     "useSessionStorage": true, | ||||
|     "useShare": true, | ||||
|     "useSlots": true, | ||||
|     "useSpeechRecognition": true, | ||||
|     "useSpeechSynthesis": true, | ||||
|     "useStepper": true, | ||||
|     "useStorage": true, | ||||
|     "useStorageAsync": true, | ||||
|     "useStyleTag": true, | ||||
|     "useSwipe": true, | ||||
|     "useTemplateRefsList": true, | ||||
|     "useTextSelection": true, | ||||
|     "useTextareaAutosize": true, | ||||
|     "useThrottle": true, | ||||
|     "useThrottleFn": true, | ||||
|     "useThrottledRefHistory": true, | ||||
|     "useTimeAgo": true, | ||||
|     "useTimeout": true, | ||||
|     "useTimeoutFn": true, | ||||
|     "useTimeoutPoll": true, | ||||
|     "useTimestamp": true, | ||||
|     "useTitle": true, | ||||
|     "useToggle": true, | ||||
|     "useTransition": true, | ||||
|     "useUrlSearchParams": true, | ||||
|     "useUserMedia": true, | ||||
|     "useVModel": true, | ||||
|     "useVModels": true, | ||||
|     "useVibrate": true, | ||||
|     "useVirtualList": true, | ||||
|     "useWakeLock": true, | ||||
|     "useWebNotification": true, | ||||
|     "useWebSocket": true, | ||||
|     "useWebWorker": true, | ||||
|     "useWebWorkerFn": true, | ||||
|     "useWindowFocus": true, | ||||
|     "useWindowScroll": true, | ||||
|     "useWindowSize": true, | ||||
|     "watch": true, | ||||
|     "watchArray": true, | ||||
|     "watchAtMost": true, | ||||
|     "watchDebounced": true, | ||||
|     "watchEffect": true, | ||||
|     "watchIgnorable": true, | ||||
|     "watchOnce": true, | ||||
|     "watchPausable": true, | ||||
|     "watchPostEffect": true, | ||||
|     "watchSyncEffect": true, | ||||
|     "watchThrottled": true, | ||||
|     "watchTriggerable": true, | ||||
|     "watchWithFilter": true, | ||||
|     "whenever": true | ||||
|   } | ||||
| } | ||||
| @ -10,6 +10,8 @@ module.exports = { | ||||
|     '@vue/eslint-config-typescript/recommended', | ||||
|     '@vue/eslint-config-prettier', | ||||
|     'plugin:import/recommended', | ||||
|     './.eslintrc-auto-import.json', | ||||
|     '@unocss', | ||||
|   ], | ||||
| 
 | ||||
|   settings: { | ||||
|  | ||||
							
								
								
									
										6
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,10 @@ | ||||
| name: ci | ||||
| 
 | ||||
| on: [push, pull_request] | ||||
| on: | ||||
|   pull_request: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
| 
 | ||||
| jobs: | ||||
|   ci: | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| name: docker-release | ||||
| name: Docker nightly release | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - 'main' | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     - cron: '0 0 * * *' | ||||
| 
 | ||||
| jobs: | ||||
|   ci: | ||||
| @ -38,6 +38,13 @@ jobs: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v3 | ||||
| 
 | ||||
|       - name: Login to GitHub Container Registry | ||||
|         uses: docker/login-action@v1 | ||||
|         with: | ||||
|           registry: ghcr.io | ||||
|           username: ${{ github.repository_owner }} | ||||
|           password: ${{ secrets.GITHUB_TOKEN }} | ||||
| 
 | ||||
|       - name: Login to Docker Hub | ||||
|         uses: docker/login-action@v2 | ||||
|         with: | ||||
| @ -57,4 +64,6 @@ jobs: | ||||
|           file: ./Dockerfile | ||||
|           platforms: linux/amd64,linux/arm64 | ||||
|           push: true | ||||
|           tags: corentinth/it-tools:latest | ||||
|           tags: | | ||||
|             corentinth/it-tools:nightly | ||||
|             ghcr.io/corentinth/it-tools:nightly | ||||
							
								
								
									
										524
									
								
								auto-imports.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										524
									
								
								auto-imports.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,524 @@ | ||||
| /* eslint-disable */ | ||||
| /* prettier-ignore */ | ||||
| // @ts-nocheck
 | ||||
| // Generated by unplugin-auto-import
 | ||||
| export {} | ||||
| declare global { | ||||
|   const EffectScope: typeof import('vue')['EffectScope'] | ||||
|   const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] | ||||
|   const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] | ||||
|   const computed: typeof import('vue')['computed'] | ||||
|   const computedAsync: typeof import('@vueuse/core')['computedAsync'] | ||||
|   const computedEager: typeof import('@vueuse/core')['computedEager'] | ||||
|   const computedInject: typeof import('@vueuse/core')['computedInject'] | ||||
|   const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] | ||||
|   const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] | ||||
|   const controlledRef: typeof import('@vueuse/core')['controlledRef'] | ||||
|   const createApp: typeof import('vue')['createApp'] | ||||
|   const createEventHook: typeof import('@vueuse/core')['createEventHook'] | ||||
|   const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] | ||||
|   const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] | ||||
|   const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] | ||||
|   const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] | ||||
|   const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] | ||||
|   const customRef: typeof import('vue')['customRef'] | ||||
|   const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] | ||||
|   const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] | ||||
|   const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] | ||||
|   const defineComponent: typeof import('vue')['defineComponent'] | ||||
|   const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] | ||||
|   const effectScope: typeof import('vue')['effectScope'] | ||||
|   const extendRef: typeof import('@vueuse/core')['extendRef'] | ||||
|   const getCurrentInstance: typeof import('vue')['getCurrentInstance'] | ||||
|   const getCurrentScope: typeof import('vue')['getCurrentScope'] | ||||
|   const h: typeof import('vue')['h'] | ||||
|   const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] | ||||
|   const inject: typeof import('vue')['inject'] | ||||
|   const isDefined: typeof import('@vueuse/core')['isDefined'] | ||||
|   const isProxy: typeof import('vue')['isProxy'] | ||||
|   const isReactive: typeof import('vue')['isReactive'] | ||||
|   const isReadonly: typeof import('vue')['isReadonly'] | ||||
|   const isRef: typeof import('vue')['isRef'] | ||||
|   const logicAnd: typeof import('@vueuse/core')['logicAnd'] | ||||
|   const logicNot: typeof import('@vueuse/core')['logicNot'] | ||||
|   const logicOr: typeof import('@vueuse/core')['logicOr'] | ||||
|   const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] | ||||
|   const markRaw: typeof import('vue')['markRaw'] | ||||
|   const nextTick: typeof import('vue')['nextTick'] | ||||
|   const onActivated: typeof import('vue')['onActivated'] | ||||
|   const onBeforeMount: typeof import('vue')['onBeforeMount'] | ||||
|   const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] | ||||
|   const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] | ||||
|   const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] | ||||
|   const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] | ||||
|   const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] | ||||
|   const onDeactivated: typeof import('vue')['onDeactivated'] | ||||
|   const onErrorCaptured: typeof import('vue')['onErrorCaptured'] | ||||
|   const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] | ||||
|   const onLongPress: typeof import('@vueuse/core')['onLongPress'] | ||||
|   const onMounted: typeof import('vue')['onMounted'] | ||||
|   const onRenderTracked: typeof import('vue')['onRenderTracked'] | ||||
|   const onRenderTriggered: typeof import('vue')['onRenderTriggered'] | ||||
|   const onScopeDispose: typeof import('vue')['onScopeDispose'] | ||||
|   const onServerPrefetch: typeof import('vue')['onServerPrefetch'] | ||||
|   const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] | ||||
|   const onUnmounted: typeof import('vue')['onUnmounted'] | ||||
|   const onUpdated: typeof import('vue')['onUpdated'] | ||||
|   const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] | ||||
|   const provide: typeof import('vue')['provide'] | ||||
|   const reactify: typeof import('@vueuse/core')['reactify'] | ||||
|   const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] | ||||
|   const reactive: typeof import('vue')['reactive'] | ||||
|   const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] | ||||
|   const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] | ||||
|   const reactivePick: typeof import('@vueuse/core')['reactivePick'] | ||||
|   const readonly: typeof import('vue')['readonly'] | ||||
|   const ref: typeof import('vue')['ref'] | ||||
|   const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] | ||||
|   const refDebounced: typeof import('@vueuse/core')['refDebounced'] | ||||
|   const refDefault: typeof import('@vueuse/core')['refDefault'] | ||||
|   const refThrottled: typeof import('@vueuse/core')['refThrottled'] | ||||
|   const refWithControl: typeof import('@vueuse/core')['refWithControl'] | ||||
|   const resolveComponent: typeof import('vue')['resolveComponent'] | ||||
|   const resolveRef: typeof import('@vueuse/core')['resolveRef'] | ||||
|   const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] | ||||
|   const shallowReactive: typeof import('vue')['shallowReactive'] | ||||
|   const shallowReadonly: typeof import('vue')['shallowReadonly'] | ||||
|   const shallowRef: typeof import('vue')['shallowRef'] | ||||
|   const syncRef: typeof import('@vueuse/core')['syncRef'] | ||||
|   const syncRefs: typeof import('@vueuse/core')['syncRefs'] | ||||
|   const templateRef: typeof import('@vueuse/core')['templateRef'] | ||||
|   const throttledRef: typeof import('@vueuse/core')['throttledRef'] | ||||
|   const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] | ||||
|   const toRaw: typeof import('vue')['toRaw'] | ||||
|   const toReactive: typeof import('@vueuse/core')['toReactive'] | ||||
|   const toRef: typeof import('vue')['toRef'] | ||||
|   const toRefs: typeof import('vue')['toRefs'] | ||||
|   const triggerRef: typeof import('vue')['triggerRef'] | ||||
|   const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] | ||||
|   const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] | ||||
|   const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] | ||||
|   const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] | ||||
|   const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] | ||||
|   const unref: typeof import('vue')['unref'] | ||||
|   const unrefElement: typeof import('@vueuse/core')['unrefElement'] | ||||
|   const until: typeof import('@vueuse/core')['until'] | ||||
|   const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] | ||||
|   const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] | ||||
|   const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] | ||||
|   const useAttrs: typeof import('vue')['useAttrs'] | ||||
|   const useBase64: typeof import('@vueuse/core')['useBase64'] | ||||
|   const useBattery: typeof import('@vueuse/core')['useBattery'] | ||||
|   const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] | ||||
|   const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] | ||||
|   const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] | ||||
|   const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] | ||||
|   const useCached: typeof import('@vueuse/core')['useCached'] | ||||
|   const useClamp: typeof import('@vueuse/core')['useClamp'] | ||||
|   const useClipboard: typeof import('@vueuse/core')['useClipboard'] | ||||
|   const useColorMode: typeof import('@vueuse/core')['useColorMode'] | ||||
|   const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] | ||||
|   const useCounter: typeof import('@vueuse/core')['useCounter'] | ||||
|   const useCssModule: typeof import('vue')['useCssModule'] | ||||
|   const useCssVar: typeof import('@vueuse/core')['useCssVar'] | ||||
|   const useCssVars: typeof import('vue')['useCssVars'] | ||||
|   const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] | ||||
|   const useCycleList: typeof import('@vueuse/core')['useCycleList'] | ||||
|   const useDark: typeof import('@vueuse/core')['useDark'] | ||||
|   const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] | ||||
|   const useDebounce: typeof import('@vueuse/core')['useDebounce'] | ||||
|   const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] | ||||
|   const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] | ||||
|   const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] | ||||
|   const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] | ||||
|   const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] | ||||
|   const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] | ||||
|   const useDialog: typeof import('naive-ui')['useDialog'] | ||||
|   const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] | ||||
|   const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] | ||||
|   const useDraggable: typeof import('@vueuse/core')['useDraggable'] | ||||
|   const useDropZone: typeof import('@vueuse/core')['useDropZone'] | ||||
|   const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] | ||||
|   const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] | ||||
|   const useElementHover: typeof import('@vueuse/core')['useElementHover'] | ||||
|   const useElementSize: typeof import('@vueuse/core')['useElementSize'] | ||||
|   const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] | ||||
|   const useEventBus: typeof import('@vueuse/core')['useEventBus'] | ||||
|   const useEventListener: typeof import('@vueuse/core')['useEventListener'] | ||||
|   const useEventSource: typeof import('@vueuse/core')['useEventSource'] | ||||
|   const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] | ||||
|   const useFavicon: typeof import('@vueuse/core')['useFavicon'] | ||||
|   const useFetch: typeof import('@vueuse/core')['useFetch'] | ||||
|   const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] | ||||
|   const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] | ||||
|   const useFocus: typeof import('@vueuse/core')['useFocus'] | ||||
|   const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] | ||||
|   const useFps: typeof import('@vueuse/core')['useFps'] | ||||
|   const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] | ||||
|   const useGamepad: typeof import('@vueuse/core')['useGamepad'] | ||||
|   const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] | ||||
|   const useIdle: typeof import('@vueuse/core')['useIdle'] | ||||
|   const useImage: typeof import('@vueuse/core')['useImage'] | ||||
|   const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] | ||||
|   const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] | ||||
|   const useInterval: typeof import('@vueuse/core')['useInterval'] | ||||
|   const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] | ||||
|   const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] | ||||
|   const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] | ||||
|   const useLink: typeof import('vue-router')['useLink'] | ||||
|   const useLoadingBar: typeof import('naive-ui')['useLoadingBar'] | ||||
|   const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] | ||||
|   const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] | ||||
|   const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] | ||||
|   const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] | ||||
|   const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] | ||||
|   const useMemoize: typeof import('@vueuse/core')['useMemoize'] | ||||
|   const useMemory: typeof import('@vueuse/core')['useMemory'] | ||||
|   const useMessage: typeof import('naive-ui')['useMessage'] | ||||
|   const useMounted: typeof import('@vueuse/core')['useMounted'] | ||||
|   const useMouse: typeof import('@vueuse/core')['useMouse'] | ||||
|   const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] | ||||
|   const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] | ||||
|   const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] | ||||
|   const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] | ||||
|   const useNetwork: typeof import('@vueuse/core')['useNetwork'] | ||||
|   const useNotification: typeof import('naive-ui')['useNotification'] | ||||
|   const useNow: typeof import('@vueuse/core')['useNow'] | ||||
|   const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] | ||||
|   const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] | ||||
|   const useOnline: typeof import('@vueuse/core')['useOnline'] | ||||
|   const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] | ||||
|   const useParallax: typeof import('@vueuse/core')['useParallax'] | ||||
|   const usePermission: typeof import('@vueuse/core')['usePermission'] | ||||
|   const usePointer: typeof import('@vueuse/core')['usePointer'] | ||||
|   const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] | ||||
|   const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] | ||||
|   const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] | ||||
|   const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] | ||||
|   const useRafFn: typeof import('@vueuse/core')['useRafFn'] | ||||
|   const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] | ||||
|   const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] | ||||
|   const useRoute: typeof import('vue-router')['useRoute'] | ||||
|   const useRouter: typeof import('vue-router')['useRouter'] | ||||
|   const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] | ||||
|   const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] | ||||
|   const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] | ||||
|   const useScroll: typeof import('@vueuse/core')['useScroll'] | ||||
|   const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] | ||||
|   const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] | ||||
|   const useShare: typeof import('@vueuse/core')['useShare'] | ||||
|   const useSlots: typeof import('vue')['useSlots'] | ||||
|   const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] | ||||
|   const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] | ||||
|   const useStepper: typeof import('@vueuse/core')['useStepper'] | ||||
|   const useStorage: typeof import('@vueuse/core')['useStorage'] | ||||
|   const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] | ||||
|   const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] | ||||
|   const useSwipe: typeof import('@vueuse/core')['useSwipe'] | ||||
|   const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] | ||||
|   const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] | ||||
|   const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] | ||||
|   const useThrottle: typeof import('@vueuse/core')['useThrottle'] | ||||
|   const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] | ||||
|   const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] | ||||
|   const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] | ||||
|   const useTimeout: typeof import('@vueuse/core')['useTimeout'] | ||||
|   const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] | ||||
|   const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] | ||||
|   const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] | ||||
|   const useTitle: typeof import('@vueuse/core')['useTitle'] | ||||
|   const useToggle: typeof import('@vueuse/core')['useToggle'] | ||||
|   const useTransition: typeof import('@vueuse/core')['useTransition'] | ||||
|   const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] | ||||
|   const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] | ||||
|   const useVModel: typeof import('@vueuse/core')['useVModel'] | ||||
|   const useVModels: typeof import('@vueuse/core')['useVModels'] | ||||
|   const useVibrate: typeof import('@vueuse/core')['useVibrate'] | ||||
|   const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] | ||||
|   const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] | ||||
|   const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] | ||||
|   const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] | ||||
|   const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] | ||||
|   const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] | ||||
|   const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] | ||||
|   const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] | ||||
|   const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] | ||||
|   const watch: typeof import('vue')['watch'] | ||||
|   const watchArray: typeof import('@vueuse/core')['watchArray'] | ||||
|   const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] | ||||
|   const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] | ||||
|   const watchEffect: typeof import('vue')['watchEffect'] | ||||
|   const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] | ||||
|   const watchOnce: typeof import('@vueuse/core')['watchOnce'] | ||||
|   const watchPausable: typeof import('@vueuse/core')['watchPausable'] | ||||
|   const watchPostEffect: typeof import('vue')['watchPostEffect'] | ||||
|   const watchSyncEffect: typeof import('vue')['watchSyncEffect'] | ||||
|   const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] | ||||
|   const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] | ||||
|   const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] | ||||
|   const whenever: typeof import('@vueuse/core')['whenever'] | ||||
| } | ||||
| // for type re-export
 | ||||
| declare global { | ||||
|   // @ts-ignore
 | ||||
|   export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue' | ||||
| } | ||||
| // for vue template auto import
 | ||||
| import { UnwrapRef } from 'vue' | ||||
| declare module 'vue' { | ||||
|   interface ComponentCustomProperties { | ||||
|     readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']> | ||||
|     readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']> | ||||
|     readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']> | ||||
|     readonly computed: UnwrapRef<typeof import('vue')['computed']> | ||||
|     readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']> | ||||
|     readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']> | ||||
|     readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']> | ||||
|     readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']> | ||||
|     readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']> | ||||
|     readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']> | ||||
|     readonly createApp: UnwrapRef<typeof import('vue')['createApp']> | ||||
|     readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']> | ||||
|     readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']> | ||||
|     readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']> | ||||
|     readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']> | ||||
|     readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']> | ||||
|     readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']> | ||||
|     readonly customRef: UnwrapRef<typeof import('vue')['customRef']> | ||||
|     readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']> | ||||
|     readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']> | ||||
|     readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']> | ||||
|     readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']> | ||||
|     readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']> | ||||
|     readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']> | ||||
|     readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']> | ||||
|     readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']> | ||||
|     readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']> | ||||
|     readonly h: UnwrapRef<typeof import('vue')['h']> | ||||
|     readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']> | ||||
|     readonly inject: UnwrapRef<typeof import('vue')['inject']> | ||||
|     readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']> | ||||
|     readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']> | ||||
|     readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']> | ||||
|     readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']> | ||||
|     readonly isRef: UnwrapRef<typeof import('vue')['isRef']> | ||||
|     readonly logicAnd: UnwrapRef<typeof import('@vueuse/core')['logicAnd']> | ||||
|     readonly logicNot: UnwrapRef<typeof import('@vueuse/core')['logicNot']> | ||||
|     readonly logicOr: UnwrapRef<typeof import('@vueuse/core')['logicOr']> | ||||
|     readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']> | ||||
|     readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']> | ||||
|     readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']> | ||||
|     readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']> | ||||
|     readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']> | ||||
|     readonly onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']> | ||||
|     readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']> | ||||
|     readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']> | ||||
|     readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']> | ||||
|     readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']> | ||||
|     readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']> | ||||
|     readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']> | ||||
|     readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']> | ||||
|     readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']> | ||||
|     readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']> | ||||
|     readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']> | ||||
|     readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']> | ||||
|     readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']> | ||||
|     readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']> | ||||
|     readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']> | ||||
|     readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']> | ||||
|     readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']> | ||||
|     readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']> | ||||
|     readonly provide: UnwrapRef<typeof import('vue')['provide']> | ||||
|     readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']> | ||||
|     readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']> | ||||
|     readonly reactive: UnwrapRef<typeof import('vue')['reactive']> | ||||
|     readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']> | ||||
|     readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']> | ||||
|     readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']> | ||||
|     readonly readonly: UnwrapRef<typeof import('vue')['readonly']> | ||||
|     readonly ref: UnwrapRef<typeof import('vue')['ref']> | ||||
|     readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']> | ||||
|     readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']> | ||||
|     readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']> | ||||
|     readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']> | ||||
|     readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']> | ||||
|     readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']> | ||||
|     readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']> | ||||
|     readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']> | ||||
|     readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']> | ||||
|     readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']> | ||||
|     readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']> | ||||
|     readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']> | ||||
|     readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']> | ||||
|     readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']> | ||||
|     readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']> | ||||
|     readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']> | ||||
|     readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']> | ||||
|     readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']> | ||||
|     readonly toRef: UnwrapRef<typeof import('vue')['toRef']> | ||||
|     readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']> | ||||
|     readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']> | ||||
|     readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']> | ||||
|     readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']> | ||||
|     readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']> | ||||
|     readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']> | ||||
|     readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']> | ||||
|     readonly unref: UnwrapRef<typeof import('vue')['unref']> | ||||
|     readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']> | ||||
|     readonly until: UnwrapRef<typeof import('@vueuse/core')['until']> | ||||
|     readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']> | ||||
|     readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']> | ||||
|     readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']> | ||||
|     readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']> | ||||
|     readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']> | ||||
|     readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']> | ||||
|     readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']> | ||||
|     readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']> | ||||
|     readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']> | ||||
|     readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']> | ||||
|     readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']> | ||||
|     readonly useClamp: UnwrapRef<typeof import('@vueuse/core')['useClamp']> | ||||
|     readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']> | ||||
|     readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']> | ||||
|     readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']> | ||||
|     readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']> | ||||
|     readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']> | ||||
|     readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']> | ||||
|     readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']> | ||||
|     readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']> | ||||
|     readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']> | ||||
|     readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']> | ||||
|     readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']> | ||||
|     readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']> | ||||
|     readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']> | ||||
|     readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']> | ||||
|     readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']> | ||||
|     readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']> | ||||
|     readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']> | ||||
|     readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']> | ||||
|     readonly useDialog: UnwrapRef<typeof import('naive-ui')['useDialog']> | ||||
|     readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']> | ||||
|     readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']> | ||||
|     readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']> | ||||
|     readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']> | ||||
|     readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']> | ||||
|     readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']> | ||||
|     readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']> | ||||
|     readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']> | ||||
|     readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']> | ||||
|     readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']> | ||||
|     readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']> | ||||
|     readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']> | ||||
|     readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']> | ||||
|     readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']> | ||||
|     readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']> | ||||
|     readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']> | ||||
|     readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']> | ||||
|     readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']> | ||||
|     readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']> | ||||
|     readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']> | ||||
|     readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']> | ||||
|     readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']> | ||||
|     readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']> | ||||
|     readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']> | ||||
|     readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']> | ||||
|     readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']> | ||||
|     readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']> | ||||
|     readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']> | ||||
|     readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']> | ||||
|     readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']> | ||||
|     readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']> | ||||
|     readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']> | ||||
|     readonly useLoadingBar: UnwrapRef<typeof import('naive-ui')['useLoadingBar']> | ||||
|     readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']> | ||||
|     readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']> | ||||
|     readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']> | ||||
|     readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']> | ||||
|     readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']> | ||||
|     readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']> | ||||
|     readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']> | ||||
|     readonly useMessage: UnwrapRef<typeof import('naive-ui')['useMessage']> | ||||
|     readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']> | ||||
|     readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']> | ||||
|     readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']> | ||||
|     readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']> | ||||
|     readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']> | ||||
|     readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']> | ||||
|     readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']> | ||||
|     readonly useNotification: UnwrapRef<typeof import('naive-ui')['useNotification']> | ||||
|     readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']> | ||||
|     readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']> | ||||
|     readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']> | ||||
|     readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']> | ||||
|     readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']> | ||||
|     readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']> | ||||
|     readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']> | ||||
|     readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']> | ||||
|     readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']> | ||||
|     readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']> | ||||
|     readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']> | ||||
|     readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']> | ||||
|     readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']> | ||||
|     readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']> | ||||
|     readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']> | ||||
|     readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']> | ||||
|     readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']> | ||||
|     readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']> | ||||
|     readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']> | ||||
|     readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']> | ||||
|     readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']> | ||||
|     readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']> | ||||
|     readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']> | ||||
|     readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']> | ||||
|     readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> | ||||
|     readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']> | ||||
|     readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']> | ||||
|     readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']> | ||||
|     readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']> | ||||
|     readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']> | ||||
|     readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']> | ||||
|     readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']> | ||||
|     readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']> | ||||
|     readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']> | ||||
|     readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']> | ||||
|     readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']> | ||||
|     readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']> | ||||
|     readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']> | ||||
|     readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']> | ||||
|     readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']> | ||||
|     readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']> | ||||
|     readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']> | ||||
|     readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']> | ||||
|     readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']> | ||||
|     readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']> | ||||
|     readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']> | ||||
|     readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']> | ||||
|     readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']> | ||||
|     readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']> | ||||
|     readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']> | ||||
|     readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']> | ||||
|     readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']> | ||||
|     readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']> | ||||
|     readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']> | ||||
|     readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']> | ||||
|     readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']> | ||||
|     readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']> | ||||
|     readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']> | ||||
|     readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']> | ||||
|     readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']> | ||||
|     readonly watch: UnwrapRef<typeof import('vue')['watch']> | ||||
|     readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']> | ||||
|     readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']> | ||||
|     readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']> | ||||
|     readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']> | ||||
|     readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']> | ||||
|     readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']> | ||||
|     readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']> | ||||
|     readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']> | ||||
|     readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']> | ||||
|     readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']> | ||||
|     readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']> | ||||
|     readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']> | ||||
|     readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']> | ||||
|   } | ||||
| } | ||||
							
								
								
									
										71
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| /* eslint-disable */ | ||||
| /* prettier-ignore */ | ||||
| // @ts-nocheck
 | ||||
| // Generated by unplugin-vue-components
 | ||||
| // Read more: https://github.com/vuejs/core/pull/3399
 | ||||
| import '@vue/runtime-core' | ||||
| 
 | ||||
| export {} | ||||
| 
 | ||||
| declare module '@vue/runtime-core' { | ||||
|   export interface GlobalComponents { | ||||
|     CollapsibleToolMenu: typeof import('./src/components/CollapsibleToolMenu.vue')['default'] | ||||
|     ColoredCard: typeof import('./src/components/ColoredCard.vue')['default'] | ||||
|     FavoriteButton: typeof import('./src/components/FavoriteButton.vue')['default'] | ||||
|     InputCopyable: typeof import('./src/components/InputCopyable.vue')['default'] | ||||
|     MenuIconItem: typeof import('./src/components/MenuIconItem.vue')['default'] | ||||
|     MenuLayout: typeof import('./src/components/MenuLayout.vue')['default'] | ||||
|     NAlert: typeof import('naive-ui')['NAlert'] | ||||
|     NAutoComplete: typeof import('naive-ui')['NAutoComplete'] | ||||
|     NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] | ||||
|     NButton: typeof import('naive-ui')['NButton'] | ||||
|     NCard: typeof import('naive-ui')['NCard'] | ||||
|     NCheckbox: typeof import('naive-ui')['NCheckbox'] | ||||
|     NCode: typeof import('naive-ui')['NCode'] | ||||
|     NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] | ||||
|     NColorPicker: typeof import('naive-ui')['NColorPicker'] | ||||
|     NConfigProvider: typeof import('naive-ui')['NConfigProvider'] | ||||
|     NDatePicker: typeof import('naive-ui')['NDatePicker'] | ||||
|     NDivider: typeof import('naive-ui')['NDivider'] | ||||
|     NDynamicInput: typeof import('naive-ui')['NDynamicInput'] | ||||
|     NEllipsis: typeof import('naive-ui')['NEllipsis'] | ||||
|     NForm: typeof import('naive-ui')['NForm'] | ||||
|     NFormItem: typeof import('naive-ui')['NFormItem'] | ||||
|     NGi: typeof import('naive-ui')['NGi'] | ||||
|     NGrid: typeof import('naive-ui')['NGrid'] | ||||
|     NH1: typeof import('naive-ui')['NH1'] | ||||
|     NH2: typeof import('naive-ui')['NH2'] | ||||
|     NH3: typeof import('naive-ui')['NH3'] | ||||
|     NIcon: typeof import('naive-ui')['NIcon'] | ||||
|     NImage: typeof import('naive-ui')['NImage'] | ||||
|     NInput: typeof import('naive-ui')['NInput'] | ||||
|     NInputGroup: typeof import('naive-ui')['NInputGroup'] | ||||
|     NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel'] | ||||
|     NInputNumber: typeof import('naive-ui')['NInputNumber'] | ||||
|     NLayout: typeof import('naive-ui')['NLayout'] | ||||
|     NLayoutSider: typeof import('naive-ui')['NLayoutSider'] | ||||
|     NMenu: typeof import('naive-ui')['NMenu'] | ||||
|     NP: typeof import('naive-ui')['NP'] | ||||
|     NPageHeader: typeof import('naive-ui')['NPageHeader'] | ||||
|     NProgress: typeof import('naive-ui')['NProgress'] | ||||
|     NResult: typeof import('naive-ui')['NResult'] | ||||
|     NScrollbar: typeof import('naive-ui')['NScrollbar'] | ||||
|     NSelect: typeof import('naive-ui')['NSelect'] | ||||
|     NSlider: typeof import('naive-ui')['NSlider'] | ||||
|     NSpace: typeof import('naive-ui')['NSpace'] | ||||
|     NStatistic: typeof import('naive-ui')['NStatistic'] | ||||
|     NSwitch: typeof import('naive-ui')['NSwitch'] | ||||
|     NTable: typeof import('naive-ui')['NTable'] | ||||
|     NTag: typeof import('naive-ui')['NTag'] | ||||
|     NText: typeof import('naive-ui')['NText'] | ||||
|     NTooltip: typeof import('naive-ui')['NTooltip'] | ||||
|     NUpload: typeof import('naive-ui')['NUpload'] | ||||
|     NUploadDragger: typeof import('naive-ui')['NUploadDragger'] | ||||
|     RouterLink: typeof import('vue-router')['RouterLink'] | ||||
|     RouterView: typeof import('vue-router')['RouterView'] | ||||
|     SearchBar: typeof import('./src/components/SearchBar.vue')['default'] | ||||
|     SearchBarItem: typeof import('./src/components/SearchBarItem.vue')['default'] | ||||
|     TextareaCopyable: typeof import('./src/components/TextareaCopyable.vue')['default'] | ||||
|     ToolCard: typeof import('./src/components/ToolCard.vue')['default'] | ||||
|   } | ||||
| } | ||||
| @ -62,6 +62,7 @@ | ||||
|     "naive-ui": "^2.34.3", | ||||
|     "netmask": "^2.0.2", | ||||
|     "node-forge": "^1.3.1", | ||||
|     "oui": "^12.0.51", | ||||
|     "pinia": "^2.0.33", | ||||
|     "plausible-tracker": "^0.3.8", | ||||
|     "qrcode": "^1.5.1", | ||||
| @ -89,6 +90,7 @@ | ||||
|     "@types/ua-parser-js": "^0.7.36", | ||||
|     "@types/uuid": "^8.3.4", | ||||
|     "@typescript-eslint/parser": "^5.57.0", | ||||
|     "@unocss/eslint-config": "^0.50.6", | ||||
|     "@vitejs/plugin-vue": "^2.3.4", | ||||
|     "@vitejs/plugin-vue-jsx": "^1.3.10", | ||||
|     "@vue/eslint-config-prettier": "^7.1.0", | ||||
| @ -107,6 +109,9 @@ | ||||
|     "standard-version": "^9.5.0", | ||||
|     "start-server-and-test": "^1.15.4", | ||||
|     "typescript": "~4.5.5", | ||||
|     "unocss": "^0.50.6", | ||||
|     "unplugin-auto-import": "^0.15.2", | ||||
|     "unplugin-vue-components": "^0.24.1", | ||||
|     "vite": "^2.9.15", | ||||
|     "vite-plugin-md": "^0.12.4", | ||||
|     "vite-plugin-pwa": "^0.11.13", | ||||
|  | ||||
							
								
								
									
										725
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										725
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -21,7 +21,7 @@ | ||||
|         <span>{{ tooltipText }}</span> | ||||
|       </n-tooltip> | ||||
|     </n-card> | ||||
|     <n-space v-if="copyPlacement === 'outside'" justify="center" style="margin-top: 15px"> | ||||
|     <n-space v-if="copyPlacement === 'outside'" justify="center" mt-4> | ||||
|       <n-button secondary @click="onCopyClicked"> {{ tooltipText }} </n-button> | ||||
|     </n-space> | ||||
|   </div> | ||||
|  | ||||
| @ -141,7 +141,7 @@ const tools = computed<ToolCategory[]>(() => [ | ||||
|               @click="() => tracker.trackEvent({ eventName: 'Support button clicked' })" | ||||
|             > | ||||
|               Buy me a coffee | ||||
|               <n-icon v-if="!styleStore.isSmallScreen" :component="Heart" style="margin-left: 5px" /> | ||||
|               <n-icon v-if="!styleStore.isSmallScreen" :component="Heart" ml-2 /> | ||||
|             </n-button> | ||||
|           </template> | ||||
|           ❤ Support IT Tools development ! | ||||
|  | ||||
| @ -5,6 +5,8 @@ import { createHead } from '@vueuse/head'; | ||||
| import { registerSW } from 'virtual:pwa-register'; | ||||
| import { plausible } from './plugins/plausible.plugin'; | ||||
| 
 | ||||
| import 'virtual:uno.css'; | ||||
| 
 | ||||
| registerSW(); | ||||
| 
 | ||||
| import { naive } from './plugins/naive.plugin'; | ||||
|  | ||||
| @ -1,118 +1,3 @@ | ||||
| import { | ||||
|   create, | ||||
|   NAlert, | ||||
|   NAutoComplete, | ||||
|   NButton, | ||||
|   NCard, | ||||
|   NCode, | ||||
|   NCollapse, | ||||
|   NCollapseItem, | ||||
|   NCollapseTransition, | ||||
|   NColorPicker, | ||||
|   NConfigProvider, | ||||
|   NDatePicker, | ||||
|   NDivider, | ||||
|   NDropdown, | ||||
|   NDynamicInput, | ||||
|   NEllipsis, | ||||
|   NEmpty, | ||||
|   NForm, | ||||
|   NFormItem, | ||||
|   NGradientText, | ||||
|   NGrid, | ||||
|   NGridItem, | ||||
|   NH1, | ||||
|   NH2, | ||||
|   NH3, | ||||
|   NIcon, | ||||
|   NImage, | ||||
|   NInput, | ||||
|   NInputGroup, | ||||
|   NInputGroupLabel, | ||||
|   NInputNumber, | ||||
|   NLayout, | ||||
|   NLayoutSider, | ||||
|   NMenu, | ||||
|   NMessageProvider, | ||||
|   NModal, | ||||
|   NP, | ||||
|   NPageHeader, | ||||
|   NPopconfirm, | ||||
|   NProgress, | ||||
|   NResult, | ||||
|   NScrollbar, | ||||
|   NSelect, | ||||
|   NSlider, | ||||
|   NSpace, | ||||
|   NStatistic, | ||||
|   NSwitch, | ||||
|   NTable, | ||||
|   NTag, | ||||
|   NText, | ||||
|   NTimePicker, | ||||
|   NTooltip, | ||||
|   NUpload, | ||||
|   NUploadDragger, | ||||
|   NPopover, | ||||
|   NCheckbox, | ||||
| } from 'naive-ui'; | ||||
| import { create } from 'naive-ui'; | ||||
| 
 | ||||
| const components = [ | ||||
|   NCheckbox, | ||||
|   NDynamicInput, | ||||
|   NDatePicker, | ||||
|   NCode, | ||||
|   NGradientText, | ||||
|   NScrollbar, | ||||
|   NImage, | ||||
|   NUploadDragger, | ||||
|   NTable, | ||||
|   NStatistic, | ||||
|   NDivider, | ||||
|   NInputGroup, | ||||
|   NInputGroupLabel, | ||||
|   NTag, | ||||
|   NResult, | ||||
|   NEllipsis, | ||||
|   NPageHeader, | ||||
|   NMessageProvider, | ||||
|   NLayout, | ||||
|   NLayoutSider, | ||||
|   NMenu, | ||||
|   NDropdown, | ||||
|   NH2, | ||||
|   NH3, | ||||
|   NP, | ||||
|   NAlert, | ||||
|   NTooltip, | ||||
|   NModal, | ||||
|   NEmpty, | ||||
|   NUpload, | ||||
|   NSelect, | ||||
|   NAutoComplete, | ||||
|   NProgress, | ||||
|   NCollapse, | ||||
|   NCollapseItem, | ||||
|   NSlider, | ||||
|   NPopconfirm, | ||||
|   NGrid, | ||||
|   NGridItem, | ||||
|   NButton, | ||||
|   NConfigProvider, | ||||
|   NCard, | ||||
|   NInput, | ||||
|   NColorPicker, | ||||
|   NInputNumber, | ||||
|   NSpace, | ||||
|   NH1, | ||||
|   NForm, | ||||
|   NFormItem, | ||||
|   NTimePicker, | ||||
|   NText, | ||||
|   NIcon, | ||||
|   NSwitch, | ||||
|   NCollapseTransition, | ||||
|   NPopover, | ||||
| ]; | ||||
| 
 | ||||
| export const naive = create({ components }); | ||||
| export const naive = create(); | ||||
|  | ||||
| @ -17,7 +17,7 @@ | ||||
|   <n-card title="File to base64"> | ||||
|     <n-upload v-model:file-list="fileList" :show-file-list="true" :on-before-upload="onUpload" list-type="image"> | ||||
|       <n-upload-dragger> | ||||
|         <div style="margin-bottom: 12px"> | ||||
|         <div mb-2> | ||||
|           <n-icon size="35" :depth="3" :component="Upload" /> | ||||
|         </div> | ||||
|         <n-text style="font-size: 14px"> Click or drag a file to this area to upload </n-text> | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Salt count: " label-placement="left"> | ||||
|         <n-input-number v-model:value="saltCount" placeholder="Salt rounds..." :max="10" :min="0" style="width: 100%" /> | ||||
|         <n-input-number v-model:value="saltCount" placeholder="Salt rounds..." :max="10" :min="0" w-full /> | ||||
|       </n-form-item> | ||||
|       <n-input :value="hashed" readonly style="text-align: center" /> | ||||
|     </n-form> | ||||
|  | ||||
| @ -4,7 +4,7 @@ | ||||
|       <div v-for="(suite, index) of suites" :key="index"> | ||||
|         <n-card style="width: 292px; margin: 0 8px 5px"> | ||||
|           <n-form-item label="Suite name:" :show-feedback="false" label-placement="left"> | ||||
|             <n-input v-model:value="suite.title" /> | ||||
|             <n-input v-model:value="suite.title" placeholder="Suite name..." /> | ||||
|           </n-form-item> | ||||
| 
 | ||||
|           <n-divider></n-divider> | ||||
| @ -34,6 +34,23 @@ | ||||
| 
 | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <div style="max-width: 600px; margin: 0 auto"> | ||||
|       <n-space justify="center"> | ||||
|         <n-form-item label="Unit:" label-placement="left"> | ||||
|           <n-input v-model:value="unit" placeholder="Unit (eg: ms)" /> | ||||
|         </n-form-item> | ||||
| 
 | ||||
|         <n-button | ||||
|           tertiary | ||||
|           @click=" | ||||
|             suites = [ | ||||
|               { title: 'Suite 1', data: [] }, | ||||
|               { title: 'Suite 2', data: [] }, | ||||
|             ] | ||||
|           " | ||||
|           >Reset suites</n-button | ||||
|         > | ||||
|       </n-space> | ||||
| 
 | ||||
|       <n-table> | ||||
|         <thead> | ||||
|           <tr> | ||||
| @ -57,6 +74,7 @@ | ||||
|       <br /> | ||||
|       <n-space justify="center"> | ||||
|         <n-button tertiary @click="copyAsMarkdown">Copy as markdown table</n-button> | ||||
|         <n-button tertiary @click="copyAsBulletList">Copy as bullet list</n-button> | ||||
|       </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| @ -75,6 +93,10 @@ const suites = useStorage('benchmark-builder:suites', [ | ||||
|   { title: 'Suite 2', data: [8, 12] }, | ||||
| ]); | ||||
| 
 | ||||
| const unit = useStorage('benchmark-builder:unit', ''); | ||||
| 
 | ||||
| const round = (v: number) => Math.round(v * 1000) / 1000; | ||||
| 
 | ||||
| const results = computed(() => { | ||||
|   return suites.value | ||||
|     .map(({ data: dirtyData, title }) => { | ||||
| @ -88,14 +110,30 @@ const results = computed(() => { | ||||
|       }; | ||||
|     }) | ||||
|     .sort((a, b) => a.mean - b.mean) | ||||
|     .map((value, index) => ({ position: index + 1, ...value })); | ||||
|     .map(({ mean, variance, size, title }, index, suites) => { | ||||
|       const cleanUnit = unit.value.trim(); | ||||
|       const bestMean: number = suites[0].mean; | ||||
|       const deltaWithBestMean = mean - bestMean; | ||||
|       const ratioWithBestMean = bestMean === 0 ? '∞' : round(mean / bestMean); | ||||
| 
 | ||||
|       const comparisonValues: string = | ||||
|         index !== 0 && bestMean !== mean ? ` (+${round(deltaWithBestMean)}${cleanUnit} ; x${ratioWithBestMean})` : ''; | ||||
| 
 | ||||
|       return { | ||||
|         position: index + 1, | ||||
|         title, | ||||
|         mean: `${round(mean)}${cleanUnit}${comparisonValues}`, | ||||
|         variance: `${round(variance)}${cleanUnit}${cleanUnit ? '²' : ''}`, | ||||
|         size, | ||||
|       }; | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| const { copy } = useClipboard(); | ||||
| 
 | ||||
| const header = { | ||||
|   title: 'Suite name', | ||||
|   size: 'Sample count', | ||||
|   title: 'Suite', | ||||
|   size: 'Samples', | ||||
|   mean: 'Mean', | ||||
|   variance: 'Variance', | ||||
|   position: 'Position', | ||||
| @ -104,6 +142,21 @@ const header = { | ||||
| function copyAsMarkdown() { | ||||
|   copy(arrayToMarkdownTable({ data: results.value, headerMap: header })); | ||||
| } | ||||
| 
 | ||||
| function copyAsBulletList() { | ||||
|   const bulletList = results.value | ||||
|     .flatMap(({ title, ...sections }) => { | ||||
|       return [ | ||||
|         ` - ${title}`, | ||||
|         ...Object.entries(sections).map( | ||||
|           ([key, value]) => `    - ${header[key as keyof typeof header] ?? key}: ${value}`, | ||||
|         ), | ||||
|       ]; | ||||
|     }) | ||||
|     .join('\n'); | ||||
| 
 | ||||
|   copy(bulletList); | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped></style> | ||||
|  | ||||
| @ -24,7 +24,7 @@ | ||||
|       {{ octal }} | ||||
|     </div> | ||||
| 
 | ||||
|     <input-copyable :value="`chmod ${octal} path`" readonly style="margin-bottom: 5px" /> | ||||
|     <input-copyable :value="`chmod ${octal} path`" readonly /> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -46,6 +46,7 @@ import type { ToolCategory } from './tools.types'; | ||||
| import { tool as urlEncoder } from './url-encoder'; | ||||
| import { tool as urlParser } from './url-parser'; | ||||
| import { tool as uuidGenerator } from './uuid-generator'; | ||||
| import { tool as macAddressLookup } from './mac-address-lookup'; | ||||
| 
 | ||||
| export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
| @ -102,7 +103,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   }, | ||||
|   { | ||||
|     name: 'Network', | ||||
|     components: [ipv4SubnetCalculator], | ||||
|     components: [ipv4SubnetCalculator, macAddressLookup], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Math', | ||||
|  | ||||
| @ -4,11 +4,11 @@ | ||||
|       <div v-if="styleStore.isSmallScreen"> | ||||
|         <n-input-group> | ||||
|           <n-input-group-label style="flex: 0 0 120px"> Input number: </n-input-group-label> | ||||
|           <n-input v-model:value="input" style="width: 100%" :status="error ? 'error' : undefined" /> | ||||
|           <n-input v-model:value="input" w-full :status="error ? 'error' : undefined" /> | ||||
|         </n-input-group> | ||||
|         <n-input-group> | ||||
|           <n-input-group-label style="flex: 0 0 120px"> Input base: </n-input-group-label> | ||||
|           <n-input-number v-model:value="inputBase" max="64" min="2" style="width: 100%" /> | ||||
|           <n-input-number v-model:value="inputBase" max="64" min="2" w-full /> | ||||
|         </n-input-group> | ||||
|       </div> | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										12
									
								
								src/tools/mac-address-lookup/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/mac-address-lookup/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import { Devices } from '@vicons/tabler'; | ||||
| import { defineTool } from '../tool'; | ||||
| 
 | ||||
| export const tool = defineTool({ | ||||
|   name: 'MAC adrdress lookup', | ||||
|   path: '/mac-adrdress-lookup', | ||||
|   description: 'Find the vendor and manufacturer of a device by its MAC address.', | ||||
|   keywords: ['mac', 'adrdress', 'lookup', 'vendor', 'parser', 'manufacturer'], | ||||
|   component: () => import('./mac-address-lookup.vue'), | ||||
|   icon: Devices, | ||||
|   createdAt: new Date('2023-04-06'), | ||||
| }); | ||||
							
								
								
									
										52
									
								
								src/tools/mac-address-lookup/mac-address-lookup.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/tools/mac-address-lookup/mac-address-lookup.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-form-item label="MAC address:" v-bind="validationAttrs"> | ||||
|       <n-input | ||||
|         v-model:value="macAddress" | ||||
|         size="large" | ||||
|         placeholder="Type a MAC address" | ||||
|         clearable | ||||
|         autocomplete="off" | ||||
|         autocorrect="off" | ||||
|         autocapitalize="off" | ||||
|         spellcheck="false" | ||||
|       /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-form-item label="Vendor info:"> | ||||
|       <n-card> | ||||
|         <n-text v-if="details"> | ||||
|           <div v-for="(detail, index) of details.split('\n')" :key="index">{{ detail }}</div> | ||||
|         </n-text> | ||||
| 
 | ||||
|         <n-text v-else depth="3" italic>Unknown vendor for this address</n-text> | ||||
|       </n-card> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|       <n-button :disabled="!details" tertiary> Copy vendor info </n-button> | ||||
|     </n-space> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { useValidation } from '@/composable/validation'; | ||||
| import db from 'oui/oui.json'; | ||||
| 
 | ||||
| const getVendorValue = (address: string) => address.trim().replace(/[.:-]/g, '').toUpperCase().substring(0, 6); | ||||
| 
 | ||||
| const macAddress = ref('20:37:06:12:34:56'); | ||||
| const details = computed<string | undefined>(() => db[getVendorValue(macAddress.value)]); | ||||
| 
 | ||||
| const { attrs: validationAttrs } = useValidation({ | ||||
|   source: macAddress, | ||||
|   rules: [ | ||||
|     { | ||||
|       message: 'Invalid MAC address', | ||||
|       validator: (value) => value.trim().match(/^([0-9A-Fa-f]{2}[:-]){2,5}([0-9A-Fa-f]{2})$/), | ||||
|     }, | ||||
|   ], | ||||
| }); | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped></style> | ||||
							
								
								
									
										4
									
								
								src/tools/mac-address-lookup/oui.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/tools/mac-address-lookup/oui.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| declare module 'oui/oui.json' { | ||||
|   const db: Record<string, string>; | ||||
|   export default db; | ||||
| } | ||||
| @ -1,6 +1,6 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-space class="labels" item-style="flex: 1 1 0" style="width: 100%" align="center"> | ||||
|     <n-space class="labels" item-style="flex: 1 1 0" w-full align="center"> | ||||
|       <div style="text-align: left">Previous</div> | ||||
|       <div style="text-align: center">Current OTP</div> | ||||
|       <div style="text-align: right">Next</div> | ||||
|  | ||||
| @ -1,10 +1,6 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-input-group | ||||
|       v-for="[key, { title, unit }] in Object.entries(units)" | ||||
|       :key="key" | ||||
|       style="width: 100%; margin-bottom: 15px" | ||||
|     > | ||||
|     <n-input-group v-for="[key, { title, unit }] in Object.entries(units)" :key="key" mb-3 w-full> | ||||
|       <n-input-group-label style="width: 100px"> | ||||
|         {{ title }} | ||||
|       </n-input-group-label> | ||||
|  | ||||
							
								
								
									
										14
									
								
								unocss.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								unocss.config.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| import { | ||||
|   defineConfig, | ||||
|   presetAttributify, | ||||
|   presetTypography, | ||||
|   presetUno, | ||||
|   transformerDirectives, | ||||
|   transformerVariantGroup, | ||||
| } from 'unocss'; | ||||
| 
 | ||||
| export default defineConfig({ | ||||
|   presets: [presetUno(), presetAttributify(), presetTypography()], | ||||
|   transformers: [transformerDirectives(), transformerVariantGroup()], | ||||
|   safelist: 'prose prose-sm m-auto text-left'.split(' '), | ||||
| }); | ||||
| @ -6,10 +6,29 @@ import vueJsx from '@vitejs/plugin-vue-jsx'; | ||||
| import markdown from 'vite-plugin-md'; | ||||
| import svgLoader from 'vite-svg-loader'; | ||||
| import { VitePWA } from 'vite-plugin-pwa'; | ||||
| import AutoImport from 'unplugin-auto-import/vite'; | ||||
| import Components from 'unplugin-vue-components/vite'; | ||||
| import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'; | ||||
| import Unocss from 'unocss/vite'; | ||||
| 
 | ||||
| // https://vitejs.dev/config/
 | ||||
| export default defineConfig({ | ||||
|   plugins: [ | ||||
|     AutoImport({ | ||||
|       imports: [ | ||||
|         'vue', | ||||
|         'vue-router', | ||||
|         '@vueuse/core', | ||||
|         { | ||||
|           'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'], | ||||
|         }, | ||||
|       ], | ||||
|       vueTemplate: true, | ||||
|       eslintrc: { | ||||
|         enabled: true, | ||||
|       }, | ||||
|     }), | ||||
| 
 | ||||
|     vue({ | ||||
|       include: [/\.vue$/, /\.md$/], | ||||
|     }), | ||||
| @ -53,6 +72,10 @@ export default defineConfig({ | ||||
|         ], | ||||
|       }, | ||||
|     }), | ||||
|     Components({ | ||||
|       resolvers: [NaiveUiResolver()], | ||||
|     }), | ||||
|     Unocss(), | ||||
|   ], | ||||
|   resolve: { | ||||
|     alias: { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user