@stacksjs/mobile 0.75.283 → 0.75.285
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +17 -2
- package/dist/index.js +2 -2
- package/dist/voice-recorder.d.ts +13 -0
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bundled TypeScript declarations
|
|
3
|
-
* Generated from
|
|
3
|
+
* Generated from 22 source files
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { BugHQClient, Breadcrumb, BugHQConfig } from '@bughq/sdk';
|
|
@@ -2036,6 +2036,21 @@ declare const storage: StorageApi;
|
|
|
2036
2036
|
// From: src/crypto.ts
|
|
2037
2037
|
declare const crypto: CryptoApi;
|
|
2038
2038
|
|
|
2039
|
-
|
|
2039
|
+
// From: src/voice-recorder.ts
|
|
2040
|
+
declare function createVoiceRecorder(options?: VoiceRecorderOptions): {
|
|
2041
|
+
start: unknown;
|
|
2042
|
+
cancel: unknown;
|
|
2043
|
+
dispose: () => void;
|
|
2044
|
+
stop: () => void;
|
|
2045
|
+
supported: () => boolean;
|
|
2046
|
+
snapshot: () => unknown;
|
|
2047
|
+
subscribe: (listener: (value: VoiceRecorderSnapshot) => void) => () => void
|
|
2048
|
+
};
|
|
2049
|
+
/** A bounded, disposable microphone session. Audio is never persisted by this helper. */
|
|
2050
|
+
declare interface VoiceRecorderOptions { maxSeconds?: number, maxBytes?: number }
|
|
2051
|
+
declare interface VoiceRecorderSnapshot { status: VoiceRecorderStatus, audio: Blob | null, error: string | null }
|
|
2052
|
+
type VoiceRecorderStatus = 'idle' | 'requesting' | 'recording' | 'ready' | 'error';
|
|
2053
|
+
|
|
2054
|
+
export { normalizeDeepLinkURL, getNativeMobileBridge, isNativeMobile, whenNativeMobile, onMobileReady, withNativeFeedback, biometrics, camera, device, lifecycle, location, notifications, permissions, secureStorage, share, appReview, haptics, deepLinks, snapshots, keepAwake, brightness, music, heartRate, speech, network, pushNotifications, health, liveActivities, watchConnectivity, splash, mobile, VoiceRecorderOptions, VoiceRecorderSnapshot, VoiceRecorderStatus, createVoiceRecorder, craftHost, craftRoot, hasNativeMobileHost, bridgePending, whenBridgeReady, nativeFunctionNow, nativeFunction, callNative, afterBridge, subscribeWhenReady, onCraftEvent, BRIDGE_WAIT_MS, CraftHost, CallNativeOptions, observeLongPress, segmentAt, observeSegmentScrub, segmentForKey, focusSegment, installPressables, LongPressOptions, SegmentScrubOptions, keepBreadcrumb, crashReporting, CrashReportingOptions, currentAppearance, normalizeAppearance, onAppearance, onResume, onMemoryWarning, onSilentPush, onBackgroundRefresh, NativeAppearance, pageScrollTop, observePageScroll, pullDistance, observePullToRefresh, largeTitleMetrics, observeLargeTitle, resolveScrollHost, ScrollHost, PullToRefreshOptions, LargeTitleMetrics, LargeTitleOptions, canGoBack, goBack, enterNavTrail, backLabelFor, navTrail, previousScreenPath, goBackToTabRoot, trailEntryFor, deepLinkPath, followDeepLinks, HistoryHost, NavTrailEntry, TabRootHost, attachHeartRate, fixDistance, usableFixes, routeStats, paceLabel, speedLabel, createRouteRecorder, HEART_RATE_MATCH_MS, ROUTE_GAP_S, RouteFix, RouteStats, RouteStatsOptions, RouteRecorderOptions, RouteRecorder, scheduledWorkoutsUnsupported, normalizeScheduledWorkout, scheduledWorkouts, AppleWorkoutStep, AppleIntervalBlock, AppleCustomWorkout, AppleWorkoutPlan, ScheduledWorkout, ScheduleWorkoutResult, ScheduledWorkoutsApi, ScheduledWorkoutsAuthorization, AppleWorkoutGoal, AppleWorkoutAlert, ScheduledWorkoutsMethod, startSessionClock, pauseSessionClock, resumeSessionClock, sessionClockElapsed, SessionClock, indoorVerdict, typedDistanceKm, INDOOR_CHECK_AFTER_S, IndoorFix, IndoorVerdict, toNativeRect, useActionSheet, confirmAction, showContextMenuFor, dialog, contextMenu, browser, symbols, statusBar, chrome, refresh, background, clipboard, db, files, shortcuts, widgets, orientation, auth, storeKit, DialogApi, ConfirmActionOptions, ContextMenuApi, BrowserOpenOptions, BrowserResult, BrowserApi, SymbolOptions, SymbolsApi, StatusBarApi, ChromeApi, RefreshApi, BackgroundApi, ClipboardApi, DatabaseExecuteResult, DatabaseApi, PickedFile, ScannedCode, FilesApi, HomeScreenShortcut, ShortcutsApi, WidgetsApi, OrientationApi, AppleSignInResult, AppleSignInOptions, AuthApi, StoreProduct, StoreTransaction, StoreKitApi, StatusBarStyle, OrientationLock, ActionSheetOptions, AlertOptions, ChoiceOptions, ConfirmOptions, ContextMenuItem, ContextMenuOptions, DialogAction, DialogActionStyle, NativeRect, isShown, observeNativeRefresh, NativeRefreshOptions, sheetStops, settleSheet, rubberBand, observeSheetDrag, liftToBody, presentPageAsCard, SHEET_FLICK_VELOCITY, SheetStop, SheetDragOptions, SheetDetent, SheetSettle, presentChoice, presentAlert, presentConfirm, presentActionSheet, placeMenu, presentContextMenu, applyAppearance, pageBackground, pageIsDark, installNativeChrome, NativeChromeOptions, readSpotlightKinds, spotlightKind, spotlightAction, spotlightSlot, spotlightActions, spotlightActivityTypes, spotlightTitle, placeSpotlightItem, removeSpotlightItem, spotlightRoute, readSpotlightEntries, spotlightBridge, createSpotlightIndex, onSpotlightTap, MAX_SPOTLIGHT_SLOTS_PER_KIND, SpotlightKind, SpotlightKindInput, SpotlightItem, SpotlightEntry, SpotlightKindsResult, SpotlightPlacement, SpotlightBridge, SpotlightIndexOptions, SpotlightIndex, readTabLinks, nativeTabs, routerHandlesTabs, handleTabReselect, coverTabBar, mirrorTabBar, tabBar, TAB_BAR_COVER_EVENT, TabBarApi, TabLink, TabReselectOptions, MirrorTabBarOptions, CraftMobileCapabilities, CraftMobileBridge, CraftReadyEvent, MobileApi, DeviceInfo, DeviceCapabilities, CameraOptions, PhotoResult, Location, LocationOptions, LocationRecordingState, RecordingStartOptions, LocationRecordingOptions, LocationRecordingResult, ShareOptions, NotificationOptions, DeviceApi, HapticsApi, PermissionsApi, CameraApi, BiometricsApi, StorageApi, CryptoApi, SecureStorageApi, RecordingOwnershipOptions, LocationApi, ShareApi, LifecycleApi, NotificationsApi, KeepAwakeApi, BrightnessApi, SpeechOptions, SpeechApi, NowPlaying, MusicSkipOptions, HeartRateDevice, HeartRateRecordingState, HeartRateState, HeartRateReading, HeartRateSample, HeartRateRecordingApi, HeartRateApi, MusicApi, DeepLinksApi, SnapshotsApi, NetworkStatus, NetworkApi, AppReviewApi, PushNotificationsApi, HealthQuantitySample, HealthDataOptions, HealthDataResult, HealthWorkoutLocation, HealthWorkout, HealthWorkoutResult, HealthWorkoutQuery, HealthWorkoutSample, HealthDailyValue, HealthSampleQuery, HealthHeartRateQuery, HealthHeartRateSample, HealthSleepInterval, HealthMindfulSession, HealthMindfulSessionResult, HealthMindfulSessionQuery, HealthMindfulSample, HealthHeartRateUpdatesOptions, HealthAuthorizationOptions, HealthApi, LiveActivityState, LiveActivityOptions, LiveActivitiesApi, WatchConnectivityApi, HapticStyle, HapticNotificationType, PermissionType, PermissionStatus, BiometricType, AppState, HapticKind, MusicAuthorization, MusicPlaybackState, MusicMethod, HeartRateAuthorization, BluetoothState, HeartRateConnection, HeartRateMethod, HealthDataType, HealthDailyType, HealthSampleType, HealthWorkoutType, HealthWorkoutActivity, HealthSleepStage, HealthReadMethod, storage, crypto };
|
|
2040
2055
|
export { NativeTab } from 'craft-native/mobile';
|
|
2041
2056
|
export { NativeTabBarOptions } from 'craft-native/mobile';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{appReview as
|
|
1
|
+
import{appReview as Jn,biometrics as De,brightness as be,camera as ve,deepLinks as Mt,device as Q,haptics as ye,health as se,heartRate as k,keepAwake as Nt,lifecycle as Zn,liveActivities as _e,location as H,music as F,network as Ht,notifications as Se,permissions as le,pushNotifications as Be,secureStorage as we,share as Dt,speech as Fe,snapshots as xe,splash as er,watchConnectivity as ce}from"craft-native/mobile";var kr=2500;function R(){if(typeof window>"u")return;return window}function V(){let e=R()?.craft;return e&&typeof e==="object"?e:void 0}function $t(){return typeof navigator>"u"?"":navigator.userAgent||""}function ee(){let e=R();if(!e)return!1;if(e.CraftAndroid)return!0;let t=V()?.platform;if(t==="ios"||t==="android")return!0;return Boolean(e.webkit?.messageHandlers?.craft)&&/iPhone|iPad|iPod/.test($t())}function ue(){let e=R();if(!e||e.craft)return!1;return ee()||Boolean(e.webkit?.messageHandlers?.craft)}function X(e=15000){let t=R();if(t?.craft)return Promise.resolve(!0);if(!t||!ue())return Promise.resolve(!1);return new Promise((n)=>{let r=()=>{clearTimeout(o),t.removeEventListener("craftReady",r),n(Boolean(t.craft))},o=setTimeout(r,e);t.addEventListener("craftReady",r)})}function Kt(e,t){if(!e)return null;let n=t.split("."),r=e;for(let i of n.slice(0,-1))if(r=r?.[i],!r||typeof r!=="object"&&typeof r!=="function")return null;let o=r?.[n[n.length-1]];return typeof o==="function"?o.bind(r):null}function M(e){return Kt(V(),e)}async function jt(e,t=2500){let n=M(e);if(n||!ue())return n;return await X(t),M(e)}async function v(e,t,n,r={}){let o=await jt(e,r.timeoutMs);if(!o)return n();try{return await o(...t)}catch(i){if(r.fallbackOnError)return n();throw i}}async function p(e,t=2500){if(ue())await X(t);return e()}function Y(e,t=2500){let n,r=!1;if(!ue())n=e();else X(t).then(()=>{if(!r)n=e()});return()=>{if(r=!0,typeof n==="function")n()}}function _(e,t){let n=R();if(!n)return()=>{};let r=(o)=>t(o.detail??{});return n.addEventListener(e,r),()=>n.removeEventListener(e,r)}var Ue="native-dialog-styles",qt=`
|
|
2
2
|
.native-dialog { position: fixed; inset: 0; z-index: 2147483000; font-size: var(--native-font-size, 17px); font-family: var(--native-font-family, -apple-system, system-ui, sans-serif); -webkit-tap-highlight-color: transparent; }
|
|
3
3
|
.native-dialog-backdrop { position: absolute; inset: 0; background: rgb(0 0 0 / 0.3); opacity: 0; transition: opacity 220ms ease; }
|
|
4
4
|
.native-dialog--menu .native-dialog-backdrop { background: rgb(0 0 0 / 0.12); -webkit-backdrop-filter: blur(14px) saturate(140%); backdrop-filter: blur(14px) saturate(140%); }
|
|
@@ -52,4 +52,4 @@ import{appReview as Xn,biometrics as De,brightness as be,camera as ve,deepLinks
|
|
|
52
52
|
.native-dialog-group, .native-menu { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--native-dialog-solid, rgb(242 242 247)); }
|
|
53
53
|
.dark .native-dialog-group, .dark .native-menu { background: var(--native-dialog-solid-dark, rgb(44 44 46)); }
|
|
54
54
|
}
|
|
55
|
-
`;function Ke(){return A()?.document}function zt(e){if(e.getElementById(Ue))return;let t=e.createElement("style");t.id=Ue,t.textContent=qt,(e.head??e.documentElement).appendChild(t)}var Gt=0;function I(e,t,n,r){let o=e.createElement(t);if(o.className=n,r!==void 0)o.textContent=r;return o}function $e(){return A()?.stx?.overlays}var Yt=0;function je(e,t,n,r){zt(e);let o=A(),i=`native-dialog-layer-${++Yt}`,a=I(e,"div",`native-dialog native-dialog--${t}`);return a.setAttribute("data-native-dialog",t),a.appendChild(I(e,"div","native-dialog-backdrop")),new Promise((s)=>{let l=!1,m=(c)=>{if(l)return;l=!0,a.classList.remove("is-open"),$e()?.close(i),setTimeout(()=>a.remove(),260),s(c)},f=n({root:a,settle:m});a.appendChild(f),e.body.appendChild(a),$e()?.open(i,{panel:f,root:a,onEscape:()=>m(r())});let d=o;(typeof d?.requestAnimationFrame==="function"?(c)=>d.requestAnimationFrame(()=>d.requestAnimationFrame(c)):(c)=>setTimeout(c,16))(()=>{if(!l)a.classList.add("is-open")})})}function ke(e){let t=Ke();if(!t?.body)return Promise.resolve(null);let n=`native-dialog-${++Gt}`,r=e.actions.find((a)=>a.style==="cancel"),o=e.variant==="sheet"?e.actions.filter((a)=>a.style!=="cancel"):e.actions,i=e.variant==="sheet"?r??{id:"__cancel",title:e.cancelLabel||"Cancel",style:"cancel"}:void 0;return je(t,e.variant,({root:a,settle:s})=>{let l=(c)=>c.style==="cancel"?null:c.id,m=I(t,"div","native-dialog-panel");m.setAttribute("role","alertdialog"),m.setAttribute("aria-modal","true"),m.tabIndex=-1;let f=I(t,"div","native-dialog-group");if(e.title||e.message){let c=I(t,"div","native-dialog-header");if(e.title){let p=I(t,"p","native-dialog-title",e.title);p.id=`${n}-title`,c.appendChild(p),m.setAttribute("aria-labelledby",p.id)}if(e.message){let p=I(t,"p","native-dialog-message",e.message);p.id=`${n}-message`,c.appendChild(p),m.setAttribute("aria-describedby",p.id)}f.appendChild(c)}let d=I(t,"div","native-dialog-actions");if(e.variant==="alert"&&o.length===2)d.classList.add("is-row");for(let c of o){let p=I(t,"button",`native-dialog-action${c.style==="destructive"?" is-destructive":""}${c.style==="cancel"?" is-cancel":""}`,c.title);p.type="button",p.setAttribute("data-action-id",c.id),p.addEventListener("click",()=>s(l(c))),d.appendChild(p)}if(f.appendChild(d),m.appendChild(f),i){let c=I(t,"div","native-dialog-group"),p=I(t,"button","native-dialog-action is-cancel",i.title);p.type="button",p.setAttribute("data-action-id",i.id),p.addEventListener("click",()=>s(null)),c.appendChild(p),m.appendChild(c)}let g=a.querySelector(".native-dialog-backdrop");if(e.variant==="sheet")g?.addEventListener("click",()=>s(null));return m},()=>{if(e.variant==="sheet")return null;if(r)return null;return o.length===1?o[0].id:null})}async function qe(e){await ke({variant:"alert",title:e.title,message:e.message,actions:[{id:"ok",title:e.okLabel||"OK"}]})}async function ze(e){return await ke({variant:"alert",title:e.title,message:e.message,actions:[{id:"cancel",title:e.cancelLabel||"Cancel",style:"cancel"},{id:"confirm",title:e.confirmLabel||"OK",style:e.destructive?"destructive":"default"}]})==="confirm"}function Ge(e){return ke({variant:"sheet",title:e.title,message:e.message,actions:e.actions,cancelLabel:e.cancelLabel})}function Vt(e,t,n){let i=Math.max(12,Math.min(e.x,n.width-t.width-12)),a=e.y+e.height+8,s=a+t.height<=n.height-12,l=e.y-8-t.height,m=s||l<12?Math.max(12,Math.min(a,n.height-t.height-12)):l,f=e.x+e.width/2>n.width/2?"right":"left";return{top:m,left:i,origin:`${s||l<12?"top":"bottom"} ${f}`}}function Ye(e){let t=Ke();if(!t?.body)return Promise.resolve(null);let n=A();return je(t,"menu",({root:r,settle:o})=>{let i=I(t,"div","native-menu native-dialog-panel");if(i.setAttribute("role","menu"),e.title)i.appendChild(I(t,"p","native-menu-title",e.title)),i.setAttribute("aria-label",e.title);for(let a of e.items){let s=I(t,"button",`native-menu-item${a.destructive?" is-destructive":""}`);if(s.type="button",s.setAttribute("role","menuitem"),s.setAttribute("data-action-id",a.id),a.disabled)s.disabled=!0;if(s.appendChild(I(t,"span","native-menu-label",a.title)),a.icon){let l=I(t,"i",`native-menu-icon ${a.icon}`);l.setAttribute("aria-hidden","true"),s.appendChild(l)}s.addEventListener("click",()=>o(a.id)),i.appendChild(s)}return r.querySelector(".native-dialog-backdrop")?.addEventListener("click",()=>o(null)),queueMicrotask(()=>{let a=i.getBoundingClientRect?.(),s=Vt(e.anchor,{width:a?.width||248,height:a?.height||e.items.length*44},{width:n?.innerWidth||390,height:n?.innerHeight||844});i.style.top=`${s.top}px`,i.style.left=`${s.left}px`,i.style.setProperty("--native-menu-origin",s.origin)}),i},()=>null)}var Je=()=>!0,P=()=>!1,_=()=>null;function Ve(){return A()?.navigator??(typeof navigator>"u"?void 0:navigator)}function Oe(e){return{x:Math.round(e.x??e.left??0),y:Math.round(e.y??e.top??0),width:Math.round(e.width),height:Math.round(e.height)}}var te={alert:(e)=>b("dialog.alert",[e],()=>qe(e),{fallbackOnError:!0}).then(()=>{}),confirm:(e)=>b("dialog.confirm",[e],()=>ze(e),{fallbackOnError:!0}).then(Boolean),actionSheet:async(e)=>{let t={...e,anchor:e.anchor?Oe(e.anchor):void 0},n=await b("dialog.actionSheet",[t],()=>Ge(e),{fallbackOnError:!0});if(typeof n!=="string")return null;return e.actions.find((r)=>r.id===n)?.style==="cancel"?null:n}};function Pr(){return(e)=>te.actionSheet(e)}async function Lr(e){if((e.style??(e.destructive?"sheet":"alert"))==="alert")return te.confirm(e);return await te.actionSheet({title:e.title,message:e.message,anchor:e.anchor,actions:[{id:"confirm",title:e.confirmLabel||"OK",style:e.destructive?"destructive":"default"},{id:"cancel",title:e.cancelLabel||"Cancel",style:"cancel"}]})==="confirm"}var Pe={show:async(e)=>{let t={title:e.title,anchor:Oe(e.anchor),items:e.items.map(({id:r,title:o,symbol:i,destructive:a,disabled:s})=>({id:r,title:o,symbol:i,destructive:a,disabled:s}))},n=await b("contextMenu.show",[t],()=>Ye(e),{fallbackOnError:!0});return typeof n==="string"?n:null}};function Cr(e,t){return Pe.show({...t,anchor:Oe(e.getBoundingClientRect())})}function Qt(e,t){let n=A();if(!n)return{cancelled:!0};if(typeof n.craft?.openURL==="function")return Promise.resolve(n.craft.openURL(e)).catch(()=>{}),{cancelled:!1};if(t.mode==="auth")return n.location?.assign(e),{cancelled:!1};if(!(typeof n.open==="function"?n.open(e,"_blank","noopener"):null))n.location?.assign(e);return{cancelled:!1}}var Ze={open:async(e,t={})=>{let n=await b("browser.open",[e,t],()=>Qt(e,t),{fallbackOnError:!0});if(!n||typeof n!=="object")return{cancelled:!1};let{url:r,cancelled:o}=n;return typeof r==="string"?{url:r,cancelled:Boolean(o)}:{cancelled:Boolean(o)}}},Ee=new Map,Te=new Map;function Qe(e,t){return`${e}|${t.pointSize??""}|${t.weight??""}|${t.color??""}|${t.scale??""}`}var et={isAvailable:()=>C("symbols.image")!==null,image:(e,t={})=>{let n=Qe(e,t),r=Ee.get(n);if(r)return r;let o=b("symbols.image",[e,t],_).then((i)=>typeof i==="string"&&i.startsWith("data:")?i:null,_).then((i)=>(Te.set(n,i),i));return Ee.set(n,o),o},cached:(e,t={})=>Te.get(Qe(e,t)),clearCache:()=>{Ee.clear(),Te.clear()}},de={setStyle:(e)=>b("statusBar.setStyle",[e],P,{fallbackOnError:!0}).then((t)=>t!==!1)},ne={setUnderPageColor:(e)=>b("chrome.setUnderPageColor",[e],P,{fallbackOnError:!0}).then((t)=>t!==!1),setKeyboardAccessory:(e)=>b("chrome.setKeyboardAccessory",[e],P,{fallbackOnError:!0}).then((t)=>t!==!1)},U={isAvailable:()=>C("refresh.enable")!==null,enable:(e)=>b("refresh.enable",[e??{}],P,{fallbackOnError:!0}).then((t)=>t!==!1),disable:()=>b("refresh.disable",[],P,{fallbackOnError:!0}).then((e)=>e!==!1),end:()=>b("refresh.end",[],P,{fallbackOnError:!0}).then((e)=>e!==!1),onRefresh:(e)=>D("craftRefresh",()=>e())},re={complete:(e)=>b("background.complete",[e],P,{fallbackOnError:!0}).then((t)=>t!==!1)},tt={write:(e)=>b("clipboard.write",[e],async()=>{let t=Ve()?.clipboard;if(!t?.writeText)return!1;return t.writeText(e).then(Je,P)},{fallbackOnError:!0}).then((t)=>t!==!1),read:()=>b("clipboard.read",[],async()=>{let e=Ve()?.clipboard;if(!e?.readText)return null;return e.readText().catch(_)},{fallbackOnError:!0}).then((e)=>typeof e==="string"?e:null)},nt={isAvailable:()=>C("db.query")!==null,query:(e,t=[])=>b("db.query",[e,t],_).then((n)=>Array.isArray(n)?n:null),execute:(e,t=[])=>b("db.execute",[e,t],_).then((n)=>{if(!n||typeof n!=="object")return null;let{rowsAffected:r,lastInsertId:o}=n;return{rowsAffected:Number(r)||0,lastInsertId:Number(o)||0}})};function Ie(e,t){let n=A()?.document;if(!n?.body)return null;let r=n.createElement("a");return r.href=e,r.download=t,r.rel="noopener",r.style.display="none",n.body.appendChild(r),r.click(),r.remove(),t}function Xt(e){let t=A()?.document;if(!t?.body)return Promise.resolve(null);return new Promise((n)=>{let r=t.createElement("input");if(r.type="file",r.style.display="none",e.length)r.accept=e.map((i)=>i.includes("/")||i.startsWith(".")?i:`.${i}`).join(",");let o=(i)=>{r.remove(),n(i)};r.addEventListener("cancel",()=>o(null)),r.addEventListener("change",()=>{let i=r.files?.[0];if(!i)return o(null);let a=new FileReader;a.onload=()=>o({name:i.name,mimeType:i.type||void 0,data:typeof a.result==="string"?a.result:void 0}),a.onerror=()=>o({name:i.name,mimeType:i.type||void 0}),a.readAsDataURL(i)}),t.body.appendChild(r),r.click()})}var rt={openPDF:(e,t=0)=>b("openPDF",[e,t],()=>{let n=A();return Boolean(n?.open?.(e,"_blank","noopener"))}).then((n)=>n!==!1),takeScreenshot:()=>b("takeScreenshot",[],_,{fallbackOnError:!0}).then((e)=>typeof e==="string"?e:null),scanQRCode:()=>b("scanQRCode",[],_).then((e)=>{if(!e||typeof e!=="object")return null;let{type:t,data:n}=e;return typeof n==="string"?{type:String(t??""),data:n}:null},_),pickFile:(e=[])=>b("pickFile",[e],()=>Xt(e)).then((t)=>{if(!t||typeof t!=="object")return null;let n=t;if(typeof n.name!=="string")return null;return{name:n.name,path:typeof n.path==="string"?n.path:void 0,data:typeof n.data==="string"?n.data:void 0,mimeType:typeof n.mimeType==="string"?n.mimeType:void 0}},_),saveFile:(e,t,n)=>b("saveFile",[e,t,n],()=>{if(e.startsWith("data:"))return Ie(e,t);let r=new Blob([e],{type:n||"text/plain"}),o=URL.createObjectURL(r),i=Ie(o,t);return setTimeout(()=>URL.revokeObjectURL(o),1000),i}).then((r)=>typeof r==="string"?r:null),downloadFile:(e,t)=>b("downloadFile",[e,t],()=>Ie(e,t)).then((n)=>typeof n==="string"?n:null)},ot={set:(e)=>b("shortcuts.set",[e.map(({symbol:t,...n})=>t?{...n,iconName:t}:n)],P).then((t)=>t!==!1),clear:()=>b("shortcuts.clear",[],P).then((e)=>e!==!1),onShortcut:(e)=>D("craftShortcut",(t)=>{if(typeof t.type==="string")e(t.type)})},it={update:(e)=>b("widget.update",[e],P).then((t)=>t!==!1),reload:()=>b("widget.reload",[],P).then((e)=>e!==!1)},Jt={portrait:"portrait-primary",portraitUpsideDown:"portrait-secondary",landscape:"landscape",landscapeLeft:"landscape-primary",landscapeRight:"landscape-secondary"};function Xe(){return A()?.screen?.orientation}var at={lock:(e)=>b("lockOrientation",[e],()=>{let t=Xe();return t?.lock?t.lock(Jt[e]).then(Je,P):!1}).then((t)=>t!==!1),unlock:()=>b("unlockOrientation",[],()=>(Xe()?.unlock?.(),!0)).then((e)=>e!==!1)},st={signInWithApple:(e={})=>b("signInWithApple",e.nonce?[{nonce:e.nonce}]:[],_).then((t)=>{if(!t||typeof t!=="object"||typeof t.userId!=="string")return null;return t})},lt={isAvailable:()=>C("iap.purchase")!==null,products:(e)=>b("iap.getProducts",[e],()=>[]).then((t)=>Array.isArray(t)?t:[]),purchase:(e)=>b("iap.purchase",[e],_).then((t)=>t&&typeof t==="object"?t:null,(t)=>{if(/cancel/i.test(String(t?.message??t)))return null;throw t}),restore:()=>b("iap.restore",[],()=>[]).then((e)=>Array.isArray(e)?e:[])};import{storage as W}from"craft-native/mobile";function ct(){return G()?.capabilities?.storageCompareAndSet===!0&&W.supportsCompareAndSet?.()===!0}function ut(){return G()?.capabilities?.storageSetIfAbsent===!0&&W.supportsSetIfAbsent?.()===!0}var dt={supportsCompareAndSet:ct,supportsSetIfAbsent:ut,get:(e)=>u(()=>W.get(e)),set:(e,t)=>u(()=>W.set(e,t)),remove:(e)=>u(()=>W.remove(e)),clear:()=>u(()=>W.clear()),keys:()=>u(()=>W.keys()),setIfAbsent:(e,t)=>u(()=>{if(!ut())throw Object.assign(Error("This host or adapter cannot create storage atomically"),{code:"STORAGE_SET_IF_ABSENT_UNSUPPORTED"});return W.setIfAbsent(e,t)}),compareAndSet:(e,t,n)=>u(()=>{if(!ct())throw Object.assign(Error("This host or adapter cannot compare storage atomically"),{code:"STORAGE_COMPARE_AND_SET_UNSUPPORTED"});return W.compareAndSet(e,t,n)})};import{crypto as Zt}from"craft-native/mobile";var pt={randomUUID:()=>u(()=>Zt.randomUUID())};var en=["authorized","denied","notDetermined","restricted","unsupported"];function pe(){let e=G(),t=e?.scheduledWorkouts;if(!t||typeof t!=="object"||e?.capabilities?.scheduledWorkouts!==!0)return;return t}function tn(){return Object.assign(Error("unsupported"),{code:"UNSUPPORTED"})}function ft(e){return en.includes(e)?e:"unsupported"}function nn(e){if(!e||typeof e!=="object")return null;let t=e;if(typeof t.id!=="string"||!t.id||typeof t.date!=="string"||!/^\d{4}-\d{2}-\d{2}$/.test(t.date))return null;let n={id:t.id.toLowerCase(),date:t.date,complete:t.complete===!0};if(typeof t.hour==="number"&&Number.isFinite(t.hour))n.hour=t.hour;if(typeof t.minute==="number"&&Number.isFinite(t.minute))n.minute=t.minute;return n}function X(e,t,...n){return u(async()=>{let r=pe();if(typeof r?.[e]!=="function")throw tn();return t(await r[e](...n))})}var mt={isAvailable:()=>typeof pe()?.isSupported==="function",supports:(e)=>typeof pe()?.[e]==="function",isSupported:()=>u(async()=>{let e=pe();if(typeof e?.isSupported!=="function")return!1;try{return await e.isSupported()===!0}catch{return!1}}),authorization:()=>X("authorization",ft),requestAuthorization:()=>X("requestAuthorization",ft),list:()=>X("list",(e)=>Array.isArray(e)?e.map(nn).filter((t)=>t!==null):[]),schedule:(e)=>{if(!e||typeof e!=="object"||typeof e.id!=="string")return Promise.reject(Object.assign(Error("schedule needs a plan with an id"),{code:"INVALID_ARGUMENT"}));return X("schedule",(t)=>{let n=t&&typeof t==="object"?t:{},r={id:(typeof n.id==="string"?n.id:e.id).toLowerCase()};if(Array.isArray(n.droppedAlerts)&&n.droppedAlerts.length)r.droppedAlerts=n.droppedAlerts.filter((o)=>typeof o==="string");return r},e)},remove:(e)=>X("remove",(t)=>t===!0,e),removeAll:()=>X("removeAll",(e)=>typeof e==="number"&&Number.isFinite(e)?e:0)};function Kr(e,t){let n=t.delay??500,r=t.tolerance??10,o=null,i=null,a=!1,s=()=>{if(o)clearTimeout(o);if(o=null,i&&!a)t.onPressEnd?.();i=null},l=(g)=>{let c=g;if(c.button!==void 0&&c.button!==0)return;a=!1,i={x:c.clientX,y:c.clientY},t.onPressStart?.(),o=setTimeout(()=>{if(o=null,!i)return;a=!0,t.onLongPress({...i}),i=null},n)},m=(g)=>{if(!i)return;let c=g;if(Math.hypot(c.clientX-i.x,c.clientY-i.y)>r)s()},f=(g)=>{if(!a)return;a=!1,g.preventDefault(),g.stopPropagation()},d=(g)=>g.preventDefault();return e.addEventListener("pointerdown",l),e.addEventListener("pointermove",m),e.addEventListener("pointerup",s),e.addEventListener("pointercancel",s),e.addEventListener("pointerleave",s),e.addEventListener("click",f,!0),e.addEventListener("contextmenu",d),()=>{s(),e.removeEventListener("pointerdown",l),e.removeEventListener("pointermove",m),e.removeEventListener("pointerup",s),e.removeEventListener("pointercancel",s),e.removeEventListener("pointerleave",s),e.removeEventListener("click",f,!0),e.removeEventListener("contextmenu",d)}}function rn(e,t,n){if(n<=1||t.width<=0)return 0;let r=Math.floor((e-t.left)/t.width*n);return Math.max(0,Math.min(n-1,r))}function jr(e,t){let n=null,r=null,o=!1,i=0,a=(c)=>{let p=e.getBoundingClientRect();return rn(c,{left:p.left+2,width:p.width-4},t.count())},s=(c)=>{let p=c;if(p.button!==void 0&&p.button!==0)return;let v=a(p.clientX);if(v!==t.selected())return;n=v,i=v,o=!1,r=p.pointerId;try{e.setPointerCapture?.(p.pointerId)}catch{}t.onPress?.(!0)},l=(c)=>{if(n===null)return;let p=a(c.clientX);if(p===i)return;o=!0,i=p,t.onScrub(p)},m=(c)=>{if(n===null)return;if(r!==null)try{e.releasePointerCapture?.(r)}catch{}if(t.onPress?.(!1),c&&o)t.onCommit(i);else if(o)t.onScrub(n);n=null,r=null},f=(c)=>{if(!o)return;o=!1,c.preventDefault(),c.stopPropagation()},d=()=>m(!0),g=()=>m(!1);return e.addEventListener("pointerdown",s),e.addEventListener("pointermove",l),e.addEventListener("pointerup",d),e.addEventListener("pointercancel",g),e.addEventListener("click",f,!0),()=>{e.removeEventListener("pointerdown",s),e.removeEventListener("pointermove",l),e.removeEventListener("pointerup",d),e.removeEventListener("pointercancel",g),e.removeEventListener("click",f,!0)}}function qr(e,t,n){if(n<=0)return null;switch(e){case"ArrowRight":case"ArrowDown":return(t+1)%n;case"ArrowLeft":case"ArrowUp":return(t-1+n)%n;case"Home":return 0;case"End":return n-1;default:return null}}function zr(e,t){e.querySelectorAll('[role="tab"]')[t]?.focus()}function Gr(e){let t=(n)=>{if(!n.target?.closest?.("[data-native-pressable]"))return;let o=C("haptics.prepare");if(o)Promise.resolve().then(()=>o("impact")).catch(()=>{})};return e.addEventListener("touchstart",t,{passive:!0,capture:!0}),()=>e.removeEventListener("touchstart",t,{capture:!0})}import{BugHQClient as on}from"@bughq/sdk";import{crashReporter as J}from"craft-native/mobile";var M=null;function an(e){if(e.type!=="http")return!0;let t=e.data??{},n=typeof t.status==="number"?t.status:0;return t.error===!0||n>=400||n===0}function gt(){return J.isAvailable()}function sn(e){return async(t)=>{if(!gt())return!e;return J.capture(t)}}var Jr={start(e={}){if(M)return M;let t=ee()||gt();if(!t&&!e.key&&!e.dsn)return null;let n=e.beforeBreadcrumb;return M=new on({framework:"stacks-mobile",sdkName:"bughq.stacks.mobile",autoInstrument:{navigation:!0,fetch:!0,xhr:!0},...e,heartbeat:t?!1:e.heartbeat,transport:t?sn(Boolean(e.key||e.dsn)):void 0,beforeBreadcrumb(r){if(!an(r))return null;let o=n?n(r):r;if(o===null)return null;let i=o||r;if(t)J.addBreadcrumb(i);return i}}),M},async setUser(e){let t=e===null||e===void 0||e===""?null:String(e);M?.setUser(t===null?null:{id:t}),await J.setUser(t)},capture(e,t){M?.captureException(e,t)},addBreadcrumb(e){if(M)M.addBreadcrumb(e);else J.addBreadcrumb(e)},async flush(){await Promise.all([M?.flush(),J.flush()])},client(){return M},stop(){M?.close(),M=null}};function Le(e){let t=A();try{return Boolean(t?.matchMedia?.(e).matches)}catch{return!1}}function ht(e){return e!==null&&e!==void 0&&e!=="false"&&e!=="0"}function bt(){let e=A()?.document?.documentElement,t=Number.parseFloat(e?.style?.getPropertyValue("--craft-font-scale")||"");return{fontScale:Number.isFinite(t)&&t>0?t:1,reduceMotion:ht(e?.getAttribute("data-craft-reduce-motion"))||Le("(prefers-reduced-motion: reduce)"),reduceTransparency:ht(e?.getAttribute("data-craft-reduce-transparency"))||Le("(prefers-reduced-transparency: reduce)"),colorScheme:e?.classList?.contains("dark")||Le("(prefers-color-scheme: dark)")?"dark":"light"}}function ln(e){let t=bt(),n=Number(e?.fontScale);return{contentSizeCategory:typeof e?.contentSizeCategory==="string"?e.contentSizeCategory:void 0,fontScale:Number.isFinite(n)&&n>0?n:t.fontScale,reduceMotion:typeof e?.reduceMotion==="boolean"?e.reduceMotion:t.reduceMotion,reduceTransparency:typeof e?.reduceTransparency==="boolean"?e.reduceTransparency:t.reduceTransparency,colorScheme:e?.colorScheme==="dark"||e?.colorScheme==="light"?e.colorScheme:t.colorScheme}}function vt(e,t={}){if(t.immediate!==!1)e(bt());return D("craftAppearance",(n)=>e(ln(n)))}function no(e){return D("craftResume",(t)=>e({backgroundedMs:Number(t.backgroundedMs)||0}))}function ro(e){return D("craftMemoryWarning",()=>e())}function yt(e){return(t)=>{Promise.resolve().then(()=>e(t)).then(()=>re.complete(!0),()=>re.complete(!1))}}function oo(e){let t=yt(e);return D("craftSilentPush",(n)=>t(n.payload??{}))}function io(e){let t=yt(()=>e());return D("craftBackgroundRefresh",()=>t(void 0))}import{haptics as cn}from"craft-native/mobile";function Ce(){if(typeof window>"u")return;return window}function oe(e=Ce()){if(!e)return 0;if(typeof e.scrollY==="number")return e.scrollY;if(typeof e.scrollTop==="number")return e.scrollTop;return e.document?.scrollingElement?.scrollTop??0}function un(e,t=Ce()){if(!t)return()=>{};let n=!1,r=typeof requestAnimationFrame==="function"?requestAnimationFrame:(i)=>setTimeout(i,16),o=()=>{if(n)return;n=!0,r(()=>{n=!1,e(oe(t))})};return e(oe(t)),t.addEventListener("scroll",o,{passive:!0}),()=>t.removeEventListener("scroll",o)}function dn(e,t){let n=Math.max(0,-e),r=e<=0?Math.max(0,t)*0.5:0;return Math.round(Math.max(n,r))}function lo(e){let t=e.host??Ce();if(!t)return()=>{};let n=e.threshold??72,r=null,o=!1,i=!1,a=typeof requestAnimationFrame==="function"?requestAnimationFrame:(v)=>setTimeout(v,16),s=null,l=(v)=>{s=null,e.onPull?.(v,o,{bounce:Math.min(v,Math.max(0,-oe(t)))})},m=(v)=>{let k=s!==null;if(s=v,k)return;a(()=>{if(s!==null)l(s)})},f=(v)=>{let k=v.touches?.[0];return k?k.clientY:null},d=(v)=>{if(i||oe(t)>0)return;r=f(v),o=!1},g=(v)=>{if(r===null)return;let k=f(v);if(k===null)return;let F=dn(oe(t),k-r);if(!o&&F>=n)o=!0,Promise.resolve(cn.impact("medium")).catch(()=>{});else if(o&&F<n*0.8)o=!1;m(F)},c=async()=>{if(r===null)return;if(r=null,!o){l(0);return}o=!1,i=!0,l(n);try{await e.onRefresh()}finally{i=!1,l(0)}},p=()=>{if(r===null)return;r=null,o=!1,l(0)};return t.addEventListener("touchstart",d,{passive:!0}),t.addEventListener("touchmove",g,{passive:!0}),t.addEventListener("touchend",c),t.addEventListener("touchcancel",p),()=>{s=null,t.removeEventListener("touchstart",d),t.removeEventListener("touchmove",g),t.removeEventListener("touchend",c),t.removeEventListener("touchcancel",p)}}function pn(e,t=52){let n=Math.max(1,t),r=Math.min(1,Math.max(0,e/n)),o=e<0?1+Math.min(0.1,-e/600):1;return{progress:Math.round(r*1000)/1000,stretch:Math.round(o*1000)/1000}}function co(e,t={}){let n="",r=()=>t.title?.offsetHeight||t.height||52;return un((o)=>{let i=pn(o,r()),a=`${i.progress}|${i.stretch}`;if(a===n)return;n=a,e.style.setProperty("--native-nav-progress",String(i.progress)),e.style.setProperty("--native-nav-stretch",String(i.stretch)),t.onChange?.(i)},t.host)}function uo(e){if(!e||typeof window>"u")return;let t=window.document?.querySelector(e);return t?t:void 0}function xt(){if(typeof window>"u")return;return window}var St="__stxPushed",fn="__stxScroll";function mn(e=xt()){let t=e?.history?.state;if(t===null||t===void 0)return!1;if(typeof t!=="object")return!0;let n=t;if(St in n)return n[St]===!0;return!(fn in n)}function fo(e=xt()){if(!mn(e))return!1;return e.history.back(),!0}function mo(e,t,n=50){let r=e[e.length-1];if(e.length>=2&&e[e.length-2].path===t)e.pop();else if(!r||r.path!==t)e.push({path:t,title:""});if(e.length>n)e.splice(0,e.length-n);return{current:e[e.length-1],previous:e[e.length-2]??null}}function go(e,t,n=12){let r=e?.title.trim()??"";return r&&r.length<=n?r:t}function ho(){if(typeof window>"u")return[];let e=window;return e.__stacksNavTrail??=[]}function gn(e){try{let t=new URL(e,"http://local");return`${t.pathname}${t.search}`}catch{return e}}function bo(){if(typeof window>"u")return;let e=window.stxRouter;if(typeof e?.screens!=="function")return;let t=e.screens(),n=t.find((o)=>o.active);if(!n)return;let r=t.filter((o)=>o.tab===n.tab&&o.depth<n.depth);if(!r.length)return null;return gn(r.reduce((o,i)=>i.depth>o.depth?i:o).url)}function vo(e=typeof window>"u"?void 0:window){let t=e?.stxRouter;if(typeof t?.screens!=="function"||typeof e?.history?.go!=="function")return!1;let n=t.screens(),r=n.find((a)=>a.active);if(!r)return!1;let o=n.filter((a)=>a.tab===r.tab&&a.depth<r.depth);if(!o.length)return!1;let i=o.reduce((a,s)=>s.depth<a.depth?s:a);return e.history.go(i.depth-r.depth),!0}function yo(e,t){for(let n=e.length-1;n>=0;n--)if(e[n].path===t)return e[n];return null}function hn(e,t=bn()){let n;try{n=new URL(e)}catch{return null}let r=`${n.search}${n.hash}`;if(n.protocol==="http:"||n.protocol==="https:"){if(!t||n.origin!==t)return null;return`${n.pathname||"/"}${r}`}return`${`/${[n.host,n.pathname.replace(/^\/+/,"")].filter(Boolean).join("/")}`}${r}`}function bn(){if(typeof window>"u")return;return window.location?.origin}var wt="stacks-mobile-deep-link";function So(e,t){let n=(r)=>{let o=hn(r);if(o)e(o)};return t.getInitialURL().then((r)=>{if(!r)return;try{if(sessionStorage.getItem(wt)===r)return;sessionStorage.setItem(wt,r)}catch{}n(r)}).catch(()=>{}),t.onLink((r,o)=>{if(o?.initial)return;n(r)})}var xo=5000;function vn(e,t,n=5000){let r=t.filter((o)=>Number.isFinite(o.timestamp)&&Number.isFinite(o.bpm)&&o.bpm>0).slice().sort((o,i)=>o.timestamp-i.timestamp);if(!r.length)return e.slice();return e.map((o)=>{let i=0,a=r.length;while(i<a){let f=i+a>>1;if(r[f].timestamp<o.timestamp)i=f+1;else a=f}let s=r[i],l=r[i-1],m=!s?l:!l?s:o.timestamp-l.timestamp<=s.timestamp-o.timestamp?l:s;if(!m||Math.abs(m.timestamp-o.timestamp)>n)return o;return{...o,heartRate:Math.round(m.bpm)}})}var yn=6371008.8,Sn=30,wn=Sn;function xn(e,t){let n=Math.PI/180,r=(t.latitude-e.latitude)*n,o=(t.longitude-e.longitude)*n,i=Math.sin(r/2)**2+Math.cos(e.latitude*n)*Math.cos(t.latitude*n)*Math.sin(o/2)**2;return 2*yn*Math.asin(Math.min(1,Math.sqrt(i)))}function An(e,t=25){let n=new Set;return e.filter((r)=>Number.isFinite(r.latitude)&&Number.isFinite(r.longitude)&&Number.isFinite(r.timestamp)&&Math.abs(r.latitude)<=90&&Math.abs(r.longitude)<=180&&Number.isFinite(r.accuracy)&&r.accuracy>=0&&r.accuracy<=t).sort((r,o)=>r.timestamp-o.timestamp).filter((r)=>{if(n.has(r.timestamp))return!1;return n.add(r.timestamp),!0})}function Me(e,t={}){let n=An(e,t.maxAccuracyM??25),r=t.paceWindowS??30,o=[],i=0,a=0,s=null;for(let d of n){let g=o[o.length-1],c=s?(d.timestamp-s.timestamp)/1000:0;if(s=d,!g){o.push({fix:d,cumM:0});continue}if(c>wn){o.push({fix:d,cumM:i});continue}let p=(d.timestamp-g.fix.timestamp)/1000,v=xn(g.fix,d),k=Math.min(10,Math.max(3,g.fix.accuracy,d.accuracy));if(v<k)continue;if(i+=v,p>0&&v/p>=0.5)a+=p;o.push({fix:d,cumM:i})}let l=o[o.length-1],m=null,f=null;if(l&&n.at(-1).timestamp-l.fix.timestamp<=r*1000){let d=l.fix.timestamp-r*1000,g=o.find((v)=>v.fix.timestamp>=d)??l,c=l.cumM-g.cumM,p=(l.fix.timestamp-g.fix.timestamp)/1000;if(c>=20&&p>0)f=c/p,m=p/(c/1000)}return{distanceM:i,movingS:a,paceSPerKm:m,averagePaceSPerKm:i>=50&&a>0?a/(i/1000):null,speedMps:f,accuracyM:n.length?n[n.length-1].accuracy:e.length?e[e.length-1].accuracy??null:null,fixes:n.length}}function Ao(e){if(e==null||e<=0||!Number.isFinite(e)||e>3600)return"–";let t=Math.round(e);return`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`}function Ro(e){return e!=null&&e>0&&Number.isFinite(e)?(e*3.6).toFixed(1):"–"}var At={distanceM:0,movingS:0,paceSPerKm:null,averagePaceSPerKm:null,speedMps:null,accuracyM:null,fixes:0};function ko(e){let t=e.location,n=e.intervalMs??3000,r=At,o=null,i=e.heartRate,a=!1,s=null,l=[],m=()=>typeof document<"u"&&document.visibilityState==="hidden",f=0,d=null,g=Promise.resolve(),c=null,p=!1,v=null;function k(){if(p)throw Object.assign(Error("The recording screen is no longer active"),{code:"RECORDING_CONFLICT"});if(t.supportsRecordingOwnership?.()!==!0)throw Object.assign(Error("This host cannot protect native recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"})}function F(){if(k(),!v)throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});return v}function z(h){let S=g.then(h);return g=S.then(()=>{},()=>{}),S}function Z(){if(d)return d;let h=f,S=v,T=(async()=>{if(k(),!S)throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});let O=await t.readRecording({expectedId:S}),L=Me(O,e);if(h===f&&!p)r=L,e.onUpdate?.(r);return L})().finally(()=>{if(d===T)d=null});return d=T,T}function y(){if(w(),p)return;o=setInterval(()=>{if(!m())Z().catch(()=>{})},n)}function w(){if(o)clearInterval(o);o=null}function x(h,S,T){if(w(),f++,d=null,v=h,s=S,a=S!==null,l=[],r=T,!p)e.onUpdate?.(r)}async function E(h){if(!i||!a||!s||p||i.supportsRecordingOwnership?.()!==!0)return;await h(i,s).catch(()=>{})}return{get stats(){return r},get recordingId(){return v},get heartRateRecordingId(){return s},get heartRate(){return l},start(h){return c=null,z(async()=>{if(k(),h&&t.supportsRecordingIntentIdentity?.()!==!0)throw Object.assign(Error("This host cannot start a registered route identity"),{code:"RECORDING_INTENT_IDENTITY_UNSUPPORTED"});if(h&&(typeof h.recordingId!=="string"||!h.recordingId.trim()))throw Object.assign(Error("A registered recording ID is required"),{code:"INVALID_ARGUMENT"});let S=await t.startRecording({enableHighAccuracy:!0,...e.locationOptions,...h?{recordingId:h.recordingId}:{}});if(!S?.active||typeof S.id!=="string"||!S.id.trim())throw Object.assign(Error("The native recording did not provide an ID"),{code:"RECORDING_CONFLICT"});if(h&&S.id!==h.recordingId)throw Object.assign(Error("The native route did not start with its registered ID"),{code:"RECORDING_CONFLICT"});let T=null;if(!p&&i?.isAvailable()&&i.supportsRecordingOwnership?.()===!0&&(!h||h.heartRateRecordingId&&i.supportsRecordingIntentIdentity?.()===!0))try{let O=await i.startRecording(h?{recordingId:h.heartRateRecordingId}:void 0);if(h&&O.id!==h.heartRateRecordingId)throw Object.assign(Error("The native heart rate did not start with its registered ID"),{code:"RECORDING_CONFLICT"});if(O.active&&typeof O.id==="string"&&O.id.trim())T=O.id}catch{}return x(S.id,T,{...At}),y(),r})},attach(h){return c=null,z(async()=>{if(typeof h?.expectedId!=="string"||!h.expectedId.trim())throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});k();let S=await t.getRecordingState({expectedId:h.expectedId});if(k(),!S?.id)return null;if(S.id!==h.expectedId)throw Object.assign(Error("The recording belongs to another session"),{code:"RECORDING_CONFLICT"});let T=null;if(h.expectedHeartRateId!==void 0){let L=h.expectedHeartRateId;if(typeof L!=="string"||!L.trim())throw Object.assign(Error("A saved heart-rate recording ID is required"),{code:"RECORDING_CONFLICT"});if(!i?.isAvailable()||i.supportsRecordingOwnership?.()!==!0)throw Object.assign(Error("This host cannot protect heart-rate recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"});let Ut=await i.getRecordingState({expectedId:L});if(k(),Ut.id!==L)throw Object.assign(Error("The heart-rate recording belongs to another session"),{code:"RECORDING_CONFLICT"});await i.readRecording({expectedId:L,since:Date.now()}),k(),T=L}let O=await t.readRecording({expectedId:h.expectedId});if(k(),x(h.expectedId,T,Me(O,e)),S.active&&!S.paused)y();return S})},pause(){return z(async()=>{await t.pauseRecording({expectedId:F()}),await E((h,S)=>h.pauseRecording({expectedId:S})),w(),await Z().catch(()=>{})})},resume(){return z(async()=>{await t.resumeRecording({expectedId:F()}),await E((h,S)=>h.resumeRecording({expectedId:S})),y()})},stop(){if(c)return c;let h=z(async()=>{w(),f++;let S=F(),T=await t.stopRecording({expectedId:S});if(T.id!==S)throw Object.assign(Error("The native recording identity changed"),{code:"RECORDING_CONFLICT"});let O=T?.locations??[];if(!p&&i&&a&&s&&i.supportsRecordingOwnership?.()===!0){let L=await i.stopRecording({expectedId:s}).catch(()=>null);a=!1,l=L?.id===s?L.samples:[],O=vn(O,l)}if(r=Me(O,e),!p)e.onUpdate?.(r);return O}).catch((S)=>{if(c===h)c=null;throw S});return c=h,h},dispose(){p=!0,f++,d=null,w()},refresh:Z}}function To(e){return{startedAt:Number.isFinite(e)?e:null,pausedAt:null,pausedMs:0}}function Io(e,t){return e.startedAt===null||e.pausedAt!==null||!Number.isFinite(t)?e:{...e,pausedAt:Math.max(e.startedAt,t)}}function Oo(e,t){return e.pausedAt===null||!Number.isFinite(t)?e:{...e,pausedAt:null,pausedMs:e.pausedMs+Math.max(0,t-e.pausedAt)}}function Po(e,t){if(e.startedAt===null)return 0;let n=((e.pausedAt??t)-e.startedAt-e.pausedMs)/1000;return Number.isFinite(n)?Math.max(0,n):0}var Co=150;function Rn(e,t){let n=Math.PI/180,r=(t.latitude-e.latitude)*n,o=(t.longitude-e.longitude)*n,i=Math.sin(r/2)**2+Math.cos(e.latitude*n)*Math.cos(t.latitude*n)*Math.sin(o/2)**2;return 12742017.6*Math.asin(Math.min(1,Math.sqrt(i)))}function fe(e,t){let n=[...e].sort((r,o)=>r-o);return n[Math.min(n.length-1,Math.floor(t*n.length))]}function Mo(e,t){let n=(e||[]).filter((a)=>Number.isFinite(a?.latitude)&&Number.isFinite(a?.longitude)&&Math.abs(a.latitude)<=90&&Math.abs(a.longitude)<=180),r=n.filter((a)=>a.accuracy!=null).map((a)=>Number(a.accuracy)).filter((a)=>Number.isFinite(a)&&a>=0),o=r.length?fe(r,0.5):Number.POSITIVE_INFINITY,i=0;if(n.length){let a={latitude:fe(n.map((s)=>s.latitude),0.5),longitude:fe(n.map((s)=>s.longitude),0.5)};i=fe(n.map((s)=>Rn(a,s)),0.8)}if(n.length>=10&&i>150&&o<=15)return"outside";if(t<150)return"unsure";if(n.length<3||o>30||i<25)return"indoors";if(i<50&&o>10)return"indoors";return"unsure"}function No(e,t={}){let r=String(e||"").trim().toLowerCase().replace(",",".").match(/^(\d+(?:\.\d*)?|\.\d+)\s*(km|k|m|mi)?$/);if(!r)return null;let o=Number(r[1]),i=r[2]||t.defaultUnit||(o>100?"m":"km"),a=i==="m"?o/1000:i==="mi"?o*1.609344:o;return Number.isFinite(a)&&a>=0&&a<=2000?Math.round(a*1000)/1000:null}var he=new Set,Rt=!1,me=null;function kn(e){return e.isConnected&&e.getClientRects().length>0}function kt(){return[...he].find((e)=>kn(e.element))}function ge(){let e=kt(),t=Boolean(e);if(t===Rt)return;if(Rt=t,t)U.enable(e?.tintColor?{tintColor:e.tintColor}:{});else U.disable()}function En(){let e=kt();if(!e){U.end();return}Promise.resolve().then(()=>e.run()).catch(()=>{}).finally(()=>U.end())}function _o(e,t){let n={element:e,tintColor:t.tintColor,run:t.onRefresh};he.add(n);let r=e.ownerDocument?.defaultView;if(!me){let o=U.onRefresh(En),i=()=>ge();r?.addEventListener("stx:load",i),me=()=>{o(),r?.removeEventListener("stx:load",i)}}return ge(),r?.requestAnimationFrame?.(()=>ge()),()=>{if(he.delete(n),he.size===0)me?.(),me=null;ge()}}var Fo=0.5;function Tn(e,t,n){let r=[];if(n.includes("large")||n.length===0)r.push({name:"large",y:0});if(n.includes("medium"))r.push({name:"medium",y:Math.max(0,Math.round(e-t*0.5))});return r.push({name:"dismiss",y:Math.max(1,e)}),r.sort((o,i)=>o.y-i.y)}function In(e){let{y:t,velocity:n,stops:r}=e,o=r.filter((s)=>s.name!=="dismiss"),i=r.find((s)=>s.name==="dismiss");if(o.length===0)return"dismiss";if(n>0.5)return(r.filter((l)=>l.y>t+1)[0]??i).name;if(n<-0.5){let s=o.filter((l)=>l.y<t-1);return(s[s.length-1]??o[0]).name}let a=o[o.length-1];if(t>a.y+(i.y-a.y)*0.5)return"dismiss";return o.reduce((s,l)=>Math.abs(l.y-t)<Math.abs(s.y-t)?l:s).name}function On(e,t=400){if(e<=0)return 0;return e*t*0.55/(t+e*0.55)}function Wo(e){let{panel:t}=e,n=null,r=[],o=0,i=()=>e.viewport?.()??t.ownerDocument?.defaultView?.innerHeight??800,a=()=>Tn(t.offsetHeight||t.getBoundingClientRect().height,i(),e.detents()),s=(f)=>{let d=f;if(d.button!==void 0&&d.button!==0)return;if(d.target?.closest?.("button, a, input, select, textarea, [role=button]"))return;let g=a().find((c)=>c.name===e.detent())?.y??0;n={y:d.clientY,base:g,pointerId:d.pointerId},o=g,r=[{y:g,t:d.timeStamp}],t.classList.add("is-dragging");try{f.currentTarget?.setPointerCapture?.(d.pointerId)}catch{}},l=(f)=>{if(!n)return;let d=f,g=n.base+d.clientY-n.y;o=g<0?-On(-g):g,r.push({y:o,t:d.timeStamp});while(r.length>2&&d.timeStamp-r[0].t>100)r.shift();t.style.transform=`translateY(${o}px)`;let c=t.offsetHeight||1;t.parentElement?.style.setProperty("--native-sheet-presence",String(Math.max(0,Math.min(1,1-o/c))))},m=(f)=>{if(!n)return;let d=f;n=null;let g=r[0],c=Math.max(1,d.timeStamp-g.t),p=(o-g.y)/c;t.classList.remove("is-dragging"),t.style.transform="",t.parentElement?.style.removeProperty("--native-sheet-presence"),e.onSettle(In({y:o,velocity:p,stops:a()}))};for(let f of e.handles)f.addEventListener("pointerdown",s),f.addEventListener("pointermove",l),f.addEventListener("pointerup",m),f.addEventListener("pointercancel",m);return()=>{for(let f of e.handles)f.removeEventListener("pointerdown",s),f.removeEventListener("pointermove",l),f.removeEventListener("pointerup",m),f.removeEventListener("pointercancel",m)}}function Uo(e){let t=e.ownerDocument;if(e.parentElement===t.body)return()=>{};let n=t.createComment("native-sheet");return e.parentNode?.insertBefore(n,e),t.body.appendChild(e),()=>{if(n.parentNode)n.parentNode.insertBefore(e,n);else e.remove();n.remove()}}var Ne=new WeakMap;function $o(e,t){let n=e.documentElement,r=Ne.get(e)??0;if(!t){let a=Math.max(0,r-1);if(Ne.set(e,a),a===0)n.removeAttribute("data-native-sheet-card");return}if(Ne.set(e,r+1),r>0)return;let o=e.defaultView,i=(o?.scrollY??0)+(o?.innerHeight??800)/2;n.style.setProperty("--native-sheet-card-origin",`${Math.round(i)}px`),n.setAttribute("data-native-sheet-card","")}function Pn(e,t){e.style.setProperty("--native-font-scale",String(t.fontScale)),e.toggleAttribute("data-native-reduce-motion",t.reduceMotion),e.toggleAttribute("data-native-reduce-transparency",t.reduceTransparency)}function Ln(e){let t=e.replace(/\s+/g,"").toLowerCase();return!t||t==="transparent"||/^rgba\(\d+,\d+,\d+,0(\.0+)?\)$/.test(t)||/\/0(\.0+)?\)$/.test(t)}function Cn(e){let t=e.defaultView;if(!t?.getComputedStyle)return null;for(let n of[e.body,e.documentElement]){if(!n)continue;let r=t.getComputedStyle(n).backgroundColor;if(r&&!Ln(r))return r}return null}function Mn(e){if(e.documentElement.classList.contains("dark"))return!0;if(e.documentElement.classList.contains("light"))return!1;return Boolean(e.defaultView?.matchMedia?.("(prefers-color-scheme: dark)").matches)}function zo(e,t={}){let n=t.root??e.documentElement;ne.setKeyboardAccessory(t.keyboardAccessory===!0);let r="",o="",i=()=>{let f=Cn(e);if(f&&f!==r)r=f,ne.setUnderPageColor(f);let d=Mn(e)?"light":"dark";if(d!==o)o=d,de.setStyle(d)},a=vt((f)=>{Pn(n,f),i()}),s=e.defaultView,l=typeof s?.MutationObserver==="function"?new s.MutationObserver(i):null;l?.observe(e.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]});let m=s?.matchMedia?.("(prefers-color-scheme: dark)");return m?.addEventListener?.("change",i),s?.addEventListener("stx:load",i),i(),()=>{a(),l?.disconnect(),m?.removeEventListener?.("change",i),s?.removeEventListener("stx:load",i)}}var Yo=64;var Nn=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Hn=/^(?:0|[1-9]\d*)$/;function Tt(e){let t=[],n=[],r=e&&typeof e==="object"&&!Array.isArray(e)?e:{};for(let[o,i]of Object.entries(r)){let a=i&&typeof i==="object"?i:null;if(!a){n.push(`spotlight kind "${o}" is not an object`);continue}let{slots:s,route:l}=a,m=typeof a.noun==="string"&&a.noun.trim()?a.noun.trim():"Item";if(!Nn.test(o)||o.includes("-slot-")){n.push(`spotlight kind "${o}" is not a usable name: lowercase letters, digits and single dashes, and never "-slot-"`);continue}if(typeof s!=="number"||!Number.isInteger(s)||s<=0||s>64){n.push(`spotlight kind "${o}" needs slots between 1 and 64, not ${String(s)}`);continue}if(typeof l!=="string"||!l.startsWith("/")||!l.includes(":id")){n.push(`spotlight kind "${o}" needs a route starting with "/" and carrying ":id", not ${String(l)}`);continue}t.push({name:o,slots:s,route:l,noun:m})}return{kinds:t,problems:n}}function ae(e,t){return e.find((n)=>n.name===t)??null}function ie(e,t,n){let r=ae(e,t);if(!r||!Number.isInteger(n)||n<0||n>=r.slots)return null;return`${t}-slot-${n}`}function Dn(e,t){if(typeof t!=="string")return null;let n=t.lastIndexOf("-slot-");if(n<=0)return null;let r=t.slice(0,n),o=t.slice(n+6);if(!Hn.test(o))return null;let i=Number(o);return ie(e,r,i)===t?{kind:r,slot:i}:null}function It(e){return e.flatMap((t)=>Array.from({length:t.slots},(n,r)=>`${t.name}-slot-${r}`))}function Vo(e,t){let n=e&&typeof e==="object"?e:{};if(n.enabled===!1)return[];let o=[...(Array.isArray(n.activityTypes)?n.activityTypes.filter((i)=>typeof i==="string"&&i.trim().length>0):[]).map((i)=>i.trim()),...It(Tt(n.kinds).kinds)];return[...new Set(o)].map((i)=>`${t}.${i}`)}function Ot(e,t,n){let r=typeof n.name==="string"?n.name.replace(/\s+/g," ").trim():"";if(!r)return`${ae(e,t)?.noun??"Item"} #${n.id}`;return r.length>120?`${r.slice(0,119).trimEnd()}…`:r}function _n(e,t,n,r,o=Date.now()){let i=ae(e,n);if(!i||!Number.isInteger(r.id)||r.id<=0)return null;let a=t.filter((p)=>p.kind===n),s=Ot(e,n,r),l=a.find((p)=>p.itemId===r.id)??null,m=l?null:Un(a,i.slots),f=l||m!==null?null:$n(a),d=l?.slot??m??f?.slot;if(d===void 0||d===null)return null;let g={kind:n,slot:d,itemId:r.id,title:s,donatedAt:o},c=t.filter((p)=>p.kind!==n||p.slot!==d&&p.itemId!==r.id);return{entries:Pt(e,[...c,g]),entry:g,evicted:f,changed:!l||l.title!==s}}function Bn(e,t,n){let r=e.find((o)=>o.kind===t&&o.itemId===n)??null;return{entries:r?e.filter((o)=>o!==r):[...e],removed:r}}function Fn(e,t,n){let r=Dn(e,n);if(!r)return null;let o=t.find((a)=>a.kind===r.kind&&a.slot===r.slot),i=ae(e,r.kind)?.route;return o&&i?i.replace(":id",String(o.itemId)):null}function Wn(e,t){if(!Array.isArray(t))return[];let n=new Map,r=new Set;for(let o of t){if(!o||typeof o!=="object")continue;let i=o,{kind:a,slot:s,itemId:l,title:m,donatedAt:f}=i;if(typeof a!=="string"||typeof s!=="number"||ie(e,a,s)===null)continue;if(typeof l!=="number"||!Number.isInteger(l)||l<=0)continue;let d=`${a}-slot-${s}`,g=`${a}#${l}`;if(n.has(d)||r.has(g))continue;n.set(d,{kind:a,slot:s,itemId:l,title:typeof m==="string"&&m.trim()?m:Ot(e,a,{id:l}),donatedAt:typeof f==="number"&&Number.isFinite(f)&&f>0?f:0}),r.add(g)}return Pt(e,[...n.values()])}function Pt(e,t){let n=new Map(e.map((r,o)=>[r.name,o]));return[...t].sort((r,o)=>(n.get(r.kind)??0)-(n.get(o.kind)??0)||r.slot-o.slot)}function Un(e,t){let n=new Set(e.map((r)=>r.slot));for(let r=0;r<t;r++)if(!n.has(r))return r;return null}function $n(e){return e.reduce((t,n)=>!t||n.donatedAt<t.donatedAt?n:t,null)}function Kn(){let e=globalThis.craft;return e&&typeof e==="object"?e.siri:void 0}var jn="stacks_spotlight_index",qn=3000;function Qo(e){let t=e.onProblem??((y)=>console.warn(`[spotlight] ${y}`)),n=Array.isArray(e.kinds)?{kinds:[...e.kinds],problems:[]}:Tt(e.kinds);for(let y of n.problems)t(y);let r=e.enabled===!1?[]:n.kinds,o=e.storageKey??jn,i=e.legacyStorageKeys??[],a=e.timeoutMs??qn,s=e.now??(()=>Date.now()),l=e.bridge??Kn,m=null;function f(){try{return typeof localStorage>"u"?null:localStorage}catch{return null}}function d(){if(m)return m;m=[];let y=f();if(!y)return m;try{let w=[o,...i].map((x)=>y.getItem(x)).find((x)=>x);m=w?Wn(r,JSON.parse(w)):[]}catch{m=[]}return m}function g(y){m=y;let w=f();if(!w)return;try{w.setItem(o,JSON.stringify(y));for(let x of i)w.removeItem(x)}catch{}}async function c(y){if(!y)return null;let w;try{return await Promise.race([y,new Promise((x)=>{w=setTimeout(()=>x(null),a)})])}catch{return null}finally{if(w!==void 0)clearTimeout(w)}}let p=Promise.resolve();function v(y){let w=p.then(y,y);return p=w.catch(()=>{return}),w}async function k(y,w){let x=l()?.register;if(!x||r.length===0)return!1;return v(async()=>{let E=_n(r,d(),y,w,s()),h=E&&ie(r,y,E.entry.slot);if(!E||!h)return!1;if(!E.changed)return g(E.entries),!0;let S=await c(x(E.entry.title,h))!==null;if(S)g(E.entries);return S})}async function F(y,w){let x=l()?.remove;if(!x)return!1;return v(async()=>{let{entries:E,removed:h}=Bn(d(),y,w);if(!h)return!1;let S=ie(r,y,h.slot),T=S?await c(x(S))!==null:!1;return g(E),T})}async function z(y,w){let x=ae(r,y)?.slots;if(!x||!l()?.register)return 0;let E=0;for(let h of[...w].slice(0,x).reverse())if(await k(y,h))E++;return E}async function Z(){let y=l()?.remove;if(!y)return g([]),0;return v(async()=>{let w=0;for(let x of d()){let E=ie(r,x.kind,x.slot);if(E&&await c(y(E))!==null)w++}return g([]),w})}return{kinds:r,index:k,sync:z,remove:F,clear:Z,routeFor:(y)=>Fn(r,d(),y),entries:()=>d(),activityTypes:(y)=>It(r).map((w)=>`${y}.${w}`),reset:()=>{m=null}}}var Et=["craftShortcut","craftSiriShortcut"];function Xo(e,t){let n=(r)=>{let o=r.detail,i=typeof o==="string"?o:o&&typeof o==="object"?o.action??o.type:null,a=typeof i==="string"?e.routeFor(i):null;if(a)t(a)};if(typeof globalThis.addEventListener!=="function")return()=>{};for(let r of Et)globalThis.addEventListener(r,n);return()=>{for(let r of Et)globalThis.removeEventListener(r,n)}}import{tabBar as zn}from"craft-native/mobile";var Gn=zn;function Yn(e){return Array.from(e.querySelectorAll("a[data-native-tab]")).map((t)=>({id:t.getAttribute("href")||"",title:t.getAttribute("data-native-tab")||t.getAttribute("aria-label")||"",symbol:t.getAttribute("data-native-tab-symbol")||"circle",badge:(t.querySelector(".native-tab-badge")?.textContent||"").trim(),current:t.hasAttribute("data-stx-nav-current")||t.classList.contains("is-active")})).filter((t)=>t.id&&t.title)}function Vn(e){return{tabs:e.map(({id:n,title:r,symbol:o,badge:i})=>i?{id:n,title:r,symbol:o,badge:i}:{id:n,title:r,symbol:o}),selected:e.find((n)=>n.current)?.id}}function Ct(){if(typeof window>"u")return;let e=window.stxRouter;return e&&typeof e==="object"?e:void 0}function Qn(){return typeof Ct()?.selectTab==="function"}function ei(e,t={}){let n=(r)=>{if(Qn()||r.defaultPrevented)return;let o=r.target?.closest?.("a[data-native-tab]");if(!o||!e.contains(o))return;if(!o.hasAttribute("data-stx-nav-current")&&!o.classList.contains("is-active")&&o.getAttribute("aria-current")!=="page")return;r.preventDefault();let i=e.ownerDocument.defaultView;if(t.scrollToTop)t.scrollToTop();else i?.scrollTo?.({top:0,behavior:i.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth"});i?.dispatchEvent(new CustomEvent("stx:tabreselect",{detail:{href:o.getAttribute("href")||""}}))};return e.addEventListener("click",n),()=>e.removeEventListener("click",n)}function Lt(e){let t=e.trim();return/^#[0-9a-f]{6}$/i.test(t)?t:void 0}var He="stacks:tab-bar-cover";function ti(e,t){if(t)e.setAttribute("data-native-covers-tab-bar","");else e.removeAttribute("data-native-covers-tab-bar");e.ownerDocument?.defaultView?.dispatchEvent(new Event(He))}function ni(e,t={}){let n=t.api??Gn;if(!n.isAvailable())return null;let r=t.hidden??(()=>Boolean(e.ownerDocument?.querySelector("[data-native-hide-tab-bar], [data-native-covers-tab-bar]"))),o=typeof getComputedStyle==="function"?getComputedStyle(e):null,i=Lt(o?.getPropertyValue("--native-tab-active")||""),a=Lt(o?.getPropertyValue("--native-tab-active-dark")||""),s="",l=()=>{if(r()){if(s!=="hidden")n.hide();s="hidden";return}let{tabs:g,selected:c}=Vn(Yn(e)),p=JSON.stringify({tabs:g,selected:c});if(p===s)return;let v=s&&s!=="hidden"?JSON.parse(s):null;if(v&&c&&JSON.stringify(v.tabs)===JSON.stringify(g))n.select(c);else n.set(g,{selected:c,tint:i,tintDark:a});s=p},m=typeof MutationObserver==="function"?new MutationObserver(l):null;m?.observe(e,{attributes:!0,attributeFilter:["data-stx-nav-current","class"],childList:!0,subtree:!0,characterData:!0});let f=n.onSelect((g)=>{let c=Ct();if(c?.selectTab){c.selectTab(g);return}Array.from(e.querySelectorAll("a[data-native-tab]")).find((v)=>v.getAttribute("href")===g)?.click()}),d=()=>l();if(typeof window<"u")window.addEventListener("stx:load",d),window.addEventListener("stx:screen-shown",d),window.addEventListener(He,d);return l(),()=>{if(m?.disconnect(),f(),typeof window<"u")window.removeEventListener("stx:load",d),window.removeEventListener("stx:screen-shown",d),window.removeEventListener(He,d);n.hide()}}var er={isAvailable:()=>u(()=>De.isAvailable()),getBiometricType:()=>u(()=>De.getBiometricType()),authenticate:(e)=>u(()=>De.authenticate(e))},tr={takePicture:(e)=>u(()=>ve.takePicture(e)),pickImage:()=>u(()=>ve.pickImage()),pickMultiple:(e)=>u(()=>ve.pickMultiple(e)),isAvailable:()=>u(()=>ve.isAvailable())},nr={getInfo:()=>u(()=>V.getInfo()),getCapabilities:()=>u(()=>V.getCapabilities()),isMobile:()=>V.isMobile(),isIOS:()=>V.isIOS(),isAndroid:()=>V.isAndroid(),getLocale:()=>V.getLocale(),getTimezone:()=>V.getTimezone()},rr=Jn;function K(){return q()?.capabilities.locationRecordingOwnership===!0&&N.supportsRecordingOwnership?.()===!0}function j(){return q()?.capabilities.heartRateRecordingOwnership===!0&&R.supportsRecordingOwnership?.()===!0}function _t(){return K()&&q()?.capabilities.locationRecordingIntentIdentity===!0&&N.supportsRecordingIntentIdentity?.()===!0}function Bt(){return j()&&q()?.capabilities.heartRateRecordingIntentIdentity===!0&&R.supportsRecordingIntentIdentity?.()===!0}function Wt(e,t,n){return u(async()=>{let r=e&&Object.hasOwn(e,"recordingId");if(r){if(!t())throw Object.assign(Error("This host or adapter cannot start a registered recording identity"),{code:"RECORDING_INTENT_IDENTITY_UNSUPPORTED"});if(typeof e.recordingId!=="string"||!e.recordingId.trim())throw Object.assign(Error("A registered recording ID is required"),{code:"INVALID_ARGUMENT"})}let o=await n();if(r&&o.id!==e.recordingId)throw Object.assign(Error("The native recording identity changed at start"),{code:"RECORDING_CONFLICT"});return o})}function H(e,t,n){return u(()=>{if(e&&Object.hasOwn(e,"expectedId")){if(!t())throw Object.assign(Error("This host or adapter cannot protect recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"});if(typeof e.expectedId!=="string"||!e.expectedId.trim())throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"})}return n()})}var or={supportsRecordingOwnership:K,supportsRecordingIntentIdentity:_t,acknowledgeRecording:(e)=>H({expectedId:e?.expectedId},K,()=>N.acknowledgeRecording(e)),getCurrentPosition:(e)=>u(()=>N.getCurrentPosition(e)),watchPosition:(e,t)=>N.watchPosition(e,t),clearWatch:(e)=>N.clearWatch(e),startRecording:(e)=>Wt(e,_t,()=>N.startRecording(e)),pauseRecording:(e)=>H(e,K,()=>N.pauseRecording(e)),resumeRecording:(e)=>H(e,K,()=>N.resumeRecording(e)),stopRecording:(e)=>H(e,K,()=>N.stopRecording(e)),getRecordingState:(e)=>H(e,K,()=>N.getRecordingState(e)),readRecording:(e)=>H(e,K,()=>N.readRecording(e))},ir={show:(e)=>u(()=>Se.show(e)),schedule:(e)=>u(()=>Se.schedule(e)),cancelAll:()=>u(()=>Se.cancelAll()),setBadge:(e)=>u(()=>Se.setBadge(e))},ar={check:(e)=>u(()=>le.check(e)),request:(e)=>u(()=>le.request(e)),checkMultiple:(e)=>u(()=>le.checkMultiple(e)),requestMultiple:(e)=>u(()=>le.requestMultiple(e)),openSettings:()=>u(()=>le.openSettings())},sr={set:(e,t)=>u(()=>we.set(e,t)),get:(e)=>u(()=>we.get(e)),delete:(e)=>u(()=>we.delete(e)),clear:()=>u(()=>we.clear())},lr={share:(e)=>u(()=>Dt.share(e)),isAvailable:()=>Dt.isAvailable()},cr={request:()=>u(()=>Xn.request())},Ae={impact:(e)=>Promise.resolve().then(()=>ye.impact(e)).catch(()=>{}),notification:(e)=>Promise.resolve().then(()=>ye.notification(e)).catch(()=>{}),selection:()=>Promise.resolve().then(()=>ye.selection()).catch(()=>{}),vibrate:(e)=>Promise.resolve().then(()=>ye.vibrate(e)).catch(()=>{}),prepare:(e)=>{let t=C("haptics.prepare");return t?Promise.resolve().then(()=>t(e)).then(()=>{},()=>{}):Promise.resolve()}};function Ft(e){if(typeof e==="string")return e.trim()||null;if(!e||typeof e!=="object")return null;let t=e.url;return typeof t==="string"&&t.trim()?t:null}var ur={async getInitialURL(){if(!await Q())return null;return Ft(await Mt.getInitialURL?.())},onLink(e){let t=null,n=!1,r=()=>{if(n)return;t=Mt.onLink?.((o,i)=>{let a=Ft(o);if(a)e(a,{initial:i?.initial===!0})})??null};if(Re()?.craft)r();else Q().then(r);return()=>{n=!0,t?.()}}},ui={isAvailable:()=>xe.isAvailable(),set:(e,t)=>xe.set(e,t),remove:(e)=>xe.remove(e),clear:()=>xe.clear()},dr={enable:()=>u(()=>Nt.enable()),disable:()=>u(()=>Nt.disable())},pr={isAvailable:()=>be.isAvailable(),get:()=>u(()=>be.get()),set:(e)=>u(()=>be.set(e)),restore:()=>u(()=>be.restore())},fr={isAvailable:()=>B.isAvailable(),supports:(e)=>B.supports(e),getAuthorizationStatus:()=>u(()=>B.getAuthorizationStatus()),requestAuthorization:()=>u(()=>B.requestAuthorization()),getNowPlaying:()=>u(()=>B.getNowPlaying()),play:()=>u(()=>B.play()),pause:()=>u(()=>B.pause()),togglePlayPause:()=>u(()=>B.togglePlayPause()),skipToNext:()=>u(()=>B.skipToNext()),skipToPrevious:(e)=>u(()=>B.skipToPrevious(e)),onChange:(e)=>Y(()=>B.onChange(e))},mr={supportsRecordingOwnership:j,supportsRecordingIntentIdentity:Bt,acknowledgeRecording:(e)=>H({expectedId:e?.expectedId},j,()=>R.acknowledgeRecording(e)),isAvailable:()=>R.isAvailable(),supports:(e)=>R.supports(e),getState:()=>u(()=>R.getState()),requestAuthorization:()=>u(()=>R.requestAuthorization()),scan:(e)=>u(()=>R.scan(e)),stopScan:()=>u(()=>R.stopScan()),getDevices:()=>u(()=>R.getDevices()),connect:(e)=>u(()=>R.connect(e)),reconnect:()=>u(()=>R.reconnect()),disconnect:(e)=>u(()=>R.disconnect(e)),startRecording:(e)=>Wt(e,Bt,()=>R.startRecording(e)),pauseRecording:(e)=>H(e,j,()=>R.pauseRecording(e)),resumeRecording:(e)=>H(e,j,()=>R.resumeRecording(e)),stopRecording:(e)=>H(e,j,()=>R.stopRecording(e)),getRecordingState:(e)=>H(e,j,()=>R.getRecordingState(e)),readRecording:(e)=>H(e,j,()=>R.readRecording(e)),onReading:(e)=>Y(()=>R.onReading(e)),onDevice:(e)=>Y(()=>R.onDevice(e)),onState:(e)=>Y(()=>R.onState(e))},gr={isAvailable:()=>Fe.isAvailable(),speak:(e,t)=>u(()=>Fe.speak(e,t)),stop:()=>u(()=>Fe.stop())},hr={getStatus:()=>u(()=>Ht.getStatus()),onChange:(e)=>Y(()=>Ht.onChange(e))},br={register:()=>u(()=>Be.register()),onToken:(e)=>Be.onToken(e),onNotification:(e)=>Y(()=>Be.onNotification(e))},vr={requestAuthorization:(e,t)=>u(()=>se.requestAuthorization(e,t)),getData:(e,t)=>u(()=>se.getData(e,t)),saveWorkout:(e)=>u(()=>se.saveWorkout(e)),getWorkouts:(e)=>u(()=>se.getWorkouts(e)),getDailyStatistics:(e,t)=>u(()=>se.getDailyStatistics(e,t)),getHeartRateSamples:(e)=>b("health.getHeartRateSamples",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),getSamples:(e,t)=>b("health.getSamples",[e,t??{}],()=>[]).then((n)=>Array.isArray(n)?n:[]),getSleepIntervals:(e)=>b("health.getSleepIntervals",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),saveMindfulSession:(e)=>b("health.saveMindfulSession",[e],()=>null).then((t)=>t??null),getMindfulSessions:(e)=>b("health.getMindfulSessions",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),startHeartRateUpdates:(e)=>b("health.startHeartRateUpdates",[e??{}],()=>!1).then((t)=>t!==!1),stopHeartRateUpdates:()=>b("health.stopHeartRateUpdates",[],()=>!0).then(()=>!0),onHeartRate:(e)=>D("craftHealthHeartRate",(t)=>{if(Array.isArray(t.samples)&&t.samples.length)e(t.samples)}),supports:(e)=>C(`health.${e}`)!==null},yr={start:(e)=>u(()=>_e.start(e)),update:(e)=>u(()=>_e.update(e)),end:()=>u(()=>_e.end())},Sr={send:(e)=>u(()=>ce.send(e)),updateContext:(e)=>u(()=>ce.updateContext(e)),isReachable:()=>u(()=>ce.isReachable()),onMessage:(e)=>ce.onMessage(e),onReachabilityChange:(e)=>ce.onReachabilityChange(e)},di=Zn;function Re(){return A()}function q(){let e=Re()?.craft;if(!e||typeof e!=="object")return null;if(!("platform"in e)||e.platform!=="ios"&&e.platform!=="android")return null;let t="capabilities"in e?e.capabilities:void 0,n=t&&typeof t==="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).filter(([,r])=>typeof r==="boolean")):{};return{platform:e.platform,capabilities:n}}function We(){return q()!==null}function wr(e=2000){if(We()||ee())return Promise.resolve(!0);let t=Re();if(!t||!(t.craft||t.webkit?.messageHandlers?.craft))return Promise.resolve(!1);return new Promise((n)=>{let r=()=>{clearTimeout(o),t.removeEventListener("craftReady",r),n(We())},o=setTimeout(r,e);t.addEventListener("craftReady",r,{once:!0})})}function xr(e){let t=Re();if(!t)return()=>{};if(q()){let r=!1;return queueMicrotask(()=>{if(!r)e(new Event("craftReady"))}),()=>{r=!0}}let n=(r)=>{if(!q())return;t.removeEventListener("craftReady",n),e(r)};return t.addEventListener("craftReady",n),()=>t.removeEventListener("craftReady",n)}async function Ar(e){await Ae.impact("light");try{let t=await e();return await Ae.notification("success"),t}catch(t){throw await Ae.notification("error"),t}}var pi={get nativeBridge(){return q()},biometrics:er,camera:tr,device:nr,haptics:Ae,lifecycle:rr,location:or,notifications:ir,permissions:ar,secureStorage:sr,storage:dt,crypto:pt,share:lr,appReview:cr,deepLinks:ur,keepAwake:dr,brightness:pr,music:fr,heartRate:mr,scheduledWorkouts:mt,speech:gr,network:hr,pushNotifications:br,health:vr,liveActivities:yr,watchConnectivity:Sr,dialog:te,contextMenu:Pe,browser:Ze,symbols:et,statusBar:de,chrome:ne,refresh:U,background:re,clipboard:tt,db:nt,files:rt,shortcuts:ot,widgets:it,orientation:at,auth:st,storeKit:lt,isNativeMobile:We,whenNative:wr,onReady:xr,withFeedback:Ar};export{Rr as BRIDGE_WAIT_MS,xo as HEART_RATE_MATCH_MS,Co as INDOOR_CHECK_AFTER_S,Yo as MAX_SPOTLIGHT_SLOTS_PER_KIND,Sn as ROUTE_GAP_S,Fo as SHEET_FLICK_VELOCITY,He as TAB_BAR_COVER_EVENT,u as afterBridge,cr as appReview,Pn as applyAppearance,vn as attachHeartRate,st as auth,go as backLabelFor,re as background,er as biometrics,ue as bridgePending,pr as brightness,Ze as browser,b as callNative,tr as camera,mn as canGoBack,ne as chrome,tt as clipboard,Lr as confirmAction,Pe as contextMenu,ti as coverTabBar,A as craftHost,G as craftRoot,Jr as crashReporting,ko as createRouteRecorder,Qo as createSpotlightIndex,pt as crypto,bt as currentAppearance,nt as db,hn as deepLinkPath,ur as deepLinks,nr as device,te as dialog,mo as enterNavTrail,rt as files,xn as fixDistance,zr as focusSegment,So as followDeepLinks,q as getNativeMobileBridge,fo as goBack,vo as goBackToTabRoot,ei as handleTabReselect,Ae as haptics,ee as hasNativeMobileHost,vr as health,mr as heartRate,Mo as indoorVerdict,zo as installNativeChrome,Gr as installPressables,We as isNativeMobile,kn as isShown,dr as keepAwake,an as keepBreadcrumb,pn as largeTitleMetrics,rr as lifecycle,Uo as liftToBody,yr as liveActivities,or as location,ni as mirrorTabBar,pi as mobile,fr as music,jt as nativeFunction,C as nativeFunctionNow,Vn as nativeTabs,ho as navTrail,hr as network,ln as normalizeAppearance,Ft as normalizeDeepLinkURL,nn as normalizeScheduledWorkout,ir as notifications,co as observeLargeTitle,Kr as observeLongPress,_o as observeNativeRefresh,un as observePageScroll,lo as observePullToRefresh,jr as observeSegmentScrub,Wo as observeSheetDrag,vt as onAppearance,io as onBackgroundRefresh,D as onCraftEvent,ro as onMemoryWarning,xr as onMobileReady,no as onResume,oo as onSilentPush,Xo as onSpotlightTap,at as orientation,Ao as paceLabel,Cn as pageBackground,Mn as pageIsDark,oe as pageScrollTop,Io as pauseSessionClock,ar as permissions,Vt as placeMenu,_n as placeSpotlightItem,Ge as presentActionSheet,qe as presentAlert,ke as presentChoice,ze as presentConfirm,Ye as presentContextMenu,$o as presentPageAsCard,bo as previousScreenPath,dn as pullDistance,br as pushNotifications,Wn as readSpotlightEntries,Tt as readSpotlightKinds,Yn as readTabLinks,U as refresh,Bn as removeSpotlightItem,uo as resolveScrollHost,Oo as resumeSessionClock,Me as routeStats,Qn as routerHandlesTabs,On as rubberBand,mt as scheduledWorkouts,tn as scheduledWorkoutsUnsupported,sr as secureStorage,rn as segmentAt,qr as segmentForKey,Po as sessionClockElapsed,In as settleSheet,lr as share,Tn as sheetStops,ot as shortcuts,Cr as showContextMenuFor,ui as snapshots,gr as speech,Ro as speedLabel,di as splash,ie as spotlightAction,It as spotlightActions,Vo as spotlightActivityTypes,Kn as spotlightBridge,ae as spotlightKind,Fn as spotlightRoute,Dn as spotlightSlot,Ot as spotlightTitle,To as startSessionClock,de as statusBar,dt as storage,lt as storeKit,Y as subscribeWhenReady,et as symbols,Gn as tabBar,Oe as toNativeRect,yo as trailEntryFor,No as typedDistanceKm,An as usableFixes,Pr as useActionSheet,Sr as watchConnectivity,Q as whenBridgeReady,wr as whenNativeMobile,it as widgets,Ar as withNativeFeedback};
|
|
55
|
+
`;function Ke(){return R()?.document}function zt(e){if(e.getElementById(Ue))return;let t=e.createElement("style");t.id=Ue,t.textContent=qt,(e.head??e.documentElement).appendChild(t)}var Gt=0;function I(e,t,n,r){let o=e.createElement(t);if(o.className=n,r!==void 0)o.textContent=r;return o}function $e(){return R()?.stx?.overlays}var Vt=0;function je(e,t,n,r){zt(e);let o=R(),i=`native-dialog-layer-${++Vt}`,a=I(e,"div",`native-dialog native-dialog--${t}`);return a.setAttribute("data-native-dialog",t),a.appendChild(I(e,"div","native-dialog-backdrop")),new Promise((s)=>{let c=!1,m=(l)=>{if(c)return;c=!0,a.classList.remove("is-open"),$e()?.close(i),setTimeout(()=>a.remove(),260),s(l)},f=n({root:a,settle:m});a.appendChild(f),e.body.appendChild(a),$e()?.open(i,{panel:f,root:a,onEscape:()=>m(r())});let u=o;(typeof u?.requestAnimationFrame==="function"?(l)=>u.requestAnimationFrame(()=>u.requestAnimationFrame(l)):(l)=>setTimeout(l,16))(()=>{if(!c)a.classList.add("is-open")})})}function ke(e){let t=Ke();if(!t?.body)return Promise.resolve(null);let n=`native-dialog-${++Gt}`,r=e.actions.find((a)=>a.style==="cancel"),o=e.variant==="sheet"?e.actions.filter((a)=>a.style!=="cancel"):e.actions,i=e.variant==="sheet"?r??{id:"__cancel",title:e.cancelLabel||"Cancel",style:"cancel"}:void 0;return je(t,e.variant,({root:a,settle:s})=>{let c=(l)=>l.style==="cancel"?null:l.id,m=I(t,"div","native-dialog-panel");m.setAttribute("role","alertdialog"),m.setAttribute("aria-modal","true"),m.tabIndex=-1;let f=I(t,"div","native-dialog-group");if(e.title||e.message){let l=I(t,"div","native-dialog-header");if(e.title){let d=I(t,"p","native-dialog-title",e.title);d.id=`${n}-title`,l.appendChild(d),m.setAttribute("aria-labelledby",d.id)}if(e.message){let d=I(t,"p","native-dialog-message",e.message);d.id=`${n}-message`,l.appendChild(d),m.setAttribute("aria-describedby",d.id)}f.appendChild(l)}let u=I(t,"div","native-dialog-actions");if(e.variant==="alert"&&o.length===2)u.classList.add("is-row");for(let l of o){let d=I(t,"button",`native-dialog-action${l.style==="destructive"?" is-destructive":""}${l.style==="cancel"?" is-cancel":""}`,l.title);d.type="button",d.setAttribute("data-action-id",l.id),d.addEventListener("click",()=>s(c(l))),u.appendChild(d)}if(f.appendChild(u),m.appendChild(f),i){let l=I(t,"div","native-dialog-group"),d=I(t,"button","native-dialog-action is-cancel",i.title);d.type="button",d.setAttribute("data-action-id",i.id),d.addEventListener("click",()=>s(null)),l.appendChild(d),m.appendChild(l)}let g=a.querySelector(".native-dialog-backdrop");if(e.variant==="sheet")g?.addEventListener("click",()=>s(null));return m},()=>{if(e.variant==="sheet")return null;if(r)return null;return o.length===1?o[0].id:null})}async function qe(e){await ke({variant:"alert",title:e.title,message:e.message,actions:[{id:"ok",title:e.okLabel||"OK"}]})}async function ze(e){return await ke({variant:"alert",title:e.title,message:e.message,actions:[{id:"cancel",title:e.cancelLabel||"Cancel",style:"cancel"},{id:"confirm",title:e.confirmLabel||"OK",style:e.destructive?"destructive":"default"}]})==="confirm"}function Ge(e){return ke({variant:"sheet",title:e.title,message:e.message,actions:e.actions,cancelLabel:e.cancelLabel})}function Yt(e,t,n){let i=Math.max(12,Math.min(e.x,n.width-t.width-12)),a=e.y+e.height+8,s=a+t.height<=n.height-12,c=e.y-8-t.height,m=s||c<12?Math.max(12,Math.min(a,n.height-t.height-12)):c,f=e.x+e.width/2>n.width/2?"right":"left";return{top:m,left:i,origin:`${s||c<12?"top":"bottom"} ${f}`}}function Ve(e){let t=Ke();if(!t?.body)return Promise.resolve(null);let n=R();return je(t,"menu",({root:r,settle:o})=>{let i=I(t,"div","native-menu native-dialog-panel");if(i.setAttribute("role","menu"),e.title)i.appendChild(I(t,"p","native-menu-title",e.title)),i.setAttribute("aria-label",e.title);for(let a of e.items){let s=I(t,"button",`native-menu-item${a.destructive?" is-destructive":""}`);if(s.type="button",s.setAttribute("role","menuitem"),s.setAttribute("data-action-id",a.id),a.disabled)s.disabled=!0;if(s.appendChild(I(t,"span","native-menu-label",a.title)),a.icon){let c=I(t,"i",`native-menu-icon ${a.icon}`);c.setAttribute("aria-hidden","true"),s.appendChild(c)}s.addEventListener("click",()=>o(a.id)),i.appendChild(s)}return r.querySelector(".native-dialog-backdrop")?.addEventListener("click",()=>o(null)),queueMicrotask(()=>{let a=i.getBoundingClientRect?.(),s=Yt(e.anchor,{width:a?.width||248,height:a?.height||e.items.length*44},{width:n?.innerWidth||390,height:n?.innerHeight||844});i.style.top=`${s.top}px`,i.style.left=`${s.left}px`,i.style.setProperty("--native-menu-origin",s.origin)}),i},()=>null)}var Je=()=>!0,L=()=>!1,B=()=>null;function Ye(){return R()?.navigator??(typeof navigator>"u"?void 0:navigator)}function Oe(e){return{x:Math.round(e.x??e.left??0),y:Math.round(e.y??e.top??0),width:Math.round(e.width),height:Math.round(e.height)}}var te={alert:(e)=>v("dialog.alert",[e],()=>qe(e),{fallbackOnError:!0}).then(()=>{}),confirm:(e)=>v("dialog.confirm",[e],()=>ze(e),{fallbackOnError:!0}).then(Boolean),actionSheet:async(e)=>{let t={...e,anchor:e.anchor?Oe(e.anchor):void 0},n=await v("dialog.actionSheet",[t],()=>Ge(e),{fallbackOnError:!0});if(typeof n!=="string")return null;return e.actions.find((r)=>r.id===n)?.style==="cancel"?null:n}};function Lr(){return(e)=>te.actionSheet(e)}async function Cr(e){if((e.style??(e.destructive?"sheet":"alert"))==="alert")return te.confirm(e);return await te.actionSheet({title:e.title,message:e.message,anchor:e.anchor,actions:[{id:"confirm",title:e.confirmLabel||"OK",style:e.destructive?"destructive":"default"},{id:"cancel",title:e.cancelLabel||"Cancel",style:"cancel"}]})==="confirm"}var Pe={show:async(e)=>{let t={title:e.title,anchor:Oe(e.anchor),items:e.items.map(({id:r,title:o,symbol:i,destructive:a,disabled:s})=>({id:r,title:o,symbol:i,destructive:a,disabled:s}))},n=await v("contextMenu.show",[t],()=>Ve(e),{fallbackOnError:!0});return typeof n==="string"?n:null}};function Mr(e,t){return Pe.show({...t,anchor:Oe(e.getBoundingClientRect())})}function Qt(e,t){let n=R();if(!n)return{cancelled:!0};if(typeof n.craft?.openURL==="function")return Promise.resolve(n.craft.openURL(e)).catch(()=>{}),{cancelled:!1};if(t.mode==="auth")return n.location?.assign(e),{cancelled:!1};if(!(typeof n.open==="function"?n.open(e,"_blank","noopener"):null))n.location?.assign(e);return{cancelled:!1}}var Ze={open:async(e,t={})=>{let n=await v("browser.open",[e,t],()=>Qt(e,t),{fallbackOnError:!0});if(!n||typeof n!=="object")return{cancelled:!1};let{url:r,cancelled:o}=n;return typeof r==="string"?{url:r,cancelled:Boolean(o)}:{cancelled:Boolean(o)}}},Ee=new Map,Te=new Map;function Qe(e,t){return`${e}|${t.pointSize??""}|${t.weight??""}|${t.color??""}|${t.scale??""}`}var et={isAvailable:()=>M("symbols.image")!==null,image:(e,t={})=>{let n=Qe(e,t),r=Ee.get(n);if(r)return r;let o=v("symbols.image",[e,t],B).then((i)=>typeof i==="string"&&i.startsWith("data:")?i:null,B).then((i)=>(Te.set(n,i),i));return Ee.set(n,o),o},cached:(e,t={})=>Te.get(Qe(e,t)),clearCache:()=>{Ee.clear(),Te.clear()}},de={setStyle:(e)=>v("statusBar.setStyle",[e],L,{fallbackOnError:!0}).then((t)=>t!==!1)},ne={setUnderPageColor:(e)=>v("chrome.setUnderPageColor",[e],L,{fallbackOnError:!0}).then((t)=>t!==!1),setKeyboardAccessory:(e)=>v("chrome.setKeyboardAccessory",[e],L,{fallbackOnError:!0}).then((t)=>t!==!1)},j={isAvailable:()=>M("refresh.enable")!==null,enable:(e)=>v("refresh.enable",[e??{}],L,{fallbackOnError:!0}).then((t)=>t!==!1),disable:()=>v("refresh.disable",[],L,{fallbackOnError:!0}).then((e)=>e!==!1),end:()=>v("refresh.end",[],L,{fallbackOnError:!0}).then((e)=>e!==!1),onRefresh:(e)=>_("craftRefresh",()=>e())},re={complete:(e)=>v("background.complete",[e],L,{fallbackOnError:!0}).then((t)=>t!==!1)},tt={write:(e)=>v("clipboard.write",[e],async()=>{let t=Ye()?.clipboard;if(!t?.writeText)return!1;return t.writeText(e).then(Je,L)},{fallbackOnError:!0}).then((t)=>t!==!1),read:()=>v("clipboard.read",[],async()=>{let e=Ye()?.clipboard;if(!e?.readText)return null;return e.readText().catch(B)},{fallbackOnError:!0}).then((e)=>typeof e==="string"?e:null)},nt={isAvailable:()=>M("db.query")!==null,query:(e,t=[])=>v("db.query",[e,t],B).then((n)=>Array.isArray(n)?n:null),execute:(e,t=[])=>v("db.execute",[e,t],B).then((n)=>{if(!n||typeof n!=="object")return null;let{rowsAffected:r,lastInsertId:o}=n;return{rowsAffected:Number(r)||0,lastInsertId:Number(o)||0}})};function Ie(e,t){let n=R()?.document;if(!n?.body)return null;let r=n.createElement("a");return r.href=e,r.download=t,r.rel="noopener",r.style.display="none",n.body.appendChild(r),r.click(),r.remove(),t}function Xt(e){let t=R()?.document;if(!t?.body)return Promise.resolve(null);return new Promise((n)=>{let r=t.createElement("input");if(r.type="file",r.style.display="none",e.length)r.accept=e.map((i)=>i.includes("/")||i.startsWith(".")?i:`.${i}`).join(",");let o=(i)=>{r.remove(),n(i)};r.addEventListener("cancel",()=>o(null)),r.addEventListener("change",()=>{let i=r.files?.[0];if(!i)return o(null);let a=new FileReader;a.onload=()=>o({name:i.name,mimeType:i.type||void 0,data:typeof a.result==="string"?a.result:void 0}),a.onerror=()=>o({name:i.name,mimeType:i.type||void 0}),a.readAsDataURL(i)}),t.body.appendChild(r),r.click()})}var rt={openPDF:(e,t=0)=>v("openPDF",[e,t],()=>{let n=R();return Boolean(n?.open?.(e,"_blank","noopener"))}).then((n)=>n!==!1),takeScreenshot:()=>v("takeScreenshot",[],B,{fallbackOnError:!0}).then((e)=>typeof e==="string"?e:null),scanQRCode:()=>v("scanQRCode",[],B).then((e)=>{if(!e||typeof e!=="object")return null;let{type:t,data:n}=e;return typeof n==="string"?{type:String(t??""),data:n}:null},B),pickFile:(e=[])=>v("pickFile",[e],()=>Xt(e)).then((t)=>{if(!t||typeof t!=="object")return null;let n=t;if(typeof n.name!=="string")return null;return{name:n.name,path:typeof n.path==="string"?n.path:void 0,data:typeof n.data==="string"?n.data:void 0,mimeType:typeof n.mimeType==="string"?n.mimeType:void 0}},B),saveFile:(e,t,n)=>v("saveFile",[e,t,n],()=>{if(e.startsWith("data:"))return Ie(e,t);let r=new Blob([e],{type:n||"text/plain"}),o=URL.createObjectURL(r),i=Ie(o,t);return setTimeout(()=>URL.revokeObjectURL(o),1000),i}).then((r)=>typeof r==="string"?r:null),downloadFile:(e,t)=>v("downloadFile",[e,t],()=>Ie(e,t)).then((n)=>typeof n==="string"?n:null)},ot={set:(e)=>v("shortcuts.set",[e.map(({symbol:t,...n})=>t?{...n,iconName:t}:n)],L).then((t)=>t!==!1),clear:()=>v("shortcuts.clear",[],L).then((e)=>e!==!1),onShortcut:(e)=>_("craftShortcut",(t)=>{if(typeof t.type==="string")e(t.type)})},it={update:(e)=>v("widget.update",[e],L).then((t)=>t!==!1),reload:()=>v("widget.reload",[],L).then((e)=>e!==!1)},Jt={portrait:"portrait-primary",portraitUpsideDown:"portrait-secondary",landscape:"landscape",landscapeLeft:"landscape-primary",landscapeRight:"landscape-secondary"};function Xe(){return R()?.screen?.orientation}var at={lock:(e)=>v("lockOrientation",[e],()=>{let t=Xe();return t?.lock?t.lock(Jt[e]).then(Je,L):!1}).then((t)=>t!==!1),unlock:()=>v("unlockOrientation",[],()=>(Xe()?.unlock?.(),!0)).then((e)=>e!==!1)},st={signInWithApple:(e={})=>v("signInWithApple",e.nonce?[{nonce:e.nonce}]:[],B).then((t)=>{if(!t||typeof t!=="object"||typeof t.userId!=="string")return null;return t})},lt={isAvailable:()=>M("iap.purchase")!==null,products:(e)=>v("iap.getProducts",[e],()=>[]).then((t)=>Array.isArray(t)?t:[]),purchase:(e)=>v("iap.purchase",[e],B).then((t)=>t&&typeof t==="object"?t:null,(t)=>{if(/cancel/i.test(String(t?.message??t)))return null;throw t}),restore:()=>v("iap.restore",[],()=>[]).then((e)=>Array.isArray(e)?e:[])};import{storage as K}from"craft-native/mobile";function ct(){return V()?.capabilities?.storageCompareAndSet===!0&&K.supportsCompareAndSet?.()===!0}function ut(){return V()?.capabilities?.storageSetIfAbsent===!0&&K.supportsSetIfAbsent?.()===!0}var dt={supportsCompareAndSet:ct,supportsSetIfAbsent:ut,get:(e)=>p(()=>K.get(e)),set:(e,t)=>p(()=>K.set(e,t)),remove:(e)=>p(()=>K.remove(e)),clear:()=>p(()=>K.clear()),keys:()=>p(()=>K.keys()),setIfAbsent:(e,t)=>p(()=>{if(!ut())throw Object.assign(Error("This host or adapter cannot create storage atomically"),{code:"STORAGE_SET_IF_ABSENT_UNSUPPORTED"});return K.setIfAbsent(e,t)}),compareAndSet:(e,t,n)=>p(()=>{if(!ct())throw Object.assign(Error("This host or adapter cannot compare storage atomically"),{code:"STORAGE_COMPARE_AND_SET_UNSUPPORTED"});return K.compareAndSet(e,t,n)})};import{crypto as Zt}from"craft-native/mobile";var pt={randomUUID:()=>p(()=>Zt.randomUUID())};var en=["authorized","denied","notDetermined","restricted","unsupported"];function pe(){let e=V(),t=e?.scheduledWorkouts;if(!t||typeof t!=="object"||e?.capabilities?.scheduledWorkouts!==!0)return;return t}function tn(){return Object.assign(Error("unsupported"),{code:"UNSUPPORTED"})}function ft(e){return en.includes(e)?e:"unsupported"}function nn(e){if(!e||typeof e!=="object")return null;let t=e;if(typeof t.id!=="string"||!t.id||typeof t.date!=="string"||!/^\d{4}-\d{2}-\d{2}$/.test(t.date))return null;let n={id:t.id.toLowerCase(),date:t.date,complete:t.complete===!0};if(typeof t.hour==="number"&&Number.isFinite(t.hour))n.hour=t.hour;if(typeof t.minute==="number"&&Number.isFinite(t.minute))n.minute=t.minute;return n}function J(e,t,...n){return p(async()=>{let r=pe();if(typeof r?.[e]!=="function")throw tn();return t(await r[e](...n))})}var mt={isAvailable:()=>typeof pe()?.isSupported==="function",supports:(e)=>typeof pe()?.[e]==="function",isSupported:()=>p(async()=>{let e=pe();if(typeof e?.isSupported!=="function")return!1;try{return await e.isSupported()===!0}catch{return!1}}),authorization:()=>J("authorization",ft),requestAuthorization:()=>J("requestAuthorization",ft),list:()=>J("list",(e)=>Array.isArray(e)?e.map(nn).filter((t)=>t!==null):[]),schedule:(e)=>{if(!e||typeof e!=="object"||typeof e.id!=="string")return Promise.reject(Object.assign(Error("schedule needs a plan with an id"),{code:"INVALID_ARGUMENT"}));return J("schedule",(t)=>{let n=t&&typeof t==="object"?t:{},r={id:(typeof n.id==="string"?n.id:e.id).toLowerCase()};if(Array.isArray(n.droppedAlerts)&&n.droppedAlerts.length)r.droppedAlerts=n.droppedAlerts.filter((o)=>typeof o==="string");return r},e)},remove:(e)=>J("remove",(t)=>t===!0,e),removeAll:()=>J("removeAll",(e)=>typeof e==="number"&&Number.isFinite(e)?e:0)};function jr(e,t){let n=t.delay??500,r=t.tolerance??10,o=null,i=null,a=!1,s=()=>{if(o)clearTimeout(o);if(o=null,i&&!a)t.onPressEnd?.();i=null},c=(g)=>{let l=g;if(l.button!==void 0&&l.button!==0)return;a=!1,i={x:l.clientX,y:l.clientY},t.onPressStart?.(),o=setTimeout(()=>{if(o=null,!i)return;a=!0,t.onLongPress({...i}),i=null},n)},m=(g)=>{if(!i)return;let l=g;if(Math.hypot(l.clientX-i.x,l.clientY-i.y)>r)s()},f=(g)=>{if(!a)return;a=!1,g.preventDefault(),g.stopPropagation()},u=(g)=>g.preventDefault();return e.addEventListener("pointerdown",c),e.addEventListener("pointermove",m),e.addEventListener("pointerup",s),e.addEventListener("pointercancel",s),e.addEventListener("pointerleave",s),e.addEventListener("click",f,!0),e.addEventListener("contextmenu",u),()=>{s(),e.removeEventListener("pointerdown",c),e.removeEventListener("pointermove",m),e.removeEventListener("pointerup",s),e.removeEventListener("pointercancel",s),e.removeEventListener("pointerleave",s),e.removeEventListener("click",f,!0),e.removeEventListener("contextmenu",u)}}function rn(e,t,n){if(n<=1||t.width<=0)return 0;let r=Math.floor((e-t.left)/t.width*n);return Math.max(0,Math.min(n-1,r))}function qr(e,t){let n=null,r=null,o=!1,i=0,a=(l)=>{let d=e.getBoundingClientRect();return rn(l,{left:d.left+2,width:d.width-4},t.count())},s=(l)=>{let d=l;if(d.button!==void 0&&d.button!==0)return;let y=a(d.clientX);if(y!==t.selected())return;n=y,i=y,o=!1,r=d.pointerId;try{e.setPointerCapture?.(d.pointerId)}catch{}t.onPress?.(!0)},c=(l)=>{if(n===null)return;let d=a(l.clientX);if(d===i)return;o=!0,i=d,t.onScrub(d)},m=(l)=>{if(n===null)return;if(r!==null)try{e.releasePointerCapture?.(r)}catch{}if(t.onPress?.(!1),l&&o)t.onCommit(i);else if(o)t.onScrub(n);n=null,r=null},f=(l)=>{if(!o)return;o=!1,l.preventDefault(),l.stopPropagation()},u=()=>m(!0),g=()=>m(!1);return e.addEventListener("pointerdown",s),e.addEventListener("pointermove",c),e.addEventListener("pointerup",u),e.addEventListener("pointercancel",g),e.addEventListener("click",f,!0),()=>{e.removeEventListener("pointerdown",s),e.removeEventListener("pointermove",c),e.removeEventListener("pointerup",u),e.removeEventListener("pointercancel",g),e.removeEventListener("click",f,!0)}}function zr(e,t,n){if(n<=0)return null;switch(e){case"ArrowRight":case"ArrowDown":return(t+1)%n;case"ArrowLeft":case"ArrowUp":return(t-1+n)%n;case"Home":return 0;case"End":return n-1;default:return null}}function Gr(e,t){e.querySelectorAll('[role="tab"]')[t]?.focus()}function Vr(e){let t=(n)=>{if(!n.target?.closest?.("[data-native-pressable]"))return;let o=M("haptics.prepare");if(o)Promise.resolve().then(()=>o("impact")).catch(()=>{})};return e.addEventListener("touchstart",t,{passive:!0,capture:!0}),()=>e.removeEventListener("touchstart",t,{capture:!0})}import{BugHQClient as on}from"@bughq/sdk";import{crashReporter as Z}from"craft-native/mobile";var N=null;function an(e){if(e.type!=="http")return!0;let t=e.data??{},n=typeof t.status==="number"?t.status:0;return t.error===!0||n>=400||n===0}function gt(){return Z.isAvailable()}function sn(e){return async(t)=>{if(!gt())return!e;return Z.capture(t)}}var Zr={start(e={}){if(N)return N;let t=ee()||gt();if(!t&&!e.key&&!e.dsn)return null;let n=e.beforeBreadcrumb;return N=new on({framework:"stacks-mobile",sdkName:"bughq.stacks.mobile",autoInstrument:{navigation:!0,fetch:!0,xhr:!0},...e,heartbeat:t?!1:e.heartbeat,transport:t?sn(Boolean(e.key||e.dsn)):void 0,beforeBreadcrumb(r){if(!an(r))return null;let o=n?n(r):r;if(o===null)return null;let i=o||r;if(t)Z.addBreadcrumb(i);return i}}),N},async setUser(e){let t=e===null||e===void 0||e===""?null:String(e);N?.setUser(t===null?null:{id:t}),await Z.setUser(t)},capture(e,t){N?.captureException(e,t)},addBreadcrumb(e){if(N)N.addBreadcrumb(e);else Z.addBreadcrumb(e)},async flush(){await Promise.all([N?.flush(),Z.flush()])},client(){return N},stop(){N?.close(),N=null}};function Le(e){let t=R();try{return Boolean(t?.matchMedia?.(e).matches)}catch{return!1}}function ht(e){return e!==null&&e!==void 0&&e!=="false"&&e!=="0"}function bt(){let e=R()?.document?.documentElement,t=Number.parseFloat(e?.style?.getPropertyValue("--craft-font-scale")||"");return{fontScale:Number.isFinite(t)&&t>0?t:1,reduceMotion:ht(e?.getAttribute("data-craft-reduce-motion"))||Le("(prefers-reduced-motion: reduce)"),reduceTransparency:ht(e?.getAttribute("data-craft-reduce-transparency"))||Le("(prefers-reduced-transparency: reduce)"),colorScheme:e?.classList?.contains("dark")||Le("(prefers-color-scheme: dark)")?"dark":"light"}}function ln(e){let t=bt(),n=Number(e?.fontScale);return{contentSizeCategory:typeof e?.contentSizeCategory==="string"?e.contentSizeCategory:void 0,fontScale:Number.isFinite(n)&&n>0?n:t.fontScale,reduceMotion:typeof e?.reduceMotion==="boolean"?e.reduceMotion:t.reduceMotion,reduceTransparency:typeof e?.reduceTransparency==="boolean"?e.reduceTransparency:t.reduceTransparency,colorScheme:e?.colorScheme==="dark"||e?.colorScheme==="light"?e.colorScheme:t.colorScheme}}function vt(e,t={}){if(t.immediate!==!1)e(bt());return _("craftAppearance",(n)=>e(ln(n)))}function ro(e){return _("craftResume",(t)=>e({backgroundedMs:Number(t.backgroundedMs)||0}))}function oo(e){return _("craftMemoryWarning",()=>e())}function yt(e){return(t)=>{Promise.resolve().then(()=>e(t)).then(()=>re.complete(!0),()=>re.complete(!1))}}function io(e){let t=yt(e);return _("craftSilentPush",(n)=>t(n.payload??{}))}function ao(e){let t=yt(()=>e());return _("craftBackgroundRefresh",()=>t(void 0))}import{haptics as cn}from"craft-native/mobile";function Ce(){if(typeof window>"u")return;return window}function oe(e=Ce()){if(!e)return 0;if(typeof e.scrollY==="number")return e.scrollY;if(typeof e.scrollTop==="number")return e.scrollTop;return e.document?.scrollingElement?.scrollTop??0}function un(e,t=Ce()){if(!t)return()=>{};let n=!1,r=typeof requestAnimationFrame==="function"?requestAnimationFrame:(i)=>setTimeout(i,16),o=()=>{if(n)return;n=!0,r(()=>{n=!1,e(oe(t))})};return e(oe(t)),t.addEventListener("scroll",o,{passive:!0}),()=>t.removeEventListener("scroll",o)}function dn(e,t){let n=Math.max(0,-e),r=e<=0?Math.max(0,t)*0.5:0;return Math.round(Math.max(n,r))}function co(e){let t=e.host??Ce();if(!t)return()=>{};let n=e.threshold??72,r=null,o=!1,i=!1,a=typeof requestAnimationFrame==="function"?requestAnimationFrame:(y)=>setTimeout(y,16),s=null,c=(y)=>{s=null,e.onPull?.(y,o,{bounce:Math.min(y,Math.max(0,-oe(t)))})},m=(y)=>{let w=s!==null;if(s=y,w)return;a(()=>{if(s!==null)c(s)})},f=(y)=>{let w=y.touches?.[0];return w?w.clientY:null},u=(y)=>{if(i||oe(t)>0)return;r=f(y),o=!1},g=(y)=>{if(r===null)return;let w=f(y);if(w===null)return;let P=dn(oe(t),w-r);if(!o&&P>=n)o=!0,Promise.resolve(cn.impact("medium")).catch(()=>{});else if(o&&P<n*0.8)o=!1;m(P)},l=async()=>{if(r===null)return;if(r=null,!o){c(0);return}o=!1,i=!0,c(n);try{await e.onRefresh()}finally{i=!1,c(0)}},d=()=>{if(r===null)return;r=null,o=!1,c(0)};return t.addEventListener("touchstart",u,{passive:!0}),t.addEventListener("touchmove",g,{passive:!0}),t.addEventListener("touchend",l),t.addEventListener("touchcancel",d),()=>{s=null,t.removeEventListener("touchstart",u),t.removeEventListener("touchmove",g),t.removeEventListener("touchend",l),t.removeEventListener("touchcancel",d)}}function pn(e,t=52){let n=Math.max(1,t),r=Math.min(1,Math.max(0,e/n)),o=e<0?1+Math.min(0.1,-e/600):1;return{progress:Math.round(r*1000)/1000,stretch:Math.round(o*1000)/1000}}function uo(e,t={}){let n="",r=()=>t.title?.offsetHeight||t.height||52;return un((o)=>{let i=pn(o,r()),a=`${i.progress}|${i.stretch}`;if(a===n)return;n=a,e.style.setProperty("--native-nav-progress",String(i.progress)),e.style.setProperty("--native-nav-stretch",String(i.stretch)),t.onChange?.(i)},t.host)}function po(e){if(!e||typeof window>"u")return;let t=window.document?.querySelector(e);return t?t:void 0}function xt(){if(typeof window>"u")return;return window}var St="__stxPushed",fn="__stxScroll";function mn(e=xt()){let t=e?.history?.state;if(t===null||t===void 0)return!1;if(typeof t!=="object")return!0;let n=t;if(St in n)return n[St]===!0;return!(fn in n)}function mo(e=xt()){if(!mn(e))return!1;return e.history.back(),!0}function go(e,t,n=50){let r=e[e.length-1];if(e.length>=2&&e[e.length-2].path===t)e.pop();else if(!r||r.path!==t)e.push({path:t,title:""});if(e.length>n)e.splice(0,e.length-n);return{current:e[e.length-1],previous:e[e.length-2]??null}}function ho(e,t,n=12){let r=e?.title.trim()??"";return r&&r.length<=n?r:t}function bo(){if(typeof window>"u")return[];let e=window;return e.__stacksNavTrail??=[]}function gn(e){try{let t=new URL(e,"http://local");return`${t.pathname}${t.search}`}catch{return e}}function vo(){if(typeof window>"u")return;let e=window.stxRouter;if(typeof e?.screens!=="function")return;let t=e.screens(),n=t.find((o)=>o.active);if(!n)return;let r=t.filter((o)=>o.tab===n.tab&&o.depth<n.depth);if(!r.length)return null;return gn(r.reduce((o,i)=>i.depth>o.depth?i:o).url)}function yo(e=typeof window>"u"?void 0:window){let t=e?.stxRouter;if(typeof t?.screens!=="function"||typeof e?.history?.go!=="function")return!1;let n=t.screens(),r=n.find((a)=>a.active);if(!r)return!1;let o=n.filter((a)=>a.tab===r.tab&&a.depth<r.depth);if(!o.length)return!1;let i=o.reduce((a,s)=>s.depth<a.depth?s:a);return e.history.go(i.depth-r.depth),!0}function So(e,t){for(let n=e.length-1;n>=0;n--)if(e[n].path===t)return e[n];return null}function hn(e,t=bn()){let n;try{n=new URL(e)}catch{return null}let r=`${n.search}${n.hash}`;if(n.protocol==="http:"||n.protocol==="https:"){if(!t||n.origin!==t)return null;return`${n.pathname||"/"}${r}`}return`${`/${[n.host,n.pathname.replace(/^\/+/,"")].filter(Boolean).join("/")}`}${r}`}function bn(){if(typeof window>"u")return;return window.location?.origin}var wt="stacks-mobile-deep-link";function wo(e,t){let n=(r)=>{let o=hn(r);if(o)e(o)};return t.getInitialURL().then((r)=>{if(!r)return;try{if(sessionStorage.getItem(wt)===r)return;sessionStorage.setItem(wt,r)}catch{}n(r)}).catch(()=>{}),t.onLink((r,o)=>{if(o?.initial)return;n(r)})}var Ao=5000;function vn(e,t,n=5000){let r=t.filter((o)=>Number.isFinite(o.timestamp)&&Number.isFinite(o.bpm)&&o.bpm>0).slice().sort((o,i)=>o.timestamp-i.timestamp);if(!r.length)return e.slice();return e.map((o)=>{let i=0,a=r.length;while(i<a){let f=i+a>>1;if(r[f].timestamp<o.timestamp)i=f+1;else a=f}let s=r[i],c=r[i-1],m=!s?c:!c?s:o.timestamp-c.timestamp<=s.timestamp-o.timestamp?c:s;if(!m||Math.abs(m.timestamp-o.timestamp)>n)return o;return{...o,heartRate:Math.round(m.bpm)}})}var yn=6371008.8,Sn=30,wn=Sn;function xn(e,t){let n=Math.PI/180,r=(t.latitude-e.latitude)*n,o=(t.longitude-e.longitude)*n,i=Math.sin(r/2)**2+Math.cos(e.latitude*n)*Math.cos(t.latitude*n)*Math.sin(o/2)**2;return 2*yn*Math.asin(Math.min(1,Math.sqrt(i)))}function An(e,t=25){let n=new Set;return e.filter((r)=>Number.isFinite(r.latitude)&&Number.isFinite(r.longitude)&&Number.isFinite(r.timestamp)&&Math.abs(r.latitude)<=90&&Math.abs(r.longitude)<=180&&Number.isFinite(r.accuracy)&&r.accuracy>=0&&r.accuracy<=t).sort((r,o)=>r.timestamp-o.timestamp).filter((r)=>{if(n.has(r.timestamp))return!1;return n.add(r.timestamp),!0})}function Me(e,t={}){let n=An(e,t.maxAccuracyM??25),r=t.paceWindowS??30,o=[],i=0,a=0,s=null;for(let u of n){let g=o[o.length-1],l=s?(u.timestamp-s.timestamp)/1000:0;if(s=u,!g){o.push({fix:u,cumM:0});continue}if(l>wn){o.push({fix:u,cumM:i});continue}let d=(u.timestamp-g.fix.timestamp)/1000,y=xn(g.fix,u),w=Math.min(10,Math.max(3,g.fix.accuracy,u.accuracy));if(y<w)continue;if(i+=y,d>0&&y/d>=0.5)a+=d;o.push({fix:u,cumM:i})}let c=o[o.length-1],m=null,f=null;if(c&&n.at(-1).timestamp-c.fix.timestamp<=r*1000){let u=c.fix.timestamp-r*1000,g=o.find((y)=>y.fix.timestamp>=u)??c,l=c.cumM-g.cumM,d=(c.fix.timestamp-g.fix.timestamp)/1000;if(l>=20&&d>0)f=l/d,m=d/(l/1000)}return{distanceM:i,movingS:a,paceSPerKm:m,averagePaceSPerKm:i>=50&&a>0?a/(i/1000):null,speedMps:f,accuracyM:n.length?n[n.length-1].accuracy:e.length?e[e.length-1].accuracy??null:null,fixes:n.length}}function Ro(e){if(e==null||e<=0||!Number.isFinite(e)||e>3600)return"–";let t=Math.round(e);return`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`}function ko(e){return e!=null&&e>0&&Number.isFinite(e)?(e*3.6).toFixed(1):"–"}var At={distanceM:0,movingS:0,paceSPerKm:null,averagePaceSPerKm:null,speedMps:null,accuracyM:null,fixes:0};function Eo(e){let t=e.location,n=e.intervalMs??3000,r=At,o=null,i=e.heartRate,a=!1,s=null,c=[],m=()=>typeof document<"u"&&document.visibilityState==="hidden",f=0,u=null,g=Promise.resolve(),l=null,d=!1,y=null;function w(){if(d)throw Object.assign(Error("The recording screen is no longer active"),{code:"RECORDING_CONFLICT"});if(t.supportsRecordingOwnership?.()!==!0)throw Object.assign(Error("This host cannot protect native recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"})}function P(){if(w(),!y)throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});return y}function W(h){let S=g.then(h);return g=S.then(()=>{},()=>{}),S}function U(){if(u)return u;let h=f,S=y,T=(async()=>{if(w(),!S)throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});let O=await t.readRecording({expectedId:S}),C=Me(O,e);if(h===f&&!d)r=C,e.onUpdate?.(r);return C})().finally(()=>{if(u===T)u=null});return u=T,T}function b(){if(x(),d)return;o=setInterval(()=>{if(!m())U().catch(()=>{})},n)}function x(){if(o)clearInterval(o);o=null}function A(h,S,T){if(x(),f++,u=null,y=h,s=S,a=S!==null,c=[],r=T,!d)e.onUpdate?.(r)}async function E(h){if(!i||!a||!s||d||i.supportsRecordingOwnership?.()!==!0)return;await h(i,s).catch(()=>{})}return{get stats(){return r},get recordingId(){return y},get heartRateRecordingId(){return s},get heartRate(){return c},start(h){return l=null,W(async()=>{if(w(),h&&t.supportsRecordingIntentIdentity?.()!==!0)throw Object.assign(Error("This host cannot start a registered route identity"),{code:"RECORDING_INTENT_IDENTITY_UNSUPPORTED"});if(h&&(typeof h.recordingId!=="string"||!h.recordingId.trim()))throw Object.assign(Error("A registered recording ID is required"),{code:"INVALID_ARGUMENT"});let S=await t.startRecording({enableHighAccuracy:!0,...e.locationOptions,...h?{recordingId:h.recordingId}:{}});if(!S?.active||typeof S.id!=="string"||!S.id.trim())throw Object.assign(Error("The native recording did not provide an ID"),{code:"RECORDING_CONFLICT"});if(h&&S.id!==h.recordingId)throw Object.assign(Error("The native route did not start with its registered ID"),{code:"RECORDING_CONFLICT"});let T=null;if(!d&&i?.isAvailable()&&i.supportsRecordingOwnership?.()===!0&&(!h||h.heartRateRecordingId&&i.supportsRecordingIntentIdentity?.()===!0))try{let O=await i.startRecording(h?{recordingId:h.heartRateRecordingId}:void 0);if(h&&O.id!==h.heartRateRecordingId)throw Object.assign(Error("The native heart rate did not start with its registered ID"),{code:"RECORDING_CONFLICT"});if(O.active&&typeof O.id==="string"&&O.id.trim())T=O.id}catch{}return A(S.id,T,{...At}),b(),r})},attach(h){return l=null,W(async()=>{if(typeof h?.expectedId!=="string"||!h.expectedId.trim())throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"});w();let S=await t.getRecordingState({expectedId:h.expectedId});if(w(),!S?.id)return null;if(S.id!==h.expectedId)throw Object.assign(Error("The recording belongs to another session"),{code:"RECORDING_CONFLICT"});let T=null;if(h.expectedHeartRateId!==void 0){let C=h.expectedHeartRateId;if(typeof C!=="string"||!C.trim())throw Object.assign(Error("A saved heart-rate recording ID is required"),{code:"RECORDING_CONFLICT"});if(!i?.isAvailable()||i.supportsRecordingOwnership?.()!==!0)throw Object.assign(Error("This host cannot protect heart-rate recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"});let Ut=await i.getRecordingState({expectedId:C});if(w(),Ut.id!==C)throw Object.assign(Error("The heart-rate recording belongs to another session"),{code:"RECORDING_CONFLICT"});await i.readRecording({expectedId:C,since:Date.now()}),w(),T=C}let O=await t.readRecording({expectedId:h.expectedId});if(w(),A(h.expectedId,T,Me(O,e)),S.active&&!S.paused)b();return S})},pause(){return W(async()=>{await t.pauseRecording({expectedId:P()}),await E((h,S)=>h.pauseRecording({expectedId:S})),x(),await U().catch(()=>{})})},resume(){return W(async()=>{await t.resumeRecording({expectedId:P()}),await E((h,S)=>h.resumeRecording({expectedId:S})),b()})},stop(){if(l)return l;let h=W(async()=>{x(),f++;let S=P(),T=await t.stopRecording({expectedId:S});if(T.id!==S)throw Object.assign(Error("The native recording identity changed"),{code:"RECORDING_CONFLICT"});let O=T?.locations??[];if(!d&&i&&a&&s&&i.supportsRecordingOwnership?.()===!0){let C=await i.stopRecording({expectedId:s}).catch(()=>null);a=!1,c=C?.id===s?C.samples:[],O=vn(O,c)}if(r=Me(O,e),!d)e.onUpdate?.(r);return O}).catch((S)=>{if(l===h)l=null;throw S});return l=h,h},dispose(){d=!0,f++,u=null,x()},refresh:U}}function Io(e){return{startedAt:Number.isFinite(e)?e:null,pausedAt:null,pausedMs:0}}function Oo(e,t){return e.startedAt===null||e.pausedAt!==null||!Number.isFinite(t)?e:{...e,pausedAt:Math.max(e.startedAt,t)}}function Po(e,t){return e.pausedAt===null||!Number.isFinite(t)?e:{...e,pausedAt:null,pausedMs:e.pausedMs+Math.max(0,t-e.pausedAt)}}function Lo(e,t){if(e.startedAt===null)return 0;let n=((e.pausedAt??t)-e.startedAt-e.pausedMs)/1000;return Number.isFinite(n)?Math.max(0,n):0}var Mo=150;function Rn(e,t){let n=Math.PI/180,r=(t.latitude-e.latitude)*n,o=(t.longitude-e.longitude)*n,i=Math.sin(r/2)**2+Math.cos(e.latitude*n)*Math.cos(t.latitude*n)*Math.sin(o/2)**2;return 12742017.6*Math.asin(Math.min(1,Math.sqrt(i)))}function fe(e,t){let n=[...e].sort((r,o)=>r-o);return n[Math.min(n.length-1,Math.floor(t*n.length))]}function No(e,t){let n=(e||[]).filter((a)=>Number.isFinite(a?.latitude)&&Number.isFinite(a?.longitude)&&Math.abs(a.latitude)<=90&&Math.abs(a.longitude)<=180),r=n.filter((a)=>a.accuracy!=null).map((a)=>Number(a.accuracy)).filter((a)=>Number.isFinite(a)&&a>=0),o=r.length?fe(r,0.5):Number.POSITIVE_INFINITY,i=0;if(n.length){let a={latitude:fe(n.map((s)=>s.latitude),0.5),longitude:fe(n.map((s)=>s.longitude),0.5)};i=fe(n.map((s)=>Rn(a,s)),0.8)}if(n.length>=10&&i>150&&o<=15)return"outside";if(t<150)return"unsure";if(n.length<3||o>30||i<25)return"indoors";if(i<50&&o>10)return"indoors";return"unsure"}function Ho(e,t={}){let r=String(e||"").trim().toLowerCase().replace(",",".").match(/^(\d+(?:\.\d*)?|\.\d+)\s*(km|k|m|mi)?$/);if(!r)return null;let o=Number(r[1]),i=r[2]||t.defaultUnit||(o>100?"m":"km"),a=i==="m"?o/1000:i==="mi"?o*1.609344:o;return Number.isFinite(a)&&a>=0&&a<=2000?Math.round(a*1000)/1000:null}var he=new Set,Rt=!1,me=null;function kn(e){return e.isConnected&&e.getClientRects().length>0}function kt(){return[...he].find((e)=>kn(e.element))}function ge(){let e=kt(),t=Boolean(e);if(t===Rt)return;if(Rt=t,t)j.enable(e?.tintColor?{tintColor:e.tintColor}:{});else j.disable()}function En(){let e=kt();if(!e){j.end();return}Promise.resolve().then(()=>e.run()).catch(()=>{}).finally(()=>j.end())}function Bo(e,t){let n={element:e,tintColor:t.tintColor,run:t.onRefresh};he.add(n);let r=e.ownerDocument?.defaultView;if(!me){let o=j.onRefresh(En),i=()=>ge();r?.addEventListener("stx:load",i),me=()=>{o(),r?.removeEventListener("stx:load",i)}}return ge(),r?.requestAnimationFrame?.(()=>ge()),()=>{if(he.delete(n),he.size===0)me?.(),me=null;ge()}}var Wo=0.5;function Tn(e,t,n){let r=[];if(n.includes("large")||n.length===0)r.push({name:"large",y:0});if(n.includes("medium"))r.push({name:"medium",y:Math.max(0,Math.round(e-t*0.5))});return r.push({name:"dismiss",y:Math.max(1,e)}),r.sort((o,i)=>o.y-i.y)}function In(e){let{y:t,velocity:n,stops:r}=e,o=r.filter((s)=>s.name!=="dismiss"),i=r.find((s)=>s.name==="dismiss");if(o.length===0)return"dismiss";if(n>0.5)return(r.filter((c)=>c.y>t+1)[0]??i).name;if(n<-0.5){let s=o.filter((c)=>c.y<t-1);return(s[s.length-1]??o[0]).name}let a=o[o.length-1];if(t>a.y+(i.y-a.y)*0.5)return"dismiss";return o.reduce((s,c)=>Math.abs(c.y-t)<Math.abs(s.y-t)?c:s).name}function On(e,t=400){if(e<=0)return 0;return e*t*0.55/(t+e*0.55)}function Uo(e){let{panel:t}=e,n=null,r=[],o=0,i=()=>e.viewport?.()??t.ownerDocument?.defaultView?.innerHeight??800,a=()=>Tn(t.offsetHeight||t.getBoundingClientRect().height,i(),e.detents()),s=(f)=>{let u=f;if(u.button!==void 0&&u.button!==0)return;if(u.target?.closest?.("button, a, input, select, textarea, [role=button]"))return;let g=a().find((l)=>l.name===e.detent())?.y??0;n={y:u.clientY,base:g,pointerId:u.pointerId},o=g,r=[{y:g,t:u.timeStamp}],t.classList.add("is-dragging");try{f.currentTarget?.setPointerCapture?.(u.pointerId)}catch{}},c=(f)=>{if(!n)return;let u=f,g=n.base+u.clientY-n.y;o=g<0?-On(-g):g,r.push({y:o,t:u.timeStamp});while(r.length>2&&u.timeStamp-r[0].t>100)r.shift();t.style.transform=`translateY(${o}px)`;let l=t.offsetHeight||1;t.parentElement?.style.setProperty("--native-sheet-presence",String(Math.max(0,Math.min(1,1-o/l))))},m=(f)=>{if(!n)return;let u=f;n=null;let g=r[0],l=Math.max(1,u.timeStamp-g.t),d=(o-g.y)/l;t.classList.remove("is-dragging"),t.style.transform="",t.parentElement?.style.removeProperty("--native-sheet-presence"),e.onSettle(In({y:o,velocity:d,stops:a()}))};for(let f of e.handles)f.addEventListener("pointerdown",s),f.addEventListener("pointermove",c),f.addEventListener("pointerup",m),f.addEventListener("pointercancel",m);return()=>{for(let f of e.handles)f.removeEventListener("pointerdown",s),f.removeEventListener("pointermove",c),f.removeEventListener("pointerup",m),f.removeEventListener("pointercancel",m)}}function $o(e){let t=e.ownerDocument;if(e.parentElement===t.body)return()=>{};let n=t.createComment("native-sheet");return e.parentNode?.insertBefore(n,e),t.body.appendChild(e),()=>{if(n.parentNode)n.parentNode.insertBefore(e,n);else e.remove();n.remove()}}var Ne=new WeakMap;function Ko(e,t){let n=e.documentElement,r=Ne.get(e)??0;if(!t){let a=Math.max(0,r-1);if(Ne.set(e,a),a===0)n.removeAttribute("data-native-sheet-card");return}if(Ne.set(e,r+1),r>0)return;let o=e.defaultView,i=(o?.scrollY??0)+(o?.innerHeight??800)/2;n.style.setProperty("--native-sheet-card-origin",`${Math.round(i)}px`),n.setAttribute("data-native-sheet-card","")}function Pn(e,t){e.style.setProperty("--native-font-scale",String(t.fontScale)),e.toggleAttribute("data-native-reduce-motion",t.reduceMotion),e.toggleAttribute("data-native-reduce-transparency",t.reduceTransparency)}function Ln(e){let t=e.replace(/\s+/g,"").toLowerCase();return!t||t==="transparent"||/^rgba\(\d+,\d+,\d+,0(\.0+)?\)$/.test(t)||/\/0(\.0+)?\)$/.test(t)}function Cn(e){let t=e.defaultView;if(!t?.getComputedStyle)return null;for(let n of[e.body,e.documentElement]){if(!n)continue;let r=t.getComputedStyle(n).backgroundColor;if(r&&!Ln(r))return r}return null}function Mn(e){if(e.documentElement.classList.contains("dark"))return!0;if(e.documentElement.classList.contains("light"))return!1;return Boolean(e.defaultView?.matchMedia?.("(prefers-color-scheme: dark)").matches)}function Go(e,t={}){let n=t.root??e.documentElement;ne.setKeyboardAccessory(t.keyboardAccessory===!0);let r="",o="",i=()=>{let f=Cn(e);if(f&&f!==r)r=f,ne.setUnderPageColor(f);let u=Mn(e)?"light":"dark";if(u!==o)o=u,de.setStyle(u)},a=vt((f)=>{Pn(n,f),i()}),s=e.defaultView,c=typeof s?.MutationObserver==="function"?new s.MutationObserver(i):null;c?.observe(e.documentElement,{attributes:!0,attributeFilter:["class","style","data-theme"]});let m=s?.matchMedia?.("(prefers-color-scheme: dark)");return m?.addEventListener?.("change",i),s?.addEventListener("stx:load",i),i(),()=>{a(),c?.disconnect(),m?.removeEventListener?.("change",i),s?.removeEventListener("stx:load",i)}}var Yo=64;var Nn=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Hn=/^(?:0|[1-9]\d*)$/;function Tt(e){let t=[],n=[],r=e&&typeof e==="object"&&!Array.isArray(e)?e:{};for(let[o,i]of Object.entries(r)){let a=i&&typeof i==="object"?i:null;if(!a){n.push(`spotlight kind "${o}" is not an object`);continue}let{slots:s,route:c}=a,m=typeof a.noun==="string"&&a.noun.trim()?a.noun.trim():"Item";if(!Nn.test(o)||o.includes("-slot-")){n.push(`spotlight kind "${o}" is not a usable name: lowercase letters, digits and single dashes, and never "-slot-"`);continue}if(typeof s!=="number"||!Number.isInteger(s)||s<=0||s>64){n.push(`spotlight kind "${o}" needs slots between 1 and 64, not ${String(s)}`);continue}if(typeof c!=="string"||!c.startsWith("/")||!c.includes(":id")){n.push(`spotlight kind "${o}" needs a route starting with "/" and carrying ":id", not ${String(c)}`);continue}t.push({name:o,slots:s,route:c,noun:m})}return{kinds:t,problems:n}}function ae(e,t){return e.find((n)=>n.name===t)??null}function ie(e,t,n){let r=ae(e,t);if(!r||!Number.isInteger(n)||n<0||n>=r.slots)return null;return`${t}-slot-${n}`}function Dn(e,t){if(typeof t!=="string")return null;let n=t.lastIndexOf("-slot-");if(n<=0)return null;let r=t.slice(0,n),o=t.slice(n+6);if(!Hn.test(o))return null;let i=Number(o);return ie(e,r,i)===t?{kind:r,slot:i}:null}function It(e){return e.flatMap((t)=>Array.from({length:t.slots},(n,r)=>`${t.name}-slot-${r}`))}function Qo(e,t){let n=e&&typeof e==="object"?e:{};if(n.enabled===!1)return[];let o=[...(Array.isArray(n.activityTypes)?n.activityTypes.filter((i)=>typeof i==="string"&&i.trim().length>0):[]).map((i)=>i.trim()),...It(Tt(n.kinds).kinds)];return[...new Set(o)].map((i)=>`${t}.${i}`)}function Ot(e,t,n){let r=typeof n.name==="string"?n.name.replace(/\s+/g," ").trim():"";if(!r)return`${ae(e,t)?.noun??"Item"} #${n.id}`;return r.length>120?`${r.slice(0,119).trimEnd()}…`:r}function _n(e,t,n,r,o=Date.now()){let i=ae(e,n);if(!i||!Number.isInteger(r.id)||r.id<=0)return null;let a=t.filter((d)=>d.kind===n),s=Ot(e,n,r),c=a.find((d)=>d.itemId===r.id)??null,m=c?null:Un(a,i.slots),f=c||m!==null?null:$n(a),u=c?.slot??m??f?.slot;if(u===void 0||u===null)return null;let g={kind:n,slot:u,itemId:r.id,title:s,donatedAt:o},l=t.filter((d)=>d.kind!==n||d.slot!==u&&d.itemId!==r.id);return{entries:Pt(e,[...l,g]),entry:g,evicted:f,changed:!c||c.title!==s}}function Bn(e,t,n){let r=e.find((o)=>o.kind===t&&o.itemId===n)??null;return{entries:r?e.filter((o)=>o!==r):[...e],removed:r}}function Fn(e,t,n){let r=Dn(e,n);if(!r)return null;let o=t.find((a)=>a.kind===r.kind&&a.slot===r.slot),i=ae(e,r.kind)?.route;return o&&i?i.replace(":id",String(o.itemId)):null}function Wn(e,t){if(!Array.isArray(t))return[];let n=new Map,r=new Set;for(let o of t){if(!o||typeof o!=="object")continue;let i=o,{kind:a,slot:s,itemId:c,title:m,donatedAt:f}=i;if(typeof a!=="string"||typeof s!=="number"||ie(e,a,s)===null)continue;if(typeof c!=="number"||!Number.isInteger(c)||c<=0)continue;let u=`${a}-slot-${s}`,g=`${a}#${c}`;if(n.has(u)||r.has(g))continue;n.set(u,{kind:a,slot:s,itemId:c,title:typeof m==="string"&&m.trim()?m:Ot(e,a,{id:c}),donatedAt:typeof f==="number"&&Number.isFinite(f)&&f>0?f:0}),r.add(g)}return Pt(e,[...n.values()])}function Pt(e,t){let n=new Map(e.map((r,o)=>[r.name,o]));return[...t].sort((r,o)=>(n.get(r.kind)??0)-(n.get(o.kind)??0)||r.slot-o.slot)}function Un(e,t){let n=new Set(e.map((r)=>r.slot));for(let r=0;r<t;r++)if(!n.has(r))return r;return null}function $n(e){return e.reduce((t,n)=>!t||n.donatedAt<t.donatedAt?n:t,null)}function Kn(){let e=globalThis.craft;return e&&typeof e==="object"?e.siri:void 0}var jn="stacks_spotlight_index",qn=3000;function Xo(e){let t=e.onProblem??((b)=>console.warn(`[spotlight] ${b}`)),n=Array.isArray(e.kinds)?{kinds:[...e.kinds],problems:[]}:Tt(e.kinds);for(let b of n.problems)t(b);let r=e.enabled===!1?[]:n.kinds,o=e.storageKey??jn,i=e.legacyStorageKeys??[],a=e.timeoutMs??qn,s=e.now??(()=>Date.now()),c=e.bridge??Kn,m=null;function f(){try{return typeof localStorage>"u"?null:localStorage}catch{return null}}function u(){if(m)return m;m=[];let b=f();if(!b)return m;try{let x=[o,...i].map((A)=>b.getItem(A)).find((A)=>A);m=x?Wn(r,JSON.parse(x)):[]}catch{m=[]}return m}function g(b){m=b;let x=f();if(!x)return;try{x.setItem(o,JSON.stringify(b));for(let A of i)x.removeItem(A)}catch{}}async function l(b){if(!b)return null;let x;try{return await Promise.race([b,new Promise((A)=>{x=setTimeout(()=>A(null),a)})])}catch{return null}finally{if(x!==void 0)clearTimeout(x)}}let d=Promise.resolve();function y(b){let x=d.then(b,b);return d=x.catch(()=>{return}),x}async function w(b,x){let A=c()?.register;if(!A||r.length===0)return!1;return y(async()=>{let E=_n(r,u(),b,x,s()),h=E&&ie(r,b,E.entry.slot);if(!E||!h)return!1;if(!E.changed)return g(E.entries),!0;let S=await l(A(E.entry.title,h))!==null;if(S)g(E.entries);return S})}async function P(b,x){let A=c()?.remove;if(!A)return!1;return y(async()=>{let{entries:E,removed:h}=Bn(u(),b,x);if(!h)return!1;let S=ie(r,b,h.slot),T=S?await l(A(S))!==null:!1;return g(E),T})}async function W(b,x){let A=ae(r,b)?.slots;if(!A||!c()?.register)return 0;let E=0;for(let h of[...x].slice(0,A).reverse())if(await w(b,h))E++;return E}async function U(){let b=c()?.remove;if(!b)return g([]),0;return y(async()=>{let x=0;for(let A of u()){let E=ie(r,A.kind,A.slot);if(E&&await l(b(E))!==null)x++}return g([]),x})}return{kinds:r,index:w,sync:W,remove:P,clear:U,routeFor:(b)=>Fn(r,u(),b),entries:()=>u(),activityTypes:(b)=>It(r).map((x)=>`${b}.${x}`),reset:()=>{m=null}}}var Et=["craftShortcut","craftSiriShortcut"];function Jo(e,t){let n=(r)=>{let o=r.detail,i=typeof o==="string"?o:o&&typeof o==="object"?o.action??o.type:null,a=typeof i==="string"?e.routeFor(i):null;if(a)t(a)};if(typeof globalThis.addEventListener!=="function")return()=>{};for(let r of Et)globalThis.addEventListener(r,n);return()=>{for(let r of Et)globalThis.removeEventListener(r,n)}}import{tabBar as zn}from"craft-native/mobile";var Gn=zn;function Vn(e){return Array.from(e.querySelectorAll("a[data-native-tab]")).map((t)=>({id:t.getAttribute("href")||"",title:t.getAttribute("data-native-tab")||t.getAttribute("aria-label")||"",symbol:t.getAttribute("data-native-tab-symbol")||"circle",badge:(t.querySelector(".native-tab-badge")?.textContent||"").trim(),current:t.hasAttribute("data-stx-nav-current")||t.classList.contains("is-active")})).filter((t)=>t.id&&t.title)}function Yn(e){return{tabs:e.map(({id:n,title:r,symbol:o,badge:i})=>i?{id:n,title:r,symbol:o,badge:i}:{id:n,title:r,symbol:o}),selected:e.find((n)=>n.current)?.id}}function Ct(){if(typeof window>"u")return;let e=window.stxRouter;return e&&typeof e==="object"?e:void 0}function Qn(){return typeof Ct()?.selectTab==="function"}function ti(e,t={}){let n=(r)=>{if(Qn()||r.defaultPrevented)return;let o=r.target?.closest?.("a[data-native-tab]");if(!o||!e.contains(o))return;if(!o.hasAttribute("data-stx-nav-current")&&!o.classList.contains("is-active")&&o.getAttribute("aria-current")!=="page")return;r.preventDefault();let i=e.ownerDocument.defaultView;if(t.scrollToTop)t.scrollToTop();else i?.scrollTo?.({top:0,behavior:i.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"auto":"smooth"});i?.dispatchEvent(new CustomEvent("stx:tabreselect",{detail:{href:o.getAttribute("href")||""}}))};return e.addEventListener("click",n),()=>e.removeEventListener("click",n)}function Lt(e){let t=e.trim();return/^#[0-9a-f]{6}$/i.test(t)?t:void 0}var He="stacks:tab-bar-cover";function ni(e,t){if(t)e.setAttribute("data-native-covers-tab-bar","");else e.removeAttribute("data-native-covers-tab-bar");e.ownerDocument?.defaultView?.dispatchEvent(new Event(He))}function ri(e,t={}){let n=t.api??Gn;if(!n.isAvailable())return null;let r=t.hidden??(()=>Boolean(e.ownerDocument?.querySelector("[data-native-hide-tab-bar], [data-native-covers-tab-bar]"))),o=typeof getComputedStyle==="function"?getComputedStyle(e):null,i=Lt(o?.getPropertyValue("--native-tab-active")||""),a=Lt(o?.getPropertyValue("--native-tab-active-dark")||""),s="",c=()=>{if(r()){if(s!=="hidden")n.hide();s="hidden";return}let{tabs:g,selected:l}=Yn(Vn(e)),d=JSON.stringify({tabs:g,selected:l});if(d===s)return;let y=s&&s!=="hidden"?JSON.parse(s):null;if(y&&l&&JSON.stringify(y.tabs)===JSON.stringify(g))n.select(l);else n.set(g,{selected:l,tint:i,tintDark:a});s=d},m=typeof MutationObserver==="function"?new MutationObserver(c):null;m?.observe(e,{attributes:!0,attributeFilter:["data-stx-nav-current","class"],childList:!0,subtree:!0,characterData:!0});let f=n.onSelect((g)=>{let l=Ct();if(l?.selectTab){l.selectTab(g);return}Array.from(e.querySelectorAll("a[data-native-tab]")).find((y)=>y.getAttribute("href")===g)?.click()}),u=()=>c();if(typeof window<"u")window.addEventListener("stx:load",u),window.addEventListener("stx:screen-shown",u),window.addEventListener(He,u);return c(),()=>{if(m?.disconnect(),f(),typeof window<"u")window.removeEventListener("stx:load",u),window.removeEventListener("stx:screen-shown",u),window.removeEventListener(He,u);n.hide()}}function Xn(e={}){let t=e.maxSeconds??300,n=e.maxBytes??12582912;if(![t,n].every((l)=>Number.isSafeInteger(l)&&l>0)||t>300)throw TypeError("Invalid voice recording limits");let r={status:"idle",audio:null,error:null},o=new Set,i={},a=null,s=null,c,m=(l)=>{r=l;for(let d of o)d({...l})},f=()=>{clearTimeout(c),s?.getTracks().forEach((l)=>l.stop()),s=null};function u(){i={};let l=a;if(a=null,l&&l.state!=="inactive")l.stop();f(),m({status:"idle",audio:null,error:null})}async function g(){u();let l=i;m({status:"requesting",audio:null,error:null});try{if(typeof navigator>"u"||!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>"u")throw Error("Microphone recording is unavailable. Upload an audio recording instead.");let d=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1},video:!1});if(i!==l){d.getTracks().forEach((b)=>b.stop());return}s=d;let y=["audio/webm;codecs=opus","audio/mp4","audio/webm"].find((b)=>MediaRecorder.isTypeSupported(b)),w=new MediaRecorder(d,{...y?{mimeType:y}:{},audioBitsPerSecond:32000});a=w;let P=[],W=0,U=!1;w.ondataavailable=(b)=>{if(i!==l||!b.data.size)return;if(W+=b.data.size,W>n){if(U=!0,P.length=0,w.state!=="inactive")w.stop();f();return}if(!U)P.push(b.data)},w.onerror=()=>{if(i!==l)return;u(),m({status:"error",audio:null,error:"Recording failed. Please try again."})},w.onstop=()=>{if(i!==l)return;a=null,f();let b=new Blob(P,{type:w.mimeType||y||"audio/webm"});m(U||!b.size?{status:"error",audio:null,error:U?"The recording exceeds the upload limit.":"The recording was empty."}:{status:"ready",audio:b,error:null})},w.start(1000),c=setTimeout(()=>{if(i===l&&w.state!=="inactive")w.stop()},t*1000),m({status:"recording",audio:null,error:null})}catch(d){if(i!==l)return;f(),m({status:"error",audio:null,error:d instanceof Error?d.message:"Microphone permission was refused."})}}return{start:g,cancel:u,dispose(){u(),o.clear()},stop(){if(a&&a.state!=="inactive")a.stop()},supported:()=>typeof navigator<"u"&&Boolean(navigator.mediaDevices?.getUserMedia)&&typeof MediaRecorder<"u",snapshot:()=>({...r}),subscribe(l){return o.add(l),l({...r}),()=>{o.delete(l)}}}}var tr={isAvailable:()=>p(()=>De.isAvailable()),getBiometricType:()=>p(()=>De.getBiometricType()),authenticate:(e)=>p(()=>De.authenticate(e))},nr={takePicture:(e)=>p(()=>ve.takePicture(e)),pickImage:()=>p(()=>ve.pickImage()),pickMultiple:(e)=>p(()=>ve.pickMultiple(e)),isAvailable:()=>p(()=>ve.isAvailable())},rr={getInfo:()=>p(()=>Q.getInfo()),getCapabilities:()=>p(()=>Q.getCapabilities()),isMobile:()=>Q.isMobile(),isIOS:()=>Q.isIOS(),isAndroid:()=>Q.isAndroid(),getLocale:()=>Q.getLocale(),getTimezone:()=>Q.getTimezone()},or=Zn;function q(){return G()?.capabilities.locationRecordingOwnership===!0&&H.supportsRecordingOwnership?.()===!0}function z(){return G()?.capabilities.heartRateRecordingOwnership===!0&&k.supportsRecordingOwnership?.()===!0}function _t(){return q()&&G()?.capabilities.locationRecordingIntentIdentity===!0&&H.supportsRecordingIntentIdentity?.()===!0}function Bt(){return z()&&G()?.capabilities.heartRateRecordingIntentIdentity===!0&&k.supportsRecordingIntentIdentity?.()===!0}function Wt(e,t,n){return p(async()=>{let r=e&&Object.hasOwn(e,"recordingId");if(r){if(!t())throw Object.assign(Error("This host or adapter cannot start a registered recording identity"),{code:"RECORDING_INTENT_IDENTITY_UNSUPPORTED"});if(typeof e.recordingId!=="string"||!e.recordingId.trim())throw Object.assign(Error("A registered recording ID is required"),{code:"INVALID_ARGUMENT"})}let o=await n();if(r&&o.id!==e.recordingId)throw Object.assign(Error("The native recording identity changed at start"),{code:"RECORDING_CONFLICT"});return o})}function D(e,t,n){return p(()=>{if(e&&Object.hasOwn(e,"expectedId")){if(!t())throw Object.assign(Error("This host or adapter cannot protect recording ownership"),{code:"RECORDING_OWNERSHIP_UNSUPPORTED"});if(typeof e.expectedId!=="string"||!e.expectedId.trim())throw Object.assign(Error("A saved recording ID is required"),{code:"RECORDING_CONFLICT"})}return n()})}var ir={supportsRecordingOwnership:q,supportsRecordingIntentIdentity:_t,acknowledgeRecording:(e)=>D({expectedId:e?.expectedId},q,()=>H.acknowledgeRecording(e)),getCurrentPosition:(e)=>p(()=>H.getCurrentPosition(e)),watchPosition:(e,t)=>H.watchPosition(e,t),clearWatch:(e)=>H.clearWatch(e),startRecording:(e)=>Wt(e,_t,()=>H.startRecording(e)),pauseRecording:(e)=>D(e,q,()=>H.pauseRecording(e)),resumeRecording:(e)=>D(e,q,()=>H.resumeRecording(e)),stopRecording:(e)=>D(e,q,()=>H.stopRecording(e)),getRecordingState:(e)=>D(e,q,()=>H.getRecordingState(e)),readRecording:(e)=>D(e,q,()=>H.readRecording(e))},ar={show:(e)=>p(()=>Se.show(e)),schedule:(e)=>p(()=>Se.schedule(e)),cancelAll:()=>p(()=>Se.cancelAll()),setBadge:(e)=>p(()=>Se.setBadge(e))},sr={check:(e)=>p(()=>le.check(e)),request:(e)=>p(()=>le.request(e)),checkMultiple:(e)=>p(()=>le.checkMultiple(e)),requestMultiple:(e)=>p(()=>le.requestMultiple(e)),openSettings:()=>p(()=>le.openSettings())},lr={set:(e,t)=>p(()=>we.set(e,t)),get:(e)=>p(()=>we.get(e)),delete:(e)=>p(()=>we.delete(e)),clear:()=>p(()=>we.clear())},cr={share:(e)=>p(()=>Dt.share(e)),isAvailable:()=>Dt.isAvailable()},ur={request:()=>p(()=>Jn.request())},Ae={impact:(e)=>Promise.resolve().then(()=>ye.impact(e)).catch(()=>{}),notification:(e)=>Promise.resolve().then(()=>ye.notification(e)).catch(()=>{}),selection:()=>Promise.resolve().then(()=>ye.selection()).catch(()=>{}),vibrate:(e)=>Promise.resolve().then(()=>ye.vibrate(e)).catch(()=>{}),prepare:(e)=>{let t=M("haptics.prepare");return t?Promise.resolve().then(()=>t(e)).then(()=>{},()=>{}):Promise.resolve()}};function Ft(e){if(typeof e==="string")return e.trim()||null;if(!e||typeof e!=="object")return null;let t=e.url;return typeof t==="string"&&t.trim()?t:null}var dr={async getInitialURL(){if(!await X())return null;return Ft(await Mt.getInitialURL?.())},onLink(e){let t=null,n=!1,r=()=>{if(n)return;t=Mt.onLink?.((o,i)=>{let a=Ft(o);if(a)e(a,{initial:i?.initial===!0})})??null};if(Re()?.craft)r();else X().then(r);return()=>{n=!0,t?.()}}},pi={isAvailable:()=>xe.isAvailable(),set:(e,t)=>xe.set(e,t),remove:(e)=>xe.remove(e),clear:()=>xe.clear()},pr={enable:()=>p(()=>Nt.enable()),disable:()=>p(()=>Nt.disable())},fr={isAvailable:()=>be.isAvailable(),get:()=>p(()=>be.get()),set:(e)=>p(()=>be.set(e)),restore:()=>p(()=>be.restore())},mr={isAvailable:()=>F.isAvailable(),supports:(e)=>F.supports(e),getAuthorizationStatus:()=>p(()=>F.getAuthorizationStatus()),requestAuthorization:()=>p(()=>F.requestAuthorization()),getNowPlaying:()=>p(()=>F.getNowPlaying()),play:()=>p(()=>F.play()),pause:()=>p(()=>F.pause()),togglePlayPause:()=>p(()=>F.togglePlayPause()),skipToNext:()=>p(()=>F.skipToNext()),skipToPrevious:(e)=>p(()=>F.skipToPrevious(e)),onChange:(e)=>Y(()=>F.onChange(e))},gr={supportsRecordingOwnership:z,supportsRecordingIntentIdentity:Bt,acknowledgeRecording:(e)=>D({expectedId:e?.expectedId},z,()=>k.acknowledgeRecording(e)),isAvailable:()=>k.isAvailable(),supports:(e)=>k.supports(e),getState:()=>p(()=>k.getState()),requestAuthorization:()=>p(()=>k.requestAuthorization()),scan:(e)=>p(()=>k.scan(e)),stopScan:()=>p(()=>k.stopScan()),getDevices:()=>p(()=>k.getDevices()),connect:(e)=>p(()=>k.connect(e)),reconnect:()=>p(()=>k.reconnect()),disconnect:(e)=>p(()=>k.disconnect(e)),startRecording:(e)=>Wt(e,Bt,()=>k.startRecording(e)),pauseRecording:(e)=>D(e,z,()=>k.pauseRecording(e)),resumeRecording:(e)=>D(e,z,()=>k.resumeRecording(e)),stopRecording:(e)=>D(e,z,()=>k.stopRecording(e)),getRecordingState:(e)=>D(e,z,()=>k.getRecordingState(e)),readRecording:(e)=>D(e,z,()=>k.readRecording(e)),onReading:(e)=>Y(()=>k.onReading(e)),onDevice:(e)=>Y(()=>k.onDevice(e)),onState:(e)=>Y(()=>k.onState(e))},hr={isAvailable:()=>Fe.isAvailable(),speak:(e,t)=>p(()=>Fe.speak(e,t)),stop:()=>p(()=>Fe.stop())},br={getStatus:()=>p(()=>Ht.getStatus()),onChange:(e)=>Y(()=>Ht.onChange(e))},vr={register:()=>p(()=>Be.register()),onToken:(e)=>Be.onToken(e),onNotification:(e)=>Y(()=>Be.onNotification(e))},yr={requestAuthorization:(e,t)=>p(()=>se.requestAuthorization(e,t)),getData:(e,t)=>p(()=>se.getData(e,t)),saveWorkout:(e)=>p(()=>se.saveWorkout(e)),getWorkouts:(e)=>p(()=>se.getWorkouts(e)),getDailyStatistics:(e,t)=>p(()=>se.getDailyStatistics(e,t)),getHeartRateSamples:(e)=>v("health.getHeartRateSamples",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),getSamples:(e,t)=>v("health.getSamples",[e,t??{}],()=>[]).then((n)=>Array.isArray(n)?n:[]),getSleepIntervals:(e)=>v("health.getSleepIntervals",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),saveMindfulSession:(e)=>v("health.saveMindfulSession",[e],()=>null).then((t)=>t??null),getMindfulSessions:(e)=>v("health.getMindfulSessions",[e??{}],()=>[]).then((t)=>Array.isArray(t)?t:[]),startHeartRateUpdates:(e)=>v("health.startHeartRateUpdates",[e??{}],()=>!1).then((t)=>t!==!1),stopHeartRateUpdates:()=>v("health.stopHeartRateUpdates",[],()=>!0).then(()=>!0),onHeartRate:(e)=>_("craftHealthHeartRate",(t)=>{if(Array.isArray(t.samples)&&t.samples.length)e(t.samples)}),supports:(e)=>M(`health.${e}`)!==null},Sr={start:(e)=>p(()=>_e.start(e)),update:(e)=>p(()=>_e.update(e)),end:()=>p(()=>_e.end())},wr={send:(e)=>p(()=>ce.send(e)),updateContext:(e)=>p(()=>ce.updateContext(e)),isReachable:()=>p(()=>ce.isReachable()),onMessage:(e)=>ce.onMessage(e),onReachabilityChange:(e)=>ce.onReachabilityChange(e)},fi=er;function Re(){return R()}function G(){let e=Re()?.craft;if(!e||typeof e!=="object")return null;if(!("platform"in e)||e.platform!=="ios"&&e.platform!=="android")return null;let t="capabilities"in e?e.capabilities:void 0,n=t&&typeof t==="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).filter(([,r])=>typeof r==="boolean")):{};return{platform:e.platform,capabilities:n}}function We(){return G()!==null}function xr(e=2000){if(We()||ee())return Promise.resolve(!0);let t=Re();if(!t||!(t.craft||t.webkit?.messageHandlers?.craft))return Promise.resolve(!1);return new Promise((n)=>{let r=()=>{clearTimeout(o),t.removeEventListener("craftReady",r),n(We())},o=setTimeout(r,e);t.addEventListener("craftReady",r,{once:!0})})}function Ar(e){let t=Re();if(!t)return()=>{};if(G()){let r=!1;return queueMicrotask(()=>{if(!r)e(new Event("craftReady"))}),()=>{r=!0}}let n=(r)=>{if(!G())return;t.removeEventListener("craftReady",n),e(r)};return t.addEventListener("craftReady",n),()=>t.removeEventListener("craftReady",n)}async function Rr(e){await Ae.impact("light");try{let t=await e();return await Ae.notification("success"),t}catch(t){throw await Ae.notification("error"),t}}var mi={get nativeBridge(){return G()},biometrics:tr,camera:nr,device:rr,haptics:Ae,lifecycle:or,location:ir,notifications:ar,permissions:sr,secureStorage:lr,storage:dt,crypto:pt,share:cr,appReview:ur,deepLinks:dr,keepAwake:pr,brightness:fr,music:mr,heartRate:gr,scheduledWorkouts:mt,speech:hr,network:br,pushNotifications:vr,health:yr,liveActivities:Sr,watchConnectivity:wr,dialog:te,contextMenu:Pe,browser:Ze,symbols:et,statusBar:de,chrome:ne,refresh:j,background:re,clipboard:tt,db:nt,files:rt,shortcuts:ot,widgets:it,orientation:at,auth:st,storeKit:lt,isNativeMobile:We,whenNative:xr,onReady:Ar,withFeedback:Rr};export{kr as BRIDGE_WAIT_MS,Ao as HEART_RATE_MATCH_MS,Mo as INDOOR_CHECK_AFTER_S,Yo as MAX_SPOTLIGHT_SLOTS_PER_KIND,Sn as ROUTE_GAP_S,Wo as SHEET_FLICK_VELOCITY,He as TAB_BAR_COVER_EVENT,p as afterBridge,ur as appReview,Pn as applyAppearance,vn as attachHeartRate,st as auth,ho as backLabelFor,re as background,tr as biometrics,ue as bridgePending,fr as brightness,Ze as browser,v as callNative,nr as camera,mn as canGoBack,ne as chrome,tt as clipboard,Cr as confirmAction,Pe as contextMenu,ni as coverTabBar,R as craftHost,V as craftRoot,Zr as crashReporting,Eo as createRouteRecorder,Xo as createSpotlightIndex,Xn as createVoiceRecorder,pt as crypto,bt as currentAppearance,nt as db,hn as deepLinkPath,dr as deepLinks,rr as device,te as dialog,go as enterNavTrail,rt as files,xn as fixDistance,Gr as focusSegment,wo as followDeepLinks,G as getNativeMobileBridge,mo as goBack,yo as goBackToTabRoot,ti as handleTabReselect,Ae as haptics,ee as hasNativeMobileHost,yr as health,gr as heartRate,No as indoorVerdict,Go as installNativeChrome,Vr as installPressables,We as isNativeMobile,kn as isShown,pr as keepAwake,an as keepBreadcrumb,pn as largeTitleMetrics,or as lifecycle,$o as liftToBody,Sr as liveActivities,ir as location,ri as mirrorTabBar,mi as mobile,mr as music,jt as nativeFunction,M as nativeFunctionNow,Yn as nativeTabs,bo as navTrail,br as network,ln as normalizeAppearance,Ft as normalizeDeepLinkURL,nn as normalizeScheduledWorkout,ar as notifications,uo as observeLargeTitle,jr as observeLongPress,Bo as observeNativeRefresh,un as observePageScroll,co as observePullToRefresh,qr as observeSegmentScrub,Uo as observeSheetDrag,vt as onAppearance,ao as onBackgroundRefresh,_ as onCraftEvent,oo as onMemoryWarning,Ar as onMobileReady,ro as onResume,io as onSilentPush,Jo as onSpotlightTap,at as orientation,Ro as paceLabel,Cn as pageBackground,Mn as pageIsDark,oe as pageScrollTop,Oo as pauseSessionClock,sr as permissions,Yt as placeMenu,_n as placeSpotlightItem,Ge as presentActionSheet,qe as presentAlert,ke as presentChoice,ze as presentConfirm,Ve as presentContextMenu,Ko as presentPageAsCard,vo as previousScreenPath,dn as pullDistance,vr as pushNotifications,Wn as readSpotlightEntries,Tt as readSpotlightKinds,Vn as readTabLinks,j as refresh,Bn as removeSpotlightItem,po as resolveScrollHost,Po as resumeSessionClock,Me as routeStats,Qn as routerHandlesTabs,On as rubberBand,mt as scheduledWorkouts,tn as scheduledWorkoutsUnsupported,lr as secureStorage,rn as segmentAt,zr as segmentForKey,Lo as sessionClockElapsed,In as settleSheet,cr as share,Tn as sheetStops,ot as shortcuts,Mr as showContextMenuFor,pi as snapshots,hr as speech,ko as speedLabel,fi as splash,ie as spotlightAction,It as spotlightActions,Qo as spotlightActivityTypes,Kn as spotlightBridge,ae as spotlightKind,Fn as spotlightRoute,Dn as spotlightSlot,Ot as spotlightTitle,Io as startSessionClock,de as statusBar,dt as storage,lt as storeKit,Y as subscribeWhenReady,et as symbols,Gn as tabBar,Oe as toNativeRect,So as trailEntryFor,Ho as typedDistanceKm,An as usableFixes,Lr as useActionSheet,wr as watchConnectivity,X as whenBridgeReady,xr as whenNativeMobile,it as widgets,Rr as withNativeFeedback};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function createVoiceRecorder(options?: VoiceRecorderOptions): {
|
|
2
|
+
start: unknown;
|
|
3
|
+
cancel: unknown;
|
|
4
|
+
dispose: () => void;
|
|
5
|
+
stop: () => void;
|
|
6
|
+
supported: () => boolean;
|
|
7
|
+
snapshot: () => unknown;
|
|
8
|
+
subscribe: (listener: (value: VoiceRecorderSnapshot) => void) => () => void
|
|
9
|
+
};
|
|
10
|
+
/** A bounded, disposable microphone session. Audio is never persisted by this helper. */
|
|
11
|
+
export declare interface VoiceRecorderOptions { maxSeconds?: number, maxBytes?: number }
|
|
12
|
+
export declare interface VoiceRecorderSnapshot { status: VoiceRecorderStatus, audio: Blob | null, error: string | null }
|
|
13
|
+
export type VoiceRecorderStatus = 'idle' | 'requesting' | 'recording' | 'ready' | 'error';
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/mobile",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.285",
|
|
6
6
|
"description": "Craft-powered native mobile runtime for Stacks and STX applications",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"license": "MIT",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@bughq/sdk": "^0.3.0",
|
|
42
|
-
"@stacksjs/types": "0.75.
|
|
43
|
-
"craft-native": ">=0.0.
|
|
42
|
+
"@stacksjs/types": "0.75.285",
|
|
43
|
+
"craft-native": ">=0.0.319"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@stacksjs/build": "0.75.
|
|
46
|
+
"@stacksjs/build": "0.75.285",
|
|
47
47
|
"better-dx": "^0.2.24"
|
|
48
48
|
}
|
|
49
49
|
}
|