refactor(ui): removed all n-space
This commit is contained in:
		
							parent
							
								
									34d8e5ce2c
								
							
						
					
					
						commit
						5aeeb6ca0e
					
				| @ -1,8 +1,6 @@ | ||||
| <template> | ||||
|   <c-card class="colored-card"> | ||||
|     <n-space justify="space-between" align="center"> | ||||
|       <n-icon class="icon" size="40" :component="icon" /> | ||||
|     </n-space> | ||||
|     <n-icon class="icon" size="40" :component="icon" /> | ||||
|     <n-h3 class="title"> | ||||
|       <n-ellipsis>{{ title }}</n-ellipsis> | ||||
|     </n-h3> | ||||
|  | ||||
| @ -21,9 +21,9 @@ | ||||
|         <span>{{ tooltipText }}</span> | ||||
|       </n-tooltip> | ||||
|     </c-card> | ||||
|     <n-space v-if="copyPlacement === 'outside'" justify="center" mt-4> | ||||
|     <div v-if="copyPlacement === 'outside'" mt-4 flex justify-center> | ||||
|       <c-button @click="onCopyClicked"> {{ tooltipText }} </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| <template> | ||||
|   <router-link :to="tool.path"> | ||||
|     <c-card class="tool-card"> | ||||
|       <n-space justify="space-between" align="center"> | ||||
|       <div flex items-center justify-between> | ||||
|         <n-icon class="icon" size="40" :component="tool.icon" /> | ||||
|         <n-space align="center"> | ||||
|         <div flex items-center gap-8px> | ||||
|           <n-tag | ||||
|             v-if="tool.isNew" | ||||
|             size="small" | ||||
| @ -17,8 +17,8 @@ | ||||
|           </n-tag> | ||||
| 
 | ||||
