mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-04 12:13:27 +00:00
[MOB-96] Haptics on tabs interaction and more (#2464)
Haptics on tabs interaction and more
This commit is contained in:
parent
893452d8c8
commit
853f0d4185
|
@ -41,6 +41,7 @@
|
||||||
"expo-av": "^13.10.5",
|
"expo-av": "^13.10.5",
|
||||||
"expo-blur": "^12.9.2",
|
"expo-blur": "^12.9.2",
|
||||||
"expo-build-properties": "~0.11.1",
|
"expo-build-properties": "~0.11.1",
|
||||||
|
"expo-haptics": "~12.8.1",
|
||||||
"expo-image": "^1.10.6",
|
"expo-image": "^1.10.6",
|
||||||
"expo-linking": "~6.2.2",
|
"expo-linking": "~6.2.2",
|
||||||
"expo-media-library": "~15.9.1",
|
"expo-media-library": "~15.9.1",
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { BrowseStackScreenProps } from '~/navigation/tabs/BrowseStack';
|
||||||
import { useExplorerStore } from '~/stores/explorerStore';
|
import { useExplorerStore } from '~/stores/explorerStore';
|
||||||
import { useActionsModalStore } from '~/stores/modalStore';
|
import { useActionsModalStore } from '~/stores/modalStore';
|
||||||
|
|
||||||
|
import * as Haptics from 'expo-haptics';
|
||||||
import { tw } from '~/lib/tailwind';
|
import { tw } from '~/lib/tailwind';
|
||||||
import ScreenContainer from '../layout/ScreenContainer';
|
import ScreenContainer from '../layout/ScreenContainer';
|
||||||
import FileItem from './FileItem';
|
import FileItem from './FileItem';
|
||||||
|
@ -39,6 +40,7 @@ const Explorer = (props: Props) => {
|
||||||
const { modalRef, setData } = useActionsModalStore();
|
const { modalRef, setData } = useActionsModalStore();
|
||||||
|
|
||||||
function handlePress(data: ExplorerItem) {
|
function handlePress(data: ExplorerItem) {
|
||||||
|
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
||||||
if (isPath(data) && data.item.is_dir && data.item.location_id !== null) {
|
if (isPath(data) && data.item.is_dir && data.item.location_id !== null) {
|
||||||
navigation.push('Location', {
|
navigation.push('Location', {
|
||||||
id: data.item.location_id,
|
id: data.item.location_id,
|
||||||
|
@ -50,6 +52,12 @@ const Explorer = (props: Props) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleLongPress(data: ExplorerItem) {
|
||||||
|
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
||||||
|
setData(data);
|
||||||
|
modalRef.current?.present();
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScreenContainer tabHeight={props.tabHeight} scrollview={false} style={'gap-0 py-0'}>
|
<ScreenContainer tabHeight={props.tabHeight} scrollview={false} style={'gap-0 py-0'}>
|
||||||
<Menu />
|
<Menu />
|
||||||
|
@ -71,7 +79,10 @@ const Explorer = (props: Props) => {
|
||||||
: item.item.id.toString()
|
: item.item.id.toString()
|
||||||
}
|
}
|
||||||
renderItem={({ item }) => (
|
renderItem={({ item }) => (
|
||||||
<Pressable onPress={() => handlePress(item)}>
|
<Pressable
|
||||||
|
onPress={() => handlePress(item)}
|
||||||
|
onLongPress={() => handleLongPress(item)}
|
||||||
|
>
|
||||||
{store.layoutMode === 'grid' ? (
|
{store.layoutMode === 'grid' ? (
|
||||||
<FileItem data={item} />
|
<FileItem data={item} />
|
||||||
) : (
|
) : (
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
import { ExplorerItem, getItemFilePath } from '@sd/client';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text, View } from 'react-native';
|
import { Text, View } from 'react-native';
|
||||||
import { ExplorerItem, getItemFilePath } from '@sd/client';
|
|
||||||
import { tw, twStyle } from '~/lib/tailwind';
|
import { tw, twStyle } from '~/lib/tailwind';
|
||||||
import { getExplorerStore } from '~/stores/explorerStore';
|
import { getExplorerStore } from '~/stores/explorerStore';
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ const FileRow = ({ data }: FileRowProps) => {
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<FileThumb data={data} size={0.6} />
|
<FileThumb data={data} size={0.6} />
|
||||||
<View style={tw`ml-3`}>
|
<View style={tw`ml-3 max-w-[80%]`}>
|
||||||
<Text numberOfLines={1} style={tw`text-center text-xs font-medium text-ink-dull`}>
|
<Text numberOfLines={1} style={tw`text-center text-xs font-medium text-ink-dull`}>
|
||||||
{filePath?.name}
|
{filePath?.name}
|
||||||
{filePath?.extension && `.${filePath.extension}`}
|
{filePath?.extension && `.${filePath.extension}`}
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
import { DocumentDirectoryPath } from '@dr.pogodin/react-native-fs';
|
import { DocumentDirectoryPath } from '@dr.pogodin/react-native-fs';
|
||||||
import { getIcon } from '@sd/assets/util';
|
import { getIcon } from '@sd/assets/util';
|
||||||
import { Image } from 'expo-image';
|
|
||||||
import { useEffect, useLayoutEffect, useMemo, useState, type PropsWithChildren } from 'react';
|
|
||||||
import { View } from 'react-native';
|
|
||||||
import {
|
import {
|
||||||
getExplorerItemData,
|
getExplorerItemData,
|
||||||
getItemFilePath,
|
getItemFilePath,
|
||||||
|
@ -10,6 +7,9 @@ import {
|
||||||
isDarkTheme,
|
isDarkTheme,
|
||||||
type ExplorerItem
|
type ExplorerItem
|
||||||
} from '@sd/client';
|
} from '@sd/client';
|
||||||
|
import { Image } from 'expo-image';
|
||||||
|
import { useEffect, useLayoutEffect, useMemo, useState, type PropsWithChildren } from 'react';
|
||||||
|
import { View } from 'react-native';
|
||||||
import { flattenThumbnailKey, useExplorerStore } from '~/stores/explorerStore';
|
import { flattenThumbnailKey, useExplorerStore } from '~/stores/explorerStore';
|
||||||
|
|
||||||
import { tw } from '../../lib/tailwind';
|
import { tw } from '../../lib/tailwind';
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import { useQueryClient } from '@tanstack/react-query';
|
import { Object as SDObject, useLibraryMutation } from '@sd/client';
|
||||||
|
import * as Haptics from 'expo-haptics';
|
||||||
import { Heart } from 'phosphor-react-native';
|
import { Heart } from 'phosphor-react-native';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Pressable, PressableProps } from 'react-native';
|
import { Pressable, PressableProps } from 'react-native';
|
||||||
import { Object as SDObject, useLibraryMutation } from '@sd/client';
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
data: SDObject;
|
data: SDObject;
|
||||||
|
@ -10,13 +10,13 @@ type Props = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const FavoriteButton = (props: Props) => {
|
const FavoriteButton = (props: Props) => {
|
||||||
const queryClient = useQueryClient();
|
|
||||||
const [favorite, setFavorite] = useState(props.data.favorite);
|
const [favorite, setFavorite] = useState(props.data.favorite);
|
||||||
|
|
||||||
const { mutate: toggleFavorite, isLoading } = useLibraryMutation('files.setFavorite', {
|
const { mutate: toggleFavorite, isLoading } = useLibraryMutation('files.setFavorite', {
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
// TODO: Invalidate search queries
|
// TODO: Invalidate search queries
|
||||||
setFavorite(!favorite);
|
setFavorite(!favorite);
|
||||||
|
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import React from 'react';
|
|
||||||
import { Alert, Pressable, View, ViewStyle } from 'react-native';
|
|
||||||
import {
|
import {
|
||||||
ExplorerItem,
|
ExplorerItem,
|
||||||
getExplorerItemData,
|
getExplorerItemData,
|
||||||
|
@ -8,6 +6,8 @@ import {
|
||||||
isPath,
|
isPath,
|
||||||
useLibraryQuery
|
useLibraryQuery
|
||||||
} from '@sd/client';
|
} from '@sd/client';
|
||||||
|
import React from 'react';
|
||||||
|
import { Alert, Pressable, View, ViewStyle } from 'react-native';
|
||||||
import { InfoPill, PlaceholderPill } from '~/components/primitive/InfoPill';
|
import { InfoPill, PlaceholderPill } from '~/components/primitive/InfoPill';
|
||||||
import { tw, twStyle } from '~/lib/tailwind';
|
import { tw, twStyle } from '~/lib/tailwind';
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ const InfoTagPills = ({ data, style }: Props) => {
|
||||||
return (
|
return (
|
||||||
<View style={twStyle('mt-1 flex flex-row flex-wrap', style)}>
|
<View style={twStyle('mt-1 flex flex-row flex-wrap', style)}>
|
||||||
{/* Kind */}
|
{/* Kind */}
|
||||||
<InfoPill containerStyle={tw`mr-1`} text={getExplorerItemData(data).kind} />
|
<InfoPill containerStyle={tw`mr-1`} text={isDir ? 'Folder' : getExplorerItemData(data).kind} />
|
||||||
{/* Extension */}
|
{/* Extension */}
|
||||||
{filePath?.extension && (
|
{filePath?.extension && (
|
||||||
<InfoPill text={filePath.extension} containerStyle={tw`mr-1`} />
|
<InfoPill text={filePath.extension} containerStyle={tw`mr-1`} />
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Text, View } from 'react-native';
|
||||||
import { ClassInput } from 'twrnc';
|
import { ClassInput } from 'twrnc';
|
||||||
import { twStyle } from '~/lib/tailwind';
|
import { twStyle } from '~/lib/tailwind';
|
||||||
|
|
||||||
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
||||||
import { Icon, IconName } from '../icons/Icon';
|
import { Icon, IconName } from '../icons/Icon';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
@ -10,14 +11,17 @@ interface Props {
|
||||||
style?: ClassInput; //Tailwind classes
|
style?: ClassInput; //Tailwind classes
|
||||||
iconSize?: number; //Size of the icon
|
iconSize?: number; //Size of the icon
|
||||||
textSize?: ClassInput; //Size of the text
|
textSize?: ClassInput; //Size of the text
|
||||||
|
includeHeaderHeight?: boolean; //Height of the header
|
||||||
}
|
}
|
||||||
|
|
||||||
const Empty = ({ description, icon, style, textSize = 'text-sm', iconSize = 38 }: Props) => {
|
const Empty = ({ description, icon, style, includeHeaderHeight = false, textSize = 'text-sm', iconSize = 38 }: Props) => {
|
||||||
|
const headerHeight = useSafeAreaInsets().top;
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={twStyle(
|
style={twStyle(
|
||||||
`relative mx-auto h-auto w-full flex-col items-center justify-center overflow-hidden
|
`relative mx-auto h-auto w-full flex-col items-center justify-center overflow-hidden
|
||||||
rounded-md border border-dashed border-sidebar-line p-4`,
|
rounded-md border border-dashed border-sidebar-line p-4`,
|
||||||
|
{marginBottom: includeHeaderHeight ? headerHeight : 0},
|
||||||
style
|
style
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
import {
|
||||||
|
byteSize,
|
||||||
|
getIndexedItemFilePath,
|
||||||
|
getItemObject,
|
||||||
|
useLibraryMutation,
|
||||||
|
useLibraryQuery
|
||||||
|
} from '@sd/client';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import {
|
import {
|
||||||
Copy,
|
Copy,
|
||||||
|
@ -13,13 +20,6 @@ import {
|
||||||
import { PropsWithChildren, useRef } from 'react';
|
import { PropsWithChildren, useRef } from 'react';
|
||||||
import { Pressable, Text, View, ViewStyle } from 'react-native';
|
import { Pressable, Text, View, ViewStyle } from 'react-native';
|
||||||
import FileViewer from 'react-native-file-viewer';
|
import FileViewer from 'react-native-file-viewer';
|
||||||
import {
|
|
||||||
byteSize,
|
|
||||||
getIndexedItemFilePath,
|
|
||||||
getItemObject,
|
|
||||||
useLibraryMutation,
|
|
||||||
useLibraryQuery
|
|
||||||
} from '@sd/client';
|
|
||||||
import FileThumb from '~/components/explorer/FileThumb';
|
import FileThumb from '~/components/explorer/FileThumb';
|
||||||
import FavoriteButton from '~/components/explorer/sections/FavoriteButton';
|
import FavoriteButton from '~/components/explorer/sections/FavoriteButton';
|
||||||
import InfoTagPills from '~/components/explorer/sections/InfoTagPills';
|
import InfoTagPills from '~/components/explorer/sections/InfoTagPills';
|
||||||
|
@ -34,7 +34,7 @@ type ActionsContainerProps = PropsWithChildren<{
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
const ActionsContainer = ({ children, style }: ActionsContainerProps) => (
|
const ActionsContainer = ({ children, style }: ActionsContainerProps) => (
|
||||||
<View style={twStyle('rounded-lg bg-app-box py-3.5', style)}>{children}</View>
|
<View style={twStyle('rounded-lg border border-app-box bg-app py-3.5', style)}>{children}</View>
|
||||||
);
|
);
|
||||||
|
|
||||||
type ActionsItemProps = {
|
type ActionsItemProps = {
|
||||||
|
@ -61,7 +61,7 @@ const ActionsItem = ({ icon, onPress, title, isDanger = false }: ActionsItemProp
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const ActionDivider = () => <View style={tw`my-3.5 h-[0.5px] bg-app-line/80`} />;
|
const ActionDivider = () => <View style={tw`my-3.5 h-[0.5px] bg-app-box`} />;
|
||||||
|
|
||||||
export const ActionsModal = () => {
|
export const ActionsModal = () => {
|
||||||
const fileInfoRef = useRef<ModalRef>(null);
|
const fileInfoRef = useRef<ModalRef>(null);
|
||||||
|
|
|
@ -9,6 +9,7 @@ import Rive, { RiveRef } from 'rive-react-native';
|
||||||
import { Style } from 'twrnc/dist/esm/types';
|
import { Style } from 'twrnc/dist/esm/types';
|
||||||
import { tw } from '~/lib/tailwind';
|
import { tw } from '~/lib/tailwind';
|
||||||
|
|
||||||
|
import * as Haptics from 'expo-haptics';
|
||||||
import { RootStackParamList } from '.';
|
import { RootStackParamList } from '.';
|
||||||
import BrowseStack, { BrowseStackParamList } from './tabs/BrowseStack';
|
import BrowseStack, { BrowseStackParamList } from './tabs/BrowseStack';
|
||||||
import NetworkStack, { NetworkStackParamList } from './tabs/NetworkStack';
|
import NetworkStack, { NetworkStackParamList } from './tabs/NetworkStack';
|
||||||
|
@ -145,6 +146,7 @@ export default function TabNavigator() {
|
||||||
})}
|
})}
|
||||||
listeners={() => ({
|
listeners={() => ({
|
||||||
focus: () => {
|
focus: () => {
|
||||||
|
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
||||||
setActiveIndex(index);
|
setActiveIndex(index);
|
||||||
},
|
},
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import { useEffect } from 'react';
|
|
||||||
import { useLibraryQuery, useObjectsExplorerQuery } from '@sd/client';
|
import { useLibraryQuery, useObjectsExplorerQuery } from '@sd/client';
|
||||||
|
import { useEffect } from 'react';
|
||||||
import Explorer from '~/components/explorer/Explorer';
|
import Explorer from '~/components/explorer/Explorer';
|
||||||
|
import Empty from '~/components/layout/Empty';
|
||||||
|
import { tw } from '~/lib/tailwind';
|
||||||
import { BrowseStackScreenProps } from '~/navigation/tabs/BrowseStack';
|
import { BrowseStackScreenProps } from '~/navigation/tabs/BrowseStack';
|
||||||
|
|
||||||
export default function TagScreen({ navigation, route }: BrowseStackScreenProps<'Tag'>) {
|
export default function TagScreen({ navigation, route }: BrowseStackScreenProps<'Tag'>) {
|
||||||
|
@ -21,5 +23,14 @@ export default function TagScreen({ navigation, route }: BrowseStackScreenProps<
|
||||||
});
|
});
|
||||||
}, [tagData?.name, navigation]);
|
}, [tagData?.name, navigation]);
|
||||||
|
|
||||||
return <Explorer {...objects} />;
|
return <Explorer
|
||||||
|
isEmpty={objects.count === 0}
|
||||||
|
emptyComponent={<Empty
|
||||||
|
includeHeaderHeight
|
||||||
|
icon={'Tags'}
|
||||||
|
style={tw`flex-1 items-center justify-center border-0`}
|
||||||
|
textSize="text-md"
|
||||||
|
iconSize={100}
|
||||||
|
description={'No items assigned to this tag'}
|
||||||
|
/>} {...objects} />;
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,10 +116,9 @@ const SearchScreen = ({ navigation }: SearchStackScreenProps<'Search'>) => {
|
||||||
isEmpty={noObjects}
|
isEmpty={noObjects}
|
||||||
emptyComponent={
|
emptyComponent={
|
||||||
<Empty
|
<Empty
|
||||||
|
includeHeaderHeight
|
||||||
icon={noSearch ? 'Search' : 'FolderNoSpace'}
|
icon={noSearch ? 'Search' : 'FolderNoSpace'}
|
||||||
style={twStyle('flex-1 items-center justify-center border-0', {
|
style={tw`flex-1 items-center justify-center border-0`}
|
||||||
marginBottom: headerHeight
|
|
||||||
})}
|
|
||||||
textSize="text-md"
|
textSize="text-md"
|
||||||
iconSize={100}
|
iconSize={100}
|
||||||
description={noSearch ? 'Add filters or type to search for files' : 'No files found'}
|
description={noSearch ? 'Add filters or type to search for files' : 'No files found'}
|
||||||
|
|
102
pnpm-lock.yaml
102
pnpm-lock.yaml
|
@ -147,7 +147,7 @@ importers:
|
||||||
version: 2.16.0
|
version: 2.16.0
|
||||||
'@tauri-apps/cli':
|
'@tauri-apps/cli':
|
||||||
specifier: next
|
specifier: next
|
||||||
version: 2.0.0-beta.15
|
version: 2.0.0-beta.16
|
||||||
'@types/react':
|
'@types/react':
|
||||||
specifier: ^18.2.67
|
specifier: ^18.2.67
|
||||||
version: 18.2.67
|
version: 18.2.67
|
||||||
|
@ -404,6 +404,9 @@ importers:
|
||||||
expo-build-properties:
|
expo-build-properties:
|
||||||
specifier: ~0.11.1
|
specifier: ~0.11.1
|
||||||
version: 0.11.1(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0))))
|
version: 0.11.1(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0))))
|
||||||
|
expo-haptics:
|
||||||
|
specifier: ~12.8.1
|
||||||
|
version: 12.8.1(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0))))
|
||||||
expo-image:
|
expo-image:
|
||||||
specifier: ^1.10.6
|
specifier: ^1.10.6
|
||||||
version: 1.10.6(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0))))
|
version: 1.10.6(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0))))
|
||||||
|
@ -5080,68 +5083,68 @@ packages:
|
||||||
resolution: {integrity: sha512-Nxtj28NYUo5iwYkpYslxmOPkdI2WkELU2e3UH9nbJm9Ydki2CQwJVGQxx4EANtdZcMNsEsUzRqaDTvEUYH1l6w==}
|
resolution: {integrity: sha512-Nxtj28NYUo5iwYkpYslxmOPkdI2WkELU2e3UH9nbJm9Ydki2CQwJVGQxx4EANtdZcMNsEsUzRqaDTvEUYH1l6w==}
|
||||||
engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
|
engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-arm64@2.0.0-beta.15':
|
'@tauri-apps/cli-darwin-arm64@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-M4owBLoRdJb2/IK48KOQDU3j5xrjqGxa539rDXMjvaKydBk8x+aLdk3xZNsk/owHTI1GnrQZsPCMQaOgetYHaw==}
|
resolution: {integrity: sha512-5Gif4AvpJmnyLj3HO3AEl1RVrr4ast6mDQiXoLwe75bfWq1pj9VwsS5SuSrUKtB8YBSnnclcJwkqwa6soY/xkg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-x64@2.0.0-beta.15':
|
'@tauri-apps/cli-darwin-x64@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-ECpatfJdT4xKyFoE7tNEtTUIRxjQ2XSXa0TQkP3g7Kn7H/jRse+7pYe69jASA7shixajatAwmD4bXNT8jYRyNA==}
|
resolution: {integrity: sha512-6Cia8lGSroyoXKvfRI+Dv8Xinr27lptDzGZnd8mT9V0xPg73xcWxPKiTkuxPmLQTrQKVAurfsX3DwwgK8m9kSw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-GQz2nnPwIamzDbmmfGWvmmoLthOkOBs0RO5u72KYAa78ZRFTx7S6AovnxJv48Fq+zeGGdDKoD9+ZG2Ue+sCL4w==}
|
resolution: {integrity: sha512-1mQ0flIt0wrX4QLPwd8f1QFsuFjLPQtWuiObK63K0/YZmDS2yzKT6jnGqNCJsSiyXE2/36gKSyWh6OVpX8U7xg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-YBIfq0GbmIsWmRy6dVuDv3oMJN7a3R8HGVPMsa1W526AdCxoZDiPOQpSQN4VihJlbebUHxS/HyYF6maCY8uGzA==}
|
resolution: {integrity: sha512-CjgwOvaslvy06m36faZ40noQaBu37gcXtD0HlCgAMofDZz7fUWQJn3xE7r8fegXmY0oMKZ9ah8dgwd5KSk+L+Q==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-2ZBXoShz7UfqVGmc85mhwjI6ckdtrk15V69adxt/x+VS68yK6Ddbj+yqlffpeFNL90fZrsVhFoRIDqgkxtwksQ==}
|
resolution: {integrity: sha512-JMtryDJckutFzNpwFgh98o9Z4Vw1pwImYmJIDLpCPSqYIfd+mrBgPZFTaGl11ZsQnllqt4FNXlYR8T+ey7ZpfQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-cwJqIIdc4Kq9sBl/vYc+Y95iMe+mlTYUj7ZnSn4YAbLKFz432bGg6uBn2qHXFN5jzwXtEOVZiB1zDZ2kveVoAQ==}
|
resolution: {integrity: sha512-3dQGCKsbjaIzk4UM7Jf5FzBJpBJ1OfwBOwkVv2M4O7EDLNZi9brDR+I41eqyFhTabEcHJoLhtURLbD25dJuiug==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-musl@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-x64-musl@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-nNuxZ8/qs0vQbdLO2hovskZGxwGn2z4x1QFJuL4xwd6Tryy9vVcznvyZS+t/72dCLoIkY9pKZQq5nYtAHYfTEg==}
|
resolution: {integrity: sha512-t+wdk/VCn8l9y1fhRQPfvZyz3Or7QEPTxXNobbUzbtckFsf/LqTxjaajOBmSGnZpoTDFvwVOmalDaylILxuM5g==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-DXiXMTE00INjBkTgq1CYduMWgUwQ0NvLw+uXfu8BUupA+aOlv9ODhsGu7bZSaxKx4/glwxNAGZum4kQ0E0AxUg==}
|
resolution: {integrity: sha512-ouP0iiRMTNaKyz6c06LucMR5P585r2XJ3/GlzNWtUfP4EaP8mZAENB0ro9VZl10++7Z658MdWxSAf4+Qmkj0jQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-ajEQdW2jx2raPp7eDYryJkbBrgI8PIY1dz5ro8FweRrRmbotaUlclsro1kfNMQrfDah8+qfwnRvW3MahOBE5Wg==}
|
resolution: {integrity: sha512-BiBkv3IesPNGXVaampxpB+ub0tz2sGu+6OLzxSm1QTp+2ZSw/qeXi/icvJl5azmOyee4ZWBBiuBzdVY88QH+Vw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-yzsSgoiY0PmFiR5LvVOFr1b7h9l3aLPPQFlDG6+kRMrxCo7x7Pbyh4D5cqiMUuZO0QacwSP38EH6w0F88Y+4OA==}
|
resolution: {integrity: sha512-rrJeC7eAT6diQpnI3aaflhvtKyTryywbhHLG/c1QyPhdxA7Or6nflo5KzWLd6q3GQqKRbvz5dDtxwFn+XLo+rQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tauri-apps/cli@2.0.0-beta.15':
|
'@tauri-apps/cli@2.0.0-beta.16':
|
||||||
resolution: {integrity: sha512-3pCvc54QfsRY+i9B7w3Q5jPAGtf8p+g7N/BamWPeiW6YqDqbHi9rNVI3SzrHkRRNOJnzMW8E5a8G0HziOluZGg==}
|
resolution: {integrity: sha512-ELaPqTekAVfTU4lFf7k/Z422DKXk/uDWi7ppI8TuQOqcXjrxlXMvv/Y1eC2tem9vMeuOIU0Jg53pOhOu0w8JIQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
@ -5588,7 +5591,7 @@ packages:
|
||||||
resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==}
|
resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@typescript-eslint/parser': ^7.0.0
|
'@typescript-eslint/parser': ^7.1.1
|
||||||
eslint: ^8.56.0
|
eslint: ^8.56.0
|
||||||
typescript: '*'
|
typescript: '*'
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
|
@ -7822,6 +7825,11 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
expo: '*'
|
expo: '*'
|
||||||
|
|
||||||
|
expo-haptics@12.8.1:
|
||||||
|
resolution: {integrity: sha512-ntLsHkfle8K8w9MW8pZEw92ZN3sguaGUSSIxv30fPKNeQFu7Cq/h47Qv3tONv2MO3wU48N9FbKnant6XlfptpA==}
|
||||||
|
peerDependencies:
|
||||||
|
expo: '*'
|
||||||
|
|
||||||
expo-image@1.10.6:
|
expo-image@1.10.6:
|
||||||
resolution: {integrity: sha512-vcnAIym1eU8vQgV1re1E7rVQZStJimBa4aPDhjFfzMzbddAF7heJuagyewiUkTzbZUwYzPaZAie6VJPyWx9Ueg==}
|
resolution: {integrity: sha512-vcnAIym1eU8vQgV1re1E7rVQZStJimBa4aPDhjFfzMzbddAF7heJuagyewiUkTzbZUwYzPaZAie6VJPyWx9Ueg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
@ -18660,48 +18668,48 @@ snapshots:
|
||||||
|
|
||||||
'@tauri-apps/api@2.0.0-beta.4': {}
|
'@tauri-apps/api@2.0.0-beta.4': {}
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-arm64@2.0.0-beta.15':
|
'@tauri-apps/cli-darwin-arm64@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-darwin-x64@2.0.0-beta.15':
|
'@tauri-apps/cli-darwin-x64@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-linux-x64-musl@2.0.0-beta.15':
|
'@tauri-apps/cli-linux-x64-musl@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.15':
|
'@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tauri-apps/cli@2.0.0-beta.15':
|
'@tauri-apps/cli@2.0.0-beta.16':
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@tauri-apps/cli-darwin-arm64': 2.0.0-beta.15
|
'@tauri-apps/cli-darwin-arm64': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-darwin-x64': 2.0.0-beta.15
|
'@tauri-apps/cli-darwin-x64': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-beta.15
|
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-linux-arm64-gnu': 2.0.0-beta.15
|
'@tauri-apps/cli-linux-arm64-gnu': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-linux-arm64-musl': 2.0.0-beta.15
|
'@tauri-apps/cli-linux-arm64-musl': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-linux-x64-gnu': 2.0.0-beta.15
|
'@tauri-apps/cli-linux-x64-gnu': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-linux-x64-musl': 2.0.0-beta.15
|
'@tauri-apps/cli-linux-x64-musl': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-win32-arm64-msvc': 2.0.0-beta.15
|
'@tauri-apps/cli-win32-arm64-msvc': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.15
|
'@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.16
|
||||||
'@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.15
|
'@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.16
|
||||||
|
|
||||||
'@tauri-apps/plugin-dialog@2.0.0-beta.2':
|
'@tauri-apps/plugin-dialog@2.0.0-beta.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -22129,6 +22137,10 @@ snapshots:
|
||||||
expo: 50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))
|
expo: 50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))
|
||||||
fontfaceobserver: 2.3.0
|
fontfaceobserver: 2.3.0
|
||||||
|
|
||||||
|
expo-haptics@12.8.1(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))):
|
||||||
|
dependencies:
|
||||||
|
expo: 50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))
|
||||||
|
|
||||||
expo-image@1.10.6(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))):
|
expo-image@1.10.6(expo@50.0.13(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0(@babel/core@7.24.0)))):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@react-native/assets-registry': 0.73.1
|
'@react-native/assets-registry': 0.73.1
|
||||||
|
|
Loading…
Reference in a new issue