Skip to content

Commit 7ee8ed3

Browse files
committed
Merge branch 'feat/color-contrast' into chore/all-my-stuffs
2 parents 3474e87 + 1858324 commit 7ee8ed3

5 files changed

Lines changed: 87 additions & 0 deletions

File tree

components.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ declare module '@vue/runtime-core' {
6666
CodeHighlighter: typeof import('./src/tools/code-highlighter/code-highlighter.vue')['default']
6767
CoinFlipper: typeof import('./src/tools/coin-flipper/coin-flipper.vue')['default']
6868
CollapsibleToolMenu: typeof import('./src/components/CollapsibleToolMenu.vue')['default']
69+
ColorContrastChecker: typeof import('./src/tools/color-contrast-checker/color-contrast-checker.vue')['default']
6970
ColorConverter: typeof import('./src/tools/color-converter/color-converter.vue')['default']
7071
ColoredCard: typeof import('./src/components/ColoredCard.vue')['default']
7172
ColorWheel: typeof import('./src/tools/color-wheel/color-wheel.vue')['default']
@@ -261,6 +262,7 @@ declare module '@vue/runtime-core' {
261262
NCheckbox: typeof import('naive-ui')['NCheckbox']
262263
NCode: typeof import('naive-ui')['NCode']
263264
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
265+
NColorPicker: typeof import('naive-ui')['NColorPicker']
264266
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
265267
NDatePicker: typeof import('naive-ui')['NDatePicker']
266268
NDivider: typeof import('naive-ui')['NDivider']

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@
261261
"vue3-fortune-wheel": "^2.0.5",
262262
"vuedraggable": "^4.1.0",
263263
"w-websocket-client": "^1.0.29",
264+
"wcag-contrast-utils": "^1.0.1",
264265
"webcrack": "^2.15.0",
265266
"webp-converter-browser": "^1.0.4",
266267
"xml-formatter": "^3.6.4",

pnpm-lock.yaml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<script setup lang="ts">
2+
import { contrastRatio, passesWCAG } from 'wcag-contrast-utils';
3+
import { useQueryParam } from '@/composable/queryParams';
4+
5+
const forecolor = useQueryParam({ name: 'fg', defaultValue: '#000' });
6+
const backcolor = useQueryParam({ name: 'bg', defaultValue: '#fff' });
7+
8+
const result = computed(() => {
9+
try {
10+
const constrastValue = contrastRatio(forecolor.value, backcolor.value);
11+
const wcagLevel = passesWCAG(constrastValue);
12+
13+
return {
14+
constrastValue,
15+
wcagLevel,
16+
error: '',
17+
};
18+
}
19+
catch (e: any) {
20+
return {
21+
constrastValue: -1,
22+
wcagLevel: '',
23+
error: e.toString(),
24+
};
25+
}
26+
});
27+
</script>
28+
29+
<template>
30+
<div max-w-600px>
31+
<n-form-item
32+
label="Forecolor:"
33+
label-placement="left"
34+
mb-1
35+
>
36+
<n-color-picker
37+
v-model:value="forecolor"
38+
:modes="['hex']"
39+
:show-alpha="false"
40+
/>
41+
</n-form-item>
42+
<n-form-item
43+
label="Backcolor:"
44+
label-placement="left"
45+
mb-1
46+
>
47+
<n-color-picker
48+
v-model:value="backcolor"
49+
:modes="['hex']"
50+
:show-alpha="false"
51+
/>
52+
</n-form-item>
53+
54+
<n-divider />
55+
56+
<c-alert v-if="result.error">
57+
{{ result.error }}
58+
</c-alert>
59+
60+
<input-copyable v-if="!result.error" readonly label="Constrast:" label-width="100px" label-position="left" :value="result.constrastValue" mb-2 />
61+
<input-copyable v-if="!result.error" readonly label="Level:" label-width="100px" label-position="left" :value="result.wcagLevel" />
62+
</div>
63+
</template>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { ColorSwatch } from '@vicons/tabler';
2+
import { defineTool } from '../tool';
3+
4+
export const tool = defineTool({
5+
name: 'Color Contrast Checker',
6+
path: '/color-contrast-checker',
7+
description: 'Check the WCAG constrast level between two colors',
8+
keywords: ['color', 'contrast', 'checker', 'wcag'],
9+
component: () => import('./color-contrast-checker.vue'),
10+
icon: ColorSwatch,
11+
createdAt: new Date('2025-03-09'),
12+
category: 'Web',
13+
});

0 commit comments

Comments
 (0)