|           <favorite-button :tool="tool" /> | ||||
|         </n-space> | ||||
|       </n-space> | ||||
|         </div> | ||||
|       </div> | ||||
|       <n-h3 class="title"> | ||||
|         <n-ellipsis>{{ tool.name }}</n-ellipsis> | ||||
|       </n-h3> | ||||
|  | ||||
| @ -43,9 +43,9 @@ const tools = computed<ToolCategory[]>(() => [ | ||||
|       </router-link> | ||||
| 
 | ||||
|       <div class="sider-content"> | ||||
|         <n-space v-if="styleStore.isSmallScreen" justify="center"> | ||||
|         <div v-if="styleStore.isSmallScreen" flex justify-center> | ||||
|           <navbar-buttons /> | ||||
|         </n-space> | ||||
|         </div> | ||||
| 
 | ||||
|         <collapsible-tool-menu :tools-by-category="tools" /> | ||||
| 
 | ||||
|  | ||||
| @ -29,7 +29,7 @@ useHead(head); | ||||
|   <base-layout> | ||||
|     <div class="tool-layout"> | ||||
|       <div class="tool-header"> | ||||
|         <n-space align="center" justify="space-between" :wrap="false"> | ||||
|         <div flex flex-nowrap items-center justify-between> | ||||
|           <n-h1> | ||||
|             {{ route.meta.name }} | ||||
|           </n-h1> | ||||
| @ -37,7 +37,7 @@ useHead(head); | ||||
|           <div> | ||||
|             <favorite-button :tool="{name: route.meta.name} as Tool" /> | ||||
|           </div> | ||||
|         </n-space> | ||||
|         </div> | ||||
| 
 | ||||
|         <div class="separator" /> | ||||
| 
 | ||||
|  | ||||
| @ -18,9 +18,9 @@ | ||||
|         </n-scrollbar> | ||||
|       </n-statistic> | ||||
|     </c-card> | ||||
|     <n-space justify="center" mt-5> | ||||
|     <div mt-5 flex justify-center> | ||||
|       <c-button @click="copy">Copy header</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -15,9 +15,9 @@ | ||||
| 
 | ||||
|     <c-input-text :value="hashed" readonly text-center /> | ||||
| 
 | ||||
|     <n-space justify="center" mt-5> | ||||
|     <div mt-5 flex justify-center> | ||||
|       <c-button @click="copy"> Copy hash </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
| 
 | ||||
|   <c-card title="Compare string with hash"> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| <template> | ||||
|   <n-scrollbar style="flex: 1" x-scrollable> | ||||
|     <n-space :wrap="false" style="flex: 1" justify="center" :size="12" mb-5> | ||||
|     <div mb-5 flex flex-1 flex-nowrap justify-center gap-12px> | ||||
|       <div v-for="(suite, index) of suites" :key="index"> | ||||
|         <c-card style="width: 294px"> | ||||
|           <c-input-text | ||||
| @ -17,7 +17,7 @@ | ||||
|           </n-form-item> | ||||
|         </c-card> | ||||
| 
 | ||||
|         <n-space justify="center"> | ||||
|         <div flex justify-center> | ||||
|           <c-button v-if="suites.length > 1" variant="text" @click="suites.splice(index, 1)"> | ||||
|             <n-icon :component="Trash" depth="3" mr-2 size="18" /> | ||||
|             Delete suite | ||||
| @ -29,14 +29,14 @@ | ||||
|             <n-icon :component="Plus" depth="3" mr-2 size="18" /> | ||||
|             Add suite | ||||
|           </c-button> | ||||
|         </n-space> | ||||
|         </div> | ||||
|       </div> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </n-scrollbar> | ||||
| 
 | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <div style="max-width: 600px; margin: 0 auto"> | ||||
|       <n-space justify="center"> | ||||
|       <div mx-auto max-w-sm flex justify-center gap-3> | ||||
|         <c-input-text v-model:value="unit" placeholder="Unit (eg: ms)" label="Unit" label-position="left" mb-4 /> | ||||
| 
 | ||||
|         <c-button | ||||
| @ -48,7 +48,7 @@ | ||||
|           " | ||||
|           >Reset suites</c-button | ||||
|         > | ||||
|       </n-space> | ||||
|       </div> | ||||
| 
 | ||||
|       <n-table> | ||||
|         <thead> | ||||
| @ -70,10 +70,10 @@ | ||||
|           </tr> | ||||
|         </tbody> | ||||
|       </n-table> | ||||
|       <n-space justify="center" mt-5> | ||||
|       <div mt-5 flex justify-center gap-3> | ||||
|         <c-button @click="copyAsMarkdown">Copy as markdown table</c-button> | ||||
|         <c-button @click="copyAsBulletList">Copy as bullet list</c-button> | ||||
|       </n-space> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-space v-for="(value, index) of values" :key="index" :wrap="false" style="margin-bottom: 5px" :size="5"> | ||||
|     <div v-for="(value, index) of values" :key="index" mb-2 flex flex-nowrap gap-2> | ||||
|       <n-input-number | ||||
|         :ref="refs.set" | ||||
|         v-model:value="values[index]" | ||||
| @ -17,7 +17,7 @@ | ||||
|         </template> | ||||
|         Delete value | ||||
|       </n-tooltip> | ||||
|     </n-space> | ||||
|     </div> | ||||
| 
 | ||||
|     <c-button @click="addValue"> | ||||
|       <n-icon :component="Plus" depth="3" mr-2 size="18" /> | ||||
|  | ||||
| @ -3,12 +3,12 @@ | ||||
|     <c-card> | ||||
|       <div class="duration">{{ formatMs(counter) }}</div> | ||||
|     </c-card> | ||||
|     <n-space justify="center" mt-5> | ||||
|     <div mt-5 flex justify-center gap-3> | ||||
|       <c-button v-if="!isRunning" type="primary" @click="resume">Start</c-button> | ||||
|       <c-button v-else type="warning" @click="pause">Stop</c-button> | ||||
| 
 | ||||
|       <c-button @click="counter = 0">Reset</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -16,7 +16,7 @@ | ||||
| 
 | ||||
|     <n-divider /> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <n-form :show-feedback="false" label-width="170" label-placement="left"> | ||||
|         <n-form-item label="Verbose"> | ||||
|           <n-switch v-model:value="cronstrueConfig.verbose" /> | ||||
| @ -28,7 +28,7 @@ | ||||
|           <n-switch v-model:value="cronstrueConfig.dayOfWeekStartIndexZero" /> | ||||
|         </n-form-item> | ||||
|       </n-form> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
|   <c-card> | ||||
|     <pre> | ||||
| @ -42,8 +42,8 @@ | ||||
| * * * * * * command</pre | ||||
|     > | ||||
| 
 | ||||
|     <n-space v-if="styleStore.isSmallScreen" vertical> | ||||
|       <c-card v-for="{ symbol, meaning, example, equivalent } in helpers" :key="symbol" important:border-none> | ||||
|     <div v-if="styleStore.isSmallScreen"> | ||||
|       <c-card v-for="{ symbol, meaning, example, equivalent } in helpers" :key="symbol" mb-3 important:border-none> | ||||
|         <div> | ||||
|           Symbol: <strong>{{ symbol }}</strong> | ||||
|         </div> | ||||
| @ -60,7 +60,7 @@ | ||||
|           Equivalent: <strong>{{ equivalent }}</strong> | ||||
|         </div> | ||||
|       </c-card> | ||||
|     </n-space> | ||||
|     </div> | ||||
|     <n-table v-else size="small"> | ||||
|       <thead> | ||||
|         <tr> | ||||
|  | ||||
| @ -14,9 +14,9 @@ | ||||
| 
 | ||||
|     <textarea-copyable :value="dockerCompose" language="yaml" /> | ||||
| 
 | ||||
|     <n-space justify="center" mt-5> | ||||
|     <div mt-5 flex justify-center> | ||||
|       <c-button :disabled="dockerCompose === ''" secondary @click="download"> Download docker-compose.yml </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
| 
 | ||||
|     <div v-if="notComposable.length > 0"> | ||||
|       <n-alert title="This options are not translatable to docker-compose" type="info" mt-5> | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <template> | ||||
|   <c-card title="Encrypt"> | ||||
|     <n-space item-style="flex: 1 1 0"> | ||||
|       <n-form-item label="Your text:" :show-feedback="false"> | ||||
|     <div flex gap-3> | ||||
|       <n-form-item label="Your text:" :show-feedback="false" flex-1> | ||||
|         <n-input | ||||
|           v-model:value="cypherInput" | ||||
|           type="textarea" | ||||
| @ -13,7 +13,7 @@ | ||||
|           spellcheck="false" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-space vertical> | ||||
|       <div flex flex-1 flex-col gap-2> | ||||
|         <c-input-text v-model:value="cypherSecret" label="Your secret key:" clearable raw-text /> | ||||
| 
 | ||||
|         <n-form-item label="Encryption algorithm:" :show-feedback="false"> | ||||
| @ -22,8 +22,8 @@ | ||||
|             :options="Object.keys(algos).map((label) => ({ label, value: label }))" | ||||
|           /> | ||||
|         </n-form-item> | ||||
|       </n-space> | ||||
|     </n-space> | ||||
|       </div> | ||||
|     </div> | ||||
|     <n-form-item label="Your text encrypted:" :show-feedback="false" mt-5> | ||||
|       <n-input | ||||
|         :value="cypherOutput" | ||||
| @ -39,8 +39,8 @@ | ||||
|     </n-form-item> | ||||
|   </c-card> | ||||
|   <c-card title="Decrypt"> | ||||
|     <n-space item-style="flex: 1 1 0"> | ||||
|       <n-form-item label="Your encrypted text:" :show-feedback="false"> | ||||
|     <div flex gap-3> | ||||
|       <n-form-item label="Your encrypted text:" :show-feedback="false" flex-1> | ||||
|         <n-input | ||||
|           v-model:value="decryptInput" | ||||
|           type="textarea" | ||||
| @ -52,7 +52,7 @@ | ||||
|           spellcheck="false" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-space vertical> | ||||
|       <div flex flex-1 flex-col gap-2> | ||||
|         <c-input-text v-model:value="decryptSecret" label="Your secret key:" clearable raw-text /> | ||||
| 
 | ||||
|         <n-form-item label="Encryption algorithm:" :show-feedback="false"> | ||||
| @ -61,8 +61,8 @@ | ||||
|             :options="Object.keys(algos).map((label) => ({ label, value: label }))" | ||||
|           /> | ||||
|         </n-form-item> | ||||
|       </n-space> | ||||
|     </n-space> | ||||
|       </div> | ||||
|     </div> | ||||
|     <n-form-item label="Your decrypted text:" :show-feedback="false" mt-5> | ||||
|       <n-input | ||||
|         :value="decryptOutput" | ||||
|  | ||||
| @ -6,46 +6,40 @@ | ||||
|       {{ endAt }}. | ||||
|     </n-text> | ||||
|     <n-divider /> | ||||
|     <n-space item-style="flex:1 1 0"> | ||||
|       <div> | ||||
|         <n-space item-style="flex:1 1 0"> | ||||
|           <n-form-item label="Amount of element to consume"> | ||||
|             <n-input-number v-model:value="unitCount" :min="1" /> | ||||
|           </n-form-item> | ||||
|           <n-form-item label="The consumption started at"> | ||||
|             <n-date-picker v-model:value="startedAt" type="datetime" /> | ||||
|           </n-form-item> | ||||
|         </n-space> | ||||
|     <div flex gap-2> | ||||
|       <n-form-item label="Amount of element to consume" flex-1> | ||||
|         <n-input-number v-model:value="unitCount" :min="1" /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="The consumption started at" flex-1> | ||||
|         <n-date-picker v-model:value="startedAt" type="datetime" /> | ||||
|       </n-form-item> | ||||
|     </div> | ||||
| 
 | ||||
|         <n-form-item label="Amount of unit consumed by time span" :show-feedback="false"> | ||||
|           <n-input-number v-model:value="unitPerTimeSpan" :min="1" /> | ||||
|           <span style="margin: 0 10px">in</span> | ||||
|           <n-input-group> | ||||
|             <n-input-number v-model:value="timeSpan" :min="1" /> | ||||
|             <n-select | ||||
|               v-model:value="timeSpanUnitMultiplier" | ||||
|               :options="[ | ||||
|                 { label: 'milliseconds', value: 1 }, | ||||
|                 { label: 'seconds', value: 1000 }, | ||||
|                 { label: 'minutes', value: 1000 * 60 }, | ||||
|                 { label: 'hours', value: 1000 * 60 * 60 }, | ||||
|                 { label: 'days', value: 1000 * 60 * 60 * 24 }, | ||||
|               ]" | ||||
|             ></n-select> | ||||
|           </n-input-group> | ||||
|         </n-form-item> | ||||
|     <n-form-item label="Amount of unit consumed by time span" :show-feedback="false"> | ||||
|       <n-input-number v-model:value="unitPerTimeSpan" :min="1" /> | ||||
|       <span mx-3>in</span> | ||||
|       <n-input-group> | ||||
|         <n-input-number v-model:value="timeSpan" :min="1" /> | ||||
|         <n-select | ||||
|           v-model:value="timeSpanUnitMultiplier" | ||||
|           :options="[ | ||||
|             { label: 'milliseconds', value: 1 }, | ||||
|             { label: 'seconds', value: 1000 }, | ||||
|             { label: 'minutes', value: 1000 * 60 }, | ||||
|             { label: 'hours', value: 1000 * 60 * 60 }, | ||||
|             { label: 'days', value: 1000 * 60 * 60 * 24 }, | ||||
|           ]" | ||||
|         ></n-select> | ||||
|       </n-input-group> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|         <n-divider /> | ||||
|         <n-space vertical> | ||||
|           <c-card> | ||||
|             <n-statistic label="Total duration">{{ formatMsDuration(durationMs) }}</n-statistic> | ||||
|           </c-card> | ||||
|           <c-card> | ||||
|             <n-statistic label="It will end ">{{ endAt }}</n-statistic> | ||||
|           </c-card> | ||||
|         </n-space> | ||||
|       </div> | ||||
|     </n-space> | ||||
|     <n-divider /> | ||||
|     <c-card mb-2> | ||||
|       <n-statistic label="Total duration">{{ formatMsDuration(durationMs) }}</n-statistic> | ||||
|     </c-card> | ||||
|     <c-card> | ||||
|       <n-statistic label="It will end ">{{ endAt }}</n-statistic> | ||||
|     </c-card> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -6,15 +6,15 @@ | ||||
|     <n-form-item label="Secret key"> | ||||
|       <n-input v-model:value="secret" placeholder="Enter the secret key..." /> | ||||
|     </n-form-item> | ||||
|     <n-space item-style="flex:1 1 0"> | ||||
|       <n-form-item label="Hashing function"> | ||||
|     <div flex gap-2> | ||||
|       <n-form-item label="Hashing function" flex-1> | ||||
|         <n-select | ||||
|           v-model:value="hashFunction" | ||||
|           placeholder="Select an hashing function..." | ||||
|           :options="Object.keys(algos).map((label) => ({ label, value: label }))" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Output encoding"> | ||||
|       <n-form-item label="Output encoding" flex-1> | ||||
|         <n-select | ||||
|           v-model:value="encoding" | ||||
|           placeholder="Select the result encoding..." | ||||
| @ -38,13 +38,13 @@ | ||||
|           ]" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|     </n-space> | ||||
|     </div> | ||||
|     <n-form-item label="HMAC of your text"> | ||||
|       <n-input readonly :value="hmac" type="textarea" placeholder="The result of the HMAC..." /> | ||||
|     </n-form-item> | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copy()">Copy HMAC</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -19,9 +19,9 @@ | ||||
|       /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copyEscaped"> Copy </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
|   <c-card title="Unescape html entities"> | ||||
|     <n-form-item label="Your escaped string :"> | ||||
| @ -43,9 +43,9 @@ | ||||
|       /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copyUnescaped"> Copy </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| <template> | ||||
|   <n-space align="center" :size="0"> | ||||
|   <div flex items-center> | ||||
|     <template v-for="(item, index) in items"> | ||||
|       <n-divider v-if="item.type === 'divider'" :key="`divider${index}`" vertical /> | ||||
|       <menu-bar-item v-else-if="item.type === 'button'" :key="index" v-bind="item" /> | ||||
|     </template> | ||||
|   </n-space> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  | ||||
| @ -21,10 +21,8 @@ | ||||
|       <n-h2> {{ category }} </n-h2> | ||||
| 
 | ||||
