@valerius_petrini/corekit-ui 0.1.34 → 0.1.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,39 +1,39 @@
1
- <script lang="ts">
2
- import { twMerge } from "tailwind-merge";
3
- import Button from "./Button.svelte";
4
- import { onMount } from "svelte";
5
- import type { NavbarElementProps } from "../types/Navbar.js";
6
-
7
- let {
8
- children = undefined,
9
- class: className = "",
10
- classTop = "",
11
- href = undefined,
12
- ...restProps
13
- }: NavbarElementProps = $props();
14
-
15
- let defaultClass = "navbar-element w-fit h-full flex items-center px-5 py-0";
16
-
17
- let scrollY = $state(0);
18
-
19
- let combinedClass = $derived(scrollY === 0
20
- ? twMerge(defaultClass, className, classTop)
21
- : twMerge(defaultClass, className));
22
-
23
- function onScroll() {
24
- scrollY = window.scrollY;
25
- }
26
-
27
- onMount(() => {
28
- window.addEventListener('scroll', onScroll);
29
- onScroll();
30
-
31
- return () => {
32
- window.removeEventListener('scroll', onScroll);
33
- };
34
- });
35
- </script>
36
-
37
- <Button {href} class={combinedClass} {...restProps}>
38
- {@render children?.()}
1
+ <script lang="ts">
2
+ import { twMerge } from "tailwind-merge";
3
+ import Button from "./Button.svelte";
4
+ import { onMount } from "svelte";
5
+ import type { NavbarElementProps } from "../types/Navbar.js";
6
+
7
+ let {
8
+ children = undefined,
9
+ class: className = "",
10
+ classTop = "",
11
+ href = undefined,
12
+ ...restProps
13
+ }: NavbarElementProps = $props();
14
+
15
+ let defaultClass = "navbar-element w-fit h-full flex items-center px-5 py-0 text-main-text hover:bg-navbar-element-hover-background rounded-none";
16
+
17
+ let scrollY = $state(0);
18
+
19
+ let combinedClass = $derived(scrollY === 0
20
+ ? twMerge(defaultClass, className, classTop)
21
+ : twMerge(defaultClass, className));
22
+
23
+ function onScroll() {
24
+ scrollY = window.scrollY;
25
+ }
26
+
27
+ onMount(() => {
28
+ window.addEventListener('scroll', onScroll);
29
+ onScroll();
30
+
31
+ return () => {
32
+ window.removeEventListener('scroll', onScroll);
33
+ };
34
+ });
35
+ </script>
36
+
37
+ <Button {href} class={combinedClass} {...restProps}>
38
+ {@render children?.()}
39
39
  </Button>
@@ -1,43 +1,43 @@
1
- <script lang="ts">
2
- import { page } from '$app/state';
3
- import type { SEOProps } from '../types/SEO.js';
4
-
5
- const DEFAULT_TITLE = "My SvelteKit App";
6
- const DEFAULT_DESCRIPTION = "Description of your website.";
7
- const DEFAULT_IMAGE = "/favicon.png";
8
-
9
- let {
10
- websiteName,
11
- title = DEFAULT_TITLE,
12
- description = DEFAULT_DESCRIPTION,
13
- image = DEFAULT_IMAGE
14
- }: SEOProps = $props();
15
-
16
- let fullUrl = $derived(`${websiteName}${page.url.pathname.toString()}`);
17
- </script>
18
-
19
- <svelte:head>
20
- <title>{title}</title>
21
- <meta name="description" content={description}>
22
- <meta property="og_site_name" content={websiteName}>
23
- <meta property="og:url" content={fullUrl}>
24
- <meta property="og:type" content="website">
25
- <meta property="og:title" content="{title}">
26
- <meta property="og:description" content={description}>
27
- <meta property="og:image" content={websiteName + image}>
28
-
29
- <meta name="twitter:card" content="summary_large_image">
30
- <meta property="twitter:domain" content={websiteName}>
31
- <meta property="twitter:url" content={fullUrl}>
32
- <meta name="twitter:title" content="{title}">
33
- <meta name="twitter:description" content={description}>
34
- <meta name="twitter:image" content={websiteName + image}>
35
- {@html ` <script type="application/ld+json">{
36
- "@context": "https://schema.org",
37
- "@type": "Website",
38
- "name": "${title}",
39
- "url": "${fullUrl}",
40
- "logo": "${websiteName}${image}" }</script>`}
41
-
42
- <meta name="google-site-verification" content="F6vDzwDyZfebc9kWIZlhzpsAm5zhanaPkOArdCZdDSU" />
1
+ <script lang="ts">
2
+ import { page } from '$app/state';
3
+ import type { SEOProps } from '../types/SEO.js';
4
+
5
+ const DEFAULT_TITLE = "My SvelteKit App";
6
+ const DEFAULT_DESCRIPTION = "Description of your website.";
7
+ const DEFAULT_IMAGE = "/favicon.png";
8
+
9
+ let {
10
+ websiteName,
11
+ title = DEFAULT_TITLE,
12
+ description = DEFAULT_DESCRIPTION,
13
+ image = DEFAULT_IMAGE
14
+ }: SEOProps = $props();
15
+
16
+ let fullUrl = $derived(`${websiteName}${page.url.pathname.toString()}`);
17
+ </script>
18
+
19
+ <svelte:head>
20
+ <title>{title}</title>
21
+ <meta name="description" content={description}>
22
+ <meta property="og_site_name" content={websiteName}>
23
+ <meta property="og:url" content={fullUrl}>
24
+ <meta property="og:type" content="website">
25
+ <meta property="og:title" content="{title}">
26
+ <meta property="og:description" content={description}>
27
+ <meta property="og:image" content={websiteName + image}>
28
+
29
+ <meta name="twitter:card" content="summary_large_image">
30
+ <meta property="twitter:domain" content={websiteName}>
31
+ <meta property="twitter:url" content={fullUrl}>
32
+ <meta name="twitter:title" content="{title}">
33
+ <meta name="twitter:description" content={description}>
34
+ <meta name="twitter:image" content={websiteName + image}>
35
+ {@html ` <script type="application/ld+json">{
36
+ "@context": "https://schema.org",
37
+ "@type": "Website",
38
+ "name": "${title}",
39
+ "url": "${fullUrl}",
40
+ "logo": "${websiteName}${image}" }</script>`}
41
+
42
+ <meta name="google-site-verification" content="F6vDzwDyZfebc9kWIZlhzpsAm5zhanaPkOArdCZdDSU" />
43
43
  </svelte:head>
@@ -1,84 +1,84 @@
1
- <script lang="ts">
2
- import { twMerge } from "tailwind-merge";
3
- import { onMount } from "svelte";
4
-
5
- import type { DisplaySegment, TypewriterProps } from "../types/Typewriter.d.js";
6
-
7
- let {
8
- actions,
9
- class: className = "",
10
- ...restProps
11
- }: TypewriterProps = $props();
12
-
13
- let displaySegments = $state<DisplaySegment[]>([]);
14
-
15
- async function execute() {
16
- for (let i = 0; i < actions.length; i++) {
17
- const action = actions[i];
18
- switch (action.type) {
19
- case "write":
20
- const segment = { text: "", color: "", label: action.label };
21
- displaySegments.push(segment);
22
-
23
- const segmentProxy = displaySegments[displaySegments.length - 1];
24
-
25
- const resolvedValue = typeof action.value === "function" ? action.value() : action.value;
26
- const resolvedColor = typeof action.color === "function" ? action.color() : action.color;
27
- segmentProxy.color = resolvedColor;
28
- for (const char of resolvedValue) {
29
- segmentProxy.text += char;
30
- const speed = Math.random() * ((action.maxspeed || 100) - (action.minspeed || 50)) + (action.minspeed || 50);
31
- await new Promise(resolve => setTimeout(resolve, speed));
32
- }
33
- break;
34
- case "delete":
35
- const index = displaySegments.findIndex(s => s.label === action.to);
36
- if (index === -1) break;
37
- for (let j = displaySegments.length - 1; j >= index; j--) {
38
- const deleteSegment = displaySegments[j];
39
- while (deleteSegment.text.length > 0) {
40
- deleteSegment.text = deleteSegment.text.slice(0, -1);
41
- const speed = Math.random() * ((action.maxspeed || 100) - (action.minspeed || 50)) + (action.minspeed || 50);
42
- await new Promise(resolve => setTimeout(resolve, speed));
43
- }
44
- }
45
- displaySegments.splice(index, 1);
46
- break;
47
- case "pause":
48
- await new Promise(resolve => setTimeout(resolve, action.duration || 1000));
49
- break;
50
- case "jump":
51
- const position = actions.findIndex(a => a.label === action.position);
52
- if (position !== -1)
53
- i = position - 1;
54
- break;
55
- }
56
- }
57
- }
58
-
59
- onMount(() => {
60
- execute();
61
- });
62
-
63
- let combinedClass = $derived(twMerge("typewriter w-fit", className));
64
- </script>
65
-
66
- <div class={combinedClass} {...restProps}>
67
- {#each displaySegments as segment}
68
- {#key segment}
69
- <span style="color: {segment.color}">{segment.text}</span>
70
- {/key}
71
- {/each}
72
- </div>
73
-
74
- <style>
75
- .typewriter::after {
76
- content: "\00a0";
77
- animation: blink .7s step-start infinite;
78
- text-decoration: underline;
79
- }
80
-
81
- @keyframes blink {
82
- 50% { opacity: 0; }
83
- }
1
+ <script lang="ts">
2
+ import { twMerge } from "tailwind-merge";
3
+ import { onMount } from "svelte";
4
+
5
+ import type { DisplaySegment, TypewriterProps } from "../types/Typewriter.d.js";
6
+
7
+ let {
8
+ actions,
9
+ class: className = "",
10
+ ...restProps
11
+ }: TypewriterProps = $props();
12
+
13
+ let displaySegments = $state<DisplaySegment[]>([]);
14
+
15
+ async function execute() {
16
+ for (let i = 0; i < actions.length; i++) {
17
+ const action = actions[i];
18
+ switch (action.type) {
19
+ case "write":
20
+ const segment = { text: "", color: "", label: action.label };
21
+ displaySegments.push(segment);
22
+
23
+ const segmentProxy = displaySegments[displaySegments.length - 1];
24
+
25
+ const resolvedValue = typeof action.value === "function" ? action.value() : action.value;
26
+ const resolvedColor = typeof action.color === "function" ? action.color() : action.color;
27
+ segmentProxy.color = resolvedColor;
28
+ for (const char of resolvedValue) {
29
+ segmentProxy.text += char;
30
+ const speed = Math.random() * ((action.maxspeed || 100) - (action.minspeed || 50)) + (action.minspeed || 50);
31
+ await new Promise(resolve => setTimeout(resolve, speed));
32
+ }
33
+ break;
34
+ case "delete":
35
+ const index = displaySegments.findIndex(s => s.label === action.to);
36
+ if (index === -1) break;
37
+ for (let j = displaySegments.length - 1; j >= index; j--) {
38
+ const deleteSegment = displaySegments[j];
39
+ while (deleteSegment.text.length > 0) {
40
+ deleteSegment.text = deleteSegment.text.slice(0, -1);
41
+ const speed = Math.random() * ((action.maxspeed || 100) - (action.minspeed || 50)) + (action.minspeed || 50);
42
+ await new Promise(resolve => setTimeout(resolve, speed));
43
+ }
44
+ }
45
+ displaySegments.splice(index, 1);
46
+ break;
47
+ case "pause":
48
+ await new Promise(resolve => setTimeout(resolve, action.duration || 1000));
49
+ break;
50
+ case "jump":
51
+ const position = actions.findIndex(a => a.label === action.position);
52
+ if (position !== -1)
53
+ i = position - 1;
54
+ break;
55
+ }
56
+ }
57
+ }
58
+
59
+ onMount(() => {
60
+ execute();
61
+ });
62
+
63
+ let combinedClass = $derived(twMerge("typewriter w-fit text-main-text", className));
64
+ </script>
65
+
66
+ <div class={combinedClass} {...restProps}>
67
+ {#each displaySegments as segment}
68
+ {#key segment}
69
+ <span style="color: {segment.color}">{segment.text}</span>
70
+ {/key}
71
+ {/each}
72
+ </div>
73
+
74
+ <style>
75
+ .typewriter::after {
76
+ content: "\00a0";
77
+ animation: blink .7s step-start infinite;
78
+ text-decoration: underline;
79
+ }
80
+
81
+ @keyframes blink {
82
+ 50% { opacity: 0; }
83
+ }
84
84
  </style>
@@ -1,9 +1,9 @@
1
1
  export const colorStyles = {
2
- red: "bg-red-500 hover:bg-red-600 focus:ring-red-300",
3
- yellow: "bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-300",
4
- lightgreen: "bg-green-500 hover:bg-green-600 focus:ring-green-300",
5
- blue: "bg-blue-500 hover:bg-blue-600 focus:ring-blue-300",
6
- pink: "bg-pink-500 hover:bg-pink-600 focus:ring-pink-300",
7
- purple: "bg-purple-500 hover:bg-purple-600 focus:ring-purple-300",
8
- gray: "bg-gray-500 hover:bg-gray-600 focus:ring-gray-300",
2
+ red: "bg-red-500 hover:bg-red-600",
3
+ yellow: "bg-yellow-500 hover:bg-yellow-600",
4
+ lightgreen: "bg-green-500 hover:bg-green-600",
5
+ blue: "bg-blue-500 hover:bg-blue-600",
6
+ pink: "bg-pink-500 hover:bg-pink-600",
7
+ purple: "bg-purple-500 hover:bg-purple-600",
8
+ gray: "bg-gray-500 hover:bg-gray-600",
9
9
  };
@@ -0,0 +1,40 @@
1
+ @import 'tailwindcss';
2
+ @plugin '@tailwindcss/forms';
3
+ @plugin '@tailwindcss/typography';
4
+
5
+ @utility flex-center {
6
+ @apply flex items-center justify-center;
7
+ }
8
+
9
+ @custom-variant dark (&:where(.dark, .dark *));
10
+
11
+ @theme {
12
+ --color-main-background: var(--vpcui-color-main-background);
13
+ --color-sub-background: var(--vpcui-color-sub-background);
14
+ --color-main-text: var(--vpcui-color-main-text);
15
+ --color-sub-text: var(--vpcui-color-sub-text);
16
+ --color-form-input-background: var(--vpcui-color-form-input-background);
17
+ --color-navbar-element-hover-background: var(--vpcui-color-navbar-element-hover-background);
18
+ }
19
+
20
+ :root {
21
+ --vpcui-color-main-background: var(--color-stone-50);
22
+ --vpcui-color-sub-background: var(--color-stone-300);
23
+ --vpcui-color-main-text: #000;
24
+ --vpcui-color-sub-text: #555;
25
+ --vpcui-color-form-input-background: var(--color-stone-100);
26
+ --vpcui-color-navbar-element-hover-background: var(--color-zinc-100);
27
+ }
28
+
29
+ html.dark {
30
+ --vpcui-color-main-background: var(--color-stone-950);
31
+ --vpcui-color-sub-background: var(--color-stone-700);
32
+ --vpcui-color-main-text: #fff;
33
+ --vpcui-color-sub-text: #aaa;
34
+ --vpcui-color-form-input-background: var(--color-stone-800);
35
+ --vpcui-color-navbar-element-hover-background: var(--color-zinc-900);
36
+ }
37
+
38
+ html {
39
+ background-color: var(--color-main-background);
40
+ }
@@ -1,3 +1,3 @@
1
- export interface AnalyticsProps {
2
- measurementId: string;
1
+ export interface AnalyticsProps {
2
+ measurementId: string;
3
3
  }
@@ -1,12 +1,12 @@
1
- import type { ColorStyle } from "../styles/color.ts";
2
-
3
- export interface ButtonProps {
4
- children?: any;
5
- class?: string;
6
- pill?: boolean;
7
- icon?: boolean;
8
- href?: string;
9
- color?: ColorStyle;
10
- size?: number | string;
11
- [key: string]: any;
1
+ import type { ColorStyle } from "../styles/color.ts";
2
+
3
+ export interface ButtonProps {
4
+ children?: any;
5
+ class?: string;
6
+ pill?: boolean;
7
+ icon?: boolean;
8
+ href?: string;
9
+ color?: ColorStyle;
10
+ size?: number | string;
11
+ [key: string]: any;
12
12
  }
@@ -1,12 +1,12 @@
1
- export interface FloatingInputProps {
2
- children?: any;
3
- class?: string;
4
- labelClass?: string;
5
- divClass?: string;
6
- value?: string;
7
- onfocus?: (e?: FocusEvent) => void;
8
- onblur?: (e?: FocusEvent) => void;
9
- validInputRegex?: RegExp;
10
- id?: `${string}-${string}-${string}-${string}-${string}`;
11
- [key: string]: any;
1
+ export interface FloatingInputProps {
2
+ children?: any;
3
+ class?: string;
4
+ labelClass?: string;
5
+ divClass?: string;
6
+ value?: string;
7
+ onfocus?: (e?: FocusEvent) => void;
8
+ onblur?: (e?: FocusEvent) => void;
9
+ validInputRegex?: RegExp;
10
+ id?: `${string}-${string}-${string}-${string}-${string}`;
11
+ [key: string]: any;
12
12
  };
@@ -1,14 +1,14 @@
1
- export interface NavbarProps {
2
- children?: any;
3
- class?: string;
4
- classTop?: string;
5
- [key: string]: any;
6
- };
7
-
8
- export interface NavbarElementProps {
9
- children?: any;
10
- class?: string;
11
- classTop?: string;
12
- href?: string;
13
- [key: string]: any;
1
+ export interface NavbarProps {
2
+ children?: any;
3
+ class?: string;
4
+ classTop?: string;
5
+ [key: string]: any;
6
+ };
7
+
8
+ export interface NavbarElementProps {
9
+ children?: any;
10
+ class?: string;
11
+ classTop?: string;
12
+ href?: string;
13
+ [key: string]: any;
14
14
  }
@@ -1,6 +1,6 @@
1
- export interface SEOProps {
2
- websiteName: string;
3
- title?: string;
4
- description?: string;
5
- image?: any;
1
+ export interface SEOProps {
2
+ websiteName: string;
3
+ title?: string;
4
+ description?: string;
5
+ image?: any;
6
6
  }
@@ -1,17 +1,17 @@
1
- export type TypewriterAction =
2
- | { type: "write", value: string | (() => string), color?: string | (() => string), minspeed?: number, maxspeed?: number, label?: string }
3
- | { type: "delete", to: string, minspeed?: number, maxspeed?: number, label?: string }
4
- | { type: "pause", duration: number, label?: string }
5
- | { type: "jump", position: string, label?: string };
6
-
7
- export interface DisplaySegment {
8
- text: string;
9
- color?: string;
10
- label?: string;
11
- };
12
-
13
- export interface TypewriterProps {
14
- actions: TypewriterAction[];
15
- class?: string;
16
- [key: string]: any;
1
+ export type TypewriterAction =
2
+ | { type: "write", value: string | (() => string), color?: string | (() => string), minspeed?: number, maxspeed?: number, label?: string }
3
+ | { type: "delete", to: string, minspeed?: number, maxspeed?: number, label?: string }
4
+ | { type: "pause", duration: number, label?: string }
5
+ | { type: "jump", position: string, label?: string };
6
+
7
+ export interface DisplaySegment {
8
+ text: string;
9
+ color?: string;
10
+ label?: string;
11
+ };
12
+
13
+ export interface TypewriterProps {
14
+ actions: TypewriterAction[];
15
+ class?: string;
16
+ [key: string]: any;
17
17
  }
package/package.json CHANGED
@@ -1,58 +1,59 @@
1
- {
2
- "name": "@valerius_petrini/corekit-ui",
3
- "version": "0.1.34",
4
- "description": "Component Library used across all my projects",
5
- "author": "Valerius Petrini Jr.",
6
- "license": "MIT",
7
- "scripts": {
8
- "dev": "vite dev",
9
- "build": "vite build && npm run prepack",
10
- "preview": "vite preview",
11
- "prepare": "svelte-kit sync || echo ''",
12
- "prepack": "svelte-kit sync && svelte-package && publint",
13
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
14
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
15
- },
16
- "files": [
17
- "dist",
18
- "!dist/**/*.test.*",
19
- "!dist/**/*.spec.*"
20
- ],
21
- "sideEffects": [
22
- "**/*.css"
23
- ],
24
- "svelte": "./dist/index.js",
25
- "types": "./dist/index.d.ts",
26
- "type": "module",
27
- "exports": {
28
- ".": {
29
- "types": "./dist/index.d.ts",
30
- "svelte": "./dist/index.js"
31
- }
32
- },
33
- "peerDependencies": {
34
- "svelte": "^5.0.0"
35
- },
36
- "devDependencies": {
37
- "@sveltejs/adapter-auto": "^7.0.0",
38
- "@sveltejs/kit": "^2.50.2",
39
- "@sveltejs/package": "^2.5.7",
40
- "@sveltejs/vite-plugin-svelte": "^6.2.4",
41
- "@tailwindcss/forms": "^0.5.11",
42
- "@tailwindcss/typography": "^0.5.19",
43
- "@tailwindcss/vite": "^4.1.18",
44
- "publint": "^0.3.17",
45
- "svelte": "^5.51.0",
46
- "svelte-check": "^4.4.2",
47
- "tailwindcss": "^4.1.18",
48
- "typescript": "^5.9.3",
49
- "vite": "^7.3.1"
50
- },
51
- "keywords": [
52
- "components",
53
- "svelte"
54
- ],
55
- "dependencies": {
56
- "tailwind-merge": "^3.5.0"
57
- }
58
- }
1
+ {
2
+ "name": "@valerius_petrini/corekit-ui",
3
+ "version": "0.1.36",
4
+ "description": "Component Library used across all my projects",
5
+ "author": "Valerius Petrini Jr.",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "dev": "vite dev",
9
+ "build": "vite build && npm run prepack",
10
+ "preview": "vite preview",
11
+ "prepare": "svelte-kit sync || echo ''",
12
+ "prepack": "svelte-kit sync && svelte-package && publint",
13
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
14
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "src/lib/styles",
19
+ "!dist/**/*.test.*",
20
+ "!dist/**/*.spec.*"
21
+ ],
22
+ "sideEffects": [
23
+ "**/*.css"
24
+ ],
25
+ "svelte": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "svelte": "./dist/index.js"
32
+ }
33
+ },
34
+ "peerDependencies": {
35
+ "svelte": "^5.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@sveltejs/adapter-auto": "^7.0.0",
39
+ "@sveltejs/kit": "^2.50.2",
40
+ "@sveltejs/package": "^2.5.7",
41
+ "@sveltejs/vite-plugin-svelte": "^6.2.4",
42
+ "@tailwindcss/forms": "^0.5.11",
43
+ "@tailwindcss/typography": "^0.5.19",
44
+ "@tailwindcss/vite": "^4.1.18",
45
+ "publint": "^0.3.17",
46
+ "svelte": "^5.51.0",
47
+ "svelte-check": "^4.4.2",
48
+ "tailwindcss": "^4.1.18",
49
+ "typescript": "^5.9.3",
50
+ "vite": "^7.3.1"
51
+ },
52
+ "keywords": [
53
+ "components",
54
+ "svelte"
55
+ ],
56
+ "dependencies": {
57
+ "tailwind-merge": "^3.5.0"
58
+ }
59
+ }
@@ -0,0 +1,11 @@
1
+ export const colorStyles = {
2
+ red: "bg-red-500 hover:bg-red-600",
3
+ yellow: "bg-yellow-500 hover:bg-yellow-600",
4
+ lightgreen: "bg-green-500 hover:bg-green-600",
5
+ blue: "bg-blue-500 hover:bg-blue-600",
6
+ pink: "bg-pink-500 hover:bg-pink-600",
7
+ purple: "bg-purple-500 hover:bg-purple-600",
8
+ gray: "bg-gray-500 hover:bg-gray-600",
9
+ };
10
+
11
+ export type ColorStyle = keyof typeof colorStyles;