@almadar/mobile 1.2.6 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-4GLV4XIP.js +140 -0
- package/dist/chunk-4GLV4XIP.js.map +1 -0
- package/dist/{chunk-QUFLYKWA.js → chunk-A6AK75GP.js} +43 -554
- package/dist/chunk-A6AK75GP.js.map +1 -0
- package/dist/chunk-BUN5QD6C.js +525 -0
- package/dist/chunk-BUN5QD6C.js.map +1 -0
- package/dist/{chunk-PBO6ZN2M.js → chunk-C3USTXJ7.js} +1372 -2255
- package/dist/chunk-C3USTXJ7.js.map +1 -0
- package/dist/{chunk-5U5Z65ZO.js → chunk-DNC6CO6E.js} +58 -187
- package/dist/chunk-DNC6CO6E.js.map +1 -0
- package/dist/chunk-I6UYSB5R.js +935 -0
- package/dist/chunk-I6UYSB5R.js.map +1 -0
- package/dist/{chunk-ETD72PHO.js → chunk-SLYJ52HW.js} +30 -21
- package/dist/chunk-SLYJ52HW.js.map +1 -0
- package/dist/chunk-UIU7NWN2.js +924 -0
- package/dist/chunk-UIU7NWN2.js.map +1 -0
- package/dist/{chunk-BFRVXKSP.js → chunk-VNRKHWR7.js} +87 -4
- package/dist/chunk-VNRKHWR7.js.map +1 -0
- package/dist/{chunk-CA6Z3OTE.js → chunk-WHAG42QJ.js} +1 -1
- package/dist/chunk-WHAG42QJ.js.map +1 -0
- package/dist/{chunk-GMR5FKKB.js → chunk-XWPR5FXS.js} +2 -2
- package/dist/chunk-XWPR5FXS.js.map +1 -0
- package/dist/{chunk-MLTSQPVN.js → chunk-YWQRLHTP.js} +2 -2
- package/dist/chunk-YWQRLHTP.js.map +1 -0
- package/dist/components/atoms/Button.d.ts +3 -2
- package/dist/components/atoms/Button.d.ts.map +1 -1
- package/dist/components/atoms/Card.d.ts +3 -2
- package/dist/components/atoms/Card.d.ts.map +1 -1
- package/dist/components/atoms/Checkbox.d.ts +3 -2
- package/dist/components/atoms/Checkbox.d.ts.map +1 -1
- package/dist/components/atoms/DayCell.d.ts +3 -2
- package/dist/components/atoms/DayCell.d.ts.map +1 -1
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts +3 -2
- package/dist/components/atoms/InfiniteScrollSentinel.d.ts.map +1 -1
- package/dist/components/atoms/Radio.d.ts +3 -2
- package/dist/components/atoms/Radio.d.ts.map +1 -1
- package/dist/components/atoms/RangeSlider.d.ts +3 -2
- package/dist/components/atoms/RangeSlider.d.ts.map +1 -1
- package/dist/components/atoms/Select.d.ts +3 -2
- package/dist/components/atoms/Select.d.ts.map +1 -1
- package/dist/components/atoms/Switch.d.ts +3 -2
- package/dist/components/atoms/Switch.d.ts.map +1 -1
- package/dist/components/atoms/TextHighlight.d.ts +3 -2
- package/dist/components/atoms/TextHighlight.d.ts.map +1 -1
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts +25 -0
- package/dist/components/atoms/game/OrbitalGameCanvas.d.ts.map +1 -0
- package/dist/components/atoms/game/index.d.ts +2 -0
- package/dist/components/atoms/game/index.d.ts.map +1 -1
- package/dist/components/atoms/index.d.ts +4 -4
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/atoms/index.js +14 -9
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -20
- package/dist/components/molecules/Alert.d.ts +3 -2
- package/dist/components/molecules/Alert.d.ts.map +1 -1
- package/dist/components/molecules/DataGrid.d.ts +6 -5
- package/dist/components/molecules/DataGrid.d.ts.map +1 -1
- package/dist/components/molecules/DataList.d.ts +5 -4
- package/dist/components/molecules/DataList.d.ts.map +1 -1
- package/dist/components/molecules/NumberStepper.d.ts +3 -2
- package/dist/components/molecules/NumberStepper.d.ts.map +1 -1
- package/dist/components/molecules/PullToRefresh.d.ts +3 -2
- package/dist/components/molecules/PullToRefresh.d.ts.map +1 -1
- package/dist/components/molecules/RelationSelect.d.ts +3 -2
- package/dist/components/molecules/RelationSelect.d.ts.map +1 -1
- package/dist/components/molecules/RepeatableFormSection.d.ts +6 -5
- package/dist/components/molecules/RepeatableFormSection.d.ts.map +1 -1
- package/dist/components/molecules/SortableList.d.ts +2 -1
- package/dist/components/molecules/SortableList.d.ts.map +1 -1
- package/dist/components/molecules/StarRating.d.ts +3 -2
- package/dist/components/molecules/StarRating.d.ts.map +1 -1
- package/dist/components/molecules/SwipeableRow.d.ts +3 -2
- package/dist/components/molecules/SwipeableRow.d.ts.map +1 -1
- package/dist/components/molecules/Toast.d.ts +3 -2
- package/dist/components/molecules/Toast.d.ts.map +1 -1
- package/dist/components/molecules/index.js +9 -6
- package/dist/components/organisms/CardGrid.d.ts +6 -5
- package/dist/components/organisms/CardGrid.d.ts.map +1 -1
- package/dist/components/organisms/ComponentPatterns.d.ts.map +1 -1
- package/dist/components/organisms/ContentRenderer.d.ts.map +1 -1
- package/dist/components/organisms/DataTable.d.ts +2 -4
- package/dist/components/organisms/DataTable.d.ts.map +1 -1
- package/dist/components/organisms/DocumentViewer.d.ts.map +1 -1
- package/dist/components/organisms/DrawerSlot.d.ts +5 -4
- package/dist/components/organisms/DrawerSlot.d.ts.map +1 -1
- package/dist/components/organisms/FormSection.d.ts +8 -1
- package/dist/components/organisms/FormSection.d.ts.map +1 -1
- package/dist/components/organisms/Header.d.ts +3 -2
- package/dist/components/organisms/Header.d.ts.map +1 -1
- package/dist/components/organisms/LayoutPatterns.d.ts.map +1 -1
- package/dist/components/organisms/MasterDetail.d.ts.map +1 -1
- package/dist/components/organisms/MediaGallery.d.ts +2 -1
- package/dist/components/organisms/MediaGallery.d.ts.map +1 -1
- package/dist/components/organisms/ModalSlot.d.ts +5 -4
- package/dist/components/organisms/ModalSlot.d.ts.map +1 -1
- package/dist/components/organisms/PageHeader.d.ts +7 -0
- package/dist/components/organisms/PageHeader.d.ts.map +1 -1
- package/dist/components/organisms/SignaturePad.d.ts.map +1 -1
- package/dist/components/organisms/StatCard.d.ts +3 -2
- package/dist/components/organisms/StatCard.d.ts.map +1 -1
- package/dist/components/organisms/StateMachineView.d.ts.map +1 -1
- package/dist/components/organisms/Table.d.ts.map +1 -1
- package/dist/components/organisms/ToastSlot.d.ts +6 -5
- package/dist/components/organisms/ToastSlot.d.ts.map +1 -1
- package/dist/components/organisms/UISlotRenderer.d.ts +2 -1
- package/dist/components/organisms/UISlotRenderer.d.ts.map +1 -1
- package/dist/components/organisms/book/BookChapterView.d.ts +2 -1
- package/dist/components/organisms/book/BookChapterView.d.ts.map +1 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts +2 -1
- package/dist/components/organisms/book/BookCoverPage.d.ts.map +1 -1
- package/dist/components/organisms/book/BookNavBar.d.ts +2 -1
- package/dist/components/organisms/book/BookNavBar.d.ts.map +1 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts +2 -1
- package/dist/components/organisms/book/BookTableOfContents.d.ts.map +1 -1
- package/dist/components/organisms/book/BookViewer.d.ts +2 -1
- package/dist/components/organisms/book/BookViewer.d.ts.map +1 -1
- package/dist/components/organisms/game/DialogueBox.d.ts.map +1 -1
- package/dist/components/organisms/game/InventoryPanel.d.ts.map +1 -1
- package/dist/components/organisms/game/physics-sim/SimulationCanvas.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionPalette.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/ActionTile.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequenceBar.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/CodeView.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateNode.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/TransitionArrow.d.ts.map +1 -1
- package/dist/components/organisms/game/puzzles/state-architect/VariablePanel.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +1 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/components/organisms/index.js +14 -10
- package/dist/components/organisms/layout/DashboardGrid.d.ts +3 -2
- package/dist/components/organisms/layout/DashboardGrid.d.ts.map +1 -1
- package/dist/components/templates/BattleTemplate.d.ts.map +1 -1
- package/dist/components/templates/index.js +26 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/useTraitState.d.ts +3 -3
- package/dist/hooks/useTraitState.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -910
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +14 -16
- package/dist/chunk-5U5Z65ZO.js.map +0 -1
- package/dist/chunk-BFRVXKSP.js.map +0 -1
- package/dist/chunk-CA6Z3OTE.js.map +0 -1
- package/dist/chunk-ETD72PHO.js.map +0 -1
- package/dist/chunk-GMR5FKKB.js.map +0 -1
- package/dist/chunk-MLTSQPVN.js.map +0 -1
- package/dist/chunk-PBO6ZN2M.js.map +0 -1
- package/dist/chunk-QUFLYKWA.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useTraitState.ts","../src/hooks/useUIEvents.ts","../src/hooks/useNavigation.ts","../src/hooks/useKeyboard.ts","../src/hooks/useThemeStyles.ts","../src/hooks/useScrollHeader.ts","../src/hooks/useSafeAreaInsets.ts","../src/hooks/usePullToRefresh.ts","../src/hooks/useInfiniteScroll.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport interface TraitState {\n [key: string]: unknown;\n}\n\nexport interface UseTraitStateReturn<T extends TraitState> {\n state: T;\n setState: (updates: Partial<T>) => void;\n getValue: <K extends keyof T>(key: K) => T[K];\n setValue: <K extends keyof T>(key: K, value: T[K]) => void;\n}\n\nexport function useTraitState<T extends TraitState>(initialState: T): UseTraitStateReturn<T> {\n const [state, setStateRaw] = useState<T>(initialState);\n\n const setState = useCallback((updates: Partial<T>) => {\n setStateRaw(prev => ({ ...prev, ...updates }));\n }, []);\n\n const getValue = useCallback(<K extends keyof T>(key: K): T[K] => {\n return state[key];\n }, [state]);\n\n const setValue = useCallback(<K extends keyof T>(key: K, value: T[K]) => {\n setStateRaw(prev => ({ ...prev, [key]: value }));\n }, []);\n\n return {\n state,\n setState,\n getValue,\n setValue,\n };\n}\n","// Re-export from @almadar/ui - no code duplication\nexport { useUIEvents } from '@almadar/ui/hooks';\n","import { useCallback } from 'react';\nimport { useNavigation as useRNNavigation, useRoute } from '@react-navigation/native';\nimport type { NavigationProp, RouteProp, ParamListBase } from '@react-navigation/native';\n\nexport interface NavigationOptions {\n replace?: boolean;\n reset?: boolean;\n}\n\n/**\n * Hook for navigation in React Native apps.\n * \n * This hook wraps React Navigation's useNavigation and useRoute\n * with a simpler API for common navigation patterns.\n * \n * @example\n * // With typed navigation (recommended)\n * type RootStackParamList = {\n * Home: undefined;\n * Profile: { userId: string };\n * };\n * const navigation = useNavigation<RootStackParamList>();\n * \n * // Navigate to a screen\n * navigation.navigateTo('Profile', { userId: '123' });\n * \n * // Get a route param\n * const userId = navigation.getParam<string>('userId');\n */\nexport function useNavigation<T extends ParamListBase = ParamListBase>() {\n // Cast to NavigationProp<T> for generic type support\n // The actual React Navigation hook returns more specific types based on context\n const navigation = useRNNavigation<NavigationProp<T>>();\n const route = useRoute<RouteProp<T, keyof T>>();\n\n const navigateTo = useCallback(<K extends keyof T>(\n screenName: K,\n params?: T[K],\n options?: NavigationOptions\n ): void => {\n const screen = String(screenName);\n \n if (options?.replace) {\n // Stack navigator specific - cast for compatibility\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (navigation as any).replace(screen, params);\n } else if (options?.reset) {\n navigation.reset({\n index: 0,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routes: [{ name: screen, params } as any],\n });\n } else {\n // Use navigation.navigate with proper typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (navigation.navigate as any)(screen, params);\n }\n }, [navigation]);\n\n const goBack = useCallback((): void => {\n navigation.goBack();\n }, [navigation]);\n\n const getParam = useCallback(<V,>(key: string, defaultValue?: V): V | undefined => {\n // Route params come as unknown from React Navigation\n // Cast to Record for safe property access\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const params = route.params as Record<string, any> | undefined;\n return params?.[key] ?? defaultValue;\n }, [route.params]);\n\n return {\n navigateTo,\n goBack,\n getParam,\n currentRoute: String(route.name),\n // Route params come as unknown from React Navigation\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params: route.params as Record<string, any> | undefined,\n };\n}\n\n/**\n * Hook to access route params directly with type safety.\n * \n * @example\n * type ProfileParams = { userId: string; name?: string };\n * const { userId, name } = useParams<ProfileParams>();\n */\nexport function useParams<T extends Record<string, unknown>>(): T {\n const route = useRoute();\n // Route params from React Navigation are typed as object | undefined\n // Cast to consumer's expected type for type safety\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (route.params as any) || ({} as T);\n}\n","import { useEffect, useState, useCallback } from 'react';\nimport { Keyboard, KeyboardEvent, Platform } from 'react-native';\n\nexport interface KeyboardState {\n isVisible: boolean;\n height: number;\n}\n\nexport function useKeyboard() {\n const [keyboardState, setKeyboardState] = useState<KeyboardState>({\n isVisible: false,\n height: 0,\n });\n\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const onKeyboardShow = (event: KeyboardEvent) => {\n setKeyboardState({\n isVisible: true,\n height: event.endCoordinates.height,\n });\n };\n\n const onKeyboardHide = () => {\n setKeyboardState({\n isVisible: false,\n height: 0,\n });\n };\n\n const showSubscription = Keyboard.addListener(showEvent, onKeyboardShow);\n const hideSubscription = Keyboard.addListener(hideEvent, onKeyboardHide);\n\n return () => {\n showSubscription.remove();\n hideSubscription.remove();\n };\n }, []);\n\n const dismissKeyboard = useCallback(() => {\n Keyboard.dismiss();\n }, []);\n\n return {\n ...keyboardState,\n dismissKeyboard,\n };\n}\n\nexport function useKeyboardHeight() {\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const onKeyboardShow = (event: KeyboardEvent) => {\n setKeyboardHeight(event.endCoordinates.height);\n };\n\n const onKeyboardHide = () => {\n setKeyboardHeight(0);\n };\n\n const showSubscription = Keyboard.addListener(showEvent, onKeyboardShow);\n const hideSubscription = Keyboard.addListener(hideEvent, onKeyboardHide);\n\n return () => {\n showSubscription.remove();\n hideSubscription.remove();\n };\n }, []);\n\n return keyboardHeight;\n}\n","import { useMemo } from 'react';\nimport { StyleSheet, ViewStyle, TextStyle, ImageStyle } from 'react-native';\nimport { useTheme } from '../providers/ThemeContext';\n\n/**\n * Hook for creating theme-aware styles\n * \n * @example\n * const styles = useThemeStyles((theme) => ({\n * container: {\n * backgroundColor: theme.colors.background,\n * padding: theme.spacing[4],\n * },\n * text: {\n * color: theme.colors.foreground,\n * fontSize: theme.typography.sizes.base,\n * },\n * }));\n */\nexport function useThemeStyles<T extends Record<string, ViewStyle | TextStyle | ImageStyle>>(\n styleCreator: (theme: ReturnType<typeof useTheme>) => T\n): T {\n const theme = useTheme();\n \n return useMemo(() => {\n const styles = styleCreator(theme);\n return StyleSheet.create(styles) as T;\n }, [theme, styleCreator]);\n}\n\n/**\n * Get a single theme value\n * \n * @example\n * const bgColor = useThemeValue((t) => t.colors.background);\n */\nexport function useThemeValue<T>(selector: (theme: ReturnType<typeof useTheme>) => T): T {\n const theme = useTheme();\n return useMemo(() => selector(theme), [theme, selector]);\n}\n","import { useState, useCallback } from 'react';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport interface UseScrollHeaderOptions {\n threshold?: number;\n}\n\nexport interface UseScrollHeaderReturn {\n isCollapsed: boolean;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n}\n\n/**\n * Hook for creating collapsible header behavior on scroll.\n * \n * @example\n * ```tsx\n * const { isCollapsed, onScroll } = useScrollHeader({ threshold: 50 });\n * \n * return (\n * <>\n * <Header \n * title=\"My Page\" \n * style={{ \n * height: isCollapsed ? 40 : 56,\n * opacity: isCollapsed ? 0.9 : 1\n * }} \n * />\n * <ScrollView onScroll={onScroll} scrollEventThrottle={16}>\n * {content}\n * </ScrollView>\n * </>\n * );\n * ```\n */\nexport function useScrollHeader(\n options: UseScrollHeaderOptions = {}\n): UseScrollHeaderReturn {\n const { threshold = 50 } = options;\n const [isCollapsed, setIsCollapsed] = useState(false);\n\n const onScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const offsetY = event.nativeEvent.contentOffset.y;\n const shouldCollapse = offsetY > threshold;\n \n if (shouldCollapse !== isCollapsed) {\n setIsCollapsed(shouldCollapse);\n }\n },\n [threshold, isCollapsed]\n );\n\n return { isCollapsed, onScroll };\n}\n","import { useState, useEffect } from 'react';\nimport { Dimensions, ScaledSize } from 'react-native';\n\nexport interface SafeAreaInsets {\n top: number;\n bottom: number;\n left: number;\n right: number;\n}\n\n/**\n * Hook to get safe area insets for handling notched devices.\n * Uses screen dimensions to estimate safe areas.\n * \n * Note: For production apps, consider using react-native-safe-area-context\n * which provides the actual safe area insets from the native platform.\n * \n * @example\n * ```tsx\n * const insets = useSafeAreaInsets();\n * \n * return (\n * <View style={{ \n * paddingTop: insets.top,\n * paddingBottom: insets.bottom \n * }}>\n * {children}\n * </View>\n * );\n * ```\n */\nexport function useSafeAreaInsets(): SafeAreaInsets {\n const [screen, setScreen] = useState<ScaledSize>(Dimensions.get('window'));\n\n useEffect(() => {\n const subscription = Dimensions.addEventListener('change', ({ window }) => {\n setScreen(window);\n });\n\n return () => subscription?.remove();\n }, []);\n\n // Estimate safe areas based on common device dimensions\n // iPhone X and later have 44pt top and 34pt bottom safe areas\n // Other devices typically have 20pt top (status bar) and 0 bottom\n const isIPhoneXOrLater = \n screen.height >= 812 || screen.width >= 812;\n\n return {\n top: isIPhoneXOrLater ? 44 : 20,\n bottom: isIPhoneXOrLater ? 34 : 0,\n left: 0,\n right: 0,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { RefreshControlProps } from 'react-native';\n\nexport interface UsePullToRefreshOptions {\n onRefresh: () => Promise<void> | void;\n}\n\nexport interface UsePullToRefreshReturn {\n refreshing: boolean;\n onRefresh: () => void;\n refreshControlProps: Pick<RefreshControlProps, 'refreshing' | 'onRefresh'>;\n}\n\n/**\n * Hook for implementing pull-to-refresh functionality.\n * \n * @example\n * ```tsx\n * const { refreshControlProps } = usePullToRefresh({\n * onRefresh: async () => {\n * await refetchData();\n * }\n * });\n * \n * return (\n * <ScrollView refreshControl={<RefreshControl {...refreshControlProps} />}>\n * {content}\n * </ScrollView>\n * );\n * ```\n */\nexport function usePullToRefresh(\n options: UsePullToRefreshOptions\n): UsePullToRefreshReturn {\n const { onRefresh } = options;\n const [refreshing, setRefreshing] = useState(false);\n\n const handleRefresh = useCallback(async () => {\n setRefreshing(true);\n try {\n await onRefresh();\n } finally {\n setRefreshing(false);\n }\n }, [onRefresh]);\n\n return {\n refreshing,\n onRefresh: handleRefresh,\n refreshControlProps: {\n refreshing,\n onRefresh: handleRefresh,\n },\n };\n}\n","import { useState, useCallback } from 'react';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport interface UseInfiniteScrollOptions {\n onLoadMore: () => Promise<void> | void;\n hasMore: boolean;\n threshold?: number;\n}\n\nexport interface UseInfiniteScrollReturn {\n loadingMore: boolean;\n onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n}\n\n/**\n * Hook for implementing infinite scroll functionality.\n * \n * @example\n * ```tsx\n * const { loadingMore, onScroll } = useInfiniteScroll({\n * onLoadMore: async () => {\n * await loadNextPage();\n * },\n * hasMore: hasNextPage,\n * });\n * \n * return (\n * <ScrollView onScroll={onScroll} scrollEventThrottle={16}>\n * {items.map(renderItem)}\n * {loadingMore && <ActivityIndicator />}\n * </ScrollView>\n * );\n * ```\n */\nexport function useInfiniteScroll(\n options: UseInfiniteScrollOptions\n): UseInfiniteScrollReturn {\n const { onLoadMore, hasMore, threshold = 100 } = options;\n const [loadingMore, setLoadingMore] = useState(false);\n\n const onScroll = useCallback(\n async (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n if (loadingMore || !hasMore) return;\n\n const { layoutMeasurement, contentOffset, contentSize } = event.nativeEvent;\n const isCloseToBottom = \n layoutMeasurement.height + contentOffset.y >= \n contentSize.height - threshold;\n\n if (isCloseToBottom) {\n setLoadingMore(true);\n try {\n await onLoadMore();\n } finally {\n setLoadingMore(false);\n }\n }\n },\n [loadingMore, hasMore, threshold, onLoadMore]\n );\n\n return {\n loadingMore,\n onScroll,\n };\n}\n"],"mappings":"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","names":["useCallback","useState","useCallback","useState","useCallback","useState","useEffect","useState","useCallback","useState","useCallback"]}
|