|       <c-card v-for="{ code, description, name, type } of codes" :key="code" mb-2> | ||||
|         <n-space align="center"> | ||||
|           <n-text strong text-lg> {{ code }} {{ name }} </n-text> | ||||
|         </n-space> | ||||
|         <n-text depth="3">{{ description }} {{ type !== 'HTTP' ? `For ${type}.` : '' }}</n-text> | ||||
|         <n-text strong block text-lg> {{ code }} {{ name }} </n-text> | ||||
|         <n-text block depth="3">{{ description }} {{ type !== 'HTTP' ? `For ${type}.` : '' }}</n-text> | ||||
|       </c-card> | ||||
|     </div> | ||||
|   </div> | ||||
|  | ||||
| @ -1,61 +1,56 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-space item-style="flex:1 1 0"> | ||||
|       <div> | ||||
|         <div mb-4 flex gap-4> | ||||
|           <c-input-text | ||||
|             v-model:value="rawStartAddress" | ||||
|             label="Start address" | ||||
|             placeholder="Start IPv4 address..." | ||||
|             :validation="startIpValidation" | ||||
|             clearable | ||||
|           /> | ||||
|     <div mb-4 flex gap-4> | ||||
|       <c-input-text | ||||
|         v-model:value="rawStartAddress" | ||||
|         label="Start address" | ||||
|         placeholder="Start IPv4 address..." | ||||
|         :validation="startIpValidation" | ||||
|         clearable | ||||
|       /> | ||||
| 
 | ||||
