@stacksjs/mobile 0.75.258 → 0.75.261

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/README.md CHANGED
@@ -129,6 +129,22 @@ if (health.supports('getHeartRateSamples')) {
129
129
  }
130
130
  ```
131
131
 
132
+ For diabetes, `health.getSamples(type, { startDate, endDate })` reads
133
+ `bloodGlucose` (mg/dL), `insulinDelivery` (IU, each marked `basal` or `bolus`)
134
+ and `dietaryCarbohydrates` (g) one sample at a time, oldest first, each with
135
+ the id HealthKit or Health Connect gave it, so a sync can store it once. Ask for
136
+ them read only. Health Connect has no insulin type, so Android answers `[]` for
137
+ it. `fromPhoneSamples` in `ts-health/glucose` turns the samples into readings,
138
+ doses and carbs.
139
+
140
+ ```ts
141
+ await health.requestAuthorization(['bloodGlucose', 'insulinDelivery', 'dietaryCarbohydrates'], { write: false })
142
+ if (health.supports('getSamples')) {
143
+ const glucose = await health.getSamples('bloodGlucose', { startDate: Date.now() - 86400000 })
144
+ const doses = await health.getSamples('insulinDelivery', { startDate: Date.now() - 86400000 })
145
+ }
146
+ ```
147
+
132
148
  Mindful minutes: ask for `mindful` with writing allowed, then
133
149
  `health.saveMindfulSession({ id, startDate, endDate })` records a meditation or
134
150
  breathing session. The id is kept as the sample's external UUID, so saving it
package/dist/index.d.ts CHANGED
@@ -1793,6 +1793,21 @@ declare interface PushNotificationsApi {
1793
1793
  onToken: (callback: (token: string) => void) => () => void
1794
1794
  onNotification: (callback: (data: Record<string, unknown>) => void) => () => void
1795
1795
  }
1796
+ /** One glucose reading, insulin dose or carb entry as the writing app saved it. */
1797
+ declare interface HealthQuantitySample {
1798
+ id: string
1799
+ value: number
1800
+ unit: 'mg/dL' | 'IU' | 'g'
1801
+ startDate: number
1802
+ endDate: number
1803
+ sourceName: string
1804
+ sourceBundleId: string
1805
+ ownApp: boolean
1806
+ deviceName?: string
1807
+ insulinReason?: 'basal' | 'bolus'
1808
+ mealTime?: 'beforeMeal' | 'afterMeal' | 'fasting' | 'general'
1809
+ specimen?: string
1810
+ }
1796
1811
  declare interface HealthDataOptions {
1797
1812
  startDate?: number
1798
1813
  endDate?: number
@@ -1913,6 +1928,7 @@ declare interface HealthApi {
1913
1928
  getWorkouts: (options?: HealthWorkoutQuery) => Promise<HealthWorkoutSample[]>
1914
1929
  getDailyStatistics: (type: HealthDailyType, options?: HealthDataOptions) => Promise<HealthDailyValue[]>
1915
1930
  getHeartRateSamples: (options?: HealthHeartRateQuery) => Promise<HealthHeartRateSample[]>
1931
+ getSamples: (type: HealthSampleType, options?: HealthHeartRateQuery) => Promise<HealthQuantitySample[]>
1916
1932
  getSleepIntervals: (options?: HealthSampleQuery) => Promise<HealthSleepInterval[]>
1917
1933
  saveMindfulSession: (session: HealthMindfulSession) => Promise<HealthMindfulSessionResult | null>
1918
1934
  getMindfulSessions: (options?: HealthMindfulSessionQuery) => Promise<HealthMindfulSample[]>
@@ -1992,9 +2008,15 @@ type HealthDataType = | 'steps'
1992
2008
  | 'dietaryCarbohydrates'
1993
2009
  | 'dietaryFat'
1994
2010
  /** Mindful minutes (meditation, breathing): `saveMindfulSession` writes, `getMindfulSessions` reads (Craft 0.0.161). */
1995
- | 'mindful';
2011
+ | 'mindful'
2012
+ /** Blood glucose from a CGM or meter, in mg/dL: read with `getSamples`. Read only (Craft 0.0.291). */
2013
+ | 'bloodGlucose'
2014
+ /** Insulin from a pump, pen or loop, in IU, marked basal or bolus: read with `getSamples`. Read only; HealthKit only (Craft 0.0.291). */
2015
+ | 'insulinDelivery';
1996
2016
  /** The types with one value per day. `sleep` is hours asleep, counted on the day you woke. */
1997
- type HealthDailyType = Exclude<HealthDataType, 'workouts' | 'mindful'>;
2017
+ type HealthDailyType = Exclude<HealthDataType, 'workouts' | 'mindful' | 'bloodGlucose' | 'insulinDelivery'>;
2018
+ /** What `health.getSamples()` reads one sample at a time: glucose, insulin and carbs. */
2019
+ type HealthSampleType = 'bloodGlucose' | 'insulinDelivery' | 'dietaryCarbohydrates';
1998
2020
  type HealthWorkoutType = 'running' | 'walking' | 'hiking' | 'cycling';
1999
2021
  /** The activity of a workout read from Apple Health, named independently of the SDK. */
2000
2022
  type HealthWorkoutActivity = | 'running' | 'cycling' | 'walking' | 'hiking' | 'swimming' | 'rowing' | 'elliptical'
@@ -2003,7 +2025,7 @@ type HealthWorkoutActivity = | 'running' | 'cycling' | 'walking' | 'hiking' | 's
2003
2025
  /** A sleep analysis stage: in bed, awake, or asleep (staged or not). */
2004
2026
  type HealthSleepStage = 'inBed' | 'awake' | 'asleep' | 'core' | 'deep' | 'rem';
2005
2027
  /** The health reads and writes an installed app build may or may not answer. */
2006
- type HealthReadMethod = 'getWorkouts' | 'getDailyStatistics' | 'getHeartRateSamples' | 'getSleepIntervals' | 'saveMindfulSession' | 'getMindfulSessions'
2028
+ type HealthReadMethod = 'getWorkouts' | 'getDailyStatistics' | 'getHeartRateSamples' | 'getSamples' | 'getSleepIntervals' | 'saveMindfulSession' | 'getMindfulSessions'
2007
2029
  | 'startHeartRateUpdates' | 'stopHeartRateUpdates';
2008
2030
 
2009
2031
  // From: src/storage.ts
@@ -2014,6 +2036,6 @@ declare const storage: StorageApi;
2014
2036
  // From: src/crypto.ts
2015
2037
  declare const crypto: CryptoApi;
2016
2038
 
2017
- 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, 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, 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, HealthWorkoutType, HealthWorkoutActivity, HealthSleepStage, HealthReadMethod, storage, crypto };
2039
+ 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, 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 };
2018
2040
  export { NativeTab } from 'craft-native/mobile';
2019
2041
  export { NativeTabBarOptions } from 'craft-native/mobile';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{appReview as Qn,biometrics as De,brightness as be,camera as ve,deepLinks as Mt,device as Y,haptics as ye,health as se,heartRate as R,keepAwake as Nt,lifecycle as Jn,liveActivities as _e,location as N,music as B,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 Zn,watchConnectivity as ce}from"craft-native/mobile";var Rr=2500;function A(){if(typeof window>"u")return;return window}function V(){let e=A()?.craft;return e&&typeof e==="object"?e:void 0}function $t(){return typeof navigator>"u"?"":navigator.userAgent||""}function ee(){let e=A();if(!e)return!1;if(e.CraftAndroid)return!0;return Boolean(e.webkit?.messageHandlers?.craft)&&/iPhone|iPad|iPod/.test($t())}function ue(){let e=A();if(!e||e.craft)return!1;return ee()||Boolean(e.webkit?.messageHandlers?.craft)}function X(e=15000){let t=A();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 C(e){return Kt(V(),e)}async function jt(e,t=2500){let n=C(e);if(n||!ue())return n;return await X(t),C(e)}async function b(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 u(e,t=2500){if(ue())await X(t);return e()}function G(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 D(e,t){let n=A();if(!n)return()=>{};let r=(o)=>t(o.detail??{});return n.addEventListener(e,r),()=>n.removeEventListener(e,r)}var Ue="native-dialog-styles",qt=`
1
+ import{appReview as Xn,biometrics as De,brightness as be,camera as ve,deepLinks as Mt,device as Y,haptics as ye,health as se,heartRate as R,keepAwake as Nt,lifecycle as Jn,liveActivities as _e,location as N,music as B,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 Zn,watchConnectivity as ce}from"craft-native/mobile";var Rr=2500;function A(){if(typeof window>"u")return;return window}function V(){let e=A()?.craft;return e&&typeof e==="object"?e:void 0}function $t(){return typeof navigator>"u"?"":navigator.userAgent||""}function ee(){let e=A();if(!e)return!1;if(e.CraftAndroid)return!0;return Boolean(e.webkit?.messageHandlers?.craft)&&/iPhone|iPad|iPod/.test($t())}function ue(){let e=A();if(!e||e.craft)return!1;return ee()||Boolean(e.webkit?.messageHandlers?.craft)}function Q(e=15000){let t=A();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 C(e){return Kt(V(),e)}async function jt(e,t=2500){let n=C(e);if(n||!ue())return n;return await Q(t),C(e)}async function b(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 u(e,t=2500){if(ue())await Q(t);return e()}function G(e,t=2500){let n,r=!1;if(!ue())n=e();else Q(t).then(()=>{if(!r)n=e()});return()=>{if(r=!0,typeof n==="function")n()}}function D(e,t){let n=A();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 Qn,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 Xt(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],()=>Xt(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 Xe(e,t){return`${e}|${t.pointSize??""}|${t.weight??""}|${t.color??""}|${t.scale??""}`}var et={isAvailable:()=>C("symbols.image")!==null,image:(e,t={})=>{let n=Xe(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(Xe(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 Qt(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],()=>Qt(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 Qe(){return A()?.screen?.orientation}var at={lock:(e)=>b("lockOrientation",[e],()=>{let t=Qe();return t?.lock?t.lock(Jt[e]).then(Je,P):!1}).then((t)=>t!==!1),unlock:()=>b("unlockOrientation",[],()=>(Qe()?.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 V()?.capabilities?.storageCompareAndSet===!0&&W.supportsCompareAndSet?.()===!0}function ut(){return V()?.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=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 Q(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:()=>Q("authorization",ft),requestAuthorization:()=>Q("requestAuthorization",ft),list:()=>Q("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 Q("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)=>Q("remove",(t)=>t===!0,e),removeAll:()=>Q("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 Xo(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 Qo(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 Xn(){return typeof Ct()?.selectTab==="function"}function ei(e,t={}){let n=(r)=>{if(Xn()||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(()=>Y.getInfo()),getCapabilities:()=>u(()=>Y.getCapabilities()),isMobile:()=>Y.isMobile(),isIOS:()=>Y.isIOS(),isAndroid:()=>Y.isAndroid(),getLocale:()=>Y.getLocale(),getTimezone:()=>Y.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(()=>Qn.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 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?.()}}},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)=>G(()=>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)=>G(()=>R.onReading(e)),onDevice:(e)=>G(()=>R.onDevice(e)),onState:(e)=>G(()=>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)=>G(()=>Ht.onChange(e))},br={register:()=>u(()=>Be.register()),onToken:(e)=>Be.onToken(e),onNotification:(e)=>G(()=>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:[]),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,V as craftRoot,Jr as crashReporting,ko as createRouteRecorder,Xo 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,Qo 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,Xn 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,G 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,X as whenBridgeReady,wr as whenNativeMobile,it as widgets,Ar as withNativeFeedback};
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 V()?.capabilities?.storageCompareAndSet===!0&&W.supportsCompareAndSet?.()===!0}function ut(){return V()?.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=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 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(()=>Y.getInfo()),getCapabilities:()=>u(()=>Y.getCapabilities()),isMobile:()=>Y.isMobile(),isIOS:()=>Y.isIOS(),isAndroid:()=>Y.isAndroid(),getLocale:()=>Y.getLocale(),getTimezone:()=>Y.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)=>G(()=>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)=>G(()=>R.onReading(e)),onDevice:(e)=>G(()=>R.onDevice(e)),onState:(e)=>G(()=>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)=>G(()=>Ht.onChange(e))},br={register:()=>u(()=>Be.register()),onToken:(e)=>Be.onToken(e),onNotification:(e)=>G(()=>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,V 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,G 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};
package/dist/types.d.ts CHANGED
@@ -437,6 +437,21 @@ export declare interface PushNotificationsApi {
437
437
  onToken: (callback: (token: string) => void) => () => void
438
438
  onNotification: (callback: (data: Record<string, unknown>) => void) => () => void
439
439
  }
440
+ /** One glucose reading, insulin dose or carb entry as the writing app saved it. */
441
+ export declare interface HealthQuantitySample {
442
+ id: string
443
+ value: number
444
+ unit: 'mg/dL' | 'IU' | 'g'
445
+ startDate: number
446
+ endDate: number
447
+ sourceName: string
448
+ sourceBundleId: string
449
+ ownApp: boolean
450
+ deviceName?: string
451
+ insulinReason?: 'basal' | 'bolus'
452
+ mealTime?: 'beforeMeal' | 'afterMeal' | 'fasting' | 'general'
453
+ specimen?: string
454
+ }
440
455
  export declare interface HealthDataOptions {
441
456
  startDate?: number
442
457
  endDate?: number
@@ -557,6 +572,7 @@ export declare interface HealthApi {
557
572
  getWorkouts: (options?: HealthWorkoutQuery) => Promise<HealthWorkoutSample[]>
558
573
  getDailyStatistics: (type: HealthDailyType, options?: HealthDataOptions) => Promise<HealthDailyValue[]>
559
574
  getHeartRateSamples: (options?: HealthHeartRateQuery) => Promise<HealthHeartRateSample[]>
575
+ getSamples: (type: HealthSampleType, options?: HealthHeartRateQuery) => Promise<HealthQuantitySample[]>
560
576
  getSleepIntervals: (options?: HealthSampleQuery) => Promise<HealthSleepInterval[]>
561
577
  saveMindfulSession: (session: HealthMindfulSession) => Promise<HealthMindfulSessionResult | null>
562
578
  getMindfulSessions: (options?: HealthMindfulSessionQuery) => Promise<HealthMindfulSample[]>
@@ -636,9 +652,15 @@ export type HealthDataType = | 'steps'
636
652
  | 'dietaryCarbohydrates'
637
653
  | 'dietaryFat'
638
654
  /** Mindful minutes (meditation, breathing): `saveMindfulSession` writes, `getMindfulSessions` reads (Craft 0.0.161). */
639
- | 'mindful';
655
+ | 'mindful'
656
+ /** Blood glucose from a CGM or meter, in mg/dL: read with `getSamples`. Read only (Craft 0.0.291). */
657
+ | 'bloodGlucose'
658
+ /** Insulin from a pump, pen or loop, in IU, marked basal or bolus: read with `getSamples`. Read only; HealthKit only (Craft 0.0.291). */
659
+ | 'insulinDelivery';
640
660
  /** The types with one value per day. `sleep` is hours asleep, counted on the day you woke. */
641
- export type HealthDailyType = Exclude<HealthDataType, 'workouts' | 'mindful'>;
661
+ export type HealthDailyType = Exclude<HealthDataType, 'workouts' | 'mindful' | 'bloodGlucose' | 'insulinDelivery'>;
662
+ /** What `health.getSamples()` reads one sample at a time: glucose, insulin and carbs. */
663
+ export type HealthSampleType = 'bloodGlucose' | 'insulinDelivery' | 'dietaryCarbohydrates';
642
664
  export type HealthWorkoutType = 'running' | 'walking' | 'hiking' | 'cycling';
643
665
  /** The activity of a workout read from Apple Health, named independently of the SDK. */
644
666
  export type HealthWorkoutActivity = | 'running' | 'cycling' | 'walking' | 'hiking' | 'swimming' | 'rowing' | 'elliptical'
@@ -647,5 +669,5 @@ export type HealthWorkoutActivity = | 'running' | 'cycling' | 'walking' | 'hikin
647
669
  /** A sleep analysis stage: in bed, awake, or asleep (staged or not). */
648
670
  export type HealthSleepStage = 'inBed' | 'awake' | 'asleep' | 'core' | 'deep' | 'rem';
649
671
  /** The health reads and writes an installed app build may or may not answer. */
650
- export type HealthReadMethod = 'getWorkouts' | 'getDailyStatistics' | 'getHeartRateSamples' | 'getSleepIntervals' | 'saveMindfulSession' | 'getMindfulSessions'
672
+ export type HealthReadMethod = 'getWorkouts' | 'getDailyStatistics' | 'getHeartRateSamples' | 'getSamples' | 'getSleepIntervals' | 'saveMindfulSession' | 'getMindfulSessions'
651
673
  | 'startHeartRateUpdates' | 'stopHeartRateUpdates';
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.258",
5
+ "version": "0.75.261",
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.258",
43
- "craft-native": ">=0.0.272"
42
+ "@stacksjs/types": "0.75.261",
43
+ "craft-native": ">=0.0.290"
44
44
  },
45
45
  "devDependencies": {
46
- "@stacksjs/build": "0.75.258",
46
+ "@stacksjs/build": "0.75.261",
47
47
  "better-dx": "^0.2.24"
48
48
  }
49
49
  }