diff --git a/src/constants/Categories.ts b/src/constants/Categories.ts
index da4347c..4f0c6e2 100644
--- a/src/constants/Categories.ts
+++ b/src/constants/Categories.ts
@@ -1,5 +1,5 @@
// Highlighted sidebar items
-export const NEW = ['Target Cursor', 'Ripple Grid', 'Magic Bento', 'Galaxy', 'Text Type', 'Glass Surface', 'Sticker Peel', 'Scroll Stack', 'Faulty Terminal'];
+export const NEW = ['Target Cursor', 'Ripple Grid', 'Magic Bento', 'Galaxy', 'Text Type', 'Glass Surface', 'Sticker Peel', 'Scroll Stack', 'Faulty Terminal', 'Pill Nav'];
export const UPDATED = [];
// Used for main sidebar navigation
@@ -66,6 +66,7 @@ export const CATEGORIES = [
'Magic Bento',
'Scroll Stack',
'Profile Card',
+ 'Pill Nav',
'Dock',
'Gooey Nav',
'Pixel Card',
diff --git a/src/constants/Components.ts b/src/constants/Components.ts
index bf8b87e..07fe279 100644
--- a/src/constants/Components.ts
+++ b/src/constants/Components.ts
@@ -54,6 +54,7 @@ const components = {
'magic-bento': () => import('../demo/Components/MagicBentoDemo.vue'),
'profile-card': () => import('../demo/Components/ProfileCardDemo.vue'),
'dock': () => import('../demo/Components/DockDemo.vue'),
+ 'pill-nav': () => import('../demo/Components/PillNavDemo.vue'),
'gooey-nav': () => import('../demo/Components/GooeyNavDemo.vue'),
'pixel-card': () => import('../demo/Components/PixelCardDemo.vue'),
'carousel': () => import('../demo/Components/CarouselDemo.vue'),
diff --git a/src/constants/code/Components/pillNavCode.ts b/src/constants/code/Components/pillNavCode.ts
new file mode 100644
index 0000000..e57c8b3
--- /dev/null
+++ b/src/constants/code/Components/pillNavCode.ts
@@ -0,0 +1,30 @@
+import code from '@content/Components/PillNav/PillNav.vue?raw';
+import { createCodeObject } from '../../../types/code';
+
+export const pillNav = createCodeObject(code, 'Components/PillNav', {
+ installation: `npm install gsap`,
+ usage: `
+
+
+
+`
+});
diff --git a/src/content/Components/PillNav/PillNav.vue b/src/content/Components/PillNav/PillNav.vue
new file mode 100644
index 0000000..c79d699
--- /dev/null
+++ b/src/content/Components/PillNav/PillNav.vue
@@ -0,0 +1,416 @@
+
+
+
+
+
+
+
+
+ -
+ {
+ (e.currentTarget as HTMLAnchorElement).style.background = 'var(--base)';
+ (e.currentTarget as HTMLAnchorElement).style.color = 'var(--hover-text, #fff)';
+ }
+ "
+ @mouseleave="
+ (e: MouseEvent) => {
+ (e.currentTarget as HTMLAnchorElement).style.background = 'var(--pill-bg, #fff)';
+ (e.currentTarget as HTMLAnchorElement).style.color = 'var(--pill-text, #fff)';
+ }
+ "
+ >
+ {{ item.label }}
+
+
+
+
+
+
diff --git a/src/css/category.css b/src/css/category.css
index f9267e8..31fb952 100644
--- a/src/css/category.css
+++ b/src/css/category.css
@@ -106,6 +106,31 @@
color: #e5e7eb;
}
+.demo-container-dots {
+ position: relative;
+}
+
+.demo-container-dots::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-image: radial-gradient(circle, #165f2b 1px, transparent 1px);
+ background-size: 20px 20px;
+ pointer-events: none;
+ z-index: 0;
+ mask:
+ linear-gradient(to right, transparent 0%, black 35%, black 55%, transparent 100%),
+ linear-gradient(to bottom, transparent 0%, black 35%, black 55%, transparent 100%);
+ mask-composite: intersect;
+ -webkit-mask:
+ linear-gradient(to right, transparent 0%, black 35%, black 55%, transparent 100%),
+ linear-gradient(to bottom, transparent 0%, black 35%, black 55%, transparent 100%);
+ -webkit-mask-composite: source-in;
+}
+
div:has(> .props-table) {
border: 1px solid #333;
border-radius: 20px;
diff --git a/src/demo/Components/PillNavDemo.vue b/src/demo/Components/PillNavDemo.vue
new file mode 100644
index 0000000..5d0767d
--- /dev/null
+++ b/src/demo/Components/PillNavDemo.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+