|           <c-input-text | ||||
|             v-model:value="rawEndAddress" | ||||
|             label="End address" | ||||
|             placeholder="End IPv4 address..." | ||||
|             :validation="endIpValidation" | ||||
|             clearable | ||||
|           /> | ||||
|         </div> | ||||
|       <c-input-text | ||||
|         v-model:value="rawEndAddress" | ||||
|         label="End address" | ||||
|         placeholder="End IPv4 address..." | ||||
|         :validation="endIpValidation" | ||||
|         clearable | ||||
|       /> | ||||
|     </div> | ||||
| 
 | ||||
|         <n-table v-if="showResult" data-test-id="result"> | ||||
|           <thead> | ||||
|             <tr> | ||||
|               <th scope="col"> </th> | ||||
|               <th scope="col">old value</th> | ||||
|               <th scope="col">new value</th> | ||||
|             </tr> | ||||
|           </thead> | ||||
|           <tbody> | ||||
|             <result-row | ||||
|               v-for="{ label, getOldValue, getNewValue } in calculatedValues" | ||||
|               :key="label" | ||||
|               :label="label" | ||||
|               :old-value="getOldValue(result)" | ||||
|               :new-value="getNewValue(result)" | ||||
|             /> | ||||
|           </tbody> | ||||
|         </n-table> | ||||
|         <n-alert | ||||
|           v-else-if="startIpValidation.isValid && endIpValidation.isValid" | ||||
|           title="Invalid combination of start and end IPv4 address" | ||||
|           type="error" | ||||
|         > | ||||
|           <n-space vertical> | ||||
|             <n-text depth="3"> | ||||
|               The end IPv4 address is lower than the start IPv4 address. This is not valid and no result could be | ||||
|               calculated. In the most cases the solution to solve this problem is to change start and end address. | ||||
|             </n-text> | ||||
|             <c-button @click="onSwitchStartEndClicked"> | ||||
|               <n-icon mr-2 :component="Exchange" depth="3" size="22" /> | ||||
|               Switch start and end IPv4 address | ||||
|             </c-button> | ||||
|           </n-space> | ||||
|         </n-alert> | ||||
|       </div> | ||||
|     </n-space> | ||||
|     <n-table v-if="showResult" data-test-id="result"> | ||||
|       <thead> | ||||
|         <tr> | ||||
|           <th scope="col"> </th> | ||||
|           <th scope="col">old value</th> | ||||
|           <th scope="col">new value</th> | ||||
|         </tr> | ||||
|       </thead> | ||||
|       <tbody> | ||||
|         <result-row | ||||
|           v-for="{ label, getOldValue, getNewValue } in calculatedValues" | ||||
|           :key="label" | ||||
|           :label="label" | ||||
|           :old-value="getOldValue(result)" | ||||
|           :new-value="getNewValue(result)" | ||||
|         /> | ||||
|       </tbody> | ||||
|     </n-table> | ||||
|     <n-alert | ||||
|       v-else-if="startIpValidation.isValid && endIpValidation.isValid" | ||||
|       title="Invalid combination of start and end IPv4 address" | ||||
|       type="error" | ||||
|     > | ||||
|       <n-text depth="3" my-3 block> | ||||
|         The end IPv4 address is lower than the start IPv4 address. This is not valid and no result could be calculated. | ||||
|         In the most cases the solution to solve this problem is to change start and end address. | ||||
|       </n-text> | ||||
| 
 | ||||
