-
-
Dashboard
-
- Manage your application users and settings.
-
-
-
-
-
-
-
-
-
- Update Profile Picture
-
-
-
-
-
-
-
-
-
-
-
- Cancel
-
- Upload
-
-
-
-
-
-
-
+
+
🚀
+
+
ReadingHuddle
+
Where are you heading today?
-
-
-
-
-
-
-
- Registered Users
-
-
-
{{ users?.length || 0 }} Users
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ user.name }}
-
{{ user.email }}
-
-
-
- {{ user.emailVerified ? 'Verified' : 'Pending' }}
-
-
-
-
No users found.
-
-
-
-
+
+
+ 🏫
+ Faculty & Admin
+ Manage students, curriculum & raffles.
+
+
+ ✨
+ Reading Buddy
+ Complete challenges, log books & win prizes!
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/reader/decor.vue b/app/pages/reader/decor.vue
new file mode 100644
index 0000000..89332b6
--- /dev/null
+++ b/app/pages/reader/decor.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shop
+ Badges
+
+
+
+
+
+
+
+
+ 🎨 THEMES
+
+
+
+
+
+ {{ item.name }}
+ {{ item.cost }} XP
+ EQUIPPED
+ OWNED
+
+
+
+
+
+
+
+
+ ✨ ANIMATIONS
+
+
+
+
+
✨
+
+
{{ item.name }}
+
Requires {{ item.cost }} XP
+
Active
+
+
+
BUY
+
+ {{ activeAnimations.includes(item.name) ? 'REMOVE' : 'EQUIP' }}
+
+
+
+
+
+
+
+
+
+
{{ badge.icon }}
+
{{ badge.name }}
+
{{ badge.desc }}
+
Unlocked
+
+
+
+
+
+
+
+ Home
+
+
+
+
+
+
+
+
+
+
✨
+
{{ showShopCelebration }}
+
Unlocked! 🎉
+
+
+
+
+
+
+
+
diff --git a/app/pages/reader/forms.vue b/app/pages/reader/forms.vue
new file mode 100644
index 0000000..158469e
--- /dev/null
+++ b/app/pages/reader/forms.vue
@@ -0,0 +1,516 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Daily Forms 📝
+
+
+
+
+
+
+
+ {{ form.day.substring(0,3) }}
+ {{ form.dayNum }}
+
+
+
{{ form.title }}
+
+
{{ form.day }} • {{ form.questions.length }} Steps
+
✓ Done
+
Missed
+
+
+
+
+ Start 🚀
+
+
✅
+
+
+
+
+
+
+
📚
+
Before we start...
+
Do you already have a book you've been reading?
+
+ Yes, I have a book! 📖
+ No, I need one 📺
+
+
← Back to Forms
+
+
+
+
+
+
+
📖
+
Awesome! What book are you reading?
+
+
+
+
Add to Library & Start Form ✨
+
← Go Back
+
+
+
+
+
+
+
📺 Let's read a story together!
+
Watch this book being read aloud, then we'll do the form.
+
+ VIDEO
+
+
+ ← Back
+ Continue to Form ➡️
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ activeForm.title }}
+
Step {{ currentQIdx + 1 }} of {{ activeForm.questions.length }}
+
+
Cancel
+
+
+
+
+
+
+
+
+ {{ activeForm.questions[currentQIdx].type }}
+
+
+
+
+
{{ activeForm.questions[currentQIdx].text }}
+
{{ activeForm.questions[currentQIdx].textEs }}
+
+
+
+
+
+
+
+
+
+
"{{ activeForm.questions[currentQIdx].text }}"
+
"{{ activeForm.questions[currentQIdx].textEs }}"
+
+
+
+
+
+
+
+
+
+
+ {{ String.fromCharCode(65 + ci) }}
+ {{ choice.text }}
+
+
+
+
Check Answer ✨
+
+
+
+
+
+ ✨ Great job!
+
+
Reference: "{{ activeForm.questions[currentQIdx].reference }}"
+
"{{ activeForm.questions[currentQIdx].referenceEs }}"
+
+
+
+
+
+
← Back
+
+
+
+
{{ currentQIdx < activeForm.questions.length - 1 ? 'Continue ➡️' : 'Finish Challenge! 🎉' }}
+
+
{{ currentQIdx < activeForm.questions.length - 1 ? 'Next Step' : 'Finish Challenge! 🎉' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Home
+
+
+
+
+
+
+
+
+
+
+
You earned a RAFFLE TICKET! 🎉
+
Drag your ticket into the raffle box!
+
+
+
+
+ 📦
+ Raffle Box
+
+
+
+
+
+
🎉
+
Ticket Entered!
+
Great job completing today's form!
+
+ 🎟️ You now have {{ stats.tickets }} tickets!
+
+
Back to Home 🏠
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/reader/home.vue b/app/pages/reader/home.vue
new file mode 100644
index 0000000..79d0827
--- /dev/null
+++ b/app/pages/reader/home.vue
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome Back! 👋
+
Ready for today's reading adventure?
+
+
+
+
+
+
📢
+
+
+ New
+ {{announcements[0]?.content}}
+
+
+
+
+
+
+
+
+
+
Today's Challenge
+
Start Your Daily Form 📝
+
+ {{ completedThisWeek.length }} out of {{ thisWeekForms.length }} completed this week.
+ {{ completionMessage }}
+
+
+
➜
+
+
+ >
+
+
+
+
+ 🎟️ Weekly Raffle Progress
+
+
+ {{ completedThisWeek.length }} / {{ thisWeekForms.length }} days
+
+
+
+
+
+
+ ✓
+ {{ form.dayNum }}
+
+
{{ form.day.substring(0,3) }}
+
+
+
+
+
+ 🎉 All done this week! Your raffle ticket is in!
+
+
+
+
+
+
+
+
+
+
+
+
+ Store
+
+
+
+
+ Forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Who's Reading?
+
+
+
+ {{ profile.avatar }}
+
+
{{ profile.name }}
+
+
+
+
+
+
+
Text Size
+
+ A
+
+ A
+
+ {{ Math.round(settings.fontSize * 100) }}%
+
+
+
+
+
+
+
+
Dyslexia-Friendly Font
+
Uses OpenDyslexic typeface
+
+
+
+
+
+
+
+
+
+
Language / Idioma
+
{{ settings.language === 'en' ? 'English' : 'Español' }}
+
+
+ {{ settings.language === 'en' ? '🇪🇸 Español' : '🇺🇸 English' }}
+
+
+
+
Done ✓
+
+
+
+
+
+
+
+
diff --git a/app/pages/reader/index.vue b/app/pages/reader/index.vue
new file mode 100644
index 0000000..f7c54ad
--- /dev/null
+++ b/app/pages/reader/index.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+ 👋
+
+
+
Who's Reading?
+
+ Select your profile to start your adventure!
+
+
+
+
+
+
+
+
+ {{ profile.avatar }}
+
+
{{ profile.name }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/reader/reader.css b/app/pages/reader/reader.css
new file mode 100644
index 0000000..18782d8
--- /dev/null
+++ b/app/pages/reader/reader.css
@@ -0,0 +1,276 @@
+/* ============================================================
+ ReadingHuddle — Reader Pages Shared CSS
+ Exact port of the HTML reference
+ Fonts: Fredoka (headings), Quicksand (body)
+
+ Imported in home.vue, forms.vue, decor.vue, index.vue
+ ============================================================ */
+
+@import url('https://fonts.googleapis.com/css2?family=Fredoka:wght@300;400;500;600;700&family=Quicksand:wght@300;400;500;600;700&display=swap');
+
+/* ---------- CSS Variables ---------- */
+:root {
+ --brand-indigo: #E0604D;
+ --brand-gold: #F59E0B;
+ --brand-amber: #D97706;
+ --brand-mint: #2DD4BF;
+ --brand-pink: #FB7185;
+ --brand-blue: #38BDF8;
+ --brand-dark: #0F172A;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(25, 95%, 75%, 0.3) 0px, transparent 50%),
+ radial-gradient(at 100% 0%, hsla(10, 90%, 70%, 0.25) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(40, 95%, 70%, 0.25) 0px, transparent 50%);
+}
+
+/* ---------- Body / Base ---------- */
+.reader-app {
+ font-family: 'Quicksand', sans-serif;
+ background-color: #f5ede3;
+ background-image: var(--bg-gradient);
+ background-attachment: fixed;
+ min-height: 100vh;
+ transition: background 0.5s ease, color 0.5s ease;
+}
+
+.reader-app h1, .reader-app h2, .reader-app h3,
+.reader-app h4, .reader-app h5, .reader-app h6,
+.reader-app .font-heading {
+ font-family: 'Fredoka', sans-serif;
+}
+
+/* ---------- Themes ---------- */
+.reader-app.theme-dark {
+ --brand-dark: #f8fafc;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(250, 20%, 20%, 0.5) 0px, transparent 50%),
+ radial-gradient(at 100% 0%, hsla(280, 30%, 15%, 0.5) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(200, 30%, 10%, 0.5) 0px, transparent 50%);
+ background-color: #0f172a !important;
+ color: #f8fafc;
+}
+
+.reader-app.theme-sepia {
+ --brand-dark: #433422;
+ --bg-gradient: none;
+ background-color: #f4ecd8 !important;
+}
+
+.reader-app.theme-sunset {
+ background-color: #fff5f5 !important;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(10, 90%, 75%, 0.25) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(280, 90%, 70%, 0.25) 0px, transparent 50%);
+}
+
+.reader-app.theme-ocean {
+ background-color: #f0f9ff !important;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(200, 90%, 75%, 0.25) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(180, 90%, 70%, 0.25) 0px, transparent 50%);
+}
+
+.reader-app.theme-forest {
+ background-color: #f0fdf4 !important;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(140, 80%, 70%, 0.25) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(120, 70%, 60%, 0.25) 0px, transparent 50%);
+}
+
+.reader-app.theme-candy {
+ background-color: #fdf2f8 !important;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(330, 90%, 85%, 0.35) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(280, 80%, 85%, 0.35) 0px, transparent 50%);
+}
+
+.reader-app.theme-fire {
+ background-color: #fff7ed !important;
+ --bg-gradient:
+ radial-gradient(at 30% 40%, hsla(20, 95%, 65%, 0.3) 0px, transparent 50%),
+ radial-gradient(at 70% 60%, hsla(0, 90%, 60%, 0.2) 0px, transparent 50%);
+}
+
+.reader-app.theme-ice {
+ background-color: #f0f9ff !important;
+ --bg-gradient:
+ radial-gradient(at 0% 0%, hsla(200, 100%, 95%, 0.4) 0px, transparent 50%),
+ radial-gradient(at 100% 100%, hsla(190, 90%, 90%, 0.35) 0px, transparent 50%);
+}
+
+/* ---------- Dyslexia Font ---------- */
+.reader-app.dyslexia-font,
+.reader-app.dyslexia-font * {
+ font-family: 'OpenDyslexic', sans-serif !important;
+}
+
+/* ---------- Premium Card ---------- */
+.premium-card {
+ background: rgba(255, 255, 255, 0.7);
+ backdrop-filter: blur(20px);
+ -webkit-backdrop-filter: blur(20px);
+ border-radius: 2.5rem;
+ border: 2px solid rgba(255, 255, 255, 0.4);
+ box-shadow: 0 10px 30px rgba(79, 70, 229, 0.1);
+ transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
+}
+
+.premium-card:hover {
+ transform: translateY(-8px) scale(1.01);
+ box-shadow: 0 20px 40px rgba(79, 70, 229, 0.1);
+ border-color: var(--brand-indigo);
+}
+
+/* ---------- Buttons ---------- */
+.btn-fun {
+ transition: all 0.2s cubic-bezier(0.23, 1, 0.32, 1);
+}
+.btn-fun:hover { transform: translateY(-2px) scale(1.02); }
+.btn-fun:active { transform: scale(0.95); }
+
+.btn-bounce:active { transform: scale(0.95); }
+
+/* ---------- Nav Bar ---------- */
+.nav-bar {
+ position: fixed;
+ bottom: 2rem;
+ left: 50%;
+ transform: translateX(-50%);
+ background: rgba(44, 62, 80, 0.95);
+ backdrop-filter: blur(15px);
+ padding: 0.8rem 2rem;
+ border-radius: 2.5rem;
+ display: flex;
+ gap: 2.5rem;
+ z-index: 100;
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.nav-item {
+ padding: 0.7rem 1.5rem;
+ color: #94a3b8;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.3rem;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 0.85rem;
+}
+
+.nav-item.active {
+ color: white;
+ transform: translateY(-5px);
+}
+
+/* ---------- Animations ---------- */
+@keyframes pop {
+ 0% { transform: scale(0.9); opacity: 0; }
+ 100% { transform: scale(1); opacity: 1; }
+}
+.animate-pop { animation: pop 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; }
+
+@keyframes popBounce {
+ 0%, 100% { transform: translateY(0); }
+ 20% { transform: translateY(-8px); }
+ 40% { transform: translateY(0); }
+ 60% { transform: translateY(-4px); }
+ 80% { transform: translateY(0); }
+}
+.animate-pop-bounce { animation: popBounce 1.5s ease-in-out; }
+
+/* ── Click-triggered XP badge: star spins ── */
+@keyframes starSpin {
+ 0% { transform: rotate(0deg) scale(1); }
+ 30% { transform: rotate(200deg) scale(1.5); }
+ 100% { transform: rotate(360deg) scale(1); }
+}
+.animate-star-spin { animation: starSpin 0.55s cubic-bezier(0.34, 1.56, 0.64, 1); }
+
+/* ── Click-triggered XP badge: 3 coins burst outward ── */
+@keyframes coinBurst {
+ 0% { opacity: 1; transform: translateX(-50%) translateY(-50%) scale(1.2); }
+ 60% { opacity: 1; }
+ 100% { opacity: 0; transform: translateX(calc(-50% + var(--tx, 0px))) translateY(calc(-50% + var(--ty, -40px))) scale(0.4); }
+}
+.animate-coin-burst {
+ animation: coinBurst 0.65s ease-out forwards;
+ pointer-events: none;
+}
+
+/* ── Click-triggered Ticket badge: wobble ── */
+@keyframes ticketWobble {
+ 0% { transform: rotate(0deg) scale(1); }
+ 20% { transform: rotate(-22deg) scale(1.25); }
+ 50% { transform: rotate(16deg) scale(1.1); }
+ 80% { transform: rotate(-8deg) scale(1.05); }
+ 100% { transform: rotate(0deg) scale(1); }
+}
+.animate-ticket-wobble { animation: ticketWobble 0.5s ease-in-out; }
+
+/* ── Click-triggered Ticket badge: ticket flies up into box ── */
+@keyframes ticketFly {
+ 0% {opacity: 1; transform: translateX(-50%) translateY(-50%) scale(1);}
+ 40% {opacity: 1; transform: translateX(-50%) translateY(40%) scale(0.95);}
+ 100% {opacity: 0; transform: translateX(-50%) translateY(200%) scale(0.6);}
+}
+
+.animate-ticket-fly {
+ animation: ticketFly 0.85s cubic-bezier(0.3, 0.7, 0.4, 1) forwards;
+ pointer-events: none;
+}
+
+/* ── Box pops above ticket badge ── */
+@keyframes boxShake {
+ 0% { transform: translateX(-50%) rotate(0deg); }
+ 20% { transform: translateX(-50%) rotate(-10deg); }
+ 50% { transform: translateX(-50%) rotate(10deg); }
+ 80% { transform: translateX(-50%) rotate(-5deg); }
+ 100% { transform: translateX(-50%) rotate(0deg); }
+}
+.animate-box-shake { animation: boxShake 0.5s ease-in-out 0.3s; }
+
+/* ── Raffle ticket drag overlay ── */
+@keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+/* ── Shop purchase celebration ── */
+@keyframes shopPop {
+ 0% { transform: scale(0.5); opacity: 0; }
+ 70% { transform: scale(1.1); opacity: 1; }
+ 100% { transform: scale(1); }
+}
+.animate-shop-pop { animation: shopPop 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; }
+
+/* ── Slow spin for decorative elements ── */
+@keyframes spinSlow {
+ from { transform: rotate(0deg); }
+ to { transform: rotate(360deg); }
+}
+.animate-spin-slow { animation: spinSlow 8s linear infinite; }
+
+/* ── Fade transition ── */
+.fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; }
+.fade-enter-from, .fade-leave-to { opacity: 0; }
+
+/* ── Slide-up (settings panel) ── */
+.slide-up-enter-active { transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1); }
+.slide-up-leave-active { transition: transform 0.25s ease-in; }
+.slide-up-enter-from { transform: translateY(100%); }
+.slide-up-leave-to { transform: translateY(100%); }
+
+/* ── Box pop transition ── */
+.box-pop-enter-active { animation: boxPopIn 0.25s cubic-bezier(0.34, 1.56, 0.64, 1); }
+.box-pop-leave-active { transition: opacity 0.15s; }
+.box-pop-leave-to { opacity: 0; }
+@keyframes boxPopIn {
+ from { opacity: 0; transform: translateX(-50%) scale(0.3); }
+ to { opacity: 1; transform: translateX(-50%) scale(1); }
+}
+
+/* ── Question step fade ── */
+.step-fade-enter-active, .step-fade-leave-active { transition: opacity 0.25s ease; }
+.step-fade-enter-from, .step-fade-leave-to { opacity: 0; }
diff --git a/app/pages/reader/settings.vue b/app/pages/reader/settings.vue
new file mode 100644
index 0000000..86538e2
--- /dev/null
+++ b/app/pages/reader/settings.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+ Who's
+ Reading?
+
+ 👥 Switch Profile
+
+
+
+
+
+
+
+
Text
+ Size
+
+ A
+
+ A
+ {{
+ Math.round(settings.fontSize * 100) }}%
+
+
+
+
+
+
+
Dyslexia-Friendly Font
+
Uses OpenDyslexic typeface
+
+
+
+
+
+
+
+
+
+
+
Language / Idioma
+
{{ locale === 'en' ? 'English' : 'Español' }}
+
+
+ {{ locale === 'en' ? '🇪🇸 Español' : '🇺🇸 English' }}
+
+
+
+
+
+
+
+ Logout 👋
+
+
+
+
\ No newline at end of file
diff --git a/docs/html_prototype.html b/docs/html_prototype.html
new file mode 100644
index 0000000..28b96c0
--- /dev/null
+++ b/docs/html_prototype.html
@@ -0,0 +1,2728 @@
+
+
+
+
+
+
+
EduTrack - Reading Buddy Adventure!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ selectedFormDetails.title }}
+
+ {{ selectedFormDetails.day }} · {{ selectedFormDetails.date }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Step
+ {{ index + 1 }} · {{ q.type }}
+
+
{{ q.text }}
+
{{ q.textEs }}
+
+
+
+
Answer /
+ Reference
+
{{ q.reference }}
+
+
+
+
+
+ {{ choice.text }}
+
+
+
+
+
+
Video
+ URL
+
{{
+ q.url }}
+
+
+
+
+
+
+
+ Close Details
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⭐
+ {{ stats.xp }}
+ |
+ 🎟️
+ {{ stats.tickets }}
+
+
+
+ ⚙️
+
+
+
+
+
+
+
+
+
+
🚀
+
+
+ {{ t('welcome') }}
+
+
{{ t('subtitle') }}
+
+
+
+
+
+ 🏫
+
Faculty & Admin
+
Manage students, curriculum & raffles.
+
+
+
+ ✨
+
Reading Buddy
+
Complete challenges, log books & win prizes!
+
+
+
+
+
+
+
+
+
+
+
+ 🪄
+
+
Magic Login
+
Enter your email to get a magic link!
+
+
+ Email
+ Address
+
+
+
+ Send Magic Link 🪄
+
+
←
+ Back to Portal
+
+
+
+
+
+
👋
+
+
Who's Reading?
+
Select your profile to
+ start
+ your adventure!
+
+
+
+
+ {{ profile.avatar }}
+
+
{{
+ profile.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who's
+ Reading?
+
+ 👥 Switch Profile
+
+
+
+
+
+
+
+
Text
+ Size
+
+ A
+
+ A
+ {{
+ Math.round(settings.fontSize * 100) }}%
+
+
+
+
+
+
+
Dyslexia-Friendly Font
+
Uses OpenDyslexic typeface
+
+
+
+
+
+
+
+
+
+
+
Language / Idioma
+
{{ locale === 'en' ? 'English' : 'Español' }}
+
+
+ {{ locale === 'en' ? '🇪🇸 Español' : '🇺🇸 English' }}
+
+
+
+
+
+
+
+ Logout 👋
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ editingFormId ? ' Editing Form'
+ : ' Build New Form' }}
+
+ Cancel
+ Discard
+
+ {{ editingFormId ? ' Update Form' : ' Publish Form' }}
+
+
+
+
+
+
+
+
+
+
+
+ Selected Week
+
{{ formWeekStart ?
+ 'Week of ' + formatDate(formWeekStart) : 'Select a week' }}
+
+
+
+ Change
+ Week Starting (Mon)
+
+
+
+
+
+
+ Day(s) of Week (Multi-select)
+
+ d !== day) : formDays.push(day)"
+ :class="['px-4 py-2 rounded-lg font-medium text-sm transition-all border-2', formDays.includes(day) ? 'bg-indigo-100 text-indigo-700 border-indigo-300 shadow-inner' : 'bg-gray-50 text-gray-400 border-transparent hover:bg-gray-100']">
+ {{ day }}
+
+
+
* Selecting multiple days will
+ publish a copy of this form for each selected day.
+
+
+
+
+ Form
+ Title
+
+
+
+ Preview
+ Date
+ {{ formDays.length > 0 ?
+ getCalculatedDate(formWeekStart, formDays[0]) : 'Select a day' }}{{
+ formDays.length > 1 ? ' ...' : '' }}
+
+
+
+
+
+
+ +
+ Discussion
+ +
+ Multiple Choice
+ +
+ Video Embed
+ +
+ Context Block
+
+
+
+
+
+ No questions yet. Add one above!
+
+
+
+
+
+
+
+
✕
+
+
+
+ {{ q.type === 'text' ? ' Discussion' :
+ q.type === 'mcq' ? ' Multiple Choice' :
+ q.type === 'video' ? ' Video' : ' Context' }}
+
+
+
+
+
+
+
+
+
+ Reference
+ (English)
+
+
+
+ Reference
+ (Spanish)
+
+
+
+
+
+
+
+
Answer
+ Choices
+
+
+ {{ String.fromCharCode(65 + ci) }}
+
+
+ c.correct = false); choice.correct = true"
+ :class="['px-3 py-2 rounded-lg font-medium text-xs transition', choice.correct ? 'bg-emerald-500 text-white' : 'bg-gray-100 text-gray-400 hover:bg-emerald-100 hover:text-gray-500']">
+ {{ choice.correct ? '✓ Correct' : 'Set Correct' }}
+
+ ✕
+
+
+
+ Add Choice
+
+
+
+ YouTube
+ URL
+
+
+
+
+
+
+ Context
+ (English)
+
+
+
+ Context
+ (Spanish)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Published Curriculums History
+
+
+ + Create New Form
+
+
+
+
+
+
+
+ Filter by Week Starting
+
+
+
+
+
+
+
+
+
+ Week
+ Of
+ {{ form.weekStart }}
+ {{
+ form.day || 'Daily' }}
+
+
+
{{ form.title }}
+
Calculated Date: {{ form.date }} · {{
+ form.questions.length }} steps
+
+
+
+
+ {{ form.status }}
+
+
+ Details
+
+ Edit
+
+ {{ form.status === 'Active' ? '' : '' }}
+
+
+
+
+ No published forms found for this week/day.
+
+
+
+
+
+
+
+
+
Class Progress
+
+
+
+ Sort by Tickets
+ Sort by Streak
+ Sort by Name
+
+
+
+
+
+
+
+
+ Student
+
+ Tickets
+
+ Weekly Streak
+
+ Last Active
+
+
+
+
+
+
+ {{ student.initials }}
+
+ {{ student.name }}
+
+
+
+ {{ student.tickets }}
+
+
+
+
+ 🔥 {{ student.streak }}
+
+
+ {{
+ student.lastActive
+ }}
+
+
+
+
+
+
+
+
+
+
Weekly Raffle
+
Spinning for: {{
+ raffleWeek }}
+
+
+
+
+
+
+ Total
+ Entries
+
{{ raffleSubmissions }}
+
+
+ SPIN IT!
+
+
+
+
+
+
Winner!
+
{{ raffleWinner.name }}
+
{{ raffleWinner.email }}
+
+
Start
+ Over
+
+
+
+
+
+
+
+
+
+ Announcements
+
+
Direct communication with your students
+
+
+
+
+ Post Announcement
+
+
+ Announcement History
+
+
+
+
+
+
+
+
+
+
+
+
Announcement
+ Title
+
+
+
+ Alert
+ Star
+ Party
+ Bell
+ Date
+ Apple
+ Book
+ Trophy
+
+
+
+
+
+
+ Publish
+ From
+
+
+
+
Till
+ Date (Optional)
+
+
+ ✕
+
+
+
+
+
+
+ Message
+ Content
+
+
+
+
+
+ Post Announcement
+
+
+
+
+
+
+
+ Live Student Preview
+
+
+ {{ newAnnouncement.icon }}
+
+
+
+
{{ newAnnouncement.title
+ || 'Your Title Here' }}
+
+ {{
+ newAnnouncement.startDate || 'Start Date' }} {{
+ newAnnouncement.endDate ? 'to ' + newAnnouncement.endDate :
+ '(Ongoing)' }}
+
+
+
{{
+ newAnnouncement.content || 'Your message will appear here...' }}
+
+
+
+
+
+
+
+
+
+
+
+ View
+ Week Starting
+
+
+
+
+
+
+
+
+ {{ ann.icon }}
+
+
+
+
+ {{ ann.title }}
+
+ Active
+ Expired
+ {{
+ ann.day }}
+ {{
+ ann.startDate }} {{ ann.endDate ? 'to ' + ann.endDate :
+ '(Ongoing)' }}
+ ✕
+
+
+
+ {{ ann.content }}
+
+
+
+
🏜️
+
No announcements found for this filter.
+
Clear
+ all filters
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome Back! 👋
+
Ready for today's reading adventure?
+
+
+
+
+
+
📢
+
+
+ New
+ {{ announcements[0].title }} — {{ announcements[0].content }}
+
+
+
{{ announcements[0].icon }}
+
+
+
+
+
+
+
+
Today's
+ Challenge
+
Start Your Daily Form 📝
+
+ {{completedFormsThisWeek.length}}
+ out of {{thisWeekForms.length}} completed this week. {{ completionMessage }}
+
+
+
➜
+
+
+
+
+
+
+
+ 🎟️ Weekly Raffle Progress
+
+ {{ completedWeeks.filter(id =>
+ thisWeekForms.some(f => f.id === id)).length }} / {{ thisWeekForms.length }}
+ days
+
+
+
+
+ ✓
+ {{ form.dayNum }}
+
+
{{
+ form.day.substring(0,3) }}
+
+
+
+
🎉 All done
+ this
+ week! Your raffle ticket is in!
+
+
+
+
+
+
+
Daily Forms 📝
+
+
+
+
+
+
+
+
+
+ {{ form.day.substring(0,3)
+ }}
+ {{ form.dayNum }}
+
+
+
+ {{ form.title }}
+
+
+ {{ form.day }} • {{ form.questions.length }} Steps
+
✓
+ {{ form.status === 'Completed' ? 'Completed' : 'Done' }}
+
+
🔒
+ Locked
+
+
+
+
+ Start
+ 🚀
+
+
+ ✅
+
+
+ 🔒
+
+
+
+
+
+
+
+
+
📚
+
Before we start...
+
Do you already have a book you've been
+ reading?
+
+
+ Yes, I have a book! 📖
+
+
+ No, I need one 📺
+
+
+
← Back
+ to
+ Forms
+
+
+
+
+
📖
+
Awesome! What book are
+ you
+ reading?
+
+
+
+
+ Add to Library & Start Form ✨
+
+
←
+ Go Back
+
+
+
+
+
📺 Let's read a story
+ together!
+
Watch this book being read aloud, then
+ we'll do the form.
+
+ VIDEO
+
+
+ ←
+ Back
+
+ Continue to Form ➡️
+
+
+
+
+
+
+
+
+
+
+
+
{{
+ activeForm.title
+ }}
+
Step {{ currentQuestionIndex + 1 }}
+ of {{
+ activeForm.questions.length }}
+
+
Cancel
+
+
+
+
+
+
+
+ {{ activeForm.questions[currentQuestionIndex].type }}
+
+
+
+
+
"{{
+ activeForm.questions[currentQuestionIndex].text }}"
+
+ "{{
+ activeForm.questions[currentQuestionIndex].textEs }}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ String.fromCharCode(65 + ci) }}
+ {{ choice.text }}
+
+
+
+
Check
+ Answer ✨
+
+
+
+
+ ✨ Great job!
+
+
Reference: "{{
+ activeForm.questions[currentQuestionIndex].reference }}"
+
+
"{{
+ activeForm.questions[currentQuestionIndex].referenceEs
+ }}"
+
+
+
+
+
+
+
←
+ Back
+
+
+
+
+ {{ currentQuestionIndex < activeForm.questions.length - 1
+ ? 'Continue ➡️' : 'Finish Challenge! 🎉' }}
+
+
+ {{ currentQuestionIndex < activeForm.questions.length - 1
+ ? 'Next Step' : 'Finish Challenge! 🎉' }}
+
+
+
+
+
+
+
+
+
+ 📂
+
No history yet...
+
+
+
+
+
+
+
+
+ Shop
+ Badges
+
+
+
+
+
+
+ 🎨 THEMES
+
+
+
+
+
+
+ {{
+ item.name
+ }}
+ {{
+ item.cost }} XP
+ EQUIPPED
+ OWNED
+
+
+
+
+
+
+
+
+ ✨ ANIMATIONS
+
+
+
+
+
+ ✨
+
+
+ {{
+ item.name }}
+
+ Requires {{ item.cost }} XP
+
Active
+
+
+
+
BUY
+
+ {{ activeAnimations.includes(item.name) ? 'REMOVE' : 'EQUIP' }}
+
+
+
+
+
+
+
+
+
+
{{
+ badge.icon }}
+
+
{{ badge.name }}
+
{{ badge.desc }}
+
+ Unlocked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ view === 'home' ? 'Store' : 'Home' }}
+
+
+
+
+ {{ view === 'home' ? 'Forms' : 'Home' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
You earned a RAFFLE TICKET! 🎉
+
Drag your ticket into the raffle box!
+
+
+
+
+
+
+ 📦
+ Raffle Box
+
+
+
+
+
+
🎉
+
Ticket Entered!
+
Great job completing today's form!
+
+ 🎟️ You now have {{ stats.tickets }} tickets!
+
+
+
+ Back to Home 🏠
+
+
+
+
+
+
+
+
+
+
+
+
✨
+
{{ showShopCelebration }}
+
+
Unlocked! 🎉
+
+
+
+
+
+
+
+
+
+
✕
+
+
📖
+
Log a Book
+
Add a new book to your library!
+
+
+
+
+ Book
+ Title
+
+
+
+
ADD TO
+ SHELF ✨
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 8d6bb31..0a42502 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -456,9 +456,9 @@
}
},
"node_modules/@better-auth/core": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.5.4.tgz",
- "integrity": "sha512-k5AdwPRQETZn0vdB60EB9CDxxfllpJXKqVxTjyXIUSRz7delNGlU0cR/iRP3VfVJwvYR1NbekphBDNo+KGoEzQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.5.1.tgz",
+ "integrity": "sha512-lHDoChK6FFy3+oawt/tl9S08LuYNnbT1o3HKxleFrRtQIyIdUKu38X8AUJ8ueB6sE+ju5YhxBqoCFhdb6Aa67A==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.1.0",
@@ -480,71 +480,74 @@
}
},
"node_modules/@better-auth/drizzle-adapter": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.5.4.tgz",
- "integrity": "sha512-4M4nMAWrDd3TmpV6dONkJjybBVKRZghe5Oj0NNyDEoXubxastQdO7Sb5B54I1rTx5yoMgsqaB+kbJnu/9UgjQg==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.5.1.tgz",
+ "integrity": "sha512-0KKIpDTi1IWXVHL//H8w0S8oQ9KjdlE5YgN9mMloMbU1uyxZ0shhUiT8mC9025vwkZ7OXLywI2hFeGJ+mcdRBQ==",
"license": "MIT",
"peerDependencies": {
- "@better-auth/core": "1.5.4",
+ "@better-auth/core": "1.5.1",
"@better-auth/utils": "^0.3.0",
"drizzle-orm": ">=0.41.0"
}
},
"node_modules/@better-auth/kysely-adapter": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.5.4.tgz",
- "integrity": "sha512-DPww7rIfz6Ed7dZlJSW9xMQ42VKaJLB5Cs+pPqd+UHKRyighKjf3VgvMIcAdFPc4olQ0qRHo3+ZJhFlBCxRhxA==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.5.1.tgz",
+ "integrity": "sha512-OuhmNKjxpHlSw214kww4/tGfLHjtyC/HzN6Q/HulUeRF5QyCCHqj0y44ba6WGj3hcGsvPUkdUk4SayKXCrUCFw==",
"license": "MIT",
"peerDependencies": {
- "@better-auth/core": "1.5.4",
+ "@better-auth/core": "1.5.1",
"@better-auth/utils": "^0.3.0",
"kysely": "^0.27.0 || ^0.28.0"
}
},
"node_modules/@better-auth/memory-adapter": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.5.4.tgz",
- "integrity": "sha512-iiWYut9rbQqiAsgRBtj6+nxanwjapxRgpIJbiS2o81h7b9iclE0AiDA0Foes590gdFQvskNauZcCpuF8ytxthg==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.5.1.tgz",
+ "integrity": "sha512-FSacaykLJXEizbnShF2FWZtWk5j0f87iq5Esjfd/7XHcF9nZeXn9Ju8jItDKeOWbEasOdfErEBqWSn30hmueRQ==",
"license": "MIT",
"peerDependencies": {
- "@better-auth/core": "1.5.4",
+ "@better-auth/core": "1.5.1",
"@better-auth/utils": "^0.3.0"
}
},
"node_modules/@better-auth/mongo-adapter": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.5.4.tgz",
- "integrity": "sha512-ArzJN5Obk6i6+vLK1HpPzLIcsjxZYXPPUvxVU8eyU5HyoUT2MlswWfPQ8UJAKPn0iq/T4PVp/wZcQMhWk1tuNA==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.5.1.tgz",
+ "integrity": "sha512-BrbVuH1cqjs86Z6ae8OFEbvNLNxibddU4hDApVNtJcz7a/BaUPUdIM1Ep7HFhDozK7DrODXWZGLFXk+yV2pt3g==",
"license": "MIT",
"peerDependencies": {
- "@better-auth/core": "1.5.4",
+ "@better-auth/core": "1.5.1",
"@better-auth/utils": "^0.3.0",
"mongodb": "^6.0.0 || ^7.0.0"
}
},
"node_modules/@better-auth/prisma-adapter": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.5.4.tgz",
- "integrity": "sha512-ZQTbcBopw/ezjjbNFsfR3CRp0QciC4tJCarAnB5G9fZtUYbDjfY0vZOxIRmU4kI3x755CXQpGqTrkwmXaMRa3w==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.5.1.tgz",
+ "integrity": "sha512-24kBkBVaQbLnGe3/V/H+nX0hYaI+wNZFJhMnK16GQV7g6LyQw7UOcsd1xPDKtC61JCDmXEEEqXfnyuw5QITMVw==",
"license": "MIT",
+ "dependencies": {
+ "@prisma/client": "^7.4.1"
+ },
"peerDependencies": {
- "@better-auth/core": "1.5.4",
+ "@better-auth/core": "1.5.1",
"@better-auth/utils": "^0.3.0",
"@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0",
"prisma": "^5.0.0 || ^6.0.0 || ^7.0.0"
}
},
"node_modules/@better-auth/telemetry": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.5.4.tgz",
- "integrity": "sha512-mGXTY7Ecxo7uvlMr6TFCBUvlH0NUMOeE9LKgPhG4HyhBN6VfCEg/DD9PG0Z2IatmMWQbckkt7ox5A0eBpG9m5w==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.5.1.tgz",
+ "integrity": "sha512-bHn9sdmf1bWUiC75J8FIF3rAEnL5ICihY5IBoXKVwxemaB3jSXL/sG9OpmadapPXlC8BY2OuATxdg39qbg+JlA==",
"license": "MIT",
"dependencies": {
"@better-auth/utils": "0.3.1",
"@better-fetch/fetch": "1.1.21"
},
"peerDependencies": {
- "@better-auth/core": "1.5.4"
+ "@better-auth/core": "1.5.1"
}
},
"node_modules/@better-auth/utils": {
@@ -641,21 +644,23 @@
"license": "Apache-2.0"
},
"node_modules/@clack/core": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.1.0.tgz",
- "integrity": "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.0.1.tgz",
+ "integrity": "sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==",
"license": "MIT",
"dependencies": {
+ "picocolors": "^1.0.0",
"sisteransi": "^1.0.5"
}
},
"node_modules/@clack/prompts": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.1.0.tgz",
- "integrity": "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.0.1.tgz",
+ "integrity": "sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==",
"license": "MIT",
"dependencies": {
- "@clack/core": "1.1.0",
+ "@clack/core": "1.0.1",
+ "picocolors": "^1.0.0",
"sisteransi": "^1.0.5"
}
},
@@ -1195,38 +1200,38 @@
"optional": true
},
"node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz",
+ "integrity": "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==",
"license": "MIT",
"dependencies": {
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/utils": "^0.2.10"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz",
+ "integrity": "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==",
"license": "MIT",
"dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/core": "^1.7.4",
+ "@floating-ui/utils": "^0.2.10"
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
"license": "MIT"
},
"node_modules/@floating-ui/vue": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.11.tgz",
- "integrity": "sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==",
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.10.tgz",
+ "integrity": "sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg==",
"license": "MIT",
"dependencies": {
- "@floating-ui/dom": "^1.7.6",
- "@floating-ui/utils": "^0.2.11",
+ "@floating-ui/dom": "^1.7.5",
+ "@floating-ui/utils": "^0.2.10",
"vue-demi": ">=0.13.0"
}
},
@@ -1269,9 +1274,9 @@
}
},
"node_modules/@iconify/collections": {
- "version": "1.0.658",
- "resolved": "https://registry.npmjs.org/@iconify/collections/-/collections-1.0.658.tgz",
- "integrity": "sha512-u7ydr+1Cf+2p4iJ/2QmKNXix9Dc9XKRTN48LrultZ5aHLAKc5XRW8XbN0SxeJHd+8P8iVa7FmNSwIsIubsJ2oQ==",
+ "version": "1.0.656",
+ "resolved": "https://registry.npmjs.org/@iconify/collections/-/collections-1.0.656.tgz",
+ "integrity": "sha512-X17vsrStihw4gEdgT2+46E+ioM506JJh/Jp/reJGZ2URcWhhS4aMnsi9onoGTQ8ppydZ0GJrPuvOyhySiteKsA==",
"license": "MIT",
"dependencies": {
"@iconify/types": "*"
@@ -1776,9 +1781,9 @@
}
},
"node_modules/@internationalized/date": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz",
- "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==",
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.11.0.tgz",
+ "integrity": "sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==",
"license": "Apache-2.0",
"dependencies": {
"@swc/helpers": "^0.5.0"
@@ -4387,9 +4392,9 @@
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz",
- "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz",
+ "integrity": "sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==",
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
@@ -5215,9 +5220,9 @@
}
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.13.21",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.21.tgz",
- "integrity": "sha512-ww+fmLHyCbPSf7JNbWZP3g7wl6SdNo3ah5Aiw+0e9FDErkVHLKprYUrwTm7dF646FtEkN/KkAKPYezxpmvOjxw==",
+ "version": "3.13.19",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.19.tgz",
+ "integrity": "sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==",
"license": "MIT",
"funding": {
"type": "github",
@@ -5244,12 +5249,12 @@
}
},
"node_modules/@tanstack/vue-virtual": {
- "version": "3.13.21",
- "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.21.tgz",
- "integrity": "sha512-zneUNdQTcUhoDl6+ek+/O4S9gSZRAc2q7VLscZ4WZnFfZcHc3M7OyVCfSDC3hGuwFqzfL8Cx5bZF6zbGCYwXmw==",
+ "version": "3.13.19",
+ "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.19.tgz",
+ "integrity": "sha512-07Fp1TYuIziB4zIDA/moeDKHODePy3K1fN4c4VIAGnkxo1+uOvBJP7m54CoxKiQX6Q9a1dZnznrwOg9C86yvvA==",
"license": "MIT",
"dependencies": {
- "@tanstack/virtual-core": "3.13.21"
+ "@tanstack/virtual-core": "3.13.19"
},
"funding": {
"type": "github",
@@ -5260,48 +5265,48 @@
}
},
"node_modules/@tiptap/core": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.20.1.tgz",
- "integrity": "sha512-SwkPEWIfaDEZjC8SEIi4kZjqIYUbRgLUHUuQezo5GbphUNC8kM1pi3C3EtoOPtxXrEbY6e4pWEzW54Pcrd+rVA==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.20.0.tgz",
+ "integrity": "sha512-aC9aROgia/SpJqhsXFiX9TsligL8d+oeoI8W3u00WI45s0VfsqjgeKQLDLF7Tu7hC+7F02teC84SAHuup003VQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-blockquote": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.20.1.tgz",
- "integrity": "sha512-WzNXk/63PQI2fav4Ta6P0GmYRyu8Gap1pV3VUqaVK829iJ6Zt1T21xayATHEHWMK27VT1GLPJkx9Ycr2jfDyQw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.20.0.tgz",
+ "integrity": "sha512-LQzn6aGtL4WXz2+rYshl/7/VnP2qJTpD7fWL96GXAzhqviPEY1bJES7poqJb3MU/gzl8VJUVzVzU1VoVfUKlbA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-bold": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.20.1.tgz",
- "integrity": "sha512-fz++Qv6Rk/Hov0IYG/r7TJ1Y4zWkuGONe0UN5g0KY32NIMg3HeOHicbi4xsNWTm9uAOl3eawWDkezEMrleObMw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.20.0.tgz",
+ "integrity": "sha512-sQklEWiyf58yDjiHtm5vmkVjfIc/cBuSusmCsQ0q9vGYnEF1iOHKhGpvnCeEXNeqF3fiJQRlquzt/6ymle3Iwg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-bubble-menu": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.20.1.tgz",
- "integrity": "sha512-XaPvO6aCoWdFnCBus0s88lnj17NR/OopV79i8Qhgz3WMR0vrsL5zsd45l0lZuu9pSvm5VW47SoxakkJiZC1suw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.20.0.tgz",
+ "integrity": "sha512-MDosUfs8Tj+nwg8RC+wTMWGkLJORXmbR6YZgbiX4hrc7G90Gopdd6kj6ht5/T8t7dLLaX7N0+DEHdUEPGED7dw==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.0.0"
@@ -5311,83 +5316,83 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-bullet-list": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.20.1.tgz",
- "integrity": "sha512-mbrlvOZo5OF3vLhp+3fk9KuL/6J/wsN0QxF6ZFRAHzQ9NkJdtdfARcBeBnkWXGN8inB6YxbTGY1/E4lmBkOpOw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.20.0.tgz",
+ "integrity": "sha512-OcKMeopBbqWzhSi6o8nNz0aayogg1sfOAhto3NxJu3Ya32dwBFqmHXSYM6uW4jOphNvVPyjiq9aNRh3qTdd1dw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.1"
+ "@tiptap/extension-list": "^3.20.0"
}
},
"node_modules/@tiptap/extension-code": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.20.1.tgz",
- "integrity": "sha512-509DHINIA/Gg+eTG7TEkfsS8RUiPLH5xZNyLRT0A1oaoaJmECKfrV6aAm05IdfTyqDqz6LW5pbnX6DdUC4keug==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.20.0.tgz",
+ "integrity": "sha512-TYDWFeSQ9umiyrqsT6VecbuhL8XIHkUhO+gEk0sVvH67ZLwjFDhAIIgWIr1/dbIGPcvMZM19E7xUUhAdIaXaOQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-code-block": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.20.1.tgz",
- "integrity": "sha512-vKejwBq+Nlj4Ybd3qOyDxIQKzYymdNH+8eXkKwGShk2nfLJIxq69DCyGvmuHgipIO1qcYPJ149UNpGN+YGcdmA==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.20.0.tgz",
+ "integrity": "sha512-lBbmNek14aCjrHcBcq3PRqWfNLvC6bcRa2Osc6e/LtmXlcpype4f6n+Yx+WZ+f2uUh0UmDRCz7BEyUETEsDmlQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-collaboration": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.20.1.tgz",
- "integrity": "sha512-JnwLvyzrutBffHp6YPnf0XyTnhAgqZ9D8JSUKFp0edvai+dxsb+UMlawesBrgAuoQXw3B8YZUo2VFDVdKas1xQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.20.0.tgz",
+ "integrity": "sha512-JItmI4U0i4kqorO114u24hM9k945IdaQ6Uc2DEtPBFFuS8cepJf2zw+ulAT1kAx6ZRiNvNpT9M7w+J0mWRn+Sg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1",
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0",
"@tiptap/y-tiptap": "^3.0.2",
"yjs": "^13"
}
},
"node_modules/@tiptap/extension-document": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.20.1.tgz",
- "integrity": "sha512-9vrqdGmRV7bQCSY3NLgu7UhIwgOCDp4sKqMNsoNRX0aZ021QQMTvBQDPkiRkCf7MNsnWrNNnr52PVnULEn3vFQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.20.0.tgz",
+ "integrity": "sha512-oJfLIG3vAtZo/wg29WiBcyWt22KUgddpP8wqtCE+kY5Dw8znLR9ehNmVWlSWJA5OJUMO0ntAHx4bBT+I2MBd5w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-drag-handle": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle/-/extension-drag-handle-3.20.1.tgz",
- "integrity": "sha512-sIfu5Gt1aZVAagvzr+3Qx+8GE294eU3G6/pYjqNHvf71sDCpdN2gFpeI7WF05foVsCGsH6ieu8x/kTXf5GbNZA==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle/-/extension-drag-handle-3.20.0.tgz",
+ "integrity": "sha512-CzLRyxZe5QddQey0RUWJUvICyhuRnU/jvzMIYlFvMxM7W97sZ2ggk0cRThlRt2pRUoSr8mmmUnobiorpISmksA==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.6.13"
@@ -5397,46 +5402,46 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/extension-collaboration": "^3.20.1",
- "@tiptap/extension-node-range": "^3.20.1",
- "@tiptap/pm": "^3.20.1",
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/extension-collaboration": "^3.20.0",
+ "@tiptap/extension-node-range": "^3.20.0",
+ "@tiptap/pm": "^3.20.0",
"@tiptap/y-tiptap": "^3.0.2"
}
},
"node_modules/@tiptap/extension-drag-handle-vue-3": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle-vue-3/-/extension-drag-handle-vue-3-3.20.1.tgz",
- "integrity": "sha512-FJonOxcj/I7uBpJBSqfEfU+Fqem5aanEj+EsqG5ZQnxhp7cxbUYZkGH0tBBR7jeIIkt2Jk+1LoCAlYzCWbDLcQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle-vue-3/-/extension-drag-handle-vue-3-3.20.0.tgz",
+ "integrity": "sha512-Jx6LHYRI5uRaJVNQGkQsTFQkAM84rYQh3Q+WBePhGF4yPBUJQFn7Nv+5fQhKKV3A5PVQ6kTAjvW6SSUcD6ON8A==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-drag-handle": "^3.20.1",
- "@tiptap/pm": "^3.20.1",
- "@tiptap/vue-3": "^3.20.1",
+ "@tiptap/extension-drag-handle": "^3.20.0",
+ "@tiptap/pm": "^3.20.0",
+ "@tiptap/vue-3": "^3.20.0",
"vue": "^3.0.0"
}
},
"node_modules/@tiptap/extension-dropcursor": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.20.1.tgz",
- "integrity": "sha512-K18L9FX4znn+ViPSIbTLOGcIaXMx/gLNwAPE8wPLwswbHhQqdiY1zzdBw6drgOc1Hicvebo2dIoUlSXOZsOEcw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.20.0.tgz",
+ "integrity": "sha512-d+cxplRlktVgZPwatnc34IArlppM0IFKS1J5wLk+ba1jidizsbMVh45tP/BTK2flhyfRqcNoB5R0TArhUpbkNQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.1"
+ "@tiptap/extensions": "^3.20.0"
}
},
"node_modules/@tiptap/extension-floating-menu": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.20.1.tgz",
- "integrity": "sha512-BeDC6nfOesIMn5pFuUnkEjOxGv80sOJ8uk1mdt9/3Fkvra8cB9NIYYCVtd6PU8oQFmJ8vFqPrRkUWrG5tbqnOg==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.20.0.tgz",
+ "integrity": "sha512-rYs4Bv5pVjqZ/2vvR6oe7ammZapkAwN51As/WDbemvYDjfOGRqK58qGauUjYZiDzPOEIzI2mxGwsZ4eJhPW4Ig==",
"license": "MIT",
"funding": {
"type": "github",
@@ -5444,93 +5449,93 @@
},
"peerDependencies": {
"@floating-ui/dom": "^1.0.0",
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-gapcursor": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.20.1.tgz",
- "integrity": "sha512-kZOtttV6Ai8VUAgEng3h4WKFbtdSNJ6ps7r0cRPY+FctWhVmgNb/JJwwyC+vSilR7nRENAhrA/Cv/RxVlvLw+g==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.20.0.tgz",
+ "integrity": "sha512-P/LasfvG9/qFq43ZAlNbAnPnXC+/RJf49buTrhtFvI9Zg0+Lbpjx1oh6oMHB19T88Y28KtrckfFZ8aTSUWDq6w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.1"
+ "@tiptap/extensions": "^3.20.0"
}
},
"node_modules/@tiptap/extension-hard-break": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.20.1.tgz",
- "integrity": "sha512-9sKpmg/IIdlLXimYWUZ3PplIRcehv4Oc7V1miTqlnAthMzjMqigDkjjgte4JZV67RdnDJTQkRw8TklCAU28Emg==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.20.0.tgz",
+ "integrity": "sha512-rqvhMOw4f+XQmEthncbvDjgLH6fz8L9splnKZC7OeS0eX8b0qd7+xI1u5kyxF3KA2Z0BnigES++jjWuecqV6mA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-heading": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.20.1.tgz",
- "integrity": "sha512-unudyfQP6FxnyWinxvPqe/51DG91J6AaJm666RnAubgYMCgym+33kBftx4j4A6qf+ddWYbD00thMNKOnVLjAEQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.20.0.tgz",
+ "integrity": "sha512-JgJhurnCe3eN6a0lEsNQM/46R1bcwzwWWZEFDSb1P9dR8+t1/5v7cMZWsSInpD7R4/74iJn0+M5hcXLwCmBmYA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-horizontal-rule": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.20.1.tgz",
- "integrity": "sha512-rjFKFXNntdl0jay8oIGFvvykHlpyQTLmrH3Ag2fj3i8yh6MVvqhtaDomYQbw5sxECd5hBkL+T4n2d2DRuVw/QQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.20.0.tgz",
+ "integrity": "sha512-6uvcutFMv+9wPZgptDkbRDjAm3YVxlibmkhWD5GuaWwS9L/yUtobpI3GycujRSUZ8D3q6Q9J7LqpmQtQRTalWA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-image": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.20.1.tgz",
- "integrity": "sha512-/GPFSLNdYSZQ0E6VBXSAk0UFtDdn98HT1Aa2tO+STELqc5jAdFB42dfFnTC6KQzTvcUOUYkE2S1Q22YC5H2XNQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.20.0.tgz",
+ "integrity": "sha512-0t7HYncV0kYEQS79NFczxdlZoZ8zu8X4VavDqt+mbSAUKRq3gCvgtZ5Zyd778sNmtmbz3arxkEYMIVou2swD0g==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-italic": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.20.1.tgz",
- "integrity": "sha512-ZYRX13Kt8tR8JOzSXirH3pRpi8x30o7LHxZY58uXBdUvr3tFzOkh03qbN523+diidSVeHP/aMd/+IrplHRkQug==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.20.0.tgz",
+ "integrity": "sha512-/DhnKQF8yN8RxtuL8abZ28wd5281EaGoE2Oha35zXSOF1vNYnbyt8Ymkv/7u1BcWEWTvRPgaju0YCGXisPRLYw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-link": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.20.1.tgz",
- "integrity": "sha512-oYTTIgsQMqpkSnJAuAc+UtIKMuI4lv9e1y4LfI1iYm6NkEUHhONppU59smhxHLzb3Ww7YpDffbp5IgDTAiJztA==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.20.0.tgz",
+ "integrity": "sha512-qI/5A+R0ZWBxo/8HxSn1uOyr7odr3xHBZ/gzOR1GUJaZqjlJxkWFX0RtXMbLKEGEvT25o345cF7b0wFznEh8qA==",
"license": "MIT",
"dependencies": {
"linkifyjs": "^4.3.2"
@@ -5540,175 +5545,175 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-list": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.20.1.tgz",
- "integrity": "sha512-euBRAn0mkV7R2VEE+AuOt3R0j9RHEMFXamPFmtvTo8IInxDClusrm6mJoDjS8gCGAXsQCRiAe1SCQBPgGbOOwg==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.20.0.tgz",
+ "integrity": "sha512-+V0/gsVWAv+7vcY0MAe6D52LYTIicMSHw00wz3ISZgprSb2yQhJ4+4gurOnUrQ4Du3AnRQvxPROaofwxIQ66WQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-list-item": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.20.1.tgz",
- "integrity": "sha512-tzgnyTW82lYJkUnadYbatwkI9dLz/OWRSWuFpQPRje/ItmFMWuQ9c9NDD8qLbXPdEYnvrgSAA+ipCD/1G0qA0Q==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.20.0.tgz",
+ "integrity": "sha512-qEtjaaGPuqaFB4VpLrGDoIe9RHnckxPfu6d3rc22ap6TAHCDyRv05CEyJogqccnFceG/v5WN4znUBER8RWnWHA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.1"
+ "@tiptap/extension-list": "^3.20.0"
}
},
"node_modules/@tiptap/extension-list-keymap": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.20.1.tgz",
- "integrity": "sha512-Dr0xsQKx0XPOgDg7xqoWwfv7FFwZ3WeF3eOjqh3rDXlNHMj1v+UW5cj1HLphrsAZHTrVTn2C+VWPJkMZrSbpvQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.20.0.tgz",
+ "integrity": "sha512-Z4GvKy04Ms4cLFN+CY6wXswd36xYsT2p/YL0V89LYFMZTerOeTjFYlndzn6svqL8NV1PRT5Diw4WTTxJSmcJPA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.1"
+ "@tiptap/extension-list": "^3.20.0"
}
},
"node_modules/@tiptap/extension-mention": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.20.1.tgz",
- "integrity": "sha512-KOGokj7oH1QpcM8P02V+o6wHsVE0g7XEtdIy2vtq2vlFE3npNNNFkMa8F8VWX6qyC+VeVrNU6SIzS5MFY2TORA==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.20.0.tgz",
+ "integrity": "sha512-wUjsq7Za0JJdJzrGNG+g8nrCpek/85GQ0Rm9bka3PynIVRwus+xQqW6IyWVPBdl1BSkrbgMAUqtrfoh1ymznbg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1",
- "@tiptap/suggestion": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0",
+ "@tiptap/suggestion": "^3.20.0"
}
},
"node_modules/@tiptap/extension-node-range": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.20.1.tgz",
- "integrity": "sha512-+W/mQJxlkXMcwldWUqwdoR0eniJ1S9cVJoAy2Lkis0NhILZDWVNGKl9J4WFoCOXn8Myr17IllIxRYvAXJJ4FHQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.20.0.tgz",
+ "integrity": "sha512-XeKKTV88VuJ4Mh0Rxvc/PPzG76cb44sE+rB4u0J/ms63R/WFTm6yJQlCgUVGnGeHleSlrWuZY8gGSuoljmQzqg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/extension-ordered-list": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.20.1.tgz",
- "integrity": "sha512-Y+3Ad7OwAdagqdYwCnbqf7/to5ypD4NnUNHA0TXRCs7cAHRA8AdgPoIcGFpaaSpV86oosNU3yfeJouYeroffog==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.20.0.tgz",
+ "integrity": "sha512-jVKnJvrizLk7etwBMfyoj6H2GE4M+PD4k7Bwp6Bh1ohBWtfIA1TlngdS842Mx5i1VB2e3UWIwr8ZH46gl6cwMA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "^3.20.1"
+ "@tiptap/extension-list": "^3.20.0"
}
},
"node_modules/@tiptap/extension-paragraph": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.20.1.tgz",
- "integrity": "sha512-QFrAtXNyv7JSnomMQc1nx5AnG9mMznfbYJAbdOQYVdbLtAzTfiTuNPNbQrufy5ZGtGaHxDCoaygu2QEfzaKG+Q==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.20.0.tgz",
+ "integrity": "sha512-mM99zK4+RnEXIMCv6akfNATAs0Iija6FgyFA9J9NZ6N4o8y9QiNLLa6HjLpAC+W+VoCgQIekyoF/Q9ftxmAYDQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-placeholder": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.20.1.tgz",
- "integrity": "sha512-k+jfbCugYGuIFBdojukgEopGazIMOgHrw46FnyN2X/6ICOIjQP2rh2ObslrsUOsJYoEevxCsNF9hZl1HvWX66g==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.20.0.tgz",
+ "integrity": "sha512-ZhYD3L5m16ydSe2z8vqz+RdtAG/iOQaFHHedFct70tKRoLqi2ajF5kgpemu8DwpaRTcyiCN4G99J/+MqehKNjQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "^3.20.1"
+ "@tiptap/extensions": "^3.20.0"
}
},
"node_modules/@tiptap/extension-strike": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.20.1.tgz",
- "integrity": "sha512-EYgyma10lpsY+rwbVQL9u+gA7hBlKLSMFH7Zgd37FSxukOjr+HE8iKPQQ+SwbGejyDsPlLT8Z5Jnuxo5Ng90Pg==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.20.0.tgz",
+ "integrity": "sha512-0vcTZRRAiDfon3VM1mHBr9EFmTkkUXMhm0Xtdtn0bGe+sIqufyi+hUYTEw93EQOD9XNsPkrud6jzQNYpX2H3AQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-text": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.20.1.tgz",
- "integrity": "sha512-7PlIbYW8UenV6NPOXHmv8IcmPGlGx6HFq66RmkJAOJRPXPkTLAiX0N8rQtzUJ6jDEHqoJpaHFEHJw0xzW1yF+A==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.20.0.tgz",
+ "integrity": "sha512-tf8bE8tSaOEWabCzPm71xwiUhyMFKqY9jkP5af3Kr1/F45jzZFIQAYZooHI/+zCHRrgJ99MQHKHe1ZNvODrKHQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extension-underline": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.20.1.tgz",
- "integrity": "sha512-fmHvDKzwCgnZUwRreq8tYkb1YyEwgzZ6QQkAQ0CsCRtvRMqzerr3Duz0Als4i8voZTuGDEL3VR6nAJbLAb/wPg==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.20.0.tgz",
+ "integrity": "sha512-LzNXuy2jwR/y+ymoUqC72TiGzbOCjioIjsDu0MNYpHuHqTWPK5aV9Mh0nbZcYFy/7fPlV1q0W139EbJeYBZEAQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1"
+ "@tiptap/core": "^3.20.0"
}
},
"node_modules/@tiptap/extensions": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.20.1.tgz",
- "integrity": "sha512-JRc/v+OBH0qLTdvQ7HvHWTxGJH73QOf1MC0R8NhOX2QnAbg2mPFv1h+FjGa2gfLGuCXBdWQomjekWkUKbC4e5A==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.20.0.tgz",
+ "integrity": "sha512-HIsXX942w3nbxEQBlMAAR/aa6qiMBEP7CsSMxaxmTIVAmW35p6yUASw6GdV1u0o3lCZjXq2OSRMTskzIqi5uLg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/markdown": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/markdown/-/markdown-3.20.1.tgz",
- "integrity": "sha512-dNrtP7kmabDomgjv9G/6+JSFL6WraPaFbmKh1eHSYKdDGvIwBfJnVPTV2VS3bP1OuYJEDJN/2ydtiCHyOTrQsQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/markdown/-/markdown-3.20.0.tgz",
+ "integrity": "sha512-3vUxs8tsVIf/KWKLWjFsTqrjuaTYJY9rawDL5sio9NwlqFWDuWpHEVJcqbQXJUrgQSh12AZoTKyfgiEqkAGI3Q==",
"license": "MIT",
"dependencies": {
"marked": "^17.0.1"
@@ -5718,14 +5723,14 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/pm": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.20.1.tgz",
- "integrity": "sha512-6kCiGLvpES4AxcEuOhb7HR7/xIeJWMjZlb6J7e8zpiIh5BoQc7NoRdctsnmFEjZvC19bIasccshHQ7H2zchWqw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.20.0.tgz",
+ "integrity": "sha512-jn+2KnQZn+b+VXr8EFOJKsnjVNaA4diAEr6FOazupMt8W8ro1hfpYtZ25JL87Kao/WbMze55sd8M8BDXLUKu1A==",
"license": "MIT",
"dependencies": {
"prosemirror-changeset": "^2.3.0",
@@ -5753,35 +5758,35 @@
}
},
"node_modules/@tiptap/starter-kit": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.20.1.tgz",
- "integrity": "sha512-opqWxL/4OTEiqmVC0wsU4o3JhAf6LycJ2G/gRIZVAIFLljI9uHfpPMTFGxZ5w9IVVJaP5PJysfwW/635kKqkrw==",
- "license": "MIT",
- "dependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/extension-blockquote": "^3.20.1",
- "@tiptap/extension-bold": "^3.20.1",
- "@tiptap/extension-bullet-list": "^3.20.1",
- "@tiptap/extension-code": "^3.20.1",
- "@tiptap/extension-code-block": "^3.20.1",
- "@tiptap/extension-document": "^3.20.1",
- "@tiptap/extension-dropcursor": "^3.20.1",
- "@tiptap/extension-gapcursor": "^3.20.1",
- "@tiptap/extension-hard-break": "^3.20.1",
- "@tiptap/extension-heading": "^3.20.1",
- "@tiptap/extension-horizontal-rule": "^3.20.1",
- "@tiptap/extension-italic": "^3.20.1",
- "@tiptap/extension-link": "^3.20.1",
- "@tiptap/extension-list": "^3.20.1",
- "@tiptap/extension-list-item": "^3.20.1",
- "@tiptap/extension-list-keymap": "^3.20.1",
- "@tiptap/extension-ordered-list": "^3.20.1",
- "@tiptap/extension-paragraph": "^3.20.1",
- "@tiptap/extension-strike": "^3.20.1",
- "@tiptap/extension-text": "^3.20.1",
- "@tiptap/extension-underline": "^3.20.1",
- "@tiptap/extensions": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.20.0.tgz",
+ "integrity": "sha512-W4+1re35pDNY/7rpXVg+OKo/Fa4Gfrn08Bq3E3fzlJw6gjE3tYU8dY9x9vC2rK9pd9NOp7Af11qCFDaWpohXkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/extension-blockquote": "^3.20.0",
+ "@tiptap/extension-bold": "^3.20.0",
+ "@tiptap/extension-bullet-list": "^3.20.0",
+ "@tiptap/extension-code": "^3.20.0",
+ "@tiptap/extension-code-block": "^3.20.0",
+ "@tiptap/extension-document": "^3.20.0",
+ "@tiptap/extension-dropcursor": "^3.20.0",
+ "@tiptap/extension-gapcursor": "^3.20.0",
+ "@tiptap/extension-hard-break": "^3.20.0",
+ "@tiptap/extension-heading": "^3.20.0",
+ "@tiptap/extension-horizontal-rule": "^3.20.0",
+ "@tiptap/extension-italic": "^3.20.0",
+ "@tiptap/extension-link": "^3.20.0",
+ "@tiptap/extension-list": "^3.20.0",
+ "@tiptap/extension-list-item": "^3.20.0",
+ "@tiptap/extension-list-keymap": "^3.20.0",
+ "@tiptap/extension-ordered-list": "^3.20.0",
+ "@tiptap/extension-paragraph": "^3.20.0",
+ "@tiptap/extension-strike": "^3.20.0",
+ "@tiptap/extension-text": "^3.20.0",
+ "@tiptap/extension-underline": "^3.20.0",
+ "@tiptap/extensions": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
},
"funding": {
"type": "github",
@@ -5789,36 +5794,36 @@
}
},
"node_modules/@tiptap/suggestion": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.20.1.tgz",
- "integrity": "sha512-ng7olbzgZhWvPJVJygNQK5153CjquR2eJXpkLq7bRjHlahvt4TH4tGFYvGdYZcXuzbe2g9RoqT7NaPGL9CUq9w==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.20.0.tgz",
+ "integrity": "sha512-OA9Fe+1Q/Ex0ivTcpRcVFiLnNsVdIBmiEoctt/gu4H2ayCYmZ906veioXNdc1m/3MtVVUIuEnvwwsrOZXlfDEw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1"
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0"
}
},
"node_modules/@tiptap/vue-3": {
- "version": "3.20.1",
- "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-3.20.1.tgz",
- "integrity": "sha512-06IsNzIkAC0HPHNSdXf4AgtExnr02BHBLXmUiNrjjhgHdxXDKIB0Yq3hEWEfbWNPr3lr7jK6EaFu2IKFMhoUtQ==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-3.20.0.tgz",
+ "integrity": "sha512-u8UfDKsbIOF+mVsXwJ946p1jfrLGFUyqp9i/DAeGGg2I85DPOkhZgz67bUPVXkpossoEk+jKCkRN0eBHl9+eZQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"optionalDependencies": {
- "@tiptap/extension-bubble-menu": "^3.20.1",
- "@tiptap/extension-floating-menu": "^3.20.1"
+ "@tiptap/extension-bubble-menu": "^3.20.0",
+ "@tiptap/extension-floating-menu": "^3.20.0"
},
"peerDependencies": {
"@floating-ui/dom": "^1.0.0",
- "@tiptap/core": "^3.20.1",
- "@tiptap/pm": "^3.20.1",
+ "@tiptap/core": "^3.20.0",
+ "@tiptap/pm": "^3.20.0",
"vue": "^3.0.0"
}
},
@@ -5892,9 +5897,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.3.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz",
- "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==",
+ "version": "25.3.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
+ "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.18.0"
@@ -6091,6 +6096,22 @@
}
}
},
+ "node_modules/@vue-macros/common/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/@vue/babel-helper-vue-transform-on": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz",
@@ -6823,9 +6844,9 @@
}
},
"node_modules/bare-os": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.7.1.tgz",
- "integrity": "sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.7.0.tgz",
+ "integrity": "sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==",
"license": "Apache-2.0",
"engines": {
"bare": ">=1.14.0"
@@ -6904,18 +6925,18 @@
}
},
"node_modules/better-auth": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.5.4.tgz",
- "integrity": "sha512-ReykcEKx6Kp9560jG1wtlDBnftA7L7xb3ZZdDWm5yGXKKe2pUf+oBjH0fqekrkRII0m4XBVQbQ0mOrFv+3FdYg==",
- "license": "MIT",
- "dependencies": {
- "@better-auth/core": "1.5.4",
- "@better-auth/drizzle-adapter": "1.5.4",
- "@better-auth/kysely-adapter": "1.5.4",
- "@better-auth/memory-adapter": "1.5.4",
- "@better-auth/mongo-adapter": "1.5.4",
- "@better-auth/prisma-adapter": "1.5.4",
- "@better-auth/telemetry": "1.5.4",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.5.1.tgz",
+ "integrity": "sha512-Hnr4Ar49WpC0wyHFKYA86eQL5HhN5sNhtNquHrsH0T0r/IDqxDxAfW1VdSnTaXv4zc2WCXCQ8b1+InAopR2hAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@better-auth/core": "1.5.1",
+ "@better-auth/drizzle-adapter": "1.5.1",
+ "@better-auth/kysely-adapter": "1.5.1",
+ "@better-auth/memory-adapter": "1.5.1",
+ "@better-auth/mongo-adapter": "1.5.1",
+ "@better-auth/prisma-adapter": "1.5.1",
+ "@better-auth/telemetry": "1.5.1",
"@better-auth/utils": "0.3.1",
"@better-fetch/fetch": "1.1.21",
"@noble/ciphers": "^2.1.1",
@@ -7296,9 +7317,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001777",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz",
- "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==",
+ "version": "1.0.30001775",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
+ "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"funding": [
{
"type": "opencollective",
@@ -7666,13 +7687,13 @@
}
},
"node_modules/css-tree": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
- "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
"license": "MIT",
"dependencies": {
- "mdn-data": "2.27.1",
- "source-map-js": "^1.2.1"
+ "mdn-data": "2.12.2",
+ "source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
@@ -7710,12 +7731,12 @@
"optional": true
},
"node_modules/cssnano": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.3.tgz",
- "integrity": "sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.2.tgz",
+ "integrity": "sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==",
"license": "MIT",
"dependencies": {
- "cssnano-preset-default": "^7.0.11",
+ "cssnano-preset-default": "^7.0.10",
"lilconfig": "^3.1.3"
},
"engines": {
@@ -7730,41 +7751,41 @@
}
},
"node_modules/cssnano-preset-default": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.11.tgz",
- "integrity": "sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g==",
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.10.tgz",
+ "integrity": "sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"css-declaration-sorter": "^7.2.0",
"cssnano-utils": "^5.0.1",
"postcss-calc": "^10.1.1",
- "postcss-colormin": "^7.0.6",
- "postcss-convert-values": "^7.0.9",
- "postcss-discard-comments": "^7.0.6",
+ "postcss-colormin": "^7.0.5",
+ "postcss-convert-values": "^7.0.8",
+ "postcss-discard-comments": "^7.0.5",
"postcss-discard-duplicates": "^7.0.2",
"postcss-discard-empty": "^7.0.1",
"postcss-discard-overridden": "^7.0.1",
"postcss-merge-longhand": "^7.0.5",
- "postcss-merge-rules": "^7.0.8",
+ "postcss-merge-rules": "^7.0.7",
"postcss-minify-font-values": "^7.0.1",
"postcss-minify-gradients": "^7.0.1",
- "postcss-minify-params": "^7.0.6",
- "postcss-minify-selectors": "^7.0.6",
+ "postcss-minify-params": "^7.0.5",
+ "postcss-minify-selectors": "^7.0.5",
"postcss-normalize-charset": "^7.0.1",
"postcss-normalize-display-values": "^7.0.1",
"postcss-normalize-positions": "^7.0.1",
"postcss-normalize-repeat-style": "^7.0.1",
"postcss-normalize-string": "^7.0.1",
"postcss-normalize-timing-functions": "^7.0.1",
- "postcss-normalize-unicode": "^7.0.6",
+ "postcss-normalize-unicode": "^7.0.5",
"postcss-normalize-url": "^7.0.1",
"postcss-normalize-whitespace": "^7.0.1",
"postcss-ordered-values": "^7.0.2",
- "postcss-reduce-initial": "^7.0.6",
+ "postcss-reduce-initial": "^7.0.5",
"postcss-reduce-transforms": "^7.0.1",
- "postcss-svgo": "^7.1.1",
- "postcss-unique-selectors": "^7.0.5"
+ "postcss-svgo": "^7.1.0",
+ "postcss-unique-selectors": "^7.0.4"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -8257,9 +8278,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.307",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
- "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
+ "version": "1.5.302",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
+ "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
"license": "ISC"
},
"node_modules/embla-carousel": {
@@ -8625,9 +8646,9 @@
}
},
"node_modules/fast-npm-meta": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-1.4.0.tgz",
- "integrity": "sha512-YT6/YWqttrjKqO0jtdyEgY/Spo4RTk3rKxzbxPNuqPVm73LAg0j3Csi0abGj/DaLmbT6EEQRvx1xmYr8hBripQ==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-1.3.0.tgz",
+ "integrity": "sha512-Yz48hvMPiD+J5vPQj767Gdd3i6TOzqwBuvc0ylkzyxh2+VEJmtWBBy1OT1/CoeStcKhS6lBK8opUf13BNXBBYw==",
"license": "MIT",
"bin": {
"fast-npm-meta": "dist/cli.mjs"
@@ -8714,9 +8735,9 @@
}
},
"node_modules/fontkitten": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
- "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz",
+ "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==",
"license": "MIT",
"dependencies": {
"tiny-inflate": "^1.0.3"
@@ -8787,12 +8808,12 @@
}
},
"node_modules/framer-motion": {
- "version": "12.35.1",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.35.1.tgz",
- "integrity": "sha512-rL8cLrjYZNShZqKV3U0Qj6Y5WDiZXYEM5giiTLfEqsIZxtspzMDCkKmrO5po76jWfvOg04+Vk+sfBvTD0iMmLw==",
+ "version": "12.34.4",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.4.tgz",
+ "integrity": "sha512-q1PwNhc1XJ3qYG7nc9+pEU5P3tnjB6Eh9vv5gGzy61nedDLB4+xk5peMCWhKM0Zn6sfhgunf/q9n0UgCoyKOBA==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.35.1",
+ "motion-dom": "^12.34.3",
"motion-utils": "^12.29.2",
"tslib": "^2.4.0"
},
@@ -9216,15 +9237,31 @@
"license": "MIT"
},
"node_modules/impound": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/impound/-/impound-1.1.2.tgz",
- "integrity": "sha512-YzOZ1XXs1OHpjduEBVmTTms3t6trwzWBSCWo8VvugIODD87ZAZv1g3kWTMPLjudBsc+jAhSEY4cGJs6BURMfMg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/impound/-/impound-1.0.0.tgz",
+ "integrity": "sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==",
"license": "MIT",
"dependencies": {
- "es-module-lexer": "^2.0.0",
+ "exsolve": "^1.0.5",
+ "mocked-exports": "^0.1.1",
"pathe": "^2.0.3",
- "unplugin": "^3.0.0",
- "unplugin-utils": "^0.3.1"
+ "unplugin": "^2.3.2",
+ "unplugin-utils": "^0.2.4"
+ }
+ },
+ "node_modules/impound/node_modules/unplugin": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz",
+ "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/remapping": "^2.3.5",
+ "acorn": "^8.15.0",
+ "picomatch": "^4.0.3",
+ "webpack-virtual-modules": "^0.6.2"
+ },
+ "engines": {
+ "node": ">=18.12.0"
}
},
"node_modules/inherits": {
@@ -9529,9 +9566,9 @@
}
},
"node_modules/jose": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.0.tgz",
- "integrity": "sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz",
+ "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/panva"
@@ -10158,9 +10195,9 @@
}
},
"node_modules/marked": {
- "version": "17.0.4",
- "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.4.tgz",
- "integrity": "sha512-NOmVMM+KAokHMvjWmC5N/ZOvgmSWuqJB8FoYI019j4ogb/PeRMKoKIjReZ2w3376kkA8dSJIP8uD993Kxc0iRQ==",
+ "version": "17.0.3",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.3.tgz",
+ "integrity": "sha512-jt1v2ObpyOKR8p4XaUJVk3YWRJ5n+i4+rjQopxvV32rSndTJXvIzuUdWWIy/1pFQMkQmvTXawzDNqOH/CUmx6A==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
@@ -10170,9 +10207,9 @@
}
},
"node_modules/mdn-data": {
- "version": "2.27.1",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
- "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
"license": "CC0-1.0"
},
"node_modules/mdurl": {
@@ -10344,15 +10381,15 @@
"license": "MIT"
},
"node_modules/mlly": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.1.tgz",
- "integrity": "sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz",
+ "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==",
"license": "MIT",
"dependencies": {
- "acorn": "^8.16.0",
+ "acorn": "^8.15.0",
"pathe": "^2.0.3",
"pkg-types": "^1.3.1",
- "ufo": "^1.6.3"
+ "ufo": "^1.6.1"
}
},
"node_modules/mlly/node_modules/confbox": {
@@ -10440,9 +10477,9 @@
}
},
"node_modules/motion-dom": {
- "version": "12.35.1",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.35.1.tgz",
- "integrity": "sha512-7n6r7TtNOsH2UFSAXzTkfzOeO5616v9B178qBIjmu/WgEyJK0uqwytCEhwKBTuM/HJA40ptAw7hLFpxtPAMRZQ==",
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.3.tgz",
+ "integrity": "sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==",
"license": "MIT",
"dependencies": {
"motion-utils": "^12.29.2"
@@ -10682,6 +10719,22 @@
"integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==",
"license": "MIT"
},
+ "node_modules/nitropack/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/node-abi": {
"version": "3.87.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz",
@@ -10775,9 +10828,9 @@
"license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.36",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
- "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"license": "MIT"
},
"node_modules/nodemailer": {
@@ -11477,9 +11530,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
- "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
@@ -11521,12 +11574,12 @@
}
},
"node_modules/postcss-colormin": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.6.tgz",
- "integrity": "sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.5.tgz",
+ "integrity": "sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"caniuse-api": "^3.0.0",
"colord": "^2.9.3",
"postcss-value-parser": "^4.2.0"
@@ -11539,12 +11592,12 @@
}
},
"node_modules/postcss-convert-values": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.9.tgz",
- "integrity": "sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==",
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.8.tgz",
+ "integrity": "sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -11555,12 +11608,12 @@
}
},
"node_modules/postcss-discard-comments": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.6.tgz",
- "integrity": "sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz",
+ "integrity": "sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==",
"license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^7.1.1"
+ "postcss-selector-parser": "^7.1.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -11622,15 +11675,15 @@
}
},
"node_modules/postcss-merge-rules": {
- "version": "7.0.8",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.8.tgz",
- "integrity": "sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==",
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.7.tgz",
+ "integrity": "sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"caniuse-api": "^3.0.0",
"cssnano-utils": "^5.0.1",
- "postcss-selector-parser": "^7.1.1"
+ "postcss-selector-parser": "^7.1.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -11672,12 +11725,12 @@
}
},
"node_modules/postcss-minify-params": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.6.tgz",
- "integrity": "sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.5.tgz",
+ "integrity": "sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"cssnano-utils": "^5.0.1",
"postcss-value-parser": "^4.2.0"
},
@@ -11689,13 +11742,13 @@
}
},
"node_modules/postcss-minify-selectors": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.6.tgz",
- "integrity": "sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz",
+ "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==",
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
- "postcss-selector-parser": "^7.1.1"
+ "postcss-selector-parser": "^7.1.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -11792,12 +11845,12 @@
}
},
"node_modules/postcss-normalize-unicode": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.6.tgz",
- "integrity": "sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.5.tgz",
+ "integrity": "sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
@@ -11854,12 +11907,12 @@
}
},
"node_modules/postcss-reduce-initial": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.6.tgz",
- "integrity": "sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz",
+ "integrity": "sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
+ "browserslist": "^4.27.0",
"caniuse-api": "^3.0.0"
},
"engines": {
@@ -11898,13 +11951,13 @@
}
},
"node_modules/postcss-svgo": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.1.tgz",
- "integrity": "sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz",
+ "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==",
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
- "svgo": "^4.0.1"
+ "svgo": "^4.0.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >= 18"
@@ -11914,12 +11967,12 @@
}
},
"node_modules/postcss-unique-selectors": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.5.tgz",
- "integrity": "sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz",
+ "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==",
"license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^7.1.1"
+ "postcss-selector-parser": "^7.1.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -12804,9 +12857,9 @@
}
},
"node_modules/rollup-plugin-visualizer": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.11.tgz",
- "integrity": "sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.5.tgz",
+ "integrity": "sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==",
"license": "MIT",
"dependencies": {
"open": "^8.0.0",
@@ -13448,13 +13501,13 @@
"license": "ISC"
},
"node_modules/stylehacks": {
- "version": "7.0.8",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.8.tgz",
- "integrity": "sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==",
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.7.tgz",
+ "integrity": "sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
- "postcss-selector-parser": "^7.1.1"
+ "browserslist": "^4.27.0",
+ "postcss-selector-parser": "^7.1.0"
},
"engines": {
"node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13492,9 +13545,9 @@
}
},
"node_modules/svgo": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz",
- "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz",
+ "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
"license": "MIT",
"dependencies": {
"commander": "^11.1.0",
@@ -13503,7 +13556,7 @@
"css-what": "^6.1.0",
"csso": "^5.0.5",
"picocolors": "^1.1.1",
- "sax": "^1.5.0"
+ "sax": "^1.4.1"
},
"bin": {
"svgo": "bin/svgo.js"
@@ -13598,9 +13651,9 @@
}
},
"node_modules/tar": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz",
- "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==",
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz",
+ "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==",
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/fs-minipass": "^4.0.0",
@@ -14034,6 +14087,22 @@
"node": ">=18.12.0"
}
},
+ "node_modules/unimport/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/unplugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz",
@@ -14095,7 +14164,7 @@
"node": ">=18.12.0"
}
},
- "node_modules/unplugin-utils": {
+ "node_modules/unplugin-auto-import/node_modules/unplugin-utils": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
"integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
@@ -14111,6 +14180,22 @@
"url": "https://github.com/sponsors/sxzz"
}
},
+ "node_modules/unplugin-utils": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz",
+ "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/unplugin-vue-components": {
"version": "31.0.0",
"resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-31.0.0.tgz",
@@ -14158,6 +14243,22 @@
"node": ">=18.12.0"
}
},
+ "node_modules/unplugin-vue-components/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/unplugin-vue-router": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.19.2.tgz",
@@ -14208,6 +14309,22 @@
"node": ">=18.12.0"
}
},
+ "node_modules/unplugin-vue-router/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/unstorage": {
"version": "1.17.4",
"resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz",
@@ -14853,6 +14970,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/vite-plugin-inspect/node_modules/unplugin-utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
+ "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
+ "license": "MIT",
+ "dependencies": {
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sxzz"
+ }
+ },
"node_modules/vite-plugin-vue-tracer": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-1.2.0.tgz",
diff --git a/prisma/dev.db b/prisma/dev.db
new file mode 100644
index 0000000..24b31b4
Binary files /dev/null and b/prisma/dev.db differ
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index dfcbd5e..77e9ae6 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -12,7 +12,6 @@ model User {
name String
email String
emailVerified Boolean @default(false)
- image String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sessions Session[]
diff --git a/prisma/seed.ts b/prisma/seed.ts
index 6976c63..7e8a94c 100644
--- a/prisma/seed.ts
+++ b/prisma/seed.ts
@@ -1,10 +1,8 @@
import { Param } from '@prisma/client/runtime/client'
import { prisma } from '../server/utils/prisma'
-import { faker } from '@faker-js/faker'
async function main() {
console.log('Start seeding...')
-
// 1. Create a Parent with a Password (Local Auth) and one child
const user1 = await prisma.user.create({
data: {
@@ -12,16 +10,16 @@ async function main() {
email: 'parent1@example.com',
emailVerified: true,
accounts: {
- create: {
+ create: [{
accountId: 'oryx_local_id',
providerId: 'credential', // Common for email/password
password: 'hashed_password_here', // In a real app, hash this!
students: {
- create: { name: 'Crota', exp: 5000, settings: { dyslexiaFont: true, fontSize: 1, language: 'en'}} },
+ create: [{ name: 'Crota', exp: 5000, settings: { dyslexiaFont: true, fontSize: 1, language: 'en' } }],
},
- },
+ }],
},
- },
+ }
})
// 2. Create a Parent with an OAuth Account (e.g., Google) and multiple children
@@ -31,7 +29,7 @@ async function main() {
email: 'parent2@gmail.com',
emailVerified: true,
accounts: {
- create: {
+ create: [{
accountId: 'rich_google_id',
providerId: 'google',
accessToken: 'mock_access_token',
@@ -42,7 +40,7 @@ async function main() {
{ name: 'Anais' },
],
},
- },
+ }],
},
},
})
@@ -54,12 +52,12 @@ async function main() {
email: 'admin1@example.com',
emailVerified: true,
accounts: {
- create: {
+ create: [{
accountId: 'gary_admin_id',
providerId: 'credential',
password: 'hashed_password_here',
admin: { create: {} },
- },
+ }],
},
},
})
@@ -71,18 +69,76 @@ async function main() {
email: 'admin2@example.com',
emailVerified: true,
accounts: {
- create: {
+ create: [{
accountId: 'admin2_local_id',
providerId: 'credential',
password: 'hashed_password_here',
- admin: { create: { settings: { dyslexiaFont: true, fontSize: 1, language: 'en' } } } },
- },
+ admin: { create: { settings: { dyslexiaFont: true, fontSize: 1, language: 'en' } } }
+ }],
},
+ }],
+ },
+ } } )
+
+// 2. Create a Parent with an OAuth Account (e.g., Google) and multiple children
+const user2 = await prisma.user.create({
+ data: {
+ name: 'Richard Watterson',
+ email: 'parent2@gmail.com',
+ emailVerified: true,
+ accounts: {
+ create: [{
+ accountId: 'rich_google_id',
+ providerId: 'google',
+ accessToken: 'mock_access_token',
+ students: {
+ create: [
+ { name: 'Gumball' },
+ { name: 'Darwin' },
+ { name: 'Anais' },
+ ],
+ },
+ }],
},
- })
+ },
+})
+
+//create a test admin user
+const admin1 = await prisma.user.create({
+ data: {
+ name: 'Gary Admin',
+ email: 'admin1@example.com',
+ emailVerified: true,
+ accounts: {
+ create: [{
+ accountId: 'gary_admin_id',
+ providerId: 'credential',
+ password: 'hashed_password_here',
+ admin: { create: {} },
+ }],
+ },
+ },
+})
- console.log({ user1, user2, admin1, admin2 })
- console.log('Seeding finished.')
+//create a second test admin user
+const admin2 = await prisma.user.create({
+ data: {
+ name: 'Admin Two',
+ email: 'admin2@example.com',
+ emailVerified: true,
+ accounts: {
+ create: [{
+ accountId: 'admin2_local_id',
+ providerId: 'credential',
+ password: 'hashed_password_here',
+ admin: { create: { settings: { dyslexiaFont: true, fontSize: 1, language: 'en' } } }
+ },
+ },
+ },
+})
+
+console.log({ user1, user2, admin1, admin2 })
+console.log('Seeding finished.')
}
@@ -94,4 +150,4 @@ main()
console.error(e)
await prisma.$disconnect()
process.exit(1)
- })
+ })
\ No newline at end of file
diff --git a/server/api/announcement/[id].ts b/server/api/announcement/[id].ts
new file mode 100644
index 0000000..e69de29
diff --git a/server/api/announcement/index.ts b/server/api/announcement/index.ts
new file mode 100644
index 0000000..a8cd0de
--- /dev/null
+++ b/server/api/announcement/index.ts
@@ -0,0 +1,36 @@
+import { Prisma } from '~~/prisma/generated/client'
+import { prisma } from '../../utils/prisma'
+import { getQuery } from 'h3'
+import { lte } from 'zod'
+import { _isoDateTime } from 'better-auth'
+
+// GET /api/announcement?active=true to get only active announcements
+export default defineEventHandler(async (event) => {
+ const method = event.node.req.method
+ const query = getQuery(event)
+ const now = new Date()
+
+ if (method === 'GET') {
+ return await prisma.announcement.findMany({
+ where: query.active === 'true' ? {
+ postDate: { lte: now },
+ OR: [
+ { expiryDate: null },
+ { expiryDate: { gte: now } }
+ ]
+ } : {}
+ })
+ }
+
+ if (method === 'POST') {
+ const body = await readBody(event)
+ return await prisma.announcement.create({
+ data: {
+ content: body.content,
+ postDate: new Date(body.postDate),
+ expiryDate: body.expiryDate ? new Date(body.expiryDate) : null,
+ author: body.author,
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/server/api/student/[id].ts b/server/api/student/[id].ts
new file mode 100644
index 0000000..8ba5b22
--- /dev/null
+++ b/server/api/student/[id].ts
@@ -0,0 +1,52 @@
+import { prisma } from '../../utils/prisma'
+
+export default defineEventHandler(async (event) => {
+ const method = event.node.req.method
+ const id = event.context.params?.id
+
+ //validate id path parameter
+ if (!id || isNaN(Number(id))) {
+ throw createError({
+ statusCode: 400,
+ statusMessage: 'Invalid ID',
+ })
+ }
+ const studentId = Number(id)
+
+ if (method === 'GET') {
+
+ const student = await prisma.student.findUnique({
+ where: {
+ id: studentId,
+ },
+ })
+
+ if (!student) {
+ throw createError({
+ statusCode: 404,
+ statusMessage: 'Student not found',
+ })
+ }
+
+ return student
+ }
+
+ if (method === 'PUT') {
+ const body = await readBody(event)
+
+ const updatedStudent = await prisma.student.update({
+ where: {
+ id: studentId,
+ },
+ data: {
+ name: body.name,
+ settings: body.settings,
+ exp: body.exp
+ },
+ })
+ return updatedStudent
+ }
+
+ if (method === 'DELETE') {}
+
+})
\ No newline at end of file
diff --git a/server/api/student/index.ts b/server/api/student/index.ts
new file mode 100644
index 0000000..3c9d0d3
--- /dev/null
+++ b/server/api/student/index.ts
@@ -0,0 +1,21 @@
+import { prisma } from '../../utils/prisma'
+
+export default defineEventHandler(async (event) => {
+ const method = event.node.req.method
+
+ if (method === 'GET') {
+ const students = await prisma.student.findMany()
+ return students
+ }
+
+ if (method === 'POST') {
+ const body = await readBody(event)
+
+ await prisma.student.create({
+ data: {
+ name: body.name,
+ parent: Number(body.parent),
+ }
+ })
+ }
+})
\ No newline at end of file