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 @@ + + + + + + + + + + + + {{ title }} + {{ description }} + + {{ action.label }} + arrow_forward + + + + 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 @@ + + + + + + + + + + + + + + + {{ title }} + + {{ description }} + + {{ action.label }} + + + + 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 @@ + + + + + + {{ count }}{{ suffix }} + + {{ title }} + {{ description }} + + + + + 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 @@ + + + + + + + {{ iconName }} + + + + + + {{ titleText }} + {{ descText }} + + 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 @@ + + + + + + + + + + {{ name }} + + + schedule + {{ date }} + + + + + "{{ review }}" + + + + + + {{ star }} + + + + 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 @@ + + + + + + + {{ icon.component }} + + + + + {{ title }} + {{ description }} + + {{ action.label.text }} + arrow_forward + + + + 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 @@ + + + + + + + + + + + + + + + + + {{ profile.name }} + + + + {{ position.label }} + + {{ description }} + + + + 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 @@ + + + + + + + + + + {{ description }} + + + + {{ btn.label }} + + + + + 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 @@ + + + + + + + + + + {{ icon }} + + {{ label }} + + + {{ description }} + + + 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 @@ + + + + + + + + + + + + + + + {{ title }} + + {{ description }} + + {{ action.label }} + arrow_forward + + + + 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 } +}
{{ description }}
{{ descText }}
+ schedule + {{ date }} +
+ "{{ review }}" +
+ {{ label }} +