|       <c-button @click="onSwitchStartEndClicked"> | ||||
|         <n-icon mr-2 :component="Exchange" depth="3" size="22" /> | ||||
|         Switch start and end IPv4 address | ||||
|       </c-button> | ||||
|     </n-alert> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -23,7 +23,7 @@ | ||||
|         </tbody> | ||||
|       </n-table> | ||||
| 
 | ||||
|       <n-space style="margin-top: 14px" justify="space-between"> | ||||
|       <div mt-3 flex items-center justify-between> | ||||
|         <c-button @click="switchToBlock({ count: -1 })"> | ||||
|           <n-icon :component="ArrowLeft" /> | ||||
|           Previous block | ||||
| @ -32,7 +32,7 @@ | ||||
|           Next block | ||||
|           <n-icon :component="ArrowRight" /> | ||||
|         </c-button> | ||||
|       </n-space> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| <template> | ||||
|   <div v-if="showResults"> | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <n-form-item label="Only show differences" label-placement="left"> | ||||
|         <n-switch v-model:value="onlyShowDifferences" /> | ||||
|       </n-form-item> | ||||
|     </n-space> | ||||
|     </div> | ||||
| 
 | ||||
|     <c-card data-test-id="diff-result"> | ||||
|       <n-text v-if="jsonAreTheSame" depth="3" block text-center italic> The provided JSONs are the same </n-text> | ||||
|  | ||||
| @ -1,13 +1,13 @@ | ||||
| <template> | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <n-space style="margin: 0 auto; max-width: 600px" justify="center"> | ||||
|     <div style="margin: 0 auto; max-width: 600px" flex justify-center gap-3> | ||||
|       <n-form-item label="Sort keys :" label-placement="left" label-width="100"> | ||||
|         <n-switch v-model:value="sortKeys" /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Indent size :" label-placement="left" label-width="100" :show-feedback="false"> | ||||
|         <n-input-number v-model:value="indentSize" min="0" max="10" style="width: 100px" /> | ||||
|       </n-form-item> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <n-form-item | ||||
|  | ||||
| @ -10,20 +10,12 @@ | ||||
|           <th colspan="2" class="table-header">{{ section.title }}</th> | ||||
|           <tr v-for="{ claim, claimDescription, friendlyValue, value } in decodedJWT[section.key]" :key="claim + value"> | ||||
|             <td class="claims"> | ||||
|               <n-space> | ||||
|                 <n-text strong>{{ claim }}</n-text> | ||||
|                 <template v-if="claimDescription"> | ||||
|                   <n-text depth="3">({{ claimDescription }})</n-text> | ||||
|                 </template> | ||||
|               </n-space> | ||||
|               <n-text strong>{{ claim }}</n-text> | ||||
|               <n-text v-if="claimDescription" depth="3" ml-2>({{ claimDescription }})</n-text> | ||||
|             </td> | ||||
|             <td> | ||||
|               <n-space> | ||||
|                 <n-text>{{ value }}</n-text> | ||||
|                 <template v-if="friendlyValue"> | ||||
|                   <n-text depth="3">({{ friendlyValue }})</n-text> | ||||
|                 </template> | ||||
|               </n-space> | ||||
|               <n-text>{{ value }}</n-text> | ||||
|               <n-text v-if="friendlyValue" ml-2 depth="3">({{ friendlyValue }})</n-text> | ||||
|             </td> | ||||
|           </tr> | ||||
|         </template> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| <template> | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <n-space item-style="flex: 1 1 0" style="margin: 0 auto; max-width: 600px" justify="center"> | ||||
|     <div style="margin: 0 auto; max-width: 600px"> | ||||
|       <c-card> | ||||
|         <div flex> | ||||
|           <div> | ||||
| @ -73,7 +73,7 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|       </c-card> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
|   <format-transformer | ||||
|     input-label="Your input data" | ||||
|  | ||||
| @ -18,9 +18,9 @@ | ||||
| 
 | ||||
|     <n-input :value="loremIpsumText" type="textarea" placeholder="Your lorem ipsum..." readonly autosize mt-5 /> | ||||
| 
 | ||||
|     <n-space justify="center" mt-5> | ||||
|     <div mt-5 flex justify-center> | ||||
|       <c-button autofocus @click="copy"> Copy </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -25,10 +25,10 @@ | ||||
|       <n-progress :percentage="(100 * interval) / 30" :color="theme.primaryColor" :show-indicator="false" /> | ||||
|       <div style="text-align: center">Next in {{ String(Math.floor(30 - interval)).padStart(2, '0') }}s</div> | ||||
|     </div> | ||||
|     <n-space justify="center" vertical align="center" style="margin-top: 10px"> | ||||
|     <div mt-4 flex flex-col items-center justify-center gap-3> | ||||
|       <n-image :src="qrcode"></n-image> | ||||
|       <c-button :href="keyUri" target="_blank">Open Key URI in new tab</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
|   <div style="max-width: 350px"> | ||||
|     <input-copyable | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <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> | ||||
|     </n-space> | ||||
|     <div class="labels" w-full flex items-center> | ||||
|       <div flex-1 text-left>Previous</div> | ||||
|       <div flex-1 text-center>Current OTP</div> | ||||
|       <div flex-1 text-right>Next</div> | ||||
|     </div> | ||||
|     <n-input-group> | ||||
|       <n-tooltip trigger="hover" placement="bottom"> | ||||
|         <template #trigger> | ||||
| @ -63,7 +63,6 @@ const { tokens } = toRefs(props); | ||||
| 
 | ||||
| .labels { | ||||
|   div { | ||||
|     text-align: center; | ||||
|     padding: 0 2px 6px 2px; | ||||
|     line-height: 1.25; | ||||
|   } | ||||
|  | ||||
| @ -26,10 +26,10 @@ | ||||
|         </n-form> | ||||
|       </n-gi> | ||||
|       <n-gi> | ||||
|         <n-space justify="center" align="center" vertical> | ||||
|         <div flex flex-col items-center gap-3> | ||||
|           <n-image :src="qrcode" width="200" /> | ||||
|           <c-button @click="download"> Download qr-code </c-button> | ||||
|         </n-space> | ||||
|         </div> | ||||
|       </n-gi> | ||||
|     </n-grid> | ||||
|   </c-card> | ||||
|  | ||||
| @ -3,10 +3,10 @@ | ||||
|     <div class="port"> | ||||
|       {{ port }} | ||||
|     </div> | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center gap-3> | ||||
|       <c-button @click="copy"> Copy </c-button> | ||||
|       <c-button @click="refreshPort"> Refresh </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <c-card title="Arabic to roman"> | ||||
|       <n-space align="center" justify="space-between"> | ||||
|       <div flex items-center justify-between> | ||||
|         <n-form-item v-bind="validationNumeral as any"> | ||||
|           <n-input-number v-model:value="inputNumeral" :min="1" style="width: 200px" :show-button="false" /> | ||||
|         </n-form-item> | ||||
| @ -11,17 +11,17 @@ | ||||
|         <c-button autofocus :disabled="validationNumeral.validationStatus === 'error'" @click="copyRoman"> | ||||
|           Copy | ||||
|         </c-button> | ||||
|       </n-space> | ||||
|       </div> | ||||
|     </c-card> | ||||
|     <c-card title="Roman to arabic" mt-5> | ||||
|       <n-space align="center" justify="space-between"> | ||||
|       <div flex items-center justify-between> | ||||
|         <c-input-text v-model:value="inputRoman" style="width: 200px" :validation="validationRoman" /> | ||||
| 
 | ||||
|         <div class="result"> | ||||
|           {{ outputNumeral }} | ||||
|         </div> | ||||
|         <c-button :disabled="!validationRoman.isValid" @click="copyArabic"> Copy </c-button> | ||||
|       </n-space> | ||||
|       </div> | ||||
|     </c-card> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -1,12 +1,12 @@ | ||||
| <template> | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <n-space item-style="flex: 1 1 0" style="margin: 0 auto; max-width: 600px" justify="center"> | ||||
|     <div item-style="flex: 1 1 0" style="max-width: 600px" mx-auto flex gap-3> | ||||
|       <n-form-item label="Bits :" v-bind="bitsValidationAttrs as any" label-placement="left" label-width="100"> | ||||
|         <n-input-number v-model:value="bits" min="256" max="16384" step="8" /> | ||||
|       </n-form-item> | ||||
| 
 | ||||
|       <c-button @click="refreshCerts">Refresh key-pair</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <div> | ||||
|  | ||||
| @ -13,9 +13,9 @@ | ||||
|       ></n-input> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button :disabled="slug.length === 0" @click="copy">Copy slug</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <template> | ||||
|   <div style="flex: 0 0 100%"> | ||||
|     <n-space item-style="flex:1 1 0" style="margin: 0 auto; max-width: 600px" :vertical="styleStore.isSmallScreen"> | ||||
|       <n-form-item label="Dialect" label-width="500"> | ||||
|     <div mx-auto style="max-width: 600px" flex gap-2 :class="{ 'flex-col': styleStore.isSmallScreen }"> | ||||
|       <n-form-item label="Dialect" label-width="500" flex-1> | ||||
|         <n-select | ||||
|           v-model:value="config.language" | ||||
|           :options="[ | ||||
| @ -21,7 +21,7 @@ | ||||
|           ]" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Keyword case"> | ||||
|       <n-form-item label="Keyword case" flex-1> | ||||
|         <n-select | ||||
|           v-model:value="config.keywordCase" | ||||
|           :options="[ | ||||
| @ -31,7 +31,7 @@ | ||||
|           ]" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Indent style"> | ||||
|       <n-form-item label="Indent style" flex-1> | ||||
|         <n-select | ||||
|           v-model:value="config.indentStyle" | ||||
|           :options="[ | ||||
| @ -41,7 +41,7 @@ | ||||
|           ]" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <n-form-item label="Your SQL query"> | ||||
|  | ||||
| @ -1,24 +1,24 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-form label-placement="left" label-width="100"> | ||||
|       <n-space item-style="flex:1 1 0"> | ||||
|         <n-form-item label="Width (in px)"> | ||||
|       <div flex gap-3> | ||||
|         <n-form-item label="Width (in px)" flex-1> | ||||
|           <n-input-number v-model:value="width" placeholder="SVG width..." min="1" /> | ||||
|         </n-form-item> | ||||
|         <n-form-item label="Background"> | ||||
|         <n-form-item label="Background" flex-1> | ||||
|           <n-color-picker v-model:value="bgColor" :modes="['hex']" /> | ||||
|         </n-form-item> | ||||
|       </n-space> | ||||
|       <n-space item-style="flex:1 1 0"> | ||||
|         <n-form-item label="Height (in px)"> | ||||
|       </div> | ||||
|       <div flex gap-3> | ||||
|         <n-form-item label="Height (in px)" flex-1> | ||||
|           <n-input-number v-model:value="height" placeholder="SVG height..." min="1" /> | ||||
|         </n-form-item> | ||||
|         <n-form-item label="Text color"> | ||||
|         <n-form-item label="Text color" flex-1> | ||||
|           <n-color-picker v-model:value="fgColor" :modes="['hex']" /> | ||||
|         </n-form-item> | ||||
|       </n-space> | ||||
|       <n-space item-style="flex:1 1 0"> | ||||
|         <n-form-item label="Font size"> | ||||
|       </div> | ||||
|       <div flex gap-3> | ||||
|         <n-form-item label="Font size" flex-1> | ||||
|           <n-input-number v-model:value="fontSize" placeholder="Font size..." min="1" /> | ||||
|         </n-form-item> | ||||
| 
 | ||||
| @ -29,8 +29,9 @@ | ||||
|           label-position="left" | ||||
|           label-width="100px" | ||||
|           label-align="right" | ||||
|           flex-1 | ||||
|         /> | ||||
|       </n-space> | ||||
|       </div> | ||||
|       <n-form-item label="Use exact size" label-placement="left"> | ||||
|         <n-switch v-model:value="useExactSize" /> | ||||
|       </n-form-item> | ||||
| @ -43,16 +44,14 @@ | ||||
|       <textarea-copyable :value="base64" copy-placement="none" /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center gap-3> | ||||
|       <c-button @click="copySVG()">Copy svg</c-button> | ||||
|       <c-button @click="copyBase64()">Copy base64</c-button> | ||||
|       <c-button @click="download()">Download svg</c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| 
 | ||||
|   <n-space vertical justify="start"> | ||||
|     <img :src="base64" alt="Image" /> | ||||
|   </n-space> | ||||
|   <img :src="base64" alt="Image" /> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  | ||||
| @ -2,12 +2,12 @@ | ||||
|   <c-card> | ||||
|     <n-input v-model:value="text" type="textarea" placeholder="Your text..." rows="5" /> | ||||
| 
 | ||||
|     <n-space justify="space-around" mt-5> | ||||
|       <n-statistic label="Character count" :value="text.length" /> | ||||
|       <n-statistic label="Word count" :value="text === '' ? 0 : text.split(/\s+/).length" /> | ||||
|       <n-statistic label="Line count" :value="text === '' ? 0 : text.split(/\r\n|\r|\n/).length" /> | ||||
|       <n-statistic label="Byte size" :value="formatBytes(getStringSizeInBytes(text))" /> | ||||
|     </n-space> | ||||
|     <div mt-5 flex> | ||||
|       <n-statistic label="Character count" :value="text.length" flex-1 /> | ||||
|       <n-statistic label="Word count" :value="text === '' ? 0 : text.split(/\s+/).length" flex-1 /> | ||||
|       <n-statistic label="Line count" :value="text === '' ? 0 : text.split(/\r\n|\r|\n/).length" flex-1 /> | ||||
|       <n-statistic label="Byte size" :value="formatBytes(getStringSizeInBytes(text))" flex-1 /> | ||||
|     </div> | ||||
|   </c-card> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -8,16 +8,16 @@ | ||||
|       mb-5 | ||||
|     /> | ||||
| 
 | ||||
|     <n-space v-if="natoText" vertical> | ||||
|       <n-text>Your text in NATO phonetic alphabet</n-text> | ||||
|     <div v-if="natoText"> | ||||
|       <n-text mb-1 block>Your text in NATO phonetic alphabet</n-text> | ||||
|       <c-card> | ||||
|         {{ natoText }} | ||||
|       </c-card> | ||||
| 
 | ||||
|       <n-space justify="center"> | ||||
|       <div mt-3 flex justify-center> | ||||
|         <c-button autofocus @click="copy"> Copy NATO string </c-button> | ||||
|       </n-space> | ||||
|     </n-space> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|   <div> | ||||
|     <c-card> | ||||
|       <n-form label-placement="left" label-width="140"> | ||||
|         <n-space justify="center" item-style="padding: 0" :size="0"> | ||||
|         <div flex justify-center> | ||||
|           <div> | ||||
|             <n-form-item label="Uppercase (ABC...)"> | ||||
|               <n-switch v-model:value="withUppercase" /> | ||||
| @ -22,7 +22,7 @@ | ||||
|               <n-switch v-model:value="withSymbols" /> | ||||
|             </n-form-item> | ||||
|           </div> | ||||
|         </n-space> | ||||
|         </div> | ||||
|       </n-form> | ||||
| 
 | ||||
|       <n-form-item :label="`Length (${length})`" label-placement="left"> | ||||
| @ -42,10 +42,10 @@ | ||||
|         spellcheck="false" | ||||
|       /> | ||||
| 
 | ||||
|       <n-space justify="center" mt-5> | ||||
|       <div mt-5 flex justify-center gap-3> | ||||
|         <c-button @click="copy"> Copy </c-button> | ||||
|         <c-button @click="refreshToken"> Refresh </c-button> | ||||
|       </n-space> | ||||
|       </div> | ||||
|     </c-card> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @ -23,9 +23,9 @@ | ||||
|       /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copyEncoded"> Copy </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
|   <c-card title="Decode"> | ||||
|     <n-form-item | ||||
| @ -51,9 +51,9 @@ | ||||
|       /> | ||||
|     </n-form-item> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center> | ||||
|       <c-button @click="copyDecoded"> Copy </c-button> | ||||
|     </n-space> | ||||
|     </div> | ||||
|   </c-card> | ||||
| </template> | ||||
| 
 | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
|             </template> | ||||
|           </n-page-header> | ||||
| 
 | ||||
|           <n-space mt-5> | ||||
|           <div mt-5 flex gap-2> | ||||
|             <span v-for="{ label, getValue } in content" :key="label"> | ||||
|               <n-tooltip v-if="getValue(userAgentInfo)" trigger="hover"> | ||||
|                 <template #trigger> | ||||
| @ -23,12 +23,12 @@ | ||||
|                 {{ label }} | ||||
|               </n-tooltip> | ||||
|             </span> | ||||
|           </n-space> | ||||
|           <n-space vertical> | ||||
|           </div> | ||||
|           <div flex flex-col> | ||||
|             <span v-for="{ label, getValue, undefinedFallback } in content" :key="label"> | ||||
|               <n-text v-if="getValue(userAgentInfo) === undefined" depth="3">{{ undefinedFallback }}</n-text> | ||||
|             </span> | ||||
|           </n-space> | ||||
|           </div> | ||||
|         </c-card> | ||||
|       </n-gi> | ||||
|     </n-grid> | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| <template> | ||||
|   <n-space vertical :size="20"> | ||||
|     <n-space align="center" justify="center"> | ||||
|   <div> | ||||
|     <div flex items-center justify-center gap-3> | ||||
|       Quantity : | ||||
|       <n-input-number v-model:value="count" :min="1" :max="50" placeholder="UUID quantity" /> | ||||
|     </n-space> | ||||
|     </div> | ||||
| 
 | ||||
|     <n-input | ||||
|       style="text-align: center; font-family: monospace" | ||||
| @ -16,13 +16,14 @@ | ||||
|       autocorrect="off" | ||||
|       autocapitalize="off" | ||||
|       spellcheck="false" | ||||
|       my-3 | ||||
|     /> | ||||
| 
 | ||||
|     <n-space justify="center"> | ||||
|     <div flex justify-center gap-3> | ||||
|       <c-button autofocus @click="copy"> Copy </c-button> | ||||
|       <c-button @click="refreshUUIDs"> Refresh </c-button> | ||||
|     </n-space> | ||||
|   </n-space> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user