From 23a0d8dc2f0efeff09acb4f980357d1914c75397 Mon Sep 17 00:00:00 2001 From: Brian Rogers Date: Mon, 1 Jun 2026 17:15:00 -0600 Subject: [PATCH] adding some cards and a composable --- src/components/cards/MkBackgroundBlogCard.vue | 52 +++++++++++ src/components/cards/MkCenteredBlogCard.vue | 53 +++++++++++ src/components/cards/MkDefaultCounterCard.vue | 48 ++++++++++ src/components/cards/MkDefaultInfoCard.vue | 66 ++++++++++++++ src/components/cards/MkDefaultReviewCard.vue | 69 +++++++++++++++ src/components/cards/MkFilledInfoCard.vue | 88 +++++++++++++++++++ src/components/cards/MkHorizontalTeamCard.vue | 55 ++++++++++++ src/components/cards/MkRotatingCard.vue | 35 ++++++++ src/components/cards/MkRotatingCardBack.vue | 60 +++++++++++++ src/components/cards/MkRotatingCardFront.vue | 33 +++++++ .../cards/MkTransparentBlogCard.vue | 56 ++++++++++++ src/composables/useCountUp.js | 30 +++++++ 12 files changed, 645 insertions(+) create mode 100644 src/components/cards/MkBackgroundBlogCard.vue create mode 100644 src/components/cards/MkCenteredBlogCard.vue create mode 100644 src/components/cards/MkDefaultCounterCard.vue create mode 100644 src/components/cards/MkDefaultInfoCard.vue create mode 100644 src/components/cards/MkDefaultReviewCard.vue create mode 100644 src/components/cards/MkFilledInfoCard.vue create mode 100644 src/components/cards/MkHorizontalTeamCard.vue create mode 100644 src/components/cards/MkRotatingCard.vue create mode 100644 src/components/cards/MkRotatingCardBack.vue create mode 100644 src/components/cards/MkRotatingCardFront.vue create mode 100644 src/components/cards/MkTransparentBlogCard.vue create mode 100644 src/composables/useCountUp.js diff --git a/src/components/cards/MkBackgroundBlogCard.vue b/src/components/cards/MkBackgroundBlogCard.vue new file mode 100644 index 0000000..b8b2c78 --- /dev/null +++ b/src/components/cards/MkBackgroundBlogCard.vue @@ -0,0 +1,52 @@ + + + diff --git a/src/components/cards/MkCenteredBlogCard.vue b/src/components/cards/MkCenteredBlogCard.vue new file mode 100644 index 0000000..3526b89 --- /dev/null +++ b/src/components/cards/MkCenteredBlogCard.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/components/cards/MkDefaultCounterCard.vue b/src/components/cards/MkDefaultCounterCard.vue new file mode 100644 index 0000000..96df68f --- /dev/null +++ b/src/components/cards/MkDefaultCounterCard.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/cards/MkDefaultInfoCard.vue b/src/components/cards/MkDefaultInfoCard.vue new file mode 100644 index 0000000..ca7c1cd --- /dev/null +++ b/src/components/cards/MkDefaultInfoCard.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/components/cards/MkDefaultReviewCard.vue b/src/components/cards/MkDefaultReviewCard.vue new file mode 100644 index 0000000..085b0c0 --- /dev/null +++ b/src/components/cards/MkDefaultReviewCard.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/cards/MkFilledInfoCard.vue b/src/components/cards/MkFilledInfoCard.vue new file mode 100644 index 0000000..d58e81e --- /dev/null +++ b/src/components/cards/MkFilledInfoCard.vue @@ -0,0 +1,88 @@ + + + diff --git a/src/components/cards/MkHorizontalTeamCard.vue b/src/components/cards/MkHorizontalTeamCard.vue new file mode 100644 index 0000000..d7beaea --- /dev/null +++ b/src/components/cards/MkHorizontalTeamCard.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/cards/MkRotatingCard.vue b/src/components/cards/MkRotatingCard.vue new file mode 100644 index 0000000..168935d --- /dev/null +++ b/src/components/cards/MkRotatingCard.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/cards/MkRotatingCardBack.vue b/src/components/cards/MkRotatingCardBack.vue new file mode 100644 index 0000000..f49e359 --- /dev/null +++ b/src/components/cards/MkRotatingCardBack.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/components/cards/MkRotatingCardFront.vue b/src/components/cards/MkRotatingCardFront.vue new file mode 100644 index 0000000..d0e0f59 --- /dev/null +++ b/src/components/cards/MkRotatingCardFront.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/cards/MkTransparentBlogCard.vue b/src/components/cards/MkTransparentBlogCard.vue new file mode 100644 index 0000000..638aabe --- /dev/null +++ b/src/components/cards/MkTransparentBlogCard.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/composables/useCountUp.js b/src/composables/useCountUp.js new file mode 100644 index 0000000..5da3bd7 --- /dev/null +++ b/src/composables/useCountUp.js @@ -0,0 +1,30 @@ +import { ref, onMounted, onUnmounted } from 'vue' + +/** + * Animates a number from 0 to `endVal` over `duration` ms using + * easeOutQuart easing. Replaces the vue-count-to dependency. + */ +export function useCountUp(endVal, duration = 2000) { + const count = ref(0) + let rafId = null + + onMounted(() => { + const startTime = performance.now() + + function tick(now) { + const elapsed = now - startTime + const progress = Math.min(elapsed / duration, 1) + const eased = 1 - Math.pow(1 - progress, 4) // easeOutQuart + count.value = Math.round(eased * endVal) + if (progress < 1) rafId = requestAnimationFrame(tick) + } + + rafId = requestAnimationFrame(tick) + }) + + onUnmounted(() => { + if (rafId !== null) cancelAnimationFrame(rafId) + }) + + return { count } +}