diff --git a/maternal-web/app/settings/page.tsx b/maternal-web/app/settings/page.tsx index 229040c..62973b0 100644 --- a/maternal-web/app/settings/page.tsx +++ b/maternal-web/app/settings/page.tsx @@ -18,8 +18,10 @@ import { MeasurementUnitSelector } from '@/components/settings/MeasurementUnitSe import { TimeZoneSelector } from '@/components/settings/TimeZoneSelector'; import { TimeFormatSelector } from '@/components/settings/TimeFormatSelector'; import { motion } from 'framer-motion'; +import { useTranslation } from '@/hooks/useTranslation'; export default function SettingsPage() { + const { t } = useTranslation('settings'); const { user, logout, refreshUser } = useAuth(); const [name, setName] = useState(user?.name || ''); const [timezone, setTimezone] = useState(user?.timezone || 'UTC'); @@ -61,7 +63,7 @@ export default function SettingsPage() { const handleSaveAll = async () => { // Validate name if (!name || name.trim() === '') { - setNameError('Name cannot be empty'); + setNameError(t('profile.nameRequired')); return; } @@ -83,7 +85,7 @@ export default function SettingsPage() { // Refresh user to get latest data from server await refreshUser(); - setSuccessMessage('Settings saved successfully!'); + setSuccessMessage(t('saved')); } catch (err: any) { console.error('❌ Failed to save settings:', err); console.error('Error response:', err.response); @@ -102,10 +104,10 @@ export default function SettingsPage() { - Settings + {t('title')} - Manage your account settings and preferences + {t('profile.title')} {/* Error Alert */} @@ -130,11 +132,11 @@ export default function SettingsPage() { - Profile Information + {t('profile.title')} { setName(e.target.value); @@ -146,11 +148,11 @@ export default function SettingsPage() { disabled={isLoading} /> @@ -166,7 +168,7 @@ export default function SettingsPage() { - Preferences + {t('preferences.title')} @@ -193,7 +195,7 @@ export default function SettingsPage() { - Notifications + {t('notifications.title')} } - label="Push Notifications" + label={t('notifications.push')} /> } - label="Email Updates" + label={t('notifications.email')} /> @@ -230,7 +232,7 @@ export default function SettingsPage() { - Appearance + {t('appearance.title')} setSettings({ ...settings, darkMode: e.target.checked })} /> } - label="Dark Mode (Coming Soon)" + label={t('appearance.darkMode')} disabled /> @@ -329,7 +331,7 @@ export default function SettingsPage() { disabled={isLoading} sx={{ minWidth: 200 }} > - {isLoading ? 'Saving...' : 'Save Preferences'} + {isLoading ? t('saving') : t('save')} @@ -343,7 +345,7 @@ export default function SettingsPage() { - Account Actions + {t('accountActions.title')} diff --git a/maternal-web/app/track/activity/page.tsx b/maternal-web/app/track/activity/page.tsx index a4af626..e099431 100644 --- a/maternal-web/app/track/activity/page.tsx +++ b/maternal-web/app/track/activity/page.tsx @@ -31,7 +31,6 @@ import { Delete, Refresh, Add, - FitnessCenter, DirectionsWalk, Toys, MusicNote, @@ -47,6 +46,7 @@ import { VoiceInputButton } from '@/components/voice/VoiceInputButton'; import { FormSkeleton, ActivityListSkeleton } from '@/components/common/LoadingSkeletons'; import { motion } from 'framer-motion'; import { useLocalizedDate } from '@/hooks/useLocalizedDate'; +import { useTranslation } from '@/hooks/useTranslation'; interface ActivityData { activityType: string; @@ -58,6 +58,7 @@ function ActivityTrackPage() { const router = useRouter(); const { user } = useAuth(); const { formatDistanceToNow } = useLocalizedDate(); + const { t } = useTranslation('tracking'); const [children, setChildren] = useState([]); const [selectedChild, setSelectedChild] = useState(''); @@ -160,7 +161,7 @@ function ActivityTrackPage() { notes: notes || undefined, }); - setSuccessMessage('Activity logged successfully!'); + setSuccessMessage(t('activity.success')); // Reset form resetForm(); @@ -193,7 +194,7 @@ function ActivityTrackPage() { try { setLoading(true); await trackingApi.deleteActivity(activityToDelete); - setSuccessMessage('Activity deleted successfully'); + setSuccessMessage(t('activity.deleted')); setDeleteDialogOpen(false); setActivityToDelete(null); await loadRecentActivities(); @@ -211,8 +212,6 @@ function ActivityTrackPage() { return ; case 'walk': return ; - case 'exercise': - return ; case 'music': return ; default: @@ -238,13 +237,13 @@ function ActivityTrackPage() { - Track Activity + {t('trackActivity')} - Recent Activities + {t('activity.recentActivities')} @@ -261,17 +260,17 @@ function ActivityTrackPage() { - No Children Added + {t('common.noChildrenAdded')} - You need to add a child before you can track activities + {t('common.noChildrenMessage')} @@ -289,7 +288,7 @@ function ActivityTrackPage() { - Track Activity + {t('trackActivity')} { @@ -323,11 +322,11 @@ function ActivityTrackPage() { {children.length > 1 && ( - Select Child + {t('common.selectChild')} setActivityType(e.target.value)} - label="Activity Type" + label={t('activity.type')} > - Play - Walk - Exercise - Music - Reading - Tummy Time - Outdoor - Other + {t('activity.types.play')} + {t('activity.types.walk')} + {t('activity.types.music')} + {t('activity.types.reading')} + {t('activity.types.tummyTime')} + {t('activity.types.outdoor')} + {t('activity.types.other')} setDuration(e.target.value)} sx={{ mb: 3 }} - placeholder="e.g., 30" + placeholder={t('activity.placeholders.duration')} /> setDescription(e.target.value)} sx={{ mb: 3 }} - placeholder="e.g., Playing with blocks, Reading stories" + placeholder={t('activity.placeholders.description')} /> setNotes(e.target.value)} sx={{ mb: 3 }} - placeholder="Any additional notes..." + placeholder={t('activity.placeholders.notes')} /> @@ -413,7 +411,7 @@ function ActivityTrackPage() { - Recent Activities + {t('activity.recentActivities')} @@ -427,7 +425,7 @@ function ActivityTrackPage() { ) : recentActivities.length === 0 ? ( - No activities yet + {t('noEntries')} ) : ( @@ -498,18 +496,18 @@ function ActivityTrackPage() { open={deleteDialogOpen} onClose={() => setDeleteDialogOpen(false)} > - Delete Activity? + {t('common.delete')} {t('activity.title')}? - Are you sure you want to delete this activity? This action cannot be undone. + {t('confirmDelete')} diff --git a/maternal-web/app/track/diaper/page.tsx b/maternal-web/app/track/diaper/page.tsx index 0a05e29..5ea3caf 100644 --- a/maternal-web/app/track/diaper/page.tsx +++ b/maternal-web/app/track/diaper/page.tsx @@ -254,7 +254,7 @@ export default function DiaperTrackPage() { notes: notes || undefined, }); - setSuccessMessage('Diaper change logged successfully!'); + setSuccessMessage(t('diaper.success')); // Reset form resetForm(); @@ -289,7 +289,7 @@ export default function DiaperTrackPage() { try { setLoading(true); await trackingApi.deleteActivity(activityToDelete); - setSuccessMessage('Diaper change deleted successfully'); + setSuccessMessage(t('diaper.deleted')); setDeleteDialogOpen(false); setActivityToDelete(null); await loadRecentDiapers(); @@ -333,8 +333,8 @@ export default function DiaperTrackPage() { const getDiaperDetails = (activity: Activity) => { const data = activity.data as DiaperData; - const typeLabel = data.diaperType.charAt(0).toUpperCase() + data.diaperType.slice(1); - const conditionsLabel = data.conditions?.join(', ') || ''; + const typeLabel = t(`diaper.types.${data.diaperType}`); + const conditionsLabel = data.conditions?.map(c => t(`diaper.conditions.${c}`)).join(', ') || ''; let details = typeLabel; if (conditionsLabel) { @@ -342,7 +342,7 @@ export default function DiaperTrackPage() { } if (data.hasRash) { - details += ` - Rash (${data.rashSeverity})`; + details += ` - ${t('diaper.rash.title')} (${t(`diaper.rash.severities.${data.rashSeverity}`)})`; } return details; @@ -390,17 +390,17 @@ export default function DiaperTrackPage() { - No Children Added + {t('common.noChildrenAdded')} - You need to add a child before you can track diaper changes + {t('common.noChildrenMessage')} @@ -437,11 +437,11 @@ export default function DiaperTrackPage() { {children.length > 1 && ( - Select Child + {t('common.selectChild')} setHasRash(e.target.value === 'yes')} - label="Diaper Rash?" + label={t('diaper.rash.title')} > - No - Yes + {t('diaper.rash.no')} + {t('diaper.rash.yes')} @@ -558,19 +558,19 @@ export default function DiaperTrackPage() { - Diaper rash detected. Consider applying diaper rash cream and consulting your pediatrician if it persists. + {t('diaper.rash.alert')} - Rash Severity + {t('diaper.rash.severity')} @@ -606,7 +606,7 @@ export default function DiaperTrackPage() { - {t('diaper.title')} + {t('diaper.recentDiapers')} @@ -646,10 +646,10 @@ export default function DiaperTrackPage() { - Diaper Change + {t('diaper.title')} } - label={`Rash: ${data.rashSeverity}`} + label={`${t('diaper.rash.title')}: ${t(`diaper.rash.severities.${data.rashSeverity}`)}`} size="small" color={getRashSeverityColor(data.rashSeverity || 'mild') as any} /> @@ -714,10 +714,10 @@ export default function DiaperTrackPage() { diff --git a/maternal-web/app/track/sleep/page.tsx b/maternal-web/app/track/sleep/page.tsx index 4bde11b..579174d 100644 --- a/maternal-web/app/track/sleep/page.tsx +++ b/maternal-web/app/track/sleep/page.tsx @@ -230,7 +230,7 @@ export default function SleepTrackPage() { notes: notes || undefined, }); - setSuccessMessage('Sleep logged successfully!'); + setSuccessMessage(t('sleep.success')); // Reset form resetForm(); @@ -265,7 +265,7 @@ export default function SleepTrackPage() { try { setLoading(true); await trackingApi.deleteActivity(activityToDelete); - setSuccessMessage('Sleep deleted successfully'); + setSuccessMessage(t('sleep.deleted')); setDeleteDialogOpen(false); setActivityToDelete(null); await loadRecentSleeps(); @@ -314,7 +314,7 @@ export default function SleepTrackPage() { const duration = data.endTime ? formatDuration(data.startTime, data.endTime) : data.isOngoing - ? `Ongoing - ${formatDuration(data.startTime)}` + ? t('sleep.ongoing_duration', { duration: formatDuration(data.startTime) }) : 'No end time'; return `${duration} - ${data.location.charAt(0).toUpperCase() + data.location.slice(1)}`; @@ -349,17 +349,17 @@ export default function SleepTrackPage() { - No Children Added + {t('common.noChildrenAdded')} - You need to add a child before you can track sleep activities + {t('common.noChildrenMessage')} @@ -396,11 +396,11 @@ export default function SleepTrackPage() { {children.length > 1 && ( - Select Child + {t('common.selectChild')} setIsOngoing(e.target.value === 'ongoing')} - label="Sleep Status" + label={t('sleep.status.title')} > - Completed (has end time) - Ongoing (still sleeping) + {t('sleep.status.completed')} + {t('sleep.status.ongoing')} @@ -463,7 +463,7 @@ export default function SleepTrackPage() { InputLabelProps={{ shrink: true }} /> @@ -473,7 +473,7 @@ export default function SleepTrackPage() { {calculateDuration() && ( @@ -497,17 +497,17 @@ export default function SleepTrackPage() { {/* Location */} - Location + {t('sleep.location')} @@ -533,7 +533,7 @@ export default function SleepTrackPage() { onClick={handleSubmit} disabled={loading} > - {loading ? t('sleep.addSleep') : t('sleep.addSleep')} + {loading ? t('sleep.logSleep') : t('sleep.logSleep')} @@ -541,7 +541,7 @@ export default function SleepTrackPage() { - {t('sleep.title')} + {t('sleep.recentSleeps')} @@ -581,7 +581,7 @@ export default function SleepTrackPage() { - Sleep + {t('sleep.title')} diff --git a/maternal-web/locales/en/settings.json b/maternal-web/locales/en/settings.json index d197659..a6c492d 100644 --- a/maternal-web/locales/en/settings.json +++ b/maternal-web/locales/en/settings.json @@ -106,8 +106,42 @@ "rateApp": "Rate App", "shareApp": "Share App" }, - "save": "Save Changes", - "saved": "Settings saved successfully", + "profile": { + "title": "Profile Information", + "name": "Name", + "nameRequired": "Name cannot be empty", + "email": "Email", + "emailNotEditable": "Email cannot be changed" + }, + "appearance": { + "title": "Appearance", + "darkMode": "Dark Mode (Coming Soon)" + }, + "security": { + "title": "Security" + }, + "sessions": { + "title": "Sessions" + }, + "deviceTrust": { + "title": "Device Trust" + }, + "biometric": { + "title": "Biometric Authentication" + }, + "dataExport": { + "title": "Data Export" + }, + "accountDeletion": { + "title": "Account Deletion" + }, + "accountActions": { + "title": "Account Actions", + "logout": "Logout" + }, + "save": "Save Preferences", + "saving": "Saving...", + "saved": "Settings saved successfully!", "cancel": "Cancel", "reset": "Reset to Default" } diff --git a/maternal-web/locales/en/tracking.json b/maternal-web/locales/en/tracking.json index d5ace66..9154043 100644 --- a/maternal-web/locales/en/tracking.json +++ b/maternal-web/locales/en/tracking.json @@ -42,6 +42,7 @@ "sleep": { "title": "Sleep", "addSleep": "Add Sleep", + "logSleep": "Log Sleep", "startTime": "Sleep Start", "endTime": "Sleep End", "duration": "Duration", @@ -52,14 +53,33 @@ "good": "Good", "excellent": "Excellent" }, + "location": "Location", + "locations": { + "crib": "Crib", + "bed": "Bed", + "stroller": "Stroller", + "carrier": "Carrier", + "other": "Other" + }, + "status": { + "title": "Sleep Status", + "completed": "Completed (has end time)", + "ongoing": "Ongoing (still sleeping)" + }, + "now": "Now", "notes": "Notes", "placeholders": { "notes": "Add any notes about this sleep session..." - } + }, + "recentSleeps": "Recent Sleeps", + "success": "Sleep logged successfully!", + "deleted": "Sleep deleted successfully", + "ongoing_duration": "Ongoing - {{duration}}" }, "diaper": { "title": "Diaper", "addDiaper": "Add Diaper Change", + "logDiaper": "Log Diaper Change", "type": "Type", "types": { "wet": "Wet", @@ -68,10 +88,35 @@ "dry": "Dry" }, "time": "Time", + "now": "Now", + "conditions": { + "title": "Conditions", + "normal": "Normal", + "soft": "Soft", + "hard": "Hard", + "watery": "Watery", + "mucus": "Mucus", + "blood": "Blood" + }, + "rash": { + "title": "Has Rash", + "yes": "Yes", + "no": "No", + "severity": "Rash Severity", + "alert": "Diaper rash detected. Consider applying diaper rash cream and consulting your pediatrician if it persists.", + "severities": { + "mild": "Mild", + "moderate": "Moderate", + "severe": "Severe" + } + }, "notes": "Notes", "placeholders": { "notes": "Add any notes about this diaper change..." - } + }, + "recentDiapers": "Recent Diaper Changes", + "success": "Diaper change logged successfully!", + "deleted": "Diaper change deleted successfully" }, "milestone": { "title": "Milestone", @@ -123,6 +168,42 @@ "fahrenheit": "°F" } }, + "activity": { + "title": "Activity", + "addActivity": "Add Activity", + "logActivity": "Log Activity", + "type": "Activity Type", + "types": { + "play": "Play", + "tummyTime": "Tummy Time", + "walk": "Walk", + "music": "Music", + "reading": "Reading", + "outdoor": "Outdoor Play", + "other": "Other" + }, + "duration": "Duration (minutes)", + "description": "Description", + "notes": "Notes", + "placeholders": { + "duration": "Enter duration in minutes", + "description": "Describe the activity...", + "notes": "Add any notes..." + }, + "recentActivities": "Recent Activities", + "success": "Activity logged successfully!", + "deleted": "Activity deleted successfully" + }, + "common": { + "selectChild": "Select Child", + "cancel": "Cancel", + "delete": "Delete", + "loading": "Loading...", + "noChildrenAdded": "No Children Added", + "noChildrenMessage": "You need to add a child before you can track activities", + "addChild": "Add Child", + "recentActivities": "Recent Activities" + }, "quickLog": "Quick Log", "viewHistory": "View History", "editEntry": "Edit Entry", diff --git a/maternal-web/public/sw.js b/maternal-web/public/sw.js index 66ba634..c1e5038 100644 --- a/maternal-web/public/sw.js +++ b/maternal-web/public/sw.js @@ -1 +1 @@ -if(!self.define){let e,s={};const n=(n,a)=>(n=new URL(n+".js",a).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(a,i)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let c={};const o=e=>n(e,t),r={module:{uri:t},exports:c,require:o};s[t]=Promise.all(a.map(e=>r[e]||o(e))).then(e=>(i(...e),c))}}define(["./workbox-4d767a27"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"d52d90009d4c805dc10641bc3a3bbfc7"},{url:"/_next/static/chunks/1444-260dc19907f6901d.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/1513-0b6bb7a8d88f55bf.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/1820-b94ad37655f7c90b.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/1960-c6df7e7041b0d04e.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/2168-be07f6965049cbaa.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/2204-230dd574464877e3.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/2215-ed57a7e4fab6c06f.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/2228-962b16dd28fbab2c.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/2351-9425d3d78ba615f9.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/3531-673f06878990b417.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/374-8cbaf99b80a57d75.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/3742-b099bdb6d87c5bf7.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/3978.18354d3d53eb75b8.js",revision:"18354d3d53eb75b8"},{url:"/_next/static/chunks/3983-92c7f914bcc5c824.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/4076-01437855a99bdebf.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/4335-a1e43d50cfab0521.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/4686-2c37bd67f95c5cf4.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/487-b335414bb4e15c4d.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/4919-f07fda8666d18e65.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/5010-608bd3998fba5c45.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/5011-4253696c14555a56.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/5527-f4c2418658bcc979.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/6062-9ec09f62d2f65481.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/7017-cc18fc1b6d50b019.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/7023-9cec68d276f434f3.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/7593-2f4683c559f10682.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/7595-f97cc7515473fb71.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/8046.e02453398fe6656f.js",revision:"e02453398fe6656f"},{url:"/_next/static/chunks/8334-af22988373f1dd97.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/8433-963eac3c158954c6.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/8485-a4408d198005887e.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/8533-ac1593b1d100b551.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/8884-1a93df8344101faf.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/9080-9b4b481b972d9c34.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/965-d97e42dd06741839.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/(auth)/forgot-password/page-8c309959586f4f12.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/(auth)/login/page-3e3a0a4b350bafbb.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/(auth)/onboarding/page-c10eba8dbec7b3ae.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/(auth)/register/page-75527dc8ab981e51.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/(auth)/reset-password/page-2dd47ec4982072e9.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/_not-found/page-05852e2a851b96a9.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/ai-assistant/page-2709415eabb1432e.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/analytics/page-a8ba946e42472719.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/children/page-182e6a15409e3f19.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/family/page-a42ddebdcdcf51b3.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/history/page-7bd00ae6f677e8fd.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/insights/page-98ac1ce18daa8c3a.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/layout-02f5d38e89de3e9d.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/logout/page-41d42e8a1118a3bb.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/page-c7d72f719106fd9f.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/settings/page-624fb59c876d2761.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/track/diaper/page-424ccbf9f26df0ea.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/track/feeding/page-1c8b75b6c519756f.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/track/page-ffc8a69b1970d83c.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/app/track/sleep/page-ce8d64acd7aba61d.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/fd9d1056-85b44074bf2aaf91.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/framework-8e0e0f4a6b83a956.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/main-aa97ecafabe03df4.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/main-app-c81eb15105e352f0.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/pages/_app-f870474a17b7f2fd.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js",revision:"79330112775102f91e1010318bae2bd3"},{url:"/_next/static/chunks/webpack-f9cc98c0512e2cfe.js",revision:"pwl8G7n4Xax2oxKKRXQeH"},{url:"/_next/static/css/3c73bbe3401b74b1.css",revision:"3c73bbe3401b74b1"},{url:"/_next/static/media/19cfc7226ec3afaa-s.woff2",revision:"9dda5cfc9a46f256d0e131bb535e46f8"},{url:"/_next/static/media/21350d82a1f187e9-s.woff2",revision:"4e2553027f1d60eff32898367dd4d541"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/ba9851c3c22cd980-s.woff2",revision:"9e494903d6b0ffec1a1e14d34427d44d"},{url:"/_next/static/media/c5fe6dc8356a8c31-s.woff2",revision:"027a89e9ab733a145db70f09b8a18b42"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/_next/static/pwl8G7n4Xax2oxKKRXQeH/_buildManifest.js",revision:"3e2d62a10f4d6bf0b92e14aecf7836f4"},{url:"/_next/static/pwl8G7n4Xax2oxKKRXQeH/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/icons/icon-128x128.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-144x144.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-152x152.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-192x192.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-384x384.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-512x512.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-72x72.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-96x96.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/manifest.json",revision:"5be5ec81beca107e804b38758d51abd5"},{url:"/next.svg",revision:"8e061864f388b47f33a1c3780831193e"},{url:"/vercel.svg",revision:"61c6b19abff40ea7acd577be818f3976"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:a})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/api\/.*$/i,new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/.*/i,new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET")}); +if(!self.define){let e,s={};const a=(a,c)=>(a=new URL(a+".js",c).href,s[a]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()}).then(()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e}));self.define=(c,i)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let t={};const r=e=>a(e,n),f={module:{uri:n},exports:t,require:r};s[n]=Promise.all(c.map(e=>f[e]||r(e))).then(e=>(i(...e),t))}}define(["./workbox-4d767a27"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"967954bb76b250dc8633e67ee7eb3a62"},{url:"/_next/static/3jpPxMsgK0IQWur-KjnAN/_buildManifest.js",revision:"8f0f5ce83e0c1a8bb7ed8c5093a55c39"},{url:"/_next/static/3jpPxMsgK0IQWur-KjnAN/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/1063-f889ee292f8f15b5.js",revision:"f889ee292f8f15b5"},{url:"/_next/static/chunks/1213-7820689c8a23df1d.js",revision:"7820689c8a23df1d"},{url:"/_next/static/chunks/1233-aa8672e107c5a9d6.js",revision:"aa8672e107c5a9d6"},{url:"/_next/static/chunks/1255-b2f7fd83e387a9e1.js",revision:"b2f7fd83e387a9e1"},{url:"/_next/static/chunks/1495.1f181dd04a7985c1.js",revision:"1f181dd04a7985c1"},{url:"/_next/static/chunks/1733-cce5309a9609067d.js",revision:"cce5309a9609067d"},{url:"/_next/static/chunks/1863-6426793acce6fdbe.js",revision:"6426793acce6fdbe"},{url:"/_next/static/chunks/2073-46126ea96e2f7d54.js",revision:"46126ea96e2f7d54"},{url:"/_next/static/chunks/2528-886b553c0bf133ad.js",revision:"886b553c0bf133ad"},{url:"/_next/static/chunks/2589-104d90c8d4f5c3ea.js",revision:"104d90c8d4f5c3ea"},{url:"/_next/static/chunks/2758-1efe116b33d15067.js",revision:"1efe116b33d15067"},{url:"/_next/static/chunks/2779.7826066a08a5507b.js",revision:"7826066a08a5507b"},{url:"/_next/static/chunks/3039-1e3f512a6440a0ef.js",revision:"1e3f512a6440a0ef"},{url:"/_next/static/chunks/3915-c3a073f3ecde242b.js",revision:"c3a073f3ecde242b"},{url:"/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js",revision:"100b9d70ed4e49c1"},{url:"/_next/static/chunks/5057-8041a3f0e28fb791.js",revision:"8041a3f0e28fb791"},{url:"/_next/static/chunks/5079-33eac748d82015bb.js",revision:"33eac748d82015bb"},{url:"/_next/static/chunks/5125-c990fc036d2a6ce4.js",revision:"c990fc036d2a6ce4"},{url:"/_next/static/chunks/5204-40bcee73ecd8ab8c.js",revision:"40bcee73ecd8ab8c"},{url:"/_next/static/chunks/5385-7ecda8e4ba984edc.js",revision:"7ecda8e4ba984edc"},{url:"/_next/static/chunks/5468-ef720fa3041f3884.js",revision:"ef720fa3041f3884"},{url:"/_next/static/chunks/5482-7535aa0aab02d518.js",revision:"7535aa0aab02d518"},{url:"/_next/static/chunks/5984-808f27306694fb94.js",revision:"808f27306694fb94"},{url:"/_next/static/chunks/5992-aaba10a9394d13c3.js",revision:"aaba10a9394d13c3"},{url:"/_next/static/chunks/6088-c165c565edce02be.js",revision:"c165c565edce02be"},{url:"/_next/static/chunks/6286-086a26f8f0ae31b4.js",revision:"086a26f8f0ae31b4"},{url:"/_next/static/chunks/6662-f09741beffc63498.js",revision:"f09741beffc63498"},{url:"/_next/static/chunks/670-a4ca0f366ee779f5.js",revision:"a4ca0f366ee779f5"},{url:"/_next/static/chunks/6749-6065384063ca4215.js",revision:"6065384063ca4215"},{url:"/_next/static/chunks/6847-ce99bc721adda9c4.js",revision:"ce99bc721adda9c4"},{url:"/_next/static/chunks/6861-083879538672f0f7.js",revision:"083879538672f0f7"},{url:"/_next/static/chunks/6873-ff265086321345c8.js",revision:"ff265086321345c8"},{url:"/_next/static/chunks/6952-9da634cd5918df8d.js",revision:"9da634cd5918df8d"},{url:"/_next/static/chunks/6971-b78af763cedeabbc.js",revision:"b78af763cedeabbc"},{url:"/_next/static/chunks/710-7e96cbf5d461482a.js",revision:"7e96cbf5d461482a"},{url:"/_next/static/chunks/7332-fd60cdf555c2ea53.js",revision:"fd60cdf555c2ea53"},{url:"/_next/static/chunks/759-f463b0b6e6cc2a3a.js",revision:"f463b0b6e6cc2a3a"},{url:"/_next/static/chunks/7855-72c79224370eff7b.js",revision:"72c79224370eff7b"},{url:"/_next/static/chunks/787-032067ae978e62a8.js",revision:"032067ae978e62a8"},{url:"/_next/static/chunks/8039-c8bf59284845dc0c.js",revision:"c8bf59284845dc0c"},{url:"/_next/static/chunks/8270.f8d4b9bf89181cc4.js",revision:"f8d4b9bf89181cc4"},{url:"/_next/static/chunks/8477-3ba14f39d1c9ce2b.js",revision:"3ba14f39d1c9ce2b"},{url:"/_next/static/chunks/855-018668a9d4ef9edc.js",revision:"018668a9d4ef9edc"},{url:"/_next/static/chunks/9205-f540995b767df00b.js",revision:"f540995b767df00b"},{url:"/_next/static/chunks/9241-fa35d0a52e41e66f.js",revision:"fa35d0a52e41e66f"},{url:"/_next/static/chunks/9397-40b8ac68e22a4d87.js",revision:"40b8ac68e22a4d87"},{url:"/_next/static/chunks/9454.9662cf4535442dce.js",revision:"9662cf4535442dce"},{url:"/_next/static/chunks/9517-17518b5fffe76114.js",revision:"17518b5fffe76114"},{url:"/_next/static/chunks/app/(auth)/forgot-password/page-ee7e6853a7f0608c.js",revision:"ee7e6853a7f0608c"},{url:"/_next/static/chunks/app/(auth)/login/page-c9ee71200de62370.js",revision:"c9ee71200de62370"},{url:"/_next/static/chunks/app/(auth)/onboarding/page-9105e8d9acfc296a.js",revision:"9105e8d9acfc296a"},{url:"/_next/static/chunks/app/(auth)/register/page-8978bf9abf1fa383.js",revision:"8978bf9abf1fa383"},{url:"/_next/static/chunks/app/(auth)/reset-password/page-54396c56f752f536.js",revision:"54396c56f752f536"},{url:"/_next/static/chunks/app/_not-found/page-95f11f5fe94340f1.js",revision:"95f11f5fe94340f1"},{url:"/_next/static/chunks/app/activities/page-a0a3a16a5241c8bb.js",revision:"a0a3a16a5241c8bb"},{url:"/_next/static/chunks/app/ai-assistant/page-ea0cb9041eb93ba6.js",revision:"ea0cb9041eb93ba6"},{url:"/_next/static/chunks/app/analytics/page-cded7241c07e9a6b.js",revision:"cded7241c07e9a6b"},{url:"/_next/static/chunks/app/api/ai/chat/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/auth/login/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/auth/password-reset/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/auth/register/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/health/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/tracking/feeding/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/api/voice/transcribe/route-a631d97a33877f8a.js",revision:"a631d97a33877f8a"},{url:"/_next/static/chunks/app/children/page-0e252ce6a11c139c.js",revision:"0e252ce6a11c139c"},{url:"/_next/static/chunks/app/family/page-d62d9aa3c0ce4e8f.js",revision:"d62d9aa3c0ce4e8f"},{url:"/_next/static/chunks/app/history/page-15ee1463331fa52a.js",revision:"15ee1463331fa52a"},{url:"/_next/static/chunks/app/insights/page-70b3846f2657c6ee.js",revision:"70b3846f2657c6ee"},{url:"/_next/static/chunks/app/layout-d4106a7be0a7d74b.js",revision:"d4106a7be0a7d74b"},{url:"/_next/static/chunks/app/logout/page-bfb46c1bde2cc713.js",revision:"bfb46c1bde2cc713"},{url:"/_next/static/chunks/app/offline/page-28c005360c2b2736.js",revision:"28c005360c2b2736"},{url:"/_next/static/chunks/app/page-1da10cb66aee95f1.js",revision:"1da10cb66aee95f1"},{url:"/_next/static/chunks/app/settings/page-49ea860501bede41.js",revision:"49ea860501bede41"},{url:"/_next/static/chunks/app/track/activity/page-6f2ad45234b31f19.js",revision:"6f2ad45234b31f19"},{url:"/_next/static/chunks/app/track/diaper/page-28712ef07eea99a5.js",revision:"28712ef07eea99a5"},{url:"/_next/static/chunks/app/track/feeding/page-4718588f4e315746.js",revision:"4718588f4e315746"},{url:"/_next/static/chunks/app/track/medicine/page-e82afeb803115f2a.js",revision:"e82afeb803115f2a"},{url:"/_next/static/chunks/app/track/page-23967c508093468e.js",revision:"23967c508093468e"},{url:"/_next/static/chunks/app/track/sleep/page-b8c2ef682c7db606.js",revision:"b8c2ef682c7db606"},{url:"/_next/static/chunks/framework-bd61ec64032c2de7.js",revision:"bd61ec64032c2de7"},{url:"/_next/static/chunks/main-520e5ec2d671abe7.js",revision:"520e5ec2d671abe7"},{url:"/_next/static/chunks/main-app-02fc3649960ba6c7.js",revision:"02fc3649960ba6c7"},{url:"/_next/static/chunks/pages/_app-4b3fb5e477a0267f.js",revision:"4b3fb5e477a0267f"},{url:"/_next/static/chunks/pages/_error-c970d8b55ace1b48.js",revision:"c970d8b55ace1b48"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-bdb9214328e5d3bd.js",revision:"bdb9214328e5d3bd"},{url:"/_next/static/css/0e32a1f7dc037ce2.css",revision:"0e32a1f7dc037ce2"},{url:"/_next/static/media/19cfc7226ec3afaa-s.woff2",revision:"9dda5cfc9a46f256d0e131bb535e46f8"},{url:"/_next/static/media/21350d82a1f187e9-s.woff2",revision:"4e2553027f1d60eff32898367dd4d541"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/ba9851c3c22cd980-s.woff2",revision:"9e494903d6b0ffec1a1e14d34427d44d"},{url:"/_next/static/media/c5fe6dc8356a8c31-s.woff2",revision:"027a89e9ab733a145db70f09b8a18b42"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/icons/icon-128x128.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-144x144.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-152x152.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-192x192.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-384x384.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-512x512.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-72x72.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/icons/icon-96x96.png",revision:"d41d8cd98f00b204e9800998ecf8427e"},{url:"/manifest.json",revision:"5be5ec81beca107e804b38758d51abd5"},{url:"/next.svg",revision:"8e061864f388b47f33a1c3780831193e"},{url:"/vercel.svg",revision:"61c6b19abff40ea7acd577be818f3976"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:c})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/api\/.*$/i,new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/.*/i,new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET")});