+import { cn } from "@/shadcn/lib/utils";
+import { ref, computed, onMounted, type HTMLAttributes } from "vue";
+
+const props = withDefaults(
+ defineProps<{
+ class?: HTMLAttributes["class"];
+ slotClass?: HTMLAttributes["class"];
+ gradientSize?: number;
+ gradientColor?: string;
+ gradientOpacity?: number;
+ }>(),
+ {
+ class: "",
+ slotClass: "",
+ gradientSize: 200,
+ gradientColor: "#262626",
+ gradientOpacity: 0.8,
+ },
+);
+
+const mouseX = ref(-props.gradientSize * 10);
+const mouseY = ref(-props.gradientSize * 10);
+
+function handleMouseMove(e: MouseEvent) {
+ const target = e.currentTarget as HTMLElement;
+ const rect = target.getBoundingClientRect();
+ mouseX.value = e.clientX - rect.left;
+ mouseY.value = e.clientY - rect.top;
+}
+
+function handleMouseLeave() {
+ mouseX.value = -props.gradientSize * 10;
+ mouseY.value = -props.gradientSize * 10;
+}
+
+onMounted(() => {
+ mouseX.value = -props.gradientSize * 10;
+ mouseY.value = -props.gradientSize * 10;
+});
+
+const backgroundStyle = computed(() => {
+ return `radial-gradient(
+ circle at ${mouseX.value}px ${mouseY.value}px,
+ ${props.gradientColor} 0%,
+ rgba(0, 0, 0, 0) 70%
+ )`;
+});
+
diff --git a/src/components/InspiraUI/card-spotlight/index.ts b/src/components/InspiraUI/card-spotlight/index.ts
new file mode 100644
index 0000000..c8d286b
--- /dev/null
+++ b/src/components/InspiraUI/card-spotlight/index.ts
@@ -0,0 +1 @@
+export { default as CardSpotlight } from "./CardSpotlight.vue";
diff --git a/src/components/InspiraUI/dock/Dock.vue b/src/components/InspiraUI/dock/Dock.vue
new file mode 100644
index 0000000..64f70f4
--- /dev/null
+++ b/src/components/InspiraUI/dock/Dock.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
diff --git a/src/components/InspiraUI/dock/DockIcon.vue b/src/components/InspiraUI/dock/DockIcon.vue
new file mode 100644
index 0000000..06896cb
--- /dev/null
+++ b/src/components/InspiraUI/dock/DockIcon.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
diff --git a/src/components/InspiraUI/dock/DockSeparator.vue b/src/components/InspiraUI/dock/DockSeparator.vue
new file mode 100644
index 0000000..ea336de
--- /dev/null
+++ b/src/components/InspiraUI/dock/DockSeparator.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/src/components/InspiraUI/dock/index.ts b/src/components/InspiraUI/dock/index.ts
new file mode 100644
index 0000000..a3e66e2
--- /dev/null
+++ b/src/components/InspiraUI/dock/index.ts
@@ -0,0 +1,5 @@
+export { default as Dock } from "./Dock.vue";
+export { default as DockIcon } from "./DockIcon.vue";
+export { default as DockSeparator } from "./DockSeparator.vue";
+
+export type DataOrientation = "vertical" | "horizontal";
diff --git a/src/components/InspiraUI/dock/injectionKeys.ts b/src/components/InspiraUI/dock/injectionKeys.ts
new file mode 100644
index 0000000..8281e2b
--- /dev/null
+++ b/src/components/InspiraUI/dock/injectionKeys.ts
@@ -0,0 +1,11 @@
+import type { Ref, InjectionKey, ComputedRef } from "vue";
+import type { DataOrientation } from "./types";
+
+export const MOUSE_X_INJECTION_KEY = Symbol() as InjectionKey
[>;
+export const MOUSE_Y_INJECTION_KEY = Symbol() as InjectionKey][>;
+
+export const MAGNIFICATION_INJECTION_KEY = Symbol() as InjectionKey>;
+
+export const DISTANCE_INJECTION_KEY = Symbol() as InjectionKey>;
+
+export const ORIENTATION_INJECTION_KEY = Symbol() as InjectionKey;
diff --git a/src/components/InspiraUI/dock/types.ts b/src/components/InspiraUI/dock/types.ts
new file mode 100644
index 0000000..fd8022a
--- /dev/null
+++ b/src/components/InspiraUI/dock/types.ts
@@ -0,0 +1,2 @@
+export type DataOrientation = "vertical" | "horizontal";
+export type Direction = "top" | "middle" | "bottom";
diff --git a/src/components/InspiraUI/GradientButton.vue b/src/components/InspiraUI/gradient-button/GradientButton.vue
similarity index 82%
rename from src/components/InspiraUI/GradientButton.vue
rename to src/components/InspiraUI/gradient-button/GradientButton.vue
index 97d338d..f6a9f10 100644
--- a/src/components/InspiraUI/GradientButton.vue
+++ b/src/components/InspiraUI/gradient-button/GradientButton.vue
@@ -1,34 +1,3 @@
-
-
-
]
pacman.svg
diff --git a/src/pages/UI-components/InspiraUI/index.page.vue b/src/pages/UI-components/InspiraUI/index.page.vue
index 94b3457..7c7fccd 100644
--- a/src/pages/UI-components/InspiraUI/index.page.vue
+++ b/src/pages/UI-components/InspiraUI/index.page.vue
@@ -19,4 +19,20 @@ const bgColor = computed(() => (isDarkTheme.value ? '#000' : '#fff'));
Card Spotlight
+
+