mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-04-23 00:06:15 -04:00
refactor(style): updated linter config
This commit is contained in:
parent
39746e07c5
commit
6b58ec554a
27 changed files with 1144 additions and 571 deletions
|
@ -20,7 +20,10 @@ const themeOverrides = computed(() => styleStore.isDarkTheme ? darkThemeOverride
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<n-config-provider :theme="theme" :theme-overrides="themeOverrides">
|
||||
<n-config-provider
|
||||
:theme="theme"
|
||||
:theme-overrides="themeOverrides"
|
||||
>
|
||||
<n-global-style />
|
||||
<n-message-provider placement="bottom">
|
||||
<component :is="layout">
|
||||
|
|
|
@ -1,15 +1,28 @@
|
|||
<template>
|
||||
<n-layout has-sider>
|
||||
<n-layout-sider bordered collapse-mode="width" :collapsed-width="0" :width="240" :collapsed="isMenuCollapsed"
|
||||
@collapse="isMenuCollapsed = true" @expand="isMenuCollapsed = false" :show-trigger="false"
|
||||
:native-scrollbar="false" :position="siderPosition">
|
||||
<slot name="sider" />
|
||||
</n-layout-sider>
|
||||
<n-layout class="content">
|
||||
<slot name="content" />
|
||||
<div class="overlay" v-show="isSmallScreen && !isMenuCollapsed" @click="isMenuCollapsed = true" />
|
||||
</n-layout>
|
||||
<n-layout has-sider>
|
||||
<n-layout-sider
|
||||
bordered
|
||||
collapse-mode="width"
|
||||
:collapsed-width="0"
|
||||
:width="240"
|
||||
:collapsed="isMenuCollapsed"
|
||||
:show-trigger="false"
|
||||
:native-scrollbar="false"
|
||||
:position="siderPosition"
|
||||
@collapse="isMenuCollapsed = true"
|
||||
@expand="isMenuCollapsed = false"
|
||||
>
|
||||
<slot name="sider" />
|
||||
</n-layout-sider>
|
||||
<n-layout class="content">
|
||||
<slot name="content" />
|
||||
<div
|
||||
v-show="isSmallScreen && !isMenuCollapsed"
|
||||
class="overlay"
|
||||
@click="isMenuCollapsed = true"
|
||||
/>
|
||||
</n-layout>
|
||||
</n-layout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -32,19 +32,30 @@ function onSelect(path: string) {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div class="search-bar">
|
||||
<n-auto-complete :options="options" v-model:value="queryString" :input-props="{ autocomplete: 'disabled' }"
|
||||
:on-select="onSelect">
|
||||
<template #default="{ handleInput, handleBlur, handleFocus, value: slotValue }">
|
||||
<n-input round clearable placeholder="Search a tool..." :value="slotValue" @input="handleInput"
|
||||
@focus="handleFocus" @blur="handleBlur">
|
||||
<template #prefix>
|
||||
<n-icon :component="SearchRound" />
|
||||
</template>
|
||||
</n-input>
|
||||
</template>
|
||||
</n-auto-complete>
|
||||
</div>
|
||||
<div class="search-bar">
|
||||
<n-auto-complete
|
||||
v-model:value="queryString"
|
||||
:options="options"
|
||||
:input-props="{ autocomplete: 'disabled' }"
|
||||
:on-select="onSelect"
|
||||
>
|
||||
<template #default="{ handleInput, handleBlur, handleFocus, value: slotValue }">
|
||||
<n-input
|
||||
round
|
||||
clearable
|
||||
placeholder="Search a tool..."
|
||||
:value="slotValue"
|
||||
@input="handleInput"
|
||||
@focus="handleFocus"
|
||||
@blur="handleBlur"
|
||||
>
|
||||
<template #prefix>
|
||||
<n-icon :component="SearchRound" />
|
||||
</template>
|
||||
</n-input>
|
||||
</template>
|
||||
</n-auto-complete>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
|
|
|
@ -1,15 +1,24 @@
|
|||
<template>
|
||||
<router-link :to="tool.path">
|
||||
<n-card class="tool-card">
|
||||
<n-icon class="icon" size="40" :component="tool.icon" />
|
||||
<n-h3 class="title">
|
||||
<n-ellipsis>{{ tool.name }}</n-ellipsis>
|
||||
</n-h3>
|
||||
<div class="description">
|
||||
<n-ellipsis :line-clamp="2" :tooltip="false">{{ tool.description }}</n-ellipsis>
|
||||
</div>
|
||||
</n-card>
|
||||
</router-link>
|
||||
<router-link :to="tool.path">
|
||||
<n-card class="tool-card">
|
||||
<n-icon
|
||||
class="icon"
|
||||
size="40"
|
||||
:component="tool.icon"
|
||||
/>
|
||||
<n-h3 class="title">
|
||||
<n-ellipsis>{{ tool.name }}</n-ellipsis>
|
||||
</n-h3>
|
||||
<div class="description">
|
||||
<n-ellipsis
|
||||
:line-clamp="2"
|
||||
:tooltip="false"
|
||||
>
|
||||
{{ tool.description }}
|
||||
</n-ellipsis>
|
||||
</div>
|
||||
</n-card>
|
||||
</router-link>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -32,84 +32,199 @@ const m = toolsByCategory.map(category => ({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<menu-layout class="menu-layout" :class="{ isSmallScreen: styleStore.isSmallScreen }">
|
||||
<menu-layout
|
||||
class="menu-layout"
|
||||
:class="{ isSmallScreen: styleStore.isSmallScreen }"
|
||||
>
|
||||
<template #sider>
|
||||
<router-link
|
||||
to="/"
|
||||
class="hero-wrapper"
|
||||
>
|
||||
<hero-gradient class="gradient" />
|
||||
<div class="text-wrapper">
|
||||
<div class="title">
|
||||
IT - TOOLS
|
||||
</div>
|
||||
<div class="divider" />
|
||||
<div class="subtitle">
|
||||
Handy tools for developers
|
||||
</div>
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<template v-slot:sider>
|
||||
<router-link to="/" class="hero-wrapper">
|
||||
<hero-gradient class="gradient" />
|
||||
<div class="text-wrapper">
|
||||
<div class="title">IT - TOOLS</div>
|
||||
<div class="divider" />
|
||||
<div class="subtitle">Handy tools for developers</div>
|
||||
</div>
|
||||
</router-link>
|
||||
<div class="sider-content">
|
||||
<n-space
|
||||
v-if="styleStore.isSmallScreen"
|
||||
justify="center"
|
||||
>
|
||||
<n-button
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
tag="a"
|
||||
href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="BrandGithub"
|
||||
/>
|
||||
</n-button>
|
||||
<n-button
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
tag="a"
|
||||
href="https://twitter.com/cthmsst"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="BrandTwitter"
|
||||
/>
|
||||
</n-button>
|
||||
<n-button
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
@click="styleStore.isDarkTheme = !styleStore.isDarkTheme"
|
||||
>
|
||||
<n-icon
|
||||
v-if="styleStore.isDarkTheme"
|
||||
size="25"
|
||||
:component="Sun"
|
||||
/>
|
||||
<n-icon
|
||||
v-else
|
||||
size="25"
|
||||
:component="Moon"
|
||||
/>
|
||||
</n-button>
|
||||
</n-space>
|
||||
|
||||
<div class="sider-content">
|
||||
<n-space v-if="styleStore.isSmallScreen" justify="center">
|
||||
<n-button size="large" circle quaternary tag="a" href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener" target="_blank">
|
||||
<n-icon size="25" :component="BrandGithub" />
|
||||
</n-button>
|
||||
<n-button size="large" circle quaternary tag="a" href="https://twitter.com/cthmsst" rel="noopener"
|
||||
target="_blank">
|
||||
<n-icon size="25" :component="BrandTwitter" />
|
||||
</n-button>
|
||||
<n-button size="large" circle quaternary @click="styleStore.isDarkTheme = !styleStore.isDarkTheme">
|
||||
<n-icon size="25" v-if="styleStore.isDarkTheme" :component="Sun" />
|
||||
<n-icon size="25" v-else :component="Moon" />
|
||||
</n-button>
|
||||
</n-space>
|
||||
<n-menu
|
||||
v-model:value="activeKey"
|
||||
:value="route.name"
|
||||
class="menu"
|
||||
:collapsed-width="64"
|
||||
:collapsed-icon-size="22"
|
||||
:options="m"
|
||||
:indent="20"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<n-menu :value="route.name" class="menu" :collapsed-width="64" :collapsed-icon-size="22" :options="m"
|
||||
v-model:value="activeKey" :indent="20" />
|
||||
<template #content>
|
||||
<div class="navigation">
|
||||
<n-button
|
||||
:size="styleStore.isSmallScreen ? 'medium' : 'large'"
|
||||
circle
|
||||
quaternary
|
||||
aria-label="Toogle menu"
|
||||
@click="styleStore.isMenuCollapsed = !styleStore.isMenuCollapsed"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="Menu2"
|
||||
/>
|
||||
</n-button>
|
||||
|
||||
</div>
|
||||
<router-link
|
||||
to="/"
|
||||
#="{ navigate, href }"
|
||||
custom
|
||||
>
|
||||
<n-button
|
||||
tag="a"
|
||||
:href="href"
|
||||
:size="styleStore.isSmallScreen ? 'medium' : 'large'"
|
||||
circle
|
||||
quaternary
|
||||
aria-label="Home"
|
||||
@click="navigate"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="Home2"
|
||||
/>
|
||||
</n-button>
|
||||
</router-link>
|
||||
|
||||
<search-bar />
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template v-slot:content>
|
||||
<div class="navigation">
|
||||
<n-button :size="styleStore.isSmallScreen ? 'medium' : 'large'" circle quaternary
|
||||
@click="styleStore.isMenuCollapsed = !styleStore.isMenuCollapsed" aria-label="Toogle menu">
|
||||
<n-icon size="25" :component="Menu2" />
|
||||
</n-button>
|
||||
|
||||
<router-link to="/" #="{ navigate, href }" custom>
|
||||
<n-button tag="a" :href="href" @click="navigate"
|
||||
:size="styleStore.isSmallScreen ? 'medium' : 'large'" circle quaternary aria-label="Home">
|
||||
<n-icon size="25" :component="Home2" />
|
||||
</n-button>
|
||||
</router-link>
|
||||
|
||||
<search-bar />
|
||||
|
||||
|
||||
<n-button type="primary" tag="a" href="https://github.com/sponsors/CorentinTh" rel="noopener"
|
||||
target="_blank">
|
||||
<n-icon :component="Heart" style="margin-right: 5px;" v-if="!styleStore.isSmallScreen" />
|
||||
Sponsor
|
||||
</n-button>
|
||||
<n-button size="large" circle quaternary tag="a" href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener" target="_blank" v-if="!styleStore.isSmallScreen" aria-label="Github repository">
|
||||
<n-icon size="25" :component="BrandGithub" />
|
||||
</n-button>
|
||||
<n-button size="large" circle quaternary tag="a" href="https://twitter.com/cthmsst" rel="noopener"
|
||||
target="_blank" v-if="!styleStore.isSmallScreen" aria-label="Twitter account">
|
||||
<n-icon size="25" :component="BrandTwitter" />
|
||||
</n-button>
|
||||
<n-button size="large" circle quaternary @click="styleStore.isDarkTheme = !styleStore.isDarkTheme"
|
||||
v-if="!styleStore.isSmallScreen" aria-label="Toogle theme">
|
||||
<n-icon size="25" v-if="styleStore.isDarkTheme" :component="Sun" />
|
||||
<n-icon size="25" v-else :component="Moon" />
|
||||
</n-button>
|
||||
|
||||
</div>
|
||||
<slot />
|
||||
|
||||
</template>
|
||||
|
||||
</menu-layout>
|
||||
<n-button
|
||||
type="primary"
|
||||
tag="a"
|
||||
href="https://github.com/sponsors/CorentinTh"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
>
|
||||
<n-icon
|
||||
v-if="!styleStore.isSmallScreen"
|
||||
:component="Heart"
|
||||
style="margin-right: 5px;"
|
||||
/>
|
||||
Sponsor
|
||||
</n-button>
|
||||
<n-button
|
||||
v-if="!styleStore.isSmallScreen"
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
tag="a"
|
||||
href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
aria-label="Github repository"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="BrandGithub"
|
||||
/>
|
||||
</n-button>
|
||||
<n-button
|
||||
v-if="!styleStore.isSmallScreen"
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
tag="a"
|
||||
href="https://twitter.com/cthmsst"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
aria-label="Twitter account"
|
||||
>
|
||||
<n-icon
|
||||
size="25"
|
||||
:component="BrandTwitter"
|
||||
/>
|
||||
</n-button>
|
||||
<n-button
|
||||
v-if="!styleStore.isSmallScreen"
|
||||
size="large"
|
||||
circle
|
||||
quaternary
|
||||
aria-label="Toogle theme"
|
||||
@click="styleStore.isDarkTheme = !styleStore.isDarkTheme"
|
||||
>
|
||||
<n-icon
|
||||
v-if="styleStore.isDarkTheme"
|
||||
size="25"
|
||||
:component="Sun"
|
||||
/>
|
||||
<n-icon
|
||||
v-else
|
||||
size="25"
|
||||
:component="Moon"
|
||||
/>
|
||||
</n-button>
|
||||
</div>
|
||||
<slot />
|
||||
</template>
|
||||
</menu-layout>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
|
|
@ -24,17 +24,19 @@ useHead(head)
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<base-layout>
|
||||
<div class="tool-layout">
|
||||
<div class="tool-header">
|
||||
<n-h1>{{ route.meta.name }}</n-h1>
|
||||
<div class="separator" />
|
||||
<div class="description">{{ route.meta.description }}</div>
|
||||
</div>
|
||||
|
||||
<slot />
|
||||
<base-layout>
|
||||
<div class="tool-layout">
|
||||
<div class="tool-header">
|
||||
<n-h1>{{ route.meta.name }}</n-h1>
|
||||
<div class="separator" />
|
||||
<div class="description">
|
||||
{{ route.meta.description }}
|
||||
</div>
|
||||
</base-layout>
|
||||
</div>
|
||||
|
||||
<slot />
|
||||
</div>
|
||||
</base-layout>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
|
|
@ -3,25 +3,31 @@
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div class="e404-wrapper">
|
||||
<n-result
|
||||
status="404"
|
||||
title="404 Not Found"
|
||||
description="Sorry, this page does not seem to extist"
|
||||
<div class="e404-wrapper">
|
||||
<n-result
|
||||
status="404"
|
||||
title="404 Not Found"
|
||||
description="Sorry, this page does not seem to extist"
|
||||
>
|
||||
<template #footer>
|
||||
<router-link
|
||||
to="/"
|
||||
#="{ navigate, href }"
|
||||
custom
|
||||
>
|
||||
<template #footer>
|
||||
<router-link to="/" #="{ navigate, href }" custom>
|
||||
<n-button
|
||||
tag="a"
|
||||
:href="href"
|
||||
secondary
|
||||
@click="navigate"
|
||||
type="success"
|
||||
>Back home</n-button>
|
||||
</router-link>
|
||||
</template>
|
||||
</n-result>
|
||||
</div>
|
||||
<n-button
|
||||
tag="a"
|
||||
:href="href"
|
||||
secondary
|
||||
type="success"
|
||||
@click="navigate"
|
||||
>
|
||||
Back home
|
||||
</n-button>
|
||||
</router-link>
|
||||
</template>
|
||||
</n-result>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
|
|
|
@ -4,13 +4,20 @@ import ToolCard from '../components/ToolCard.vue';
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div class="home-page">
|
||||
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
|
||||
<n-gi v-for="tool in toolsWithCategory" :key="tool.name">
|
||||
<tool-card :tool="tool" />
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
</div>
|
||||
<div class="home-page">
|
||||
<n-grid
|
||||
x-gap="12"
|
||||
y-gap="12"
|
||||
cols="1 400:2 800:3 1200:4 2000:8"
|
||||
>
|
||||
<n-gi
|
||||
v-for="tool in toolsWithCategory"
|
||||
:key="tool.name"
|
||||
>
|
||||
<tool-card :tool="tool" />
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
|
|
|
@ -1,17 +1,39 @@
|
|||
<template>
|
||||
<n-card title="Text to base64">
|
||||
<n-input v-model:value="textInput" type="textarea" placeholder="Put your string here..." />
|
||||
<n-input :value="textBase64" type="textarea" readonly />
|
||||
<n-input
|
||||
v-model:value="textInput"
|
||||
type="textarea"
|
||||
placeholder="Put your string here..."
|
||||
/>
|
||||
<n-input
|
||||
:value="textBase64"
|
||||
type="textarea"
|
||||
readonly
|
||||
/>
|
||||
<n-space justify="center">
|
||||
<n-button @click="copyTextBase64()" secondary>Copy</n-button>
|
||||
<n-button
|
||||
secondary
|
||||
@click="copyTextBase64()"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
|
||||
<n-card title="File to base64">
|
||||
<n-upload :show-file-list="true" :on-before-upload="onUpload" list-type="image" v-model:file-list="fileList">
|
||||
<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">
|
||||
<n-icon size="35" :depth="3" :component="Upload" />
|
||||
<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
|
||||
|
@ -19,12 +41,20 @@
|
|||
</n-upload-dragger>
|
||||
</n-upload>
|
||||
|
||||
<n-input :value="fileBase64" type="textarea" readonly />
|
||||
<n-input
|
||||
:value="fileBase64"
|
||||
type="textarea"
|
||||
readonly
|
||||
/>
|
||||
<n-space justify="center">
|
||||
<n-button @click="copyFileBase64()" secondary>Copy</n-button>
|
||||
<n-button
|
||||
secondary
|
||||
@click="copyFileBase64()"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,47 +1,69 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-grid cols="3" x-gap="12">
|
||||
<n-gi span="1">
|
||||
<n-form-item label="Language:">
|
||||
<n-select v-model:value="language"
|
||||
:options="Object.keys(languages).map(label => ({ label, value: label }))" />
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
<n-gi span="2">
|
||||
<n-form-item label="Entropy (seed):" :feedback="entropyValidation.message"
|
||||
:validation-status="entropyValidation.status">
|
||||
<n-input-group>
|
||||
<n-input v-model:value="entropy" placeholder="Your string..." />
|
||||
<n-button @click="refreshEntropy">
|
||||
<n-icon size="22">
|
||||
<Refresh />
|
||||
</n-icon>
|
||||
</n-button>
|
||||
<n-button @click="copyEntropy">
|
||||
<n-icon size="22">
|
||||
<Copy />
|
||||
</n-icon>
|
||||
</n-button>
|
||||
</n-input-group>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-grid
|
||||
cols="3"
|
||||
x-gap="12"
|
||||
>
|
||||
<n-gi span="1">
|
||||
<n-form-item label="Language:">
|
||||
<n-select
|
||||
v-model:value="language"
|
||||
:options="Object.keys(languages).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
<n-gi span="2">
|
||||
<n-form-item
|
||||
label="Entropy (seed):"
|
||||
:feedback="entropyValidation.message"
|
||||
:validation-status="entropyValidation.status"
|
||||
>
|
||||
<n-input-group>
|
||||
<n-input
|
||||
v-model:value="entropy"
|
||||
placeholder="Your string..."
|
||||
/>
|
||||
<n-button @click="refreshEntropy">
|
||||
<n-icon size="22">
|
||||
<Refresh />
|
||||
</n-icon>
|
||||
</n-button>
|
||||
<n-button @click="copyEntropy">
|
||||
<n-icon size="22">
|
||||
<Copy />
|
||||
</n-icon>
|
||||
</n-button>
|
||||
</n-input-group>
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<n-form-item
|
||||
label="Passphrase (mnemonic):"
|
||||
:feedback="mnemonicValidation.message"
|
||||
:validation-status="mnemonicValidation.status"
|
||||
>
|
||||
<n-input-group>
|
||||
<n-input
|
||||
v-model:value="passphrase"
|
||||
style="text-align: center; flex: 1;"
|
||||
placeholder="Your mnemonic..."
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<n-form-item label="Passphrase (mnemonic):" :feedback="mnemonicValidation.message"
|
||||
:validation-status="mnemonicValidation.status">
|
||||
<n-input-group>
|
||||
<n-input style="text-align: center; flex: 1;" v-model:value="passphrase"
|
||||
placeholder="Your mnemonic..." autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
spellcheck="false" />
|
||||
|
||||
<n-button @click="copyPassphrase">
|
||||
<n-icon size="22" :component="Copy" />
|
||||
</n-button>
|
||||
</n-input-group>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
</div>
|
||||
<n-button @click="copyPassphrase">
|
||||
<n-icon
|
||||
size="22"
|
||||
:component="Copy"
|
||||
/>
|
||||
</n-button>
|
||||
</n-input-group>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,30 +1,57 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<n-form label-width="100" label-placement="left">
|
||||
<n-form
|
||||
label-width="100"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-form-item label="color picker:">
|
||||
<n-color-picker v-model:value="hex" @update:value="(v: string) => onInputUpdated(v, 'hex')"
|
||||
placement="bottom-end" />
|
||||
<n-color-picker
|
||||
v-model:value="hex"
|
||||
placement="bottom-end"
|
||||
@update:value="(v: string) => onInputUpdated(v, 'hex')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="color name:">
|
||||
<n-input v-model:value="name" :on-input="(v: string) => onInputUpdated(v, 'name')" />
|
||||
<n-input
|
||||
v-model:value="name"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'name')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="hex:">
|
||||
<n-input v-model:value="hex" :on-input="(v: string) => onInputUpdated(v, 'hex')" />
|
||||
<n-input
|
||||
v-model:value="hex"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'hex')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="rgb:">
|
||||
<n-input v-model:value="rgb" :on-input="(v: string) => onInputUpdated(v, 'rgb')" />
|
||||
<n-input
|
||||
v-model:value="rgb"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'rgb')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="hsl:">
|
||||
<n-input v-model:value="hsl" :on-input="(v: string) => onInputUpdated(v, 'hsl')" />
|
||||
<n-input
|
||||
v-model:value="hsl"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'hsl')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="hwb:">
|
||||
<n-input v-model:value="hwb" :on-input="(v: string) => onInputUpdated(v, 'hwb')" />
|
||||
<n-input
|
||||
v-model:value="hwb"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'hwb')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="lch:">
|
||||
<n-input v-model:value="lch" :on-input="(v: string) => onInputUpdated(v, 'lch')" />
|
||||
<n-input
|
||||
v-model:value="lch"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'lch')"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="cmyk:">
|
||||
<n-input v-model:value="cmyk" :on-input="(v: string) => onInputUpdated(v, 'cmyk')" />
|
||||
<n-input
|
||||
v-model:value="cmyk"
|
||||
:on-input="(v: string) => onInputUpdated(v, 'cmyk')"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-form>
|
||||
</n-card>
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<n-form-item class="cron" :show-label="false" :feedback="cronValidation.message"
|
||||
:validation-status="cronValidation.status">
|
||||
<n-input v-model:value="cron" size="large" placeholder="* * * * *" />
|
||||
<n-form-item
|
||||
class="cron"
|
||||
:show-label="false"
|
||||
:feedback="cronValidation.message"
|
||||
:validation-status="cronValidation.status"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="cron"
|
||||
size="large"
|
||||
placeholder="* * * * *"
|
||||
/>
|
||||
</n-form-item>
|
||||
<div class="cron-string">
|
||||
{{ cronString }}
|
||||
|
@ -11,8 +19,11 @@
|
|||
<n-divider />
|
||||
|
||||
<n-space justify="center">
|
||||
|
||||
<n-form :show-feedback="false" label-width="170" label-placement="left">
|
||||
<n-form
|
||||
:show-feedback="false"
|
||||
label-width="170"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-form-item label="Verbose">
|
||||
<n-switch v-model:value="cronstrueConfig.verbose" />
|
||||
</n-form-item>
|
||||
|
@ -41,16 +52,28 @@
|
|||
<n-table size="small">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-left" scope="col">
|
||||
<th
|
||||
class="text-left"
|
||||
scope="col"
|
||||
>
|
||||
Symbol
|
||||
</th>
|
||||
<th class="text-left" scope="col">
|
||||
<th
|
||||
class="text-left"
|
||||
scope="col"
|
||||
>
|
||||
Meaning
|
||||
</th>
|
||||
<th class="text-left" scope="col">
|
||||
<th
|
||||
class="text-left"
|
||||
scope="col"
|
||||
>
|
||||
Example
|
||||
</th>
|
||||
<th class="text-left" scope="col">
|
||||
<th
|
||||
class="text-left"
|
||||
scope="col"
|
||||
>
|
||||
Equivalent
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -152,7 +175,6 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</n-table>
|
||||
|
||||
</n-card>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -1,31 +1,50 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-space justify="center">
|
||||
<n-form-item label="Use current date-time ?" label-placement="left" :show-feedback="false">
|
||||
<n-switch v-model:value="useCurrentDate" />
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
<n-form-item :feedback="inputInvalid ? 'Invalid date for the current format' : ''"
|
||||
:validation-status="inputInvalid ? 'error' : undefined">
|
||||
<n-input-group style="flex-grow: 1;">
|
||||
<n-select v-model:value="inputFormat" style="width: 200px;"
|
||||
:options="formats.map(({ name }, i) => ({ label: name, value: i }))"
|
||||
:disabled="useCurrentDate" />
|
||||
<div>
|
||||
<n-card>
|
||||
<n-space justify="center">
|
||||
<n-form-item
|
||||
label="Use current date-time ?"
|
||||
label-placement="left"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-switch v-model:value="useCurrentDate" />
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
<n-form-item
|
||||
:feedback="inputInvalid ? 'Invalid date for the current format' : ''"
|
||||
:validation-status="inputInvalid ? 'error' : undefined"
|
||||
>
|
||||
<n-input-group style="flex-grow: 1;">
|
||||
<n-select
|
||||
v-model:value="inputFormat"
|
||||
style="width: 200px;"
|
||||
:options="formats.map(({ name }, i) => ({ label: name, value: i }))"
|
||||
:disabled="useCurrentDate"
|
||||
/>
|
||||
|
||||
<n-input v-model:value="inputDate" :on-input="onDateInputChanged" :disabled="useCurrentDate"
|
||||
placeholder="Your date string..." />
|
||||
</n-input-group>
|
||||
</n-form-item>
|
||||
<n-divider style="margin-top: 0;"></n-divider>
|
||||
<div v-for="{ name, fromDate } in formats" :key="name" style="margin: 5px 0;">
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 150px;">{{ name }}</n-input-group-label>
|
||||
<n-input :value="fromDate(date)" />
|
||||
</n-input-group>
|
||||
</div>
|
||||
</n-card>
|
||||
</div>
|
||||
<n-input
|
||||
v-model:value="inputDate"
|
||||
:on-input="onDateInputChanged"
|
||||
:disabled="useCurrentDate"
|
||||
placeholder="Your date string..."
|
||||
/>
|
||||
</n-input-group>
|
||||
</n-form-item>
|
||||
<n-divider style="margin-top: 0;" />
|
||||
<div
|
||||
v-for="{ name, fromDate } in formats"
|
||||
:key="name"
|
||||
style="margin: 5px 0;"
|
||||
>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 150px;">
|
||||
{{ name }}
|
||||
</n-input-group-label>
|
||||
<n-input :value="fromDate(date)" />
|
||||
</n-input-group>
|
||||
</div>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,81 +1,105 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card title="Encrypt">
|
||||
<n-space item-style="flex: 1 1 0">
|
||||
<n-form-item label="Your text:" :show-feedback="false">
|
||||
<n-input
|
||||
v-model:value="cypherInput"
|
||||
type="textarea"
|
||||
placeholder="The string to cypher"
|
||||
:autosize="{ minRows: 4 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-space vertical>
|
||||
<n-form-item label="Your secret key:" :show-feedback="false">
|
||||
<n-input v-model:value="cypherSecret" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Encryption algorithm:" :show-feedback="false">
|
||||
<n-select
|
||||
v-model:value="cypherAlgo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
</n-space>
|
||||
<br />
|
||||
<n-form-item label="Yout text encrypted:" :show-feedback="false">
|
||||
<n-input
|
||||
:value="cypherOutput"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 2 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
<br />
|
||||
<n-card title="Decrypt">
|
||||
<n-space item-style="flex: 1 1 0">
|
||||
<n-form-item label="Your encrypted text:" :show-feedback="false">
|
||||
<n-input
|
||||
v-model:value="decryptInput"
|
||||
type="textarea"
|
||||
placeholder="The string to cypher"
|
||||
:autosize="{ minRows: 4 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-space vertical>
|
||||
<n-form-item label="Your secret key:" :show-feedback="false">
|
||||
<n-input v-model:value="decryptSecret" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Encryption algorithm:" :show-feedback="false">
|
||||
<n-select
|
||||
v-model:value="decryptAlgo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
</n-space>
|
||||
<br />
|
||||
<n-form-item label="Yout decrypted text:" :show-feedback="false">
|
||||
<n-input
|
||||
:value="decryptOutput"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 2 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
</div>
|
||||
<div>
|
||||
<n-card title="Encrypt">
|
||||
<n-space item-style="flex: 1 1 0">
|
||||
<n-form-item
|
||||
label="Your text:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="cypherInput"
|
||||
type="textarea"
|
||||
placeholder="The string to cypher"
|
||||
:autosize="{ minRows: 4 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-space vertical>
|
||||
<n-form-item
|
||||
label="Your secret key:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input v-model:value="cypherSecret" />
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="Encryption algorithm:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-select
|
||||
v-model:value="cypherAlgo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
</n-space>
|
||||
<br>
|
||||
<n-form-item
|
||||
label="Yout text encrypted:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input
|
||||
:value="cypherOutput"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 2 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
<br>
|
||||
<n-card title="Decrypt">
|
||||
<n-space item-style="flex: 1 1 0">
|
||||
<n-form-item
|
||||
label="Your encrypted text:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="decryptInput"
|
||||
type="textarea"
|
||||
placeholder="The string to cypher"
|
||||
:autosize="{ minRows: 4 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-space vertical>
|
||||
<n-form-item
|
||||
label="Your secret key:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input v-model:value="decryptSecret" />
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="Encryption algorithm:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-select
|
||||
v-model:value="decryptAlgo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-space>
|
||||
</n-space>
|
||||
<br>
|
||||
<n-form-item
|
||||
label="Yout decrypted text:"
|
||||
:show-feedback="false"
|
||||
>
|
||||
<n-input
|
||||
:value="decryptOutput"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 2 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<memo />
|
||||
</div>
|
||||
<div>
|
||||
<memo />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,39 +1,45 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-input
|
||||
v-model:value="clearText"
|
||||
type="textarea"
|
||||
placeholder="Your string..."
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<n-select
|
||||
v-model:value="algo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-input
|
||||
v-model:value="clearText"
|
||||
type="textarea"
|
||||
placeholder="Your string..."
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-select
|
||||
v-model:value="algo"
|
||||
:options="Object.keys(algos).map(label => ({ label, value: label }))"
|
||||
/>
|
||||
|
||||
<br />
|
||||
<n-input
|
||||
style="text-align: center;"
|
||||
:value="hashedText"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<n-space justify="center">
|
||||
<n-button @click="copy" secondary autofocus>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
<br>
|
||||
<n-input
|
||||
style="text-align: center;"
|
||||
:value="hashedText"
|
||||
type="textarea"
|
||||
placeholder="Your string hash"
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copy"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,54 +1,95 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Input number:</n-input-group-label>
|
||||
<n-input-number v-model:value="inputNumber" min="0" />
|
||||
<div>
|
||||
<n-card>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Input number:
|
||||
</n-input-group-label>
|
||||
<n-input-number
|
||||
v-model:value="inputNumber"
|
||||
min="0"
|
||||
/>
|
||||
|
||||
<n-input-group-label style="width: 200px;">Input base:</n-input-group-label>
|
||||
<n-input-number v-model:value="inputBase" max="64" min="2" style="width: 100px;" />
|
||||
</n-input-group>
|
||||
<n-divider></n-divider>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Input base:
|
||||
</n-input-group-label>
|
||||
<n-input-number
|
||||
v-model:value="inputBase"
|
||||
max="64"
|
||||
min="2"
|
||||
style="width: 100px;"
|
||||
/>
|
||||
</n-input-group>
|
||||
<n-divider />
|
||||
|
||||
|
||||
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Binary (2):</n-input-group-label>
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 2 })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Binary (2):
|
||||
</n-input-group-label>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 2 })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Octale (8):</n-input-group-label>
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 8 })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Octale (8):
|
||||
</n-input-group-label>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 8 })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Decimal (10):</n-input-group-label>
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 10 })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Decimal (10):
|
||||
</n-input-group-label>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 10 })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Hexadecimal (16):</n-input-group-label>
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 16 })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Hexadecimal (16):
|
||||
</n-input-group-label>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 16 })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">Base64 (64):</n-input-group-label>
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 64 })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 90px;">Custom:</n-input-group-label>
|
||||
<n-input-number style="width: 110px;" v-model:value="outputBase" max="64" min="2" />
|
||||
<n-input :value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: outputBase })"
|
||||
readonly />
|
||||
</n-input-group>
|
||||
</n-card>
|
||||
</div>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 200px;">
|
||||
Base64 (64):
|
||||
</n-input-group-label>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: 64 })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
<n-input-group>
|
||||
<n-input-group-label style="width: 90px;">
|
||||
Custom:
|
||||
</n-input-group-label>
|
||||
<n-input-number
|
||||
v-model:value="outputBase"
|
||||
style="width: 110px;"
|
||||
max="64"
|
||||
min="2"
|
||||
/>
|
||||
<n-input
|
||||
:value="convertBase({ value: String(inputNumber), fromBase: inputBase, toBase: outputBase })"
|
||||
readonly
|
||||
/>
|
||||
</n-input-group>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,30 +1,84 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<n-form-item label="Paragraphs" :show-feedback="false" label-width="200" label-placement="left">
|
||||
<n-slider v-model:value="paragraphs" :step="1" :min="1" :max="20" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Sentences per paragraph" :show-feedback="false" label-width="200" label-placement="left">
|
||||
<n-slider v-model:value="sentences" range :step="1" :min="1" :max="50" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Words per sentence" :show-feedback="false" label-width="200" label-placement="left">
|
||||
<n-slider v-model:value="words" range :step="1" :min="1" :max="50" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Start with lorem ipsum ?" :show-feedback="false" label-width="200" label-placement="left">
|
||||
<n-switch v-model:value="startWithLoremIpsum" />
|
||||
</n-form-item>
|
||||
<n-form-item label="As html ?" :show-feedback="false" label-width="200" label-placement="left">
|
||||
<n-switch v-model:value="asHTML" />
|
||||
</n-form-item>
|
||||
<n-card>
|
||||
<n-form-item
|
||||
label="Paragraphs"
|
||||
:show-feedback="false"
|
||||
label-width="200"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-slider
|
||||
v-model:value="paragraphs"
|
||||
:step="1"
|
||||
:min="1"
|
||||
:max="20"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="Sentences per paragraph"
|
||||
:show-feedback="false"
|
||||
label-width="200"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-slider
|
||||
v-model:value="sentences"
|
||||
range
|
||||
:step="1"
|
||||
:min="1"
|
||||
:max="50"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="Words per sentence"
|
||||
:show-feedback="false"
|
||||
label-width="200"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-slider
|
||||
v-model:value="words"
|
||||
range
|
||||
:step="1"
|
||||
:min="1"
|
||||
:max="50"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="Start with lorem ipsum ?"
|
||||
:show-feedback="false"
|
||||
label-width="200"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-switch v-model:value="startWithLoremIpsum" />
|
||||
</n-form-item>
|
||||
<n-form-item
|
||||
label="As html ?"
|
||||
:show-feedback="false"
|
||||
label-width="200"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-switch v-model:value="asHTML" />
|
||||
</n-form-item>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<n-input :value="loremIpsumText" type="textarea" placeholder="Your lorem ipsum..." autosize readonly />
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="center">
|
||||
<n-button @click="copy" secondary autofocus>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<n-input
|
||||
:value="loremIpsumText"
|
||||
type="textarea"
|
||||
placeholder="Your lorem ipsum..."
|
||||
autosize
|
||||
readonly
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copy"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,27 +1,56 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<n-grid cols="3" x-gap="12">
|
||||
<n-grid
|
||||
cols="3"
|
||||
x-gap="12"
|
||||
>
|
||||
<n-gi span="2">
|
||||
<n-form label-width="130" label-placement="left">
|
||||
<n-form
|
||||
label-width="130"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-form-item label="Text:">
|
||||
<n-input v-model:value="text" placeholder="Your link or text..." />
|
||||
<n-input
|
||||
v-model:value="text"
|
||||
placeholder="Your link or text..."
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="Foreground color:">
|
||||
<n-color-picker v-model:value="foreground" :modes="['hex']" />
|
||||
<n-color-picker
|
||||
v-model:value="foreground"
|
||||
:modes="['hex']"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="Background color:">
|
||||
<n-color-picker v-model:value="background" :modes="['hex']" />
|
||||
<n-color-picker
|
||||
v-model:value="background"
|
||||
:modes="['hex']"
|
||||
/>
|
||||
</n-form-item>
|
||||
<n-form-item label="Error resistance:">
|
||||
<n-select v-model:value="errorCorrectionLevel"
|
||||
:options="errorCorrectionLevels.map((value) => ({ label: value, value }))" />
|
||||
<n-select
|
||||
v-model:value="errorCorrectionLevel"
|
||||
:options="errorCorrectionLevels.map((value) => ({ label: value, value }))"
|
||||
/>
|
||||
</n-form-item>
|
||||
</n-form>
|
||||
</n-gi>
|
||||
</n-form>
|
||||
</n-gi>
|
||||
<n-gi>
|
||||
<n-space justify="center" align="center" vertical>
|
||||
<n-image :src="qrcode" width="200" />
|
||||
<n-button @click="download" secondary>Download qr-code</n-button>
|
||||
<n-space
|
||||
justify="center"
|
||||
align="center"
|
||||
vertical
|
||||
>
|
||||
<n-image
|
||||
:src="qrcode"
|
||||
width="200"
|
||||
/>
|
||||
<n-button
|
||||
secondary
|
||||
@click="download"
|
||||
>
|
||||
Download qr-code
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
|
|
|
@ -1,11 +1,23 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<div class="port">{{ port }}</div>
|
||||
<n-space justify="center">
|
||||
<n-button @click="copy" secondary>Copy</n-button>
|
||||
<n-button @click="refreshPort" secondary>Refresh</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<n-card>
|
||||
<div class="port">
|
||||
{{ port }}
|
||||
</div>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
@click="copy"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
<n-button
|
||||
secondary
|
||||
@click="refreshPort"
|
||||
>
|
||||
Refresh
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,26 +1,51 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card title="Arabic to roman">
|
||||
<n-space align="center" justify="space-between">
|
||||
<n-input-number
|
||||
v-model:value="inputNumeral"
|
||||
:min="1"
|
||||
style="width: 200px;"
|
||||
:show-button="false"
|
||||
/>
|
||||
<div class="result">{{ outputRoman }}</div>
|
||||
<n-button @click="copyRoman" secondary autofocus>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<br />
|
||||
<n-card title="Roman to arabic">
|
||||
<n-space align="center" justify="space-between">
|
||||
<n-input v-model:value="inputRoman" style="width: 200px;" />
|
||||
<div class="result">{{ outputNumeral }}</div>
|
||||
<n-button @click="copyArabic" secondary autofocus>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
<div>
|
||||
<n-card title="Arabic to roman">
|
||||
<n-space
|
||||
align="center"
|
||||
justify="space-between"
|
||||
>
|
||||
<n-input-number
|
||||
v-model:value="inputNumeral"
|
||||
:min="1"
|
||||
style="width: 200px;"
|
||||
:show-button="false"
|
||||
/>
|
||||
<div class="result">
|
||||
{{ outputRoman }}
|
||||
</div>
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copyRoman"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<br>
|
||||
<n-card title="Roman to arabic">
|
||||
<n-space
|
||||
align="center"
|
||||
justify="space-between"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="inputRoman"
|
||||
style="width: 200px;"
|
||||
/>
|
||||
<div class="result">
|
||||
{{ outputNumeral }}
|
||||
</div>
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copyArabic"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,13 +1,30 @@
|
|||
<template>
|
||||
<n-card>
|
||||
<n-input v-model:value="text" type="textarea" placeholder="Your text..." rows="5" />
|
||||
<n-input
|
||||
v-model:value="text"
|
||||
type="textarea"
|
||||
placeholder="Your text..."
|
||||
rows="5"
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="space-around">
|
||||
<n-statistic label="Character count" :value="text.length" />
|
||||
<n-statistic label="Word count" :value="text.split(/\s+/).length" />
|
||||
<n-statistic label="Line count" :value="text.split(/\r\n|\r|\n/).length" />
|
||||
<n-statistic label="Byte size" :value="formatBytes(getStringSizeInBytes(text))" />
|
||||
<n-statistic
|
||||
label="Character count"
|
||||
:value="text.length"
|
||||
/>
|
||||
<n-statistic
|
||||
label="Word count"
|
||||
:value="text.split(/\s+/).length"
|
||||
/>
|
||||
<n-statistic
|
||||
label="Line count"
|
||||
:value="text.split(/\r\n|\r|\n/).length"
|
||||
/>
|
||||
<n-statistic
|
||||
label="Byte size"
|
||||
:value="formatBytes(getStringSizeInBytes(text))"
|
||||
/>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</template>
|
||||
|
|
|
@ -1,54 +1,80 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-form label-placement="left" label-width="140">
|
||||
<n-space justify="center" item-style="padding: 0" :size="0">
|
||||
<div>
|
||||
<n-form-item label="Uppercase (ABC...)">
|
||||
<n-switch v-model:value="withUppercase" />
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Lowercase (abc...)">
|
||||
<n-switch v-model:value="withLowercase" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<n-form-item label="Numbers (012...)">
|
||||
<n-switch v-model:value="withNumbers" />
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Symbols (;-!...)">
|
||||
<n-switch v-model:value="withSymbols" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
</n-space>
|
||||
</n-form>
|
||||
|
||||
<n-form-item :label="`Length (${length})`" label-placement="left">
|
||||
<n-slider v-model:value="length" :step="1" :min="1" :max="512" />
|
||||
<div>
|
||||
<n-card>
|
||||
<n-form
|
||||
label-placement="left"
|
||||
label-width="140"
|
||||
>
|
||||
<n-space
|
||||
justify="center"
|
||||
item-style="padding: 0"
|
||||
:size="0"
|
||||
>
|
||||
<div>
|
||||
<n-form-item label="Uppercase (ABC...)">
|
||||
<n-switch v-model:value="withUppercase" />
|
||||
</n-form-item>
|
||||
|
||||
<n-input
|
||||
style="text-align: center;"
|
||||
v-model:value="token"
|
||||
type="textarea"
|
||||
placeholder="The token..."
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<n-space justify="center">
|
||||
<n-button @click="copy" secondary autofocus>Copy</n-button>
|
||||
<n-button @click="refreshToken" secondary>Refresh</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
<n-form-item label="Lowercase (abc...)">
|
||||
<n-switch v-model:value="withLowercase" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<n-form-item label="Numbers (012...)">
|
||||
<n-switch v-model:value="withNumbers" />
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Symbols (;-!...)">
|
||||
<n-switch v-model:value="withSymbols" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
</n-space>
|
||||
</n-form>
|
||||
|
||||
<n-form-item
|
||||
:label="`Length (${length})`"
|
||||
label-placement="left"
|
||||
>
|
||||
<n-slider
|
||||
v-model:value="length"
|
||||
:step="1"
|
||||
:min="1"
|
||||
:max="512"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
<n-input
|
||||
v-model:value="token"
|
||||
style="text-align: center;"
|
||||
type="textarea"
|
||||
placeholder="The token..."
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copy"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
<n-button
|
||||
secondary
|
||||
@click="refreshToken"
|
||||
>
|
||||
Refresh
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,38 +1,72 @@
|
|||
<template>
|
||||
<n-space item-style="flex:1">
|
||||
<n-card title="Encode">
|
||||
<n-form-item label="Your string :" :feedback="encodedValidation.message"
|
||||
:validation-status="encodedValidation.status">
|
||||
<n-input v-model:value="encodeInput" type="textarea" placeholder="The string to encode"
|
||||
:autosize="{ minRows: 3 }" />
|
||||
</n-form-item>
|
||||
<n-space item-style="flex:1">
|
||||
<n-card title="Encode">
|
||||
<n-form-item
|
||||
label="Your string :"
|
||||
:feedback="encodedValidation.message"
|
||||
:validation-status="encodedValidation.status"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="encodeInput"
|
||||
type="textarea"
|
||||
placeholder="The string to encode"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Your string encoded :">
|
||||
<n-input :value="encodeOutput" type="textarea" readonly placeholder="Your string encoded"
|
||||
:autosize="{ minRows: 3 }" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Your string encoded :">
|
||||
<n-input
|
||||
:value="encodeOutput"
|
||||
type="textarea"
|
||||
readonly
|
||||
placeholder="Your string encoded"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
<n-space justify="center">
|
||||
<n-button @click="copyEncoded" secondary>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<n-card title="Encode">
|
||||
<n-form-item label="Your encode string :" :feedback="decodeValidation.message"
|
||||
:validation-status="decodeValidation.status">
|
||||
<n-input v-model:value="decodeInput" type="textarea" placeholder="The string to decode"
|
||||
:autosize="{ minRows: 3 }" />
|
||||
</n-form-item>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
@click="copyEncoded"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
<n-card title="Encode">
|
||||
<n-form-item
|
||||
label="Your encode string :"
|
||||
:feedback="decodeValidation.message"
|
||||
:validation-status="decodeValidation.status"
|
||||
>
|
||||
<n-input
|
||||
v-model:value="decodeInput"
|
||||
type="textarea"
|
||||
placeholder="The string to decode"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
<n-form-item label="Your string decoded :">
|
||||
<n-input :value="decodeOutput" type="textarea" readonly placeholder="Your string decoded"
|
||||
:autosize="{ minRows: 3 }" />
|
||||
</n-form-item>
|
||||
<n-form-item label="Your string decoded :">
|
||||
<n-input
|
||||
:value="decodeOutput"
|
||||
type="textarea"
|
||||
readonly
|
||||
placeholder="Your string decoded"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</n-form-item>
|
||||
|
||||
<n-space justify="center">
|
||||
<n-button @click="copyDecoded" secondary>Copy</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</n-space>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
@click="copyDecoded"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</n-space>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
|
@ -1,31 +1,49 @@
|
|||
<template>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-space align="center" justify="center">
|
||||
Quantity :
|
||||
<n-input-number v-model:value="count" :min="1" :max="50" />
|
||||
</n-space>
|
||||
<br />
|
||||
<n-input
|
||||
style="text-align: center; font-family: monospace;"
|
||||
:value="uuids"
|
||||
type="textarea"
|
||||
placeholder="Your uuids"
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<n-space justify="center">
|
||||
<n-button @click="copy" secondary autofocus>Copy</n-button>
|
||||
<n-button @click="refreshUUIDs" secondary>Refresh</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
<div>
|
||||
<n-card>
|
||||
<n-space
|
||||
align="center"
|
||||
justify="center"
|
||||
>
|
||||
Quantity :
|
||||
<n-input-number
|
||||
v-model:value="count"
|
||||
:min="1"
|
||||
:max="50"
|
||||
/>
|
||||
</n-space>
|
||||
<br>
|
||||
<n-input
|
||||
style="text-align: center; font-family: monospace;"
|
||||
:value="uuids"
|
||||
type="textarea"
|
||||
placeholder="Your uuids"
|
||||
:autosize="{ minRows: 1 }"
|
||||
readonly
|
||||
autocomplete="off"
|
||||
autocorrect="off"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
<br>
|
||||
<br>
|
||||
<n-space justify="center">
|
||||
<n-button
|
||||
secondary
|
||||
autofocus
|
||||
@click="copy"
|
||||
>
|
||||
Copy
|
||||
</n-button>
|
||||
<n-button
|
||||
secondary
|
||||
@click="refreshUUIDs"
|
||||
>
|
||||
Refresh
|
||||
</n-button>
|
||||
</n-space>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue