diff --git a/src/constants/Categories.ts b/src/constants/Categories.ts index 1a5163f..da4347c 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']; +export const NEW = ['Target Cursor', 'Ripple Grid', 'Magic Bento', 'Galaxy', 'Text Type', 'Glass Surface', 'Sticker Peel', 'Scroll Stack', 'Faulty Terminal']; export const UPDATED = []; // Used for main sidebar navigation @@ -27,7 +27,8 @@ export const CATEGORIES = [ 'Rotating Text', 'Glitch Text', 'Scroll Velocity', - 'Text Type' + 'Text Type', + 'Variable Proximity', ] }, { @@ -63,6 +64,7 @@ export const CATEGORIES = [ 'Masonry', 'Glass Surface', 'Magic Bento', + 'Scroll Stack', 'Profile Card', 'Dock', 'Gooey Nav', @@ -81,7 +83,10 @@ export const CATEGORIES = [ 'Elastic Slider', 'Stack', 'Chroma Grid', - 'Stepper' + 'Stepper', + 'Bounce Cards', + 'Counter', + 'Rolling Gallery' ] }, { @@ -93,6 +98,7 @@ export const CATEGORIES = [ 'Dither', 'Dot Grid', 'Hyperspeed', + 'Faulty Terminal', 'Ripple Grid', 'Silk', 'Lightning', @@ -109,6 +115,7 @@ export const CATEGORIES = [ 'Liquid Chrome', 'Grid Distortion', 'Galaxy', + 'Light Rays', ] } ]; diff --git a/src/constants/Components.ts b/src/constants/Components.ts index 596c6c4..bf8b87e 100644 --- a/src/constants/Components.ts +++ b/src/constants/Components.ts @@ -44,6 +44,7 @@ const textAnimations = { 'glitch-text': () => import("../demo/TextAnimations/GlitchTextDemo.vue"), 'scroll-velocity': () => import("../demo/TextAnimations/ScrollVelocityDemo.vue"), 'text-type': () => import("../demo/TextAnimations/TextTypeDemo.vue"), + 'variable-proximity': () => import("../demo/TextAnimations/VariableProximityDemo.vue"), }; const components = { @@ -70,6 +71,10 @@ const components = { 'stack': () => import('../demo/Components/StackDemo.vue'), 'chroma-grid': () => import('../demo/Components/ChromaGridDemo.vue'), 'stepper': () => import('../demo/Components/StepperDemo.vue'), + 'bounce-cards': () => import('../demo/Components/BounceCardsDemo.vue'), + 'counter': () => import('../demo/Components/CounterDemo.vue'), + 'rolling-gallery': () => import('../demo/Components/RollingGalleryDemo.vue'), + 'scroll-stack': () => import('../demo/Components/ScrollStackDemo.vue'), }; const backgrounds = { @@ -95,6 +100,8 @@ const backgrounds = { 'grid-distortion': () => import('../demo/Backgrounds/GridDistortionDemo.vue'), 'ripple-grid': () => import('../demo/Backgrounds/RippleGridDemo.vue'), 'galaxy': () => import('../demo/Backgrounds/GalaxyDemo.vue'), + 'faulty-terminal': () => import('../demo/Backgrounds/FaultyTerminalDemo.vue'), + 'light-rays': () => import('../demo/Backgrounds/LightRaysDemo.vue'), }; export const componentMap = { diff --git a/src/constants/code/Backgrounds/faultyTerminalCode.ts b/src/constants/code/Backgrounds/faultyTerminalCode.ts new file mode 100644 index 0000000..3a5a89b --- /dev/null +++ b/src/constants/code/Backgrounds/faultyTerminalCode.ts @@ -0,0 +1,33 @@ +import code from '@content/Backgrounds/FaultyTerminal/FaultyTerminal.vue?raw'; +import { createCodeObject } from '../../../types/code'; + +export const faultyTerminal = createCodeObject(code, 'Backgrounds/FaultyTerminal', { + installation: `npm install ogl`, + usage: ` + +` +}); diff --git a/src/constants/code/Backgrounds/lightRaysCode.ts b/src/constants/code/Backgrounds/lightRaysCode.ts new file mode 100644 index 0000000..a168350 --- /dev/null +++ b/src/constants/code/Backgrounds/lightRaysCode.ts @@ -0,0 +1,26 @@ +import code from '@content/Backgrounds/LightRays/LightRays.vue?raw'; +import { createCodeObject } from '@/types/code'; + +export const lightRays = createCodeObject(code, 'Backgrounds/LightRays', { + installation: `npm install ogl`, + usage: ` + +` +}); diff --git a/src/constants/code/Components/bounceCardsCode.ts b/src/constants/code/Components/bounceCardsCode.ts new file mode 100644 index 0000000..03fe119 --- /dev/null +++ b/src/constants/code/Components/bounceCardsCode.ts @@ -0,0 +1,39 @@ +import code from '@content/Components/BounceCards/BounceCards.vue?raw'; +import { createCodeObject } from '@/types/code'; + +export const bounceCards = createCodeObject(code, 'Components/BounceCards', { + installation: `npm install gsap`, + usage: ` + +` +}); diff --git a/src/constants/code/Components/counterCode.ts b/src/constants/code/Components/counterCode.ts new file mode 100644 index 0000000..4e51994 --- /dev/null +++ b/src/constants/code/Components/counterCode.ts @@ -0,0 +1,17 @@ +import code from '@content/Components/Counter/Counter.vue?raw'; +import { createCodeObject } from '../../../types/code'; + +export const counter = createCodeObject(code, 'Components/Counter', { + installation: `npm i motion-v`, + usage: `import Counter from './Counter.vue' + +` +}); diff --git a/src/constants/code/Components/rollingGalleryCode.ts b/src/constants/code/Components/rollingGalleryCode.ts new file mode 100644 index 0000000..19b8085 --- /dev/null +++ b/src/constants/code/Components/rollingGalleryCode.ts @@ -0,0 +1,26 @@ +import code from '@content/Components/RollingGallery/RollingGallery.vue?raw'; +import { createCodeObject } from '@/types/code.ts'; + +export const rollingGallery = createCodeObject(code, 'Components/RollingGallery', { + installation: `npm install motion-v`, + usage: ` + +` +}); diff --git a/src/constants/code/Components/scrollStackCode.ts b/src/constants/code/Components/scrollStackCode.ts new file mode 100644 index 0000000..ea78710 --- /dev/null +++ b/src/constants/code/Components/scrollStackCode.ts @@ -0,0 +1,26 @@ +import code from '@content/Components/ScrollStack/ScrollStack.vue?raw'; +import { createCodeObject } from '../../../types/code'; + +export const scrollStack = createCodeObject(code, 'Components/ScrollStack', { + installation: `npm install lenis`, + usage: ` + +` +}); diff --git a/src/constants/code/TextAnimations/variableProximityCode.ts b/src/constants/code/TextAnimations/variableProximityCode.ts new file mode 100644 index 0000000..1213e00 --- /dev/null +++ b/src/constants/code/TextAnimations/variableProximityCode.ts @@ -0,0 +1,26 @@ +import code from '@content/TextAnimations/VariableProximity/VariableProximity.vue?raw'; +import { createCodeObject } from '@/types/code'; + +export const variableProximity = createCodeObject(code, 'TextAnimations/VariableProximity', { + installation: `npm install motion-v`, + usage: ` + +` +}); diff --git a/src/content/Backgrounds/FaultyTerminal/FaultyTerminal.vue b/src/content/Backgrounds/FaultyTerminal/FaultyTerminal.vue new file mode 100644 index 0000000..95f037c --- /dev/null +++ b/src/content/Backgrounds/FaultyTerminal/FaultyTerminal.vue @@ -0,0 +1,439 @@ + + + diff --git a/src/content/Backgrounds/LightRays/LightRays.vue b/src/content/Backgrounds/LightRays/LightRays.vue new file mode 100644 index 0000000..1f10b0a --- /dev/null +++ b/src/content/Backgrounds/LightRays/LightRays.vue @@ -0,0 +1,525 @@ + + + diff --git a/src/content/Components/BounceCards/BounceCards.vue b/src/content/Components/BounceCards/BounceCards.vue new file mode 100644 index 0000000..b5e3d47 --- /dev/null +++ b/src/content/Components/BounceCards/BounceCards.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/src/content/Components/Counter/Counter.vue b/src/content/Components/Counter/Counter.vue new file mode 100644 index 0000000..4ffca9e --- /dev/null +++ b/src/content/Components/Counter/Counter.vue @@ -0,0 +1,161 @@ + + + diff --git a/src/content/Components/MagicBento/MagicBento.vue b/src/content/Components/MagicBento/MagicBento.vue index 3281abe..caa123e 100644 --- a/src/content/Components/MagicBento/MagicBento.vue +++ b/src/content/Components/MagicBento/MagicBento.vue @@ -378,7 +378,7 @@ const ParticleCard = defineComponent({ const GlobalSpotlight = defineComponent({ name: 'GlobalSpotlight', props: { - gridRef: { type: Object as PropType, required: true }, + gridRef: { type: [Object, null] as PropType, required: true }, disableAnimations: { type: Boolean, default: false }, enabled: { type: Boolean, default: true }, spotlightRadius: { type: Number, default: DEFAULT_SPOTLIGHT_RADIUS }, @@ -539,7 +539,10 @@ const GlobalSpotlight = defineComponent({ const BentoCardGrid = defineComponent({ name: 'BentoCardGrid', props: { - gridRef: { type: Object } + gridRef: { + type: Function as PropType<(el: HTMLDivElement | null) => void>, + required: true + } }, template: `
{ :glow-color="glowColor" /> - +
+ + diff --git a/src/content/Components/ScrollStack/ScrollStack.vue b/src/content/Components/ScrollStack/ScrollStack.vue new file mode 100644 index 0000000..24f505a --- /dev/null +++ b/src/content/Components/ScrollStack/ScrollStack.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/content/TextAnimations/VariableProximity/VariableProximity.vue b/src/content/TextAnimations/VariableProximity/VariableProximity.vue new file mode 100644 index 0000000..7a9a642 --- /dev/null +++ b/src/content/TextAnimations/VariableProximity/VariableProximity.vue @@ -0,0 +1,224 @@ + + + diff --git a/src/css/category.css b/src/css/category.css index ecbd9f9..f9267e8 100644 --- a/src/css/category.css +++ b/src/css/category.css @@ -566,3 +566,90 @@ div:has(> .props-table) { order: 2; } } + +.scroll-stack-card-demo { + font-size: clamp(1.5rem, 4vw, 3rem); + font-weight: 900; + color: #fff; + display: flex; + justify-content: space-between; + flex-direction: column; + gap: 1rem; + white-space: nowrap; + text-align: center; +} + +.scroll-stack-card-demo .stack-img-container { + width: 100%; + height: 100%; + min-height: 150px; + border-radius: 1.5rem; + border: 10px solid #fff; + display: flex; + align-items: center; + justify-content: center; + font-size: clamp(4rem, 8vw, 8rem); +} + +.scroll-stack-demo-container .scroll-stack-inner { + padding: 20vh 2rem 50rem; +} + +.ssc-demo-1 { + background-color: #35724d; +} + +.ssc-demo-2 { + background-color: #333; +} + +.ssc-demo-3 { + background-color: #35724d; +} + +.ssc-demo-4 { + background-color: #333; +} + +.ssc-demo-5 { + background-color: #35724d; + text-align: center; + justify-content: center; + align-items: center; +} + +@media only screen and (min-width: 1240px) { + .scroll-stack-card-demo { + flex-direction: row; + gap: 2rem; + text-align: left; + } + + .scroll-stack-demo-container .scroll-stack-inner { + padding: 20vh 5rem 50rem; + } + + .scroll-stack-card-demo .stack-img-container { + width: 50%; + min-height: auto; + } + + .scroll-stack-card-demo h3 { + margin-bottom: 1em; + } +} + +@media only screen and (max-width: 480px) { + .scroll-stack-card-demo { + font-size: 1rem; + padding: 0.2rem; + gap: 0.5rem; + } + + .scroll-stack-card-demo .stack-img-container { + border-width: 5px; + border-radius: 1rem; + min-height: 120px; + font-size: 3rem; + } +} diff --git a/src/demo/Backgrounds/FaultyTerminalDemo.vue b/src/demo/Backgrounds/FaultyTerminalDemo.vue new file mode 100644 index 0000000..caaf0a6 --- /dev/null +++ b/src/demo/Backgrounds/FaultyTerminalDemo.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/demo/Backgrounds/LightRaysDemo.vue b/src/demo/Backgrounds/LightRaysDemo.vue new file mode 100644 index 0000000..776d1b3 --- /dev/null +++ b/src/demo/Backgrounds/LightRaysDemo.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/src/demo/Components/BounceCardsDemo.vue b/src/demo/Components/BounceCardsDemo.vue new file mode 100644 index 0000000..ea1b875 --- /dev/null +++ b/src/demo/Components/BounceCardsDemo.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/demo/Components/CounterDemo.vue b/src/demo/Components/CounterDemo.vue new file mode 100644 index 0000000..ee4834b --- /dev/null +++ b/src/demo/Components/CounterDemo.vue @@ -0,0 +1,177 @@ + + + diff --git a/src/demo/Components/RollingGalleryDemo.vue b/src/demo/Components/RollingGalleryDemo.vue new file mode 100644 index 0000000..b3690a6 --- /dev/null +++ b/src/demo/Components/RollingGalleryDemo.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/demo/Components/ScrollStackDemo.vue b/src/demo/Components/ScrollStackDemo.vue new file mode 100644 index 0000000..680c165 --- /dev/null +++ b/src/demo/Components/ScrollStackDemo.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/demo/TextAnimations/VariableProximityDemo.vue b/src/demo/TextAnimations/VariableProximityDemo.vue new file mode 100644 index 0000000..45a707a --- /dev/null +++ b/src/demo/TextAnimations/VariableProximityDemo.vue @@ -0,0 +1,126 @@ + + + +