diff --git a/apps/tlon-mobile/cosmos.imports.ts b/apps/tlon-mobile/cosmos.imports.ts
index 04069af491..5e5e00059c 100644
--- a/apps/tlon-mobile/cosmos.imports.ts
+++ b/apps/tlon-mobile/cosmos.imports.ts
@@ -1,65 +1,67 @@
// This file is automatically generated by Cosmos. Add it to .gitignore and
// only edit if you know what you're doing.
+
import { RendererConfig, UserModuleWrappers } from 'react-cosmos-core';
import * as fixture0 from './src/App.fixture';
-import * as fixture52 from './src/fixtures/ActionSheet/AddGalleryPostSheet.fixture';
-import * as fixture51 from './src/fixtures/ActionSheet/AttachmentSheet.fixture';
-import * as fixture50 from './src/fixtures/ActionSheet/ChannelSortActionsSheet.fixture';
-import * as fixture49 from './src/fixtures/ActionSheet/CreateChannelSheet.fixture';
-import * as fixture48 from './src/fixtures/ActionSheet/DeleteSheet.fixture';
-import * as fixture47 from './src/fixtures/ActionSheet/EditSectionNameSheet.fixture';
-import * as fixture46 from './src/fixtures/ActionSheet/GenericActionSheet.fixture';
-import * as fixture45 from './src/fixtures/ActionSheet/GroupJoinRequestSheet.fixture';
-import * as fixture44 from './src/fixtures/ActionSheet/GroupPreviewSheet.fixture';
-import * as fixture43 from './src/fixtures/ActionSheet/ProfileSheet.fixture';
-import * as fixture42 from './src/fixtures/ActionSheet/SendPostRetrySheet.fixture';
-import * as fixture38 from './src/fixtures/Activity.fixture';
-import * as fixture37 from './src/fixtures/AddGroupSheet.fixture';
-import * as fixture36 from './src/fixtures/AttachmentPreviewList.fixture';
-import * as fixture35 from './src/fixtures/AudioEmbed.fixture';
-import * as fixture34 from './src/fixtures/Avatar.fixture';
-import * as fixture33 from './src/fixtures/BlockSectionList.fixture';
-import * as fixture32 from './src/fixtures/Button.fixture';
-import * as fixture31 from './src/fixtures/Channel.fixture';
-import * as fixture30 from './src/fixtures/ChannelDivider.fixture';
-import * as fixture29 from './src/fixtures/ChannelHeader.fixture';
-import * as fixture28 from './src/fixtures/ChannelSwitcherSheet.fixture';
-import * as fixture27 from './src/fixtures/ChatMessage.fixture';
-import * as fixture26 from './src/fixtures/ContactList.fixture';
-import * as fixture25 from './src/fixtures/CreateGroup.fixture';
-import * as fixture41 from './src/fixtures/DetailView/ChatDetailView.fixture';
-import * as fixture40 from './src/fixtures/DetailView/GalleryDetailView.fixture';
-import * as fixture39 from './src/fixtures/DetailView/NotebookDetailView.fixture';
-import * as fixture24 from './src/fixtures/FindGroups.fixture';
-import * as fixture23 from './src/fixtures/Form.fixture';
-import * as fixture22 from './src/fixtures/GalleryPost.fixture';
-import * as fixture21 from './src/fixtures/GroupList.fixture';
-import * as fixture20 from './src/fixtures/GroupListItem.fixture';
-import * as fixture19 from './src/fixtures/ImageViewer.fixture';
-import * as fixture18 from './src/fixtures/Input.fixture';
-import * as fixture17 from './src/fixtures/InputToolbar.fixture';
-import * as fixture16 from './src/fixtures/InviteUsersSheet.fixture';
-import * as fixture15 from './src/fixtures/MessageActions.fixture';
-import * as fixture14 from './src/fixtures/MessageInput.fixture';
-import * as fixture13 from './src/fixtures/MetaEditorScreen.fixture';
-import * as fixture12 from './src/fixtures/OutsideEmbed.fixture';
-import * as fixture11 from './src/fixtures/PostReference.fixture';
-import * as fixture10 from './src/fixtures/PostScreen.fixture';
-import * as fixture9 from './src/fixtures/ProfileBlock.fixture';
-import * as fixture8 from './src/fixtures/ProfileSheet.fixture';
-import * as fixture7 from './src/fixtures/ReferenceSkeleton.fixture';
-import * as fixture6 from './src/fixtures/ScreenHeader.fixture';
-import * as fixture5 from './src/fixtures/SearchBar.fixture';
-import * as fixture4 from './src/fixtures/Text.fixture';
-import * as fixture3 from './src/fixtures/UserProfileScreen.fixture';
-import * as fixture2 from './src/fixtures/VideoEmbed.fixture';
import * as fixture1 from './src/fixtures/ViewReactionsSheet.fixture';
+import * as fixture2 from './src/fixtures/VideoEmbed.fixture';
+import * as fixture3 from './src/fixtures/UserProfileScreen.fixture';
+import * as fixture4 from './src/fixtures/Text.fixture';
+import * as fixture5 from './src/fixtures/SearchBar.fixture';
+import * as fixture6 from './src/fixtures/ScreenHeader.fixture';
+import * as fixture7 from './src/fixtures/ReferenceSkeleton.fixture';
+import * as fixture8 from './src/fixtures/ProfileSheet.fixture';
+import * as fixture9 from './src/fixtures/ProfileBlock.fixture';
+import * as fixture10 from './src/fixtures/PostScreen.fixture';
+import * as fixture11 from './src/fixtures/PostReference.fixture';
+import * as fixture12 from './src/fixtures/ParentAgnosticKeyboardAvoidingView.fixture';
+import * as fixture13 from './src/fixtures/OutsideEmbed.fixture';
+import * as fixture14 from './src/fixtures/MetaEditorScreen.fixture';
+import * as fixture15 from './src/fixtures/MessageInput.fixture';
+import * as fixture16 from './src/fixtures/MessageActions.fixture';
+import * as fixture17 from './src/fixtures/InviteUsersSheet.fixture';
+import * as fixture18 from './src/fixtures/InputToolbar.fixture';
+import * as fixture19 from './src/fixtures/Input.fixture';
+import * as fixture20 from './src/fixtures/ImageViewer.fixture';
+import * as fixture21 from './src/fixtures/GroupListItem.fixture';
+import * as fixture22 from './src/fixtures/GroupList.fixture';
+import * as fixture23 from './src/fixtures/GalleryPost.fixture';
+import * as fixture24 from './src/fixtures/Form.fixture';
+import * as fixture25 from './src/fixtures/FindGroups.fixture';
+import * as fixture26 from './src/fixtures/CreateGroup.fixture';
+import * as fixture27 from './src/fixtures/ContactList.fixture';
+import * as fixture28 from './src/fixtures/ChatMessage.fixture';
+import * as fixture29 from './src/fixtures/ChannelSwitcherSheet.fixture';
+import * as fixture30 from './src/fixtures/ChannelHeader.fixture';
+import * as fixture31 from './src/fixtures/ChannelDivider.fixture';
+import * as fixture32 from './src/fixtures/Channel.fixture';
+import * as fixture33 from './src/fixtures/Button.fixture';
+import * as fixture34 from './src/fixtures/BlockSectionList.fixture';
+import * as fixture35 from './src/fixtures/Avatar.fixture';
+import * as fixture36 from './src/fixtures/AudioEmbed.fixture';
+import * as fixture37 from './src/fixtures/AttachmentPreviewList.fixture';
+import * as fixture38 from './src/fixtures/AddGroupSheet.fixture';
+import * as fixture39 from './src/fixtures/Activity.fixture';
+import * as fixture40 from './src/fixtures/DetailView/NotebookDetailView.fixture';
+import * as fixture41 from './src/fixtures/DetailView/GalleryDetailView.fixture';
+import * as fixture42 from './src/fixtures/DetailView/ChatDetailView.fixture';
+import * as fixture43 from './src/fixtures/ActionSheet/SendPostRetrySheet.fixture';
+import * as fixture44 from './src/fixtures/ActionSheet/ProfileSheet.fixture';
+import * as fixture45 from './src/fixtures/ActionSheet/GroupPreviewSheet.fixture';
+import * as fixture46 from './src/fixtures/ActionSheet/GroupJoinRequestSheet.fixture';
+import * as fixture47 from './src/fixtures/ActionSheet/GenericActionSheet.fixture';
+import * as fixture48 from './src/fixtures/ActionSheet/EditSectionNameSheet.fixture';
+import * as fixture49 from './src/fixtures/ActionSheet/DeleteSheet.fixture';
+import * as fixture50 from './src/fixtures/ActionSheet/CreateChannelSheet.fixture';
+import * as fixture51 from './src/fixtures/ActionSheet/AttachmentSheet.fixture';
+import * as fixture52 from './src/fixtures/ActionSheet/AddGalleryPostSheet.fixture';
+
import * as decorator0 from './src/fixtures/cosmos.decorator';
export const rendererConfig: RendererConfig = {
- playgroundUrl: 'http://localhost:5000',
- rendererUrl: null,
+ "playgroundUrl": "http://localhost:5001",
+ "rendererUrl": null
};
const fixtures = {
@@ -75,75 +77,55 @@ const fixtures = {
'src/fixtures/ProfileBlock.fixture.tsx': { module: fixture9 },
'src/fixtures/PostScreen.fixture.tsx': { module: fixture10 },
'src/fixtures/PostReference.fixture.tsx': { module: fixture11 },
- 'src/fixtures/OutsideEmbed.fixture.tsx': { module: fixture12 },
- 'src/fixtures/MetaEditorScreen.fixture.tsx': { module: fixture13 },
- 'src/fixtures/MessageInput.fixture.tsx': { module: fixture14 },
- 'src/fixtures/MessageActions.fixture.tsx': { module: fixture15 },
- 'src/fixtures/InviteUsersSheet.fixture.tsx': { module: fixture16 },
- 'src/fixtures/InputToolbar.fixture.tsx': { module: fixture17 },
- 'src/fixtures/Input.fixture.tsx': { module: fixture18 },
- 'src/fixtures/ImageViewer.fixture.tsx': { module: fixture19 },
- 'src/fixtures/GroupListItem.fixture.tsx': { module: fixture20 },
- 'src/fixtures/GroupList.fixture.tsx': { module: fixture21 },
- 'src/fixtures/GalleryPost.fixture.tsx': { module: fixture22 },
- 'src/fixtures/Form.fixture.tsx': { module: fixture23 },
- 'src/fixtures/FindGroups.fixture.tsx': { module: fixture24 },
- 'src/fixtures/CreateGroup.fixture.tsx': { module: fixture25 },
- 'src/fixtures/ContactList.fixture.tsx': { module: fixture26 },
- 'src/fixtures/ChatMessage.fixture.tsx': { module: fixture27 },
- 'src/fixtures/ChannelSwitcherSheet.fixture.tsx': { module: fixture28 },
- 'src/fixtures/ChannelHeader.fixture.tsx': { module: fixture29 },
- 'src/fixtures/ChannelDivider.fixture.tsx': { module: fixture30 },
- 'src/fixtures/Channel.fixture.tsx': { module: fixture31 },
- 'src/fixtures/Button.fixture.tsx': { module: fixture32 },
- 'src/fixtures/BlockSectionList.fixture.tsx': { module: fixture33 },
- 'src/fixtures/Avatar.fixture.tsx': { module: fixture34 },
- 'src/fixtures/AudioEmbed.fixture.tsx': { module: fixture35 },
- 'src/fixtures/AttachmentPreviewList.fixture.tsx': { module: fixture36 },
- 'src/fixtures/AddGroupSheet.fixture.tsx': { module: fixture37 },
- 'src/fixtures/Activity.fixture.tsx': { module: fixture38 },
- 'src/fixtures/DetailView/NotebookDetailView.fixture.tsx': {
- module: fixture39,
- },
- 'src/fixtures/DetailView/GalleryDetailView.fixture.tsx': {
- module: fixture40,
- },
- 'src/fixtures/DetailView/ChatDetailView.fixture.tsx': { module: fixture41 },
- 'src/fixtures/ActionSheet/SendPostRetrySheet.fixture.tsx': {
- module: fixture42,
- },
- 'src/fixtures/ActionSheet/ProfileSheet.fixture.tsx': { module: fixture43 },
- 'src/fixtures/ActionSheet/GroupPreviewSheet.fixture.tsx': {
- module: fixture44,
- },
- 'src/fixtures/ActionSheet/GroupJoinRequestSheet.fixture.tsx': {
- module: fixture45,
- },
- 'src/fixtures/ActionSheet/GenericActionSheet.fixture.tsx': {
- module: fixture46,
- },
- 'src/fixtures/ActionSheet/EditSectionNameSheet.fixture.tsx': {
- module: fixture47,
- },
- 'src/fixtures/ActionSheet/DeleteSheet.fixture.tsx': { module: fixture48 },
- 'src/fixtures/ActionSheet/CreateChannelSheet.fixture.tsx': {
- module: fixture49,
- },
- 'src/fixtures/ActionSheet/ChannelSortActionsSheet.fixture.tsx': {
- module: fixture50,
- },
+ 'src/fixtures/ParentAgnosticKeyboardAvoidingView.fixture.tsx': { module: fixture12 },
+ 'src/fixtures/OutsideEmbed.fixture.tsx': { module: fixture13 },
+ 'src/fixtures/MetaEditorScreen.fixture.tsx': { module: fixture14 },
+ 'src/fixtures/MessageInput.fixture.tsx': { module: fixture15 },
+ 'src/fixtures/MessageActions.fixture.tsx': { module: fixture16 },
+ 'src/fixtures/InviteUsersSheet.fixture.tsx': { module: fixture17 },
+ 'src/fixtures/InputToolbar.fixture.tsx': { module: fixture18 },
+ 'src/fixtures/Input.fixture.tsx': { module: fixture19 },
+ 'src/fixtures/ImageViewer.fixture.tsx': { module: fixture20 },
+ 'src/fixtures/GroupListItem.fixture.tsx': { module: fixture21 },
+ 'src/fixtures/GroupList.fixture.tsx': { module: fixture22 },
+ 'src/fixtures/GalleryPost.fixture.tsx': { module: fixture23 },
+ 'src/fixtures/Form.fixture.tsx': { module: fixture24 },
+ 'src/fixtures/FindGroups.fixture.tsx': { module: fixture25 },
+ 'src/fixtures/CreateGroup.fixture.tsx': { module: fixture26 },
+ 'src/fixtures/ContactList.fixture.tsx': { module: fixture27 },
+ 'src/fixtures/ChatMessage.fixture.tsx': { module: fixture28 },
+ 'src/fixtures/ChannelSwitcherSheet.fixture.tsx': { module: fixture29 },
+ 'src/fixtures/ChannelHeader.fixture.tsx': { module: fixture30 },
+ 'src/fixtures/ChannelDivider.fixture.tsx': { module: fixture31 },
+ 'src/fixtures/Channel.fixture.tsx': { module: fixture32 },
+ 'src/fixtures/Button.fixture.tsx': { module: fixture33 },
+ 'src/fixtures/BlockSectionList.fixture.tsx': { module: fixture34 },
+ 'src/fixtures/Avatar.fixture.tsx': { module: fixture35 },
+ 'src/fixtures/AudioEmbed.fixture.tsx': { module: fixture36 },
+ 'src/fixtures/AttachmentPreviewList.fixture.tsx': { module: fixture37 },
+ 'src/fixtures/AddGroupSheet.fixture.tsx': { module: fixture38 },
+ 'src/fixtures/Activity.fixture.tsx': { module: fixture39 },
+ 'src/fixtures/DetailView/NotebookDetailView.fixture.tsx': { module: fixture40 },
+ 'src/fixtures/DetailView/GalleryDetailView.fixture.tsx': { module: fixture41 },
+ 'src/fixtures/DetailView/ChatDetailView.fixture.tsx': { module: fixture42 },
+ 'src/fixtures/ActionSheet/SendPostRetrySheet.fixture.tsx': { module: fixture43 },
+ 'src/fixtures/ActionSheet/ProfileSheet.fixture.tsx': { module: fixture44 },
+ 'src/fixtures/ActionSheet/GroupPreviewSheet.fixture.tsx': { module: fixture45 },
+ 'src/fixtures/ActionSheet/GroupJoinRequestSheet.fixture.tsx': { module: fixture46 },
+ 'src/fixtures/ActionSheet/GenericActionSheet.fixture.tsx': { module: fixture47 },
+ 'src/fixtures/ActionSheet/EditSectionNameSheet.fixture.tsx': { module: fixture48 },
+ 'src/fixtures/ActionSheet/DeleteSheet.fixture.tsx': { module: fixture49 },
+ 'src/fixtures/ActionSheet/CreateChannelSheet.fixture.tsx': { module: fixture50 },
'src/fixtures/ActionSheet/AttachmentSheet.fixture.tsx': { module: fixture51 },
- 'src/fixtures/ActionSheet/AddGalleryPostSheet.fixture.tsx': {
- module: fixture52,
- },
+ 'src/fixtures/ActionSheet/AddGalleryPostSheet.fixture.tsx': { module: fixture52 }
};
const decorators = {
- 'src/fixtures/cosmos.decorator.tsx': { module: decorator0 },
+ 'src/fixtures/cosmos.decorator.tsx': { module: decorator0 }
};
export const moduleWrappers: UserModuleWrappers = {
lazy: false,
fixtures,
- decorators,
+ decorators
};
diff --git a/apps/tlon-mobile/ios/Podfile.lock b/apps/tlon-mobile/ios/Podfile.lock
index a45765f3ad..57a709f540 100644
--- a/apps/tlon-mobile/ios/Podfile.lock
+++ b/apps/tlon-mobile/ios/Podfile.lock
@@ -1356,7 +1356,9 @@ PODS:
- Firebase/Performance (= 10.24.0)
- React-Core
- RNFBApp
- - RNGestureHandler (2.18.1):
+ - RNFlashList (1.6.3):
+ - React-Core
+ - RNGestureHandler (2.20.0):
- glog
- RCT-Folly (= 2022.05.16.00)
- React-Core
@@ -1491,6 +1493,7 @@ DEPENDENCIES:
- "RNFBApp (from `../../../node_modules/@react-native-firebase/app`)"
- "RNFBCrashlytics (from `../../../node_modules/@react-native-firebase/crashlytics`)"
- "RNFBPerf (from `../../../node_modules/@react-native-firebase/perf`)"
+ - "RNFlashList (from `../../../node_modules/@shopify/flash-list`)"
- RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`)
- RNReanimated (from `../../../node_modules/react-native-reanimated`)
- RNScreens (from `../../../node_modules/react-native-screens`)
@@ -1725,6 +1728,8 @@ EXTERNAL SOURCES:
:path: "../../../node_modules/@react-native-firebase/crashlytics"
RNFBPerf:
:path: "../../../node_modules/@react-native-firebase/perf"
+ RNFlashList:
+ :path: "../../../node_modules/@shopify/flash-list"
RNGestureHandler:
:path: "../../../node_modules/react-native-gesture-handler"
RNReanimated:
@@ -1862,7 +1867,8 @@ SPEC CHECKSUMS:
RNFBApp: 91311b27bc9a33e23b76a62825afd1635501018a
RNFBCrashlytics: c3219ef7a0c779f2428236215781c38e7892f6f9
RNFBPerf: 2c926ff255c704a644dd53572008cba47c67ada0
- RNGestureHandler: 9a413b04f827e0169f0f9f97a845c266da61f87c
+ RNFlashList: 4b4b6b093afc0df60ae08f9cbf6ccd4c836c667a
+ RNGestureHandler: 79c035e2243d3b7f4f353e7eb32869eace6b596c
RNReanimated: 4b1bce37b188450e3a2d03c925edd5fb11d4bb2d
RNScreens: a4d9ce8f68f833f4e42410140eafd88e38bba163
RNSVG: 3f65a03e0c61a8495dee92bf82545ed9041cbf3b
diff --git a/apps/tlon-mobile/package.json b/apps/tlon-mobile/package.json
index 5387c70d96..6c3ca7fdd3 100644
--- a/apps/tlon-mobile/package.json
+++ b/apps/tlon-mobile/package.json
@@ -55,6 +55,7 @@
"@react-navigation/bottom-tabs": "^6.5.12",
"@react-navigation/native": "^6.1.7",
"@react-navigation/native-stack": "^6.9.13",
+ "@shopify/flash-list": "1.6.3",
"@tanstack/react-query": "~5.32.1",
"@tloncorp/app": "workspace:*",
"@tloncorp/editor": "workspace:*",
@@ -98,7 +99,7 @@
"react-native-country-codes-picker": "^2.3.3",
"react-native-device-info": "^10.8.0",
"react-native-fetch-api": "^3.0.0",
- "react-native-gesture-handler": "~2.18.0",
+ "react-native-gesture-handler": "~2.20.0",
"react-native-get-random-values": "^1.11.0",
"react-native-phone-input": "^1.3.7",
"react-native-polyfill-globals": "^3.1.0",
@@ -120,12 +121,12 @@
"@faker-js/faker": "^8.4.1",
"@jest/globals": "^29.7.0",
"@react-native/metro-config": "^0.73.5",
- "@tamagui/babel-plugin": "1.101.3",
+ "@tamagui/babel-plugin": "~1.112.12",
"@testing-library/react-native": "^12.5.2",
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
"@types/react": "^18.2.55",
- "@types/tmp": "^0.2.6",
"@types/seedrandom": "^3.0.5",
+ "@types/tmp": "^0.2.6",
"babel-plugin-inline-import": "^3.0.0",
"babel-preset-expo": "^10.0.0",
"better-sqlite3": "~9.4.3",
diff --git a/apps/tlon-mobile/src/App.main.tsx b/apps/tlon-mobile/src/App.main.tsx
index 7719595235..25cca6511c 100644
--- a/apps/tlon-mobile/src/App.main.tsx
+++ b/apps/tlon-mobile/src/App.main.tsx
@@ -34,6 +34,7 @@ import AuthenticatedApp from './components/AuthenticatedApp';
import { CheckVerifyScreen } from './screens/Onboarding/CheckVerifyScreen';
import { EULAScreen } from './screens/Onboarding/EULAScreen';
import { InventoryCheckScreen } from './screens/Onboarding/InventoryCheckScreen';
+import { InviteLinkScreen } from './screens/Onboarding/InviteLinkScreen';
import { JoinWaitListScreen } from './screens/Onboarding/JoinWaitListScreen';
import { RequestPhoneVerifyScreen } from './screens/Onboarding/RequestPhoneVerifyScreen';
import { ReserveShipScreen } from './screens/Onboarding/ReserveShipScreen';
@@ -110,6 +111,10 @@ const App = ({
component={SignUpEmailScreen}
/>
+
{}}
- onSelectSort={() => {}}
- />
-);
diff --git a/apps/tlon-mobile/src/fixtures/AddGroupSheet.fixture.tsx b/apps/tlon-mobile/src/fixtures/AddGroupSheet.fixture.tsx
index 3c2d649e4f..acc727ee65 100644
--- a/apps/tlon-mobile/src/fixtures/AddGroupSheet.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/AddGroupSheet.fixture.tsx
@@ -6,7 +6,7 @@ import { initialContacts } from './fakeData';
export default {
basic: (
-
+
{}}
diff --git a/apps/tlon-mobile/src/fixtures/Channel.fixture.tsx b/apps/tlon-mobile/src/fixtures/Channel.fixture.tsx
index 300a596862..9e3dae72a4 100644
--- a/apps/tlon-mobile/src/fixtures/Channel.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/Channel.fixture.tsx
@@ -22,6 +22,7 @@ import {
createFakePosts,
group,
initialContacts,
+ tlonLocalBulletinBoard,
tlonLocalGettingStarted,
tlonLocalIntros,
} from './fakeData';
@@ -142,6 +143,24 @@ export const ChannelFixture = (props: {
);
};
+export const GalleryChannelFixture = (props: { theme?: 'light' | 'dark' }) => {
+ const switcher = useChannelSwitcher(tlonLocalBulletinBoard);
+
+ const [posts] = useState(() => createFakePosts(10, 'block'));
+
+ return (
+
+ switcher.open()}
+ />
+
+
+ );
+};
+
export const NotebookChannelFixture = (props: { theme?: 'light' | 'dark' }) => {
const switcher = useChannelSwitcher(tlonLocalGettingStarted);
@@ -157,7 +176,6 @@ export const NotebookChannelFixture = (props: { theme?: 'light' | 'dark' }) => {
);
};
-
const ChannelFixtureWithImage = () => {
const switcher = useChannelSwitcher(tlonLocalIntros);
const [imageAttachment, setImageAttachment] = useState(null);
@@ -493,6 +511,7 @@ export default {
})}
/>
),
+ gallery: ,
notebook: ,
chatWithImage: ,
negotiationMismatch: ,
diff --git a/apps/tlon-mobile/src/fixtures/DetailView/detailViewFixtureBase.tsx b/apps/tlon-mobile/src/fixtures/DetailView/detailViewFixtureBase.tsx
index 4e038c33a9..408a7a4bc1 100644
--- a/apps/tlon-mobile/src/fixtures/DetailView/detailViewFixtureBase.tsx
+++ b/apps/tlon-mobile/src/fixtures/DetailView/detailViewFixtureBase.tsx
@@ -54,6 +54,7 @@ export const DetailViewFixture = ({
markRead={() => {}}
canUpload={true}
handleGoToUserProfile={() => {}}
+ headerMode="default"
/>
diff --git a/apps/tlon-mobile/src/fixtures/FindGroups.fixture.tsx b/apps/tlon-mobile/src/fixtures/FindGroups.fixture.tsx
index d7fc516998..e6ff61f75c 100644
--- a/apps/tlon-mobile/src/fixtures/FindGroups.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/FindGroups.fixture.tsx
@@ -7,7 +7,7 @@ export default {
basic: (
- {}} onGroupAction={() => {}} />
+ {}} goToContactHostedGroups={() => {}} />
),
diff --git a/apps/tlon-mobile/src/fixtures/Form.fixture.tsx b/apps/tlon-mobile/src/fixtures/Form.fixture.tsx
index 4187ed7aff..75bb6d554a 100644
--- a/apps/tlon-mobile/src/fixtures/Form.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/Form.fixture.tsx
@@ -87,6 +87,13 @@ const FormFixture = () => {
>
Reseet
+
+ {}}
+ />
+
);
diff --git a/apps/tlon-mobile/src/fixtures/GroupList.fixture.tsx b/apps/tlon-mobile/src/fixtures/GroupList.fixture.tsx
index 7235088bb6..c19c1f192a 100644
--- a/apps/tlon-mobile/src/fixtures/GroupList.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/GroupList.fixture.tsx
@@ -102,7 +102,9 @@ export default {
{}}
- showFilters={false}
+ searchQuery=""
+ onSearchQueryChange={() => {}}
+ showSearchInput={false}
pinned={[groupWithLongTitle, groupWithImage].map((g) =>
makeChannelSummary({ group: g })
)}
@@ -113,6 +115,7 @@ export default {
groupWithNoColorOrImage,
].map((g) => makeChannelSummary({ group: g }))}
pendingChats={[]}
+ onSearchToggle={() => {}}
/>
),
@@ -121,7 +124,7 @@ export default {
{}}
- showFilters={false}
+ showSearchInput={false}
pinned={[dmSummary, groupDmSummary]}
unpinned={[
groupWithColorAndNoImage,
@@ -130,6 +133,9 @@ export default {
groupWithNoColorOrImage,
].map((g) => makeChannelSummary({ group: g }))}
pendingChats={[]}
+ searchQuery=""
+ onSearchQueryChange={() => {}}
+ onSearchToggle={() => {}}
/>
),
@@ -138,10 +144,13 @@ export default {
{}}
- showFilters={false}
+ showSearchInput={false}
pinned={[]}
unpinned={[]}
pendingChats={[]}
+ searchQuery=""
+ onSearchQueryChange={() => {}}
+ onSearchToggle={() => {}}
/>
),
diff --git a/apps/tlon-mobile/src/fixtures/ParentAgnosticKeyboardAvoidingView.fixture.tsx b/apps/tlon-mobile/src/fixtures/ParentAgnosticKeyboardAvoidingView.fixture.tsx
new file mode 100644
index 0000000000..0e1d4fdbdc
--- /dev/null
+++ b/apps/tlon-mobile/src/fixtures/ParentAgnosticKeyboardAvoidingView.fixture.tsx
@@ -0,0 +1,85 @@
+import { ParentAgnosticKeyboardAvoidingView } from '@tloncorp/ui';
+import { useFixtureSelect } from 'react-cosmos/client';
+import {
+ Button,
+ Keyboard,
+ KeyboardAvoidingView,
+ TextInput,
+} from 'react-native';
+import { ScrollView, View as TamaguiView, Text, YStack } from 'tamagui';
+
+import { FixtureWrapper } from './FixtureWrapper';
+
+export default function ParentAgnosticKeyboardAvoidingViewDemo() {
+ const [componentType, setComponentType] = useFixtureSelect(
+ 'KAV implementation',
+ {
+ defaultValue: 'ParentAgnosticKeyboardAvoidingView',
+ options: ['ParentAgnosticKeyboardAvoidingView', 'KeyboardAvoidingView'],
+ }
+ );
+
+ const KAVComponent =
+ componentType === 'ParentAgnosticKeyboardAvoidingView'
+ ? ParentAgnosticKeyboardAvoidingView
+ : KeyboardAvoidingView;
+
+ return (
+
+ 0` would break layout.
+ paddingTop={100}
+ backgroundColor="$background"
+ flex={1}
+ >
+
+
+
+
+
+
+ I avoid the keyboard
+
+
+
+
+ Footer
+
+
+
+
+ );
+}
diff --git a/apps/tlon-mobile/src/fixtures/PostScreen.fixture.tsx b/apps/tlon-mobile/src/fixtures/PostScreen.fixture.tsx
index be2f67fe86..6c35fe4861 100644
--- a/apps/tlon-mobile/src/fixtures/PostScreen.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/PostScreen.fixture.tsx
@@ -37,6 +37,7 @@ export default (
storeDraft={() => {}}
clearDraft={() => {}}
canUpload={true}
+ headerMode="default"
/>
);
diff --git a/apps/tlon-mobile/src/fixtures/UserProfileScreen.fixture.tsx b/apps/tlon-mobile/src/fixtures/UserProfileScreen.fixture.tsx
index da8a08e716..9b68330c4e 100644
--- a/apps/tlon-mobile/src/fixtures/UserProfileScreen.fixture.tsx
+++ b/apps/tlon-mobile/src/fixtures/UserProfileScreen.fixture.tsx
@@ -37,6 +37,9 @@ function ProfileScreenFixture() {
userId="~fabled-faster"
onBack={() => {}}
connectionStatus={{ complete: true, status: 'yes' }}
+ onPressGroup={() => {
+ console.log('group pressed');
+ }}
/>
diff --git a/apps/tlon-mobile/src/hooks/useNotificationListener.ts b/apps/tlon-mobile/src/hooks/useNotificationListener.ts
index 46469a80d7..0507c7b637 100644
--- a/apps/tlon-mobile/src/hooks/useNotificationListener.ts
+++ b/apps/tlon-mobile/src/hooks/useNotificationListener.ts
@@ -29,6 +29,7 @@ interface BaseNotificationData {
interface WerNotificationData extends BaseNotificationData {
type: 'wer';
channelId: string;
+ postInfo: { id: string; authorId: string; isDm: boolean } | null;
wer: string;
}
interface UnrecognizedNotificationData extends BaseNotificationData {
@@ -63,12 +64,13 @@ function payloadFromNotification(
meta: { errorsFromExtension: payload.notificationServiceExtensionErrors },
};
- // welcome to my validation library
+ // welcome to my validation library ;)
if (payload.wer != null && payload.channelId != null) {
return {
...baseNotificationData,
type: 'wer',
channelId: payload.channelId,
+ postInfo: api.getPostInfoFromWer(payload.wer),
wer: payload.wer,
};
}
@@ -86,18 +88,8 @@ export default function useNotificationListener({
const { data: isTlonEmployee } = store.useIsTlonEmployee();
const [channelSwitcherEnabled] = useFeatureFlag('channelSwitcher');
- const [{ postInfo, channelId, isDm }, setGotoData] = useState<{
- path?: string;
- isDm?: boolean;
- postInfo?: { id: string; authorId: string } | null;
- channelId?: string;
- }>({
- path: notificationPath,
- channelId: notificationChannelId,
- });
-
- const resetGotoData = () =>
- setGotoData({ path: undefined, channelId: undefined, postInfo: undefined });
+ const [notifToProcess, setNotifToProcess] =
+ useState(null);
// Start notifications prompt
useEffect(() => {
@@ -130,29 +122,22 @@ export default function useNotificationListener({
// https://linear.app/tlon/issue/TLON-2551/multiple-notifications-that-lead-to-nowhere-crash-app
// We're seeing cases where `data` is null here - not sure why this is happening.
// Log the notification and don't try to navigate.
- if (isTlonEmployee) {
- posthog.trackError({
- message: 'Failed to get notification payload',
- properties: response.notification.request,
- });
- }
+ posthog.trackError({
+ message: 'Failed to get notification payload',
+ properties: isTlonEmployee
+ ? response.notification.request
+ : undefined,
+ });
return;
}
const { actionIdentifier, userText } = response;
- const postInfo = api.getPostInfoFromWer(data.wer);
- const isDm = api.getIsDmFromWer(data.wer);
if (actionIdentifier === 'markAsRead' && data.channelId) {
markChatRead(data.channelId);
} else if (actionIdentifier === 'reply' && userText) {
// TODO: this is unhandled, when is actionIdentifier = reply?
} else if (data.channelId) {
- setGotoData({
- path: data.wer,
- isDm,
- postInfo,
- channelId: data.channelId,
- });
+ setNotifToProcess(data);
}
}
);
@@ -165,7 +150,8 @@ export default function useNotificationListener({
// If notification tapped, push channel on stack
useEffect(() => {
- if (channelId) {
+ if (notifToProcess && notifToProcess.channelId) {
+ const { channelId, postInfo } = notifToProcess;
const goToChannel = async () => {
const channel = await db.getChannelWithRelations({ id: channelId });
if (!channel) {
@@ -206,7 +192,7 @@ export default function useNotificationListener({
routes: routeStack,
})
);
- resetGotoData();
+ setNotifToProcess(null);
return true;
};
@@ -232,20 +218,13 @@ export default function useNotificationListener({
}
crashlytics().recordError(
new Error(
- `Notification listener: failed to navigate to ${isDm ? 'DM ' : ''}channel ${postInfo?.id ? ' thread' : ''}`
+ `Notification listener: failed to navigate to ${postInfo?.isDm ? 'DM ' : ''}channel ${postInfo?.id ? ' thread' : ''}`
)
);
- resetGotoData();
+ setNotifToProcess(null);
}
}
})();
}
- }, [
- channelId,
- postInfo,
- navigation,
- isDm,
- isTlonEmployee,
- channelSwitcherEnabled,
- ]);
+ }, [notifToProcess, navigation, isTlonEmployee, channelSwitcherEnabled]);
}
diff --git a/apps/tlon-mobile/src/screens/Onboarding/CheckVerifyScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/CheckVerifyScreen.tsx
index d07a5b5664..963c57ccba 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/CheckVerifyScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/CheckVerifyScreen.tsx
@@ -10,7 +10,7 @@ import { formatPhoneNumber } from '@tloncorp/app/utils/string';
import {
Button,
Field,
- GenericHeader,
+ ScreenHeader,
SizableText,
Text,
TextInput,
@@ -123,10 +123,10 @@ export const CheckVerifyScreen = ({
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/EULAScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/EULAScreen.tsx
index 576a5fdf82..01d237c9e8 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/EULAScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/EULAScreen.tsx
@@ -1,5 +1,5 @@
import type { NativeStackScreenProps } from '@react-navigation/native-stack';
-import { GenericHeader, SizableText, View, YStack } from '@tloncorp/ui';
+import { ScreenHeader, SizableText, View, YStack } from '@tloncorp/ui';
import { ScrollView } from 'react-native';
import type { OnboardingStackParamList } from '../../types';
@@ -9,10 +9,10 @@ type Props = NativeStackScreenProps;
export const EULAScreen = ({ navigation }: Props) => {
return (
- navigation.goBack()}
+ backAction={() => navigation.goBack()}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/InventoryCheckScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/InventoryCheckScreen.tsx
index 9ac68fbce8..7ff9ba04fe 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/InventoryCheckScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/InventoryCheckScreen.tsx
@@ -3,9 +3,9 @@ import { useSignupParams } from '@tloncorp/app/contexts/branch';
import { getHostingAvailability } from '@tloncorp/app/lib/hostingApi';
import { trackError } from '@tloncorp/app/utils/posthog';
import {
- GenericHeader,
Icon,
PrimaryButton,
+ ScreenHeader,
SizableText,
Text,
View,
@@ -34,7 +34,7 @@ export const InventoryCheckScreen = ({ navigation }: Props) => {
if (enabled) {
navigation.navigate('SignUpEmail');
} else {
- navigation.navigate('JoinWaitList', {});
+ navigation.navigate('InviteLink');
}
} catch (err) {
console.error('Error checking hosting availability:', err);
@@ -48,11 +48,11 @@ export const InventoryCheckScreen = ({ navigation }: Props) => {
return (
- navigation.goBack()}
- showSpinner={isChecking}
+ backAction={() => navigation.goBack()}
+ isLoading={isChecking}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/InviteLinkScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/InviteLinkScreen.tsx
new file mode 100644
index 0000000000..1967b29c9d
--- /dev/null
+++ b/apps/tlon-mobile/src/screens/Onboarding/InviteLinkScreen.tsx
@@ -0,0 +1,155 @@
+import Clipboard from '@react-native-clipboard/clipboard';
+import type { NativeStackScreenProps } from '@react-navigation/native-stack';
+import { BRANCH_DOMAIN, BRANCH_KEY } from '@tloncorp/app/constants';
+import { useBranch, useLureMetadata } from '@tloncorp/app/contexts/branch';
+import {
+ DeepLinkData,
+ createInviteLinkRegex,
+ extractNormalizedInviteLink,
+ getMetadaFromInviteLink,
+} from '@tloncorp/shared/dist';
+import {
+ AppInviteDisplay,
+ Field,
+ PrimaryButton,
+ ScreenHeader,
+ SizableText,
+ TextInputWithButton,
+ View,
+ YStack,
+} from '@tloncorp/ui';
+import { useCallback, useEffect, useState } from 'react';
+import { Controller, useForm } from 'react-hook-form';
+import { Keyboard } from 'react-native';
+
+import type { OnboardingStackParamList } from '../../types';
+
+const INVITE_LINK_REGEX = createInviteLinkRegex(BRANCH_DOMAIN);
+
+type Props = NativeStackScreenProps;
+
+type FormData = {
+ inviteLink: string;
+};
+
+export const InviteLinkScreen = ({ navigation }: Props) => {
+ const lureMeta = useLureMetadata();
+ const { setLure } = useBranch();
+ const [hasInvite, setHasInvite] = useState(Boolean(lureMeta));
+
+ const {
+ control,
+ formState: { errors },
+ setValue,
+ watch,
+ trigger,
+ } = useForm();
+
+ // watch for changes to the input & check for valid invite links
+ const inviteLinkValue = watch('inviteLink');
+ useEffect(() => {
+ async function handleInviteLinkChange() {
+ const extractedLink = extractNormalizedInviteLink(
+ inviteLinkValue,
+ BRANCH_DOMAIN
+ );
+ if (extractedLink) {
+ const inviteLinkMeta = await getMetadaFromInviteLink(
+ extractedLink,
+ BRANCH_KEY
+ );
+ if (inviteLinkMeta) {
+ setLure(inviteLinkMeta as DeepLinkData);
+ return;
+ }
+ }
+ trigger('inviteLink');
+ }
+ handleInviteLinkChange();
+ }, [inviteLinkValue, setLure, trigger]);
+
+ // if at any point we have invite metadata, notify & allow them to proceed
+ // to signup
+ useEffect(() => {
+ if (lureMeta) {
+ setHasInvite(true);
+ }
+ }, [lureMeta]);
+
+ // handle paste button click
+ const onHandlePasteClick = useCallback(async () => {
+ const clipboardContents = await Clipboard.getString();
+ setValue('inviteLink', clipboardContents);
+ }, [setValue]);
+
+ return (
+
+ navigation.goBack()}
+ />
+ Keyboard.dismiss()}
+ flex={1}
+ >
+ {!hasInvite ? (
+ <>
+
+
+ We're growing slowly. Invites let you skip the waitlist
+ because we know someone wants to talk to you here.
+
+
+ Click your invite link now or paste it below.
+
+
+ (
+
+
+
+ )}
+ />
+
+ navigation.navigate('JoinWaitList', {})}
+ >
+ I don't have an invite
+
+ >
+ ) : (
+ <>
+
+ Invite found!
+
+
+ navigation.navigate('SignUpEmail')}>
+ Sign up
+
+ >
+ )}
+
+
+ );
+};
diff --git a/apps/tlon-mobile/src/screens/Onboarding/JoinWaitListScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/JoinWaitListScreen.tsx
index 06ad570443..93ca184470 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/JoinWaitListScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/JoinWaitListScreen.tsx
@@ -4,8 +4,8 @@ import { addUserToWaitlist } from '@tloncorp/app/lib/hostingApi';
import { trackError, trackOnboardingAction } from '@tloncorp/app/utils/posthog';
import {
Field,
- GenericHeader,
PrimaryButton,
+ ScreenHeader,
SizableText,
TextInput,
View,
@@ -48,10 +48,10 @@ export const JoinWaitListScreen = ({ navigation }: Props) => {
return (
- navigation.goBack()}
+ backAction={() => navigation.goBack()}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/RequestPhoneVerifyScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/RequestPhoneVerifyScreen.tsx
index 8e2b960e44..46f5bbf06b 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/RequestPhoneVerifyScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/RequestPhoneVerifyScreen.tsx
@@ -3,11 +3,9 @@ import { useIsDarkMode } from '@tloncorp/app/hooks/useIsDarkMode';
import { requestPhoneVerify } from '@tloncorp/app/lib/hostingApi';
import { trackError, trackOnboardingAction } from '@tloncorp/app/utils/posthog';
import {
- Button,
Field,
- GenericHeader,
+ ScreenHeader,
SizableText,
- Text,
View,
YStack,
useTheme,
@@ -78,15 +76,15 @@ export const RequestPhoneVerifyScreen = ({
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
-
- Next
-
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
+
+ Next
+
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/ResetPasswordScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/ResetPasswordScreen.tsx
index d8e06b5cc1..6257fb164f 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/ResetPasswordScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/ResetPasswordScreen.tsx
@@ -3,12 +3,10 @@ import { EMAIL_REGEX } from '@tloncorp/app/constants';
import { requestPasswordReset } from '@tloncorp/app/lib/hostingApi';
import { trackError } from '@tloncorp/app/utils/posthog';
import {
- Button,
Field,
- GenericHeader,
KeyboardAvoidingView,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
@@ -66,16 +64,16 @@ export const ResetPasswordScreen = ({
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
isValid && (
-
- Submit
-
+
+ Submit
+
)
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/SetNicknameScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/SetNicknameScreen.tsx
index 61d2109d97..bc35e9952a 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/SetNicknameScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/SetNicknameScreen.tsx
@@ -3,11 +3,9 @@ import { useSignupContext } from '@tloncorp/app/contexts/signup';
import { requestNotificationToken } from '@tloncorp/app/lib/notifications';
import { trackError } from '@tloncorp/app/utils/posthog';
import {
- Button,
Field,
- GenericHeader,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
@@ -85,13 +83,13 @@ export const SetNicknameScreen = ({
return (
-
- Next
-
+ rightControls={
+
+ Next
+
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/SetTelemetryScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/SetTelemetryScreen.tsx
index 2761bc9096..61298bef38 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/SetTelemetryScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/SetTelemetryScreen.tsx
@@ -1,10 +1,9 @@
import type { NativeStackScreenProps } from '@react-navigation/native-stack';
import { useSignupContext } from '@tloncorp/app/contexts/signup';
import {
- Button,
- GenericHeader,
+ PrimaryButton,
+ ScreenHeader,
SizableText,
- Text,
View,
XStack,
YStack,
@@ -43,15 +42,7 @@ export const SetTelemetryScreen = ({
return (
-
- Next
-
- }
- />
+
We’re trying to make the app better and knowing how people use
@@ -72,6 +63,7 @@ export const SetTelemetryScreen = ({
+ Next
);
diff --git a/apps/tlon-mobile/src/screens/Onboarding/ShipLoginScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/ShipLoginScreen.tsx
index 3514f3059f..84d6f2093f 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/ShipLoginScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/ShipLoginScreen.tsx
@@ -10,15 +10,13 @@ import { getShipFromCookie } from '@tloncorp/app/utils/ship';
import { transformShipURL } from '@tloncorp/app/utils/string';
import { getLandscapeAuthCookie } from '@tloncorp/shared/dist/api';
import {
- Button,
CheckboxInput,
Field,
- GenericHeader,
Icon,
KeyboardAvoidingView,
ListItem,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
@@ -125,17 +123,17 @@ export const ShipLoginScreen = ({ navigation }: Props) => {
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
isValid &&
watch('eulaAgreed') && (
-
- Connect
-
+
+ Connect
+
)
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/SignUpEmailScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/SignUpEmailScreen.tsx
index 8b68985687..7a45acf8bd 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/SignUpEmailScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/SignUpEmailScreen.tsx
@@ -8,19 +8,16 @@ import { getHostingAvailability } from '@tloncorp/app/lib/hostingApi';
import { trackError, trackOnboardingAction } from '@tloncorp/app/utils/posthog';
import {
AppInviteDisplay,
- Button,
- GenericHeader,
+ Field,
KeyboardAvoidingView,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
} from '@tloncorp/ui';
-import { Field } from '@tloncorp/ui';
import { useState } from 'react';
-import { useForm } from 'react-hook-form';
-import { Controller } from 'react-hook-form';
+import { Controller, useForm } from 'react-hook-form';
import type { OnboardingStackParamList } from '../../types';
@@ -89,16 +86,16 @@ export const SignUpEmailScreen = ({ navigation, route: { params } }: Props) => {
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
isValid && (
-
- Next
-
+
+ Next
+
)
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/SignUpPasswordScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/SignUpPasswordScreen.tsx
index 25fc4d6558..81514a199c 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/SignUpPasswordScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/SignUpPasswordScreen.tsx
@@ -4,9 +4,8 @@ import {
initClient,
} from '@google-cloud/recaptcha-enterprise-react-native';
import type { NativeStackScreenProps } from '@react-navigation/native-stack';
-import { DEFAULT_LURE, RECAPTCHA_SITE_KEY } from '@tloncorp/app/constants';
+import { RECAPTCHA_SITE_KEY } from '@tloncorp/app/constants';
import {
- useBranch,
useLureMetadata,
useSignupParams,
} from '@tloncorp/app/contexts/branch';
@@ -19,15 +18,13 @@ import { isEulaAgreed, setEulaAgreed } from '@tloncorp/app/utils/eula';
import { trackError, trackOnboardingAction } from '@tloncorp/app/utils/posthog';
import {
AppInviteDisplay,
- Button,
CheckboxInput,
Field,
- GenericHeader,
Icon,
KeyboardAvoidingView,
ListItem,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
@@ -182,17 +179,17 @@ export const SignUpPasswordScreen = ({
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
isValid &&
watch('eulaAgreed') && (
-
- Next
-
+
+ Next
+
)
}
/>
diff --git a/apps/tlon-mobile/src/screens/Onboarding/TlonLoginScreen.tsx b/apps/tlon-mobile/src/screens/Onboarding/TlonLoginScreen.tsx
index 1ebcc91ee9..56aa9e3b3e 100644
--- a/apps/tlon-mobile/src/screens/Onboarding/TlonLoginScreen.tsx
+++ b/apps/tlon-mobile/src/screens/Onboarding/TlonLoginScreen.tsx
@@ -15,15 +15,13 @@ import { isEulaAgreed, setEulaAgreed } from '@tloncorp/app/utils/eula';
import { getShipUrl } from '@tloncorp/app/utils/ship';
import { getLandscapeAuthCookie } from '@tloncorp/shared/dist/api';
import {
- Button,
CheckboxInput,
Field,
- GenericHeader,
Icon,
KeyboardAvoidingView,
ListItem,
+ ScreenHeader,
SizableText,
- Text,
TextInput,
View,
YStack,
@@ -149,17 +147,17 @@ export const TlonLoginScreen = ({ navigation }: Props) => {
return (
- navigation.goBack()}
- showSpinner={isSubmitting}
- rightContent={
+ backAction={() => navigation.goBack()}
+ isLoading={isSubmitting}
+ rightControls={
isValid &&
watch('eulaAgreed') && (
-
- Connect
-
+
+ Connect
+
)
}
/>
diff --git a/apps/tlon-mobile/src/types.ts b/apps/tlon-mobile/src/types.ts
index c5e32bce9f..b339b177ce 100644
--- a/apps/tlon-mobile/src/types.ts
+++ b/apps/tlon-mobile/src/types.ts
@@ -27,6 +27,9 @@ export type RootStackParamList = {
selectedPostId?: string | null;
};
FindGroups: undefined;
+ ContactHostedGroups: {
+ contactId: string;
+ };
CreateGroup: undefined;
GroupChannels: {
group: db.Group;
@@ -98,6 +101,7 @@ export type OnboardingStackParamList = {
SignUpEmail: undefined;
EULA: undefined;
SignUpPassword: { email: string };
+ InviteLink: undefined;
JoinWaitList: { email?: string };
RequestPhoneVerify: { user: User };
CheckVerify: { user: User };
diff --git a/apps/tlon-web-new/package.json b/apps/tlon-web-new/package.json
index 39d7c65402..72e166d653 100644
--- a/apps/tlon-web-new/package.json
+++ b/apps/tlon-web-new/package.json
@@ -48,7 +48,7 @@
"@radix-ui/react-toggle-group": "^1.0.4",
"@radix-ui/react-tooltip": "^1.0.0",
"@react-navigation/native": "^6.1.7",
- "@tamagui/vite-plugin": "1.101.3",
+ "@tamagui/vite-plugin": "~1.112.12",
"@tanstack/react-query": "^4.28.0",
"@tanstack/react-query-devtools": "^4.28.0",
"@tanstack/react-query-persist-client": "^4.28.0",
diff --git a/apps/tlon-web/package.json b/apps/tlon-web/package.json
index 8ddd7ce2b5..f0417db966 100644
--- a/apps/tlon-web/package.json
+++ b/apps/tlon-web/package.json
@@ -53,7 +53,7 @@
"@radix-ui/react-toggle": "^1.0.2",
"@radix-ui/react-toggle-group": "^1.0.4",
"@radix-ui/react-tooltip": "^1.0.0",
- "@tamagui/vite-plugin": "1.101.3",
+ "@tamagui/vite-plugin": "~1.112.12",
"@tanstack/react-query": "^4.28.0",
"@tanstack/react-query-devtools": "^4.28.0",
"@tanstack/react-query-persist-client": "^4.28.0",
diff --git a/desk/app/activity.hoon b/desk/app/activity.hoon
index 5ea131a496..e4c2b18c17 100644
--- a/desk/app/activity.hoon
+++ b/desk/app/activity.hoon
@@ -49,7 +49,7 @@
+$ card card:agent:gall
::
+$ current-state
- $: %6
+ $: %7
allowed=notifications-allowed:a
=indices:a
=activity:a
@@ -137,20 +137,25 @@
=? old ?=(%3 -.old) (state-3-to-4 old)
=? old ?=(%4 -.old) (state-4-to-5 old)
=? old ?=(%5 -.old) (state-5-to-6 old)
- ?> ?=(%6 -.old)
+ =? cor ?=(%6 -.old)
+ (emit %pass /adjust-old-default %agent [our.bowl dap.bowl] %poke noun+!>(%adjust-old-default))
+ =? old ?=(%6 -.old) [%7 +.old]
+ ?> ?=(%7 -.old)
=. state old
=. allowed %all
(emit %pass /fix-init-unreads %agent [our.bowl dap.bowl] %poke noun+!>(%fix-init-unreads))
+$ versioned-state
- $% state-6
+ $% state-7
+ state-6
state-5
state-4
state-3
state-2
state-1
==
- +$ state-6 current-state
- +$ state-5 _%*(. *state-6 - %5)
+ +$ state-7 current-state
+ +$ state-6 _%*(. *state-7 - %6)
+ +$ state-5 _%*(. *state-7 - %5)
++ state-5-to-6
|= old=state-5
^- state-6
@@ -258,6 +263,7 @@
%fix-init-unreads fix-init-unreads
%show-orphans (drop-orphans &)
%drop-orphans (drop-orphans |)
+ %adjust-old-default adjust-old-default
::
%sync-reads
=^ indices activity
@@ -1144,6 +1150,30 @@
+$ indexes (list [=source:a =index:a])
--
::
+:: when we migrated from chat and channels, originally we didn't set the
+:: correct new default. if someone is still on the old default, we need
+:: to set the new default for them.
+::
+++ adjust-old-default
+ =/ base-volume (~(gut by volume-settings) [%base ~] *volume-map:a)
+ =/ soft (~(got by old-volumes:a) %soft)
+ :: bail early if we've set something other than the old default
+ ?. =(soft base-volume) cor
+ =+ .^(=groups-ui:g %gx (scry-path %groups /groups/light/v1/noun))
+ =/ groups ~(tap by groups-ui)
+ :: iterate through all groups and set volume to old default
+ |-
+ ?~ groups
+ :: finally set the new default
+ =. volume-settings
+ (~(put by volume-settings) [%base ~] default-volumes:a)
+ cor
+ =* next $(groups t.groups)
+ =/ [=flag:g group=group-ui:g] i.groups
+ ?: (~(has by volume-settings) [%group flag]) next
+ =. volume-settings (~(put by volume-settings) [%group flag] soft)
+ next
+::
:: the original migration from old unreads and volume mgmt to %activity
::
++ migrate
@@ -1304,7 +1334,11 @@
`mute:a
$(entries t.entries)
:: set any overrides from previous volume settings
- =. cor (adjust [%base ~] `(~(got by old-volumes:a) base.volume))
+ =. cor
+ %+ adjust [%base ~]
+ :: use new default since we set all channels to old default
+ ?: =(%soft base.volume) `default-volumes:a
+ `(~(got by old-volumes:a) base.volume)
=. cor
=/ entries ~(tap by chan.volume)
|-
diff --git a/desk/app/channels.hoon b/desk/app/channels.hoon
index 9ac89c740c..364f628953 100644
--- a/desk/app/channels.hoon
+++ b/desk/app/channels.hoon
@@ -727,7 +727,7 @@
|= =(pole knot)
^- (unit (unit cage))
?> ?=(^ pole)
- =? +.pole !?=([?(%v0 %v1 %v2 %v3) *] +.pole)
+ =? +.pole !?=([?(%v0 %v1 %v2 %v3 %v4) *] +.pole)
[%v0 +.pole]
?+ pole [~ ~]
[%x ?(%v0 %v1) %channels ~] ``channels+!>((uv-channels-1:utils v-channels))
diff --git a/desk/app/chat.hoon b/desk/app/chat.hoon
index 8311a8bed3..ad52669097 100644
--- a/desk/app/chat.hoon
+++ b/desk/app/chat.hoon
@@ -680,12 +680,6 @@
[%club id=@ rest=*]
=/ =id:club:c (slav %uv id.pole)
cu-abet:(cu-agent:(cu-abed id) rest.pole sign)
- ::
- [%hark ~]
- ?> ?=(%poke-ack -.sign)
- ?~ p.sign cor
- %- (slog leaf/"Failed to hark" u.p.sign)
- cor
==
++ give-kick
|= [pas=(list path) =cage]
@@ -823,24 +817,12 @@
|= [=whom:c =unread:unreads:c]
(give %fact ~[/unreads] chat-unread-update+!>([whom unread]))
::
-++ want-hark
- |= kind=?(%msg %to-us)
- %+ (fit-level:volume [our now]:bowl) ~
- ?- kind
- %to-us %soft
- %msg %loud
- ==
-::
++ pass-hark
|= =cage
^- card
=/ =wire /hark
=/ =dock [our.bowl %hark]
[%pass wire %agent dock %poke cage]
-++ pass-yarn
- |= =new-yarn:ha
- =/ =cage hark-action-1+!>([%new-yarn new-yarn])
- (pass-hark cage)
::
++ pass-activity
=, activity
@@ -1261,16 +1243,23 @@
=/ uid `@uv`(shax (jam ['clubs' (add counter eny.bowl)]))
[uid cu-core(counter +(counter))]
::
- ++ cu-spin
- |= [rest=path con=(list content:ha) but=(unit button:ha)]
- ^- new-yarn:ha
- =/ rope [~ ~ %groups /club/(scot %uv id)]
- =/ link (welp /dm/(scot %uv id) rest)
- [& & rope con link but]
- ::
- ++ cu-activity !.
- |* a=*
- =. cor (pass-activity [%club id] a)
+ ++ cu-activity
+ =, activity
+ |= $: $= concern
+ $% [%invite ~]
+ [%post key=message-key]
+ [%delete-post key=message-key]
+ [%reply key=message-key top=message-key]
+ [%delete-reply key=message-key top=message-key]
+ ==
+ content=story:d
+ mention=?
+ ==
+ ?. ?| =(net.crew.club %done)
+ &(=(net.crew.club %invited) =(%invite -.concern))
+ ==
+ cu-core
+ =. cor (pass-activity [%club id] concern content mention)
cu-core
::
++ cu-pass
@@ -1408,18 +1397,6 @@
=/ concern [%post p.diff.delta now.bowl]
=/ mention (was-mentioned:utils content.memo our.bowl)
=. cu-core (cu-activity concern content.memo mention)
- ?: =(our.bowl author.memo) (cu-give-writs-diff diff.delta)
- ?^ kind.q.diff.delta (cu-give-writs-diff diff.delta)
- =/ new-yarn
- %^ cu-spin
- ~
- :~ [%ship author.memo]
- ': '
- (flatten:utils content.memo)
- ==
- ~
- =? cor (want-hark %to-us)
- (emit (pass-yarn new-yarn))
(cu-give-writs-diff diff.delta)
::
%del
@@ -1460,18 +1437,6 @@
=/ concern [%reply [id.q.diff.delta now.bowl] top-con]
=/ mention (was-mentioned:utils content.memo our.bowl)
=. cu-core (cu-activity concern content.memo mention)
- ?: =(our.bowl author.memo) (cu-give-writs-diff diff.delta)
- =/ new-yarn
- %^ cu-spin
- /message/(scot %p p.id.op)/(scot %ud q.id.op)
- :~ [%ship author.memo] ' replied to '
- [%emph (flatten:utils content.op)] ': '
- [%ship author.memo] ': '
- (flatten:utils content.memo)
- ==
- ~
- =? cor (want-hark %to-us)
- (emit (pass-yarn new-yarn))
(cu-give-writs-diff diff.delta)
==
==
@@ -1719,23 +1684,30 @@
|
==
=. di-core di-core(ship s, dm new)
+ ?: =(src our):bowl di-core
(di-activity [%invite ~] *story:d &)
::
++ di-area `path`/dm/(scot %p ship)
++ di-area-writs `path`/dm/(scot %p ship)/writs
::
- ++ di-activity !.
- |* a=*
- =. cor (pass-activity [%ship ship] a)
+ ++ di-activity
+ |= $: $= concern
+ $% [%invite ~]
+ [%post key=message-key:activity]
+ [%delete-post key=message-key:activity]
+ [%reply key=message-key:activity top=message-key:activity]
+ [%delete-reply key=message-key:activity top=message-key:activity]
+ ==
+ content=story:d
+ mention=?
+ ==
+ ?. ?| =(net.dm %done)
+ &(=(net.dm %invited) =(%invite -.concern))
+ ==
+ di-core
+ =. cor (pass-activity [%ship ship] concern content mention)
di-core
::
- ++ di-spin
- |= [rest=path con=(list content:ha) but=(unit button:ha)]
- ^- new-yarn:ha
- =/ rope [~ ~ %groups /dm/(scot %p ship)]
- =/ link (welp /dm/(scot %p ship) rest)
- [& & rope con link but]
- ::
++ di-proxy
|= =diff:dm:c
=. di-core (di-ingest-diff diff)
@@ -1800,23 +1772,9 @@
=. recency.remark.dm now.bowl
=? cor &(!=(old-unread di-unread) !=(net.dm %invited))
(give-unread ship/ship di-unread)
- =/ concern
- ?: =(net.dm %invited) [%invite ~]
- [%post p.diff now.bowl]
+ =/ concern [%post p.diff now.bowl]
=/ mention (was-mentioned:utils content.memo our.bowl)
=. di-core (di-activity concern content.memo mention)
- ?: from-self (di-give-writs-diff diff)
- ?^ kind.q.diff (di-give-writs-diff diff)
- =/ new-yarn
- %^ di-spin ~
- :~ [%ship author.memo]
- ?: =(net.dm %invited) ' has invited you to a direct message'
- ': '
- ?:(=(net.dm %invited) '' (flatten:utils content.memo))
- ==
- ~
- =? cor (want-hark %to-us)
- (emit (pass-yarn new-yarn))
(di-give-writs-diff diff)
::
%del
@@ -1856,18 +1814,6 @@
=/ concern [%reply [id.q.diff now.bowl] top-con]
=/ mention (was-mentioned:utils content.memo our.bowl)
=. di-core (di-activity concern content.memo mention)
- ?: =(our.bowl author.memo) (di-give-writs-diff diff)
- =* op writ.u.entry
- =/ new-yarn
- %^ di-spin /message/(scot %p p.id.op)/(scot %ud q.id.op)
- :~ [%ship author.memo] ' replied to '
- [%emph (flatten:utils content.op)] ': '
- [%ship author.memo] ': '
- (flatten:utils content.memo)
- ==
- ~
- =? cor (want-hark %to-us)
- (emit (pass-yarn new-yarn))
(di-give-writs-diff diff)
==
==
@@ -1917,13 +1863,6 @@
:: TODO: handle?
%- (slog leaf/"Failed to add contact" u.p.sign)
di-core
- ::
- [%hark ~]
- ?> ?=(%poke-ack -.sign)
- ?~ p.sign di-core
- :: TODO: handle?
- %- (slog leaf/"Failed to notify about dm {}" u.p.sign)
- di-core
::
[%proxy *]
?> ?=(%poke-ack -.sign)
diff --git a/desk/app/expose.hoon b/desk/app/expose.hoon
index 54989d4674..9b9f1ad7d7 100644
--- a/desk/app/expose.hoon
+++ b/desk/app/expose.hoon
@@ -11,7 +11,6 @@
::
/= page /app/expose/page
/= widget /app/expose/widget
-/* style-shared %css /app/expose/style/shared/css
::
|%
+$ state-0
@@ -157,10 +156,7 @@
:_ (spout:hutils rid payload)
:: if we handled a request here, make sure it's cached for next time
::
- [%pass /eyre/cache %arvo %e %set-response url.request `[| %payload payload]]
- ?: =('/expose/style/shared.css' url.request)
- :- [200 ['content-type' 'text/css']~]
- `(as-octs:mimes:html style-shared)
+ (store:hutils url.request `[| %payload payload])
=/ ref=(unit cite:c)
(rush url.request (sear purse:c ;~(pfix (jest '/expose') stap)))
?~ ref
@@ -194,10 +190,6 @@
::
[%refresh ~]
:_ this
- :- %+ store:hutils '/expose/style/shared.css'
- =/ bod=(unit octs)
- `(as-octs:mimes:html style-shared)
- `[| %payload [200 ['content-type' 'text/css'] ~] bod]
%+ weld
(refresh-widget:e bowl open)
(refresh-pages:e bowl ~(tap in open))
diff --git a/desk/app/expose/page.hoon b/desk/app/expose/page.hoon
index f7f66e612e..f1d8d9e574 100644
--- a/desk/app/expose/page.hoon
+++ b/desk/app/expose/page.hoon
@@ -75,7 +75,7 @@
|= [title=tape img=(unit @t)]
;head
;title:"{title}"
- ;link(rel "stylesheet", href "/expose/style/shared.css");
+ ;link(rel "stylesheet", href "/profile/style/shared.css");
;style:"{(trip style-page)}"
::
;meta(charset "utf-8");
diff --git a/desk/app/profile.hoon b/desk/app/profile.hoon
index abf2c6e084..b555c9b039 100644
--- a/desk/app/profile.hoon
+++ b/desk/app/profile.hoon
@@ -9,7 +9,7 @@
/+ dbug, verb, sigil, hutils=http-utils
/= stock-widgets /app/profile/widgets
::
-/* style-shared %css /app/expose/style/shared/css
+/* style-shared %css /app/profile/style/shared/css
/* style-page %css /app/profile/style/page/css
::
|%
@@ -130,30 +130,41 @@
++ serve
|= order:hutils
^- (list card)
- =; payload=simple-payload:http
- ?. =('/profile' url.request) (spout:hutils id payload)
- :: if we got requested the profile page, that means it's not in cache.
- :: serve the response, but also add it into cache.
- ::
- :- (store:hutils '/profile' `[| %payload payload])
+ =; [cache=? payload=simple-payload:http]
+ ?. cache (spout:hutils id payload)
+ :- (store:hutils url.request `[| %payload payload])
(spout:hutils id payload)
+ ?: =('/profile/style/shared.css' url.request)
+ :- &
+ :- [200 ['content-type' 'text/css']~]
+ `(as-octs:mimes:html style-shared)
?: =('/profile/style/page.css' url.request)
- :- [200 ['content-type' 'text/css']~]
- `(as-octs:mimes:html style-page)
- %- paint:hutils
- =/ =query:hutils (purse:hutils url.request)
+ :- &
+ :- [200 ['content-type' 'text/css']~]
+ `(as-octs:mimes:html style-page)
:: if the request is not for /profile, we redirect to landscape
::
+ =/ =query:hutils (purse:hutils url.request)
?. ?=([%profile ~] site.query)
- [%move '/apps/landscape/']
- [%page render-page]
+ [| (paint:hutils %move '/apps/landscape/')]
+ [& (paint:hutils %page render-page)]
::
++ update-cache
^- (list card)
- ?. bound ~
- =/ payload=simple-payload:http
- (paint:hutils %page render-page)
- [%pass /eyre/cache %arvo %e %set-response '/profile' `[| %payload payload]]~
+ :~ %+ store:hutils '/profile'
+ ?. bound ~
+ `[| %payload (paint:hutils %page render-page)]
+ ::
+ %+ store:hutils '/profile/style/shared.css'
+ :^ ~ | %payload
+ :- [200 ['content-type' 'text/css']~]
+ `(as-octs:mimes:html style-shared)
+ ::
+ %+ store:hutils '/profile/style/page.css'
+ :^ ~ | %payload
+ :- [200 ['content-type' 'text/css']~]
+ `(as-octs:mimes:html style-page)
+ ==
::
++ update-group-widgets
^- (quip card _state)
@@ -179,7 +190,7 @@
"{(trip nickname.u.ours)} ({ship})"
;head
;title:"{name}"
- ;link(rel "stylesheet", href "/expose/style/shared.css");
+ ;link(rel "stylesheet", href "/profile/style/shared.css");
;link(rel "stylesheet", href "/profile/style/page.css");
;meta(charset "utf-8");
;meta(name "viewport", content "width=device-width, initial-scale=1");
diff --git a/desk/app/expose/style/shared.css b/desk/app/profile/style/shared.css
similarity index 100%
rename from desk/app/expose/style/shared.css
rename to desk/app/profile/style/shared.css
diff --git a/desk/desk.docket-0 b/desk/desk.docket-0
index 21c18fb17e..d4843cc0f0 100644
--- a/desk/desk.docket-0
+++ b/desk/desk.docket-0
@@ -2,9 +2,9 @@
info+'Start, host, and cultivate communities. Own your communications, organize your resources, and share documents. Tlon is a decentralized platform that offers a full, communal suite of tools for messaging, writing and sharing media with others.'
color+0xde.dede
image+'https://bootstrap.urbit.org/tlon.svg?v=1'
- glob-http+['https://bootstrap.urbit.org/glob-0vgsiup.8b5ag.nf309.99824.uuril.glob' 0vgsiup.8b5ag.nf309.99824.uuril]
+ glob-http+['https://bootstrap.urbit.org/glob-0v6.slci9.jv3n5.rrkgt.a6plj.jnc26.glob' 0v6.slci9.jv3n5.rrkgt.a6plj.jnc26]
base+'groups'
- version+[6 4 0]
+ version+[6 4 1]
website+'https://tlon.io'
license+'MIT'
==
diff --git a/package.json b/package.json
index 6566d07a81..4845f6f64d 100644
--- a/package.json
+++ b/package.json
@@ -49,7 +49,6 @@
"drizzle-orm@0.30.9": "patches/drizzle-orm@0.30.9.patch",
"@10play/tentap-editor@0.4.55": "patches/@10play__tentap-editor@0.4.55.patch",
"any-ascii@0.3.2": "patches/any-ascii@0.3.2.patch",
- "react-native-gesture-handler@2.18.1": "patches/react-native-gesture-handler@2.18.1.patch",
"@likashefqet/react-native-image-zoom@3.0.0": "patches/@likashefqet__react-native-image-zoom@3.0.0.patch",
"react-native@0.73.4": "patches/react-native@0.73.4.patch"
},
diff --git a/packages/app/contexts/branch.tsx b/packages/app/contexts/branch.tsx
index 05ac82ade5..9b49c63680 100644
--- a/packages/app/contexts/branch.tsx
+++ b/packages/app/contexts/branch.tsx
@@ -1,5 +1,5 @@
import { DeepLinkMetadata, createDevLogger } from '@tloncorp/shared/dist';
-import { extractLureMetadata } from '@tloncorp/shared/src/logic';
+import { DeepLinkData, extractLureMetadata } from '@tloncorp/shared/src/logic';
import {
type ReactNode,
createContext,
@@ -30,6 +30,7 @@ type State = Lure & {
};
type ContextValue = State & {
+ setLure: (metadata: DeepLinkData) => void;
clearLure: () => void;
clearDeepLink: () => void;
};
@@ -165,6 +166,26 @@ export const BranchProvider = ({ children }: { children: ReactNode }) => {
};
}, [isAuthenticated]);
+ const setLure = useCallback(
+ (metadata: DeepLinkData) => {
+ const nextLure: Lure = {
+ lure: {
+ ...metadata,
+ id: metadata.lure as string,
+ // if not already authenticated, we should run Lure's invite auto-join capability after signing in
+ shouldAutoJoin: !isAuthenticated,
+ },
+ priorityToken: undefined,
+ };
+ setState({
+ ...nextLure,
+ deepLinkPath: undefined,
+ });
+ saveLure(nextLure);
+ },
+ [isAuthenticated]
+ );
+
const clearLure = useCallback(() => {
console.debug('[branch] Clearing lure state');
setState((curr) => ({
@@ -189,6 +210,7 @@ export const BranchProvider = ({ children }: { children: ReactNode }) => {
deepLinkPath,
lure,
priorityToken,
+ setLure,
clearLure,
clearDeepLink,
}}
diff --git a/packages/app/features/groups/GroupPrivacyScreen.tsx b/packages/app/features/groups/GroupPrivacyScreen.tsx
index 9aee055e30..29f4886ffe 100644
--- a/packages/app/features/groups/GroupPrivacyScreen.tsx
+++ b/packages/app/features/groups/GroupPrivacyScreen.tsx
@@ -1,23 +1,18 @@
-import { GroupPrivacy } from '@tloncorp/shared/dist/db/schema';
import { NativeStackScreenProps } from '@react-navigation/native-stack';
+import { GroupPrivacy } from '@tloncorp/shared/dist/db/schema';
import * as store from '@tloncorp/shared/dist/store';
import {
- GenericHeader,
GroupPrivacySelector,
+ ScreenHeader,
View,
triggerHaptic,
} from '@tloncorp/ui';
import { useCallback } from 'react';
-import { GroupSettingsStackParamList } from '../../navigation/types';
import { useGroupContext } from '../../hooks/useGroupContext';
+import { GroupSettingsStackParamList } from '../../navigation/types';
-
-type Props = NativeStackScreenProps<
- GroupSettingsStackParamList,
- 'Privacy'
->;
-
+type Props = NativeStackScreenProps;
export function GroupPrivacyScreen(props: Props) {
const { groupId } = props.route.params;
@@ -35,7 +30,7 @@ export function GroupPrivacyScreen(props: Props) {
return (
-
+
{group ? (
- props.navigation.goBack()}
+ props.navigation.goBack()}
/>
diff --git a/packages/app/features/settings/BlockedUsersScreen.tsx b/packages/app/features/settings/BlockedUsersScreen.tsx
index 7ec5eeef40..a49cdedf87 100644
--- a/packages/app/features/settings/BlockedUsersScreen.tsx
+++ b/packages/app/features/settings/BlockedUsersScreen.tsx
@@ -8,7 +8,6 @@ import { Alert } from 'react-native';
import { useCurrentUserId } from '../../hooks/useCurrentUser';
import { RootStackParamList } from '../../navigation/types';
-
type Props = NativeStackScreenProps;
export function BlockedUsersScreen(props: Props) {
@@ -38,10 +37,10 @@ export function BlockedUsersScreen(props: Props) {
return (
-
- props.navigation.goBack()} />
- Blocked Users
-
+ props.navigation.goBack()}
+ title="Blocked users"
+ />
-
-
- {goingBack ? (
+
) : (
- )}
-
- Manage Account
-
+ )
+ }
+ title="Manage account"
+ />
{isWeb && (
+ }
+ />
+
);
}
+
+function QuickAction({
+ onPress,
+ icon,
+ title,
+ subtitle,
+}: {
+ onPress: () => void;
+ icon: IconType;
+ title: string;
+ subtitle?: string;
+}) {
+ return (
+
+
+
+ {title}
+ {subtitle}
+
+
+ );
+}
diff --git a/packages/ui/src/components/Avatar.tsx b/packages/ui/src/components/Avatar.tsx
index 1da8783009..cba7388eb9 100644
--- a/packages/ui/src/components/Avatar.tsx
+++ b/packages/ui/src/components/Avatar.tsx
@@ -214,20 +214,29 @@ export const ImageAvatar = function ImageAvatarComponent({
} & AvatarProps) {
const calmSettings = useCalm();
const [loadFailed, setLoadFailed] = useState(false);
-
+ const [isLoading, setIsLoading] = useState(true);
const handleLoadError = useCallback(() => {
setLoadFailed(true);
}, []);
+ const handleLoadEnd = useCallback(() => setIsLoading(false), []);
+ // TODO: figure out how to sanitize svgs so we can support svg avatars
+ const isSVG = imageUrl?.endsWith('.svg');
return imageUrl &&
+ !isSVG &&
(props.ignoreCalm || !calmSettings.disableAvatars) &&
!loadFailed ? (
-
+
{
+ return isHero
+ ? {
+ color: props.disabled ? '$secondaryText' : '$background',
+ width: '100%',
+ textAlign: 'center',
+ fontWeight: '400',
+ }
+ : {};
},
heroDestructive: {
true: {
@@ -172,12 +174,7 @@ export const ButtonText = styled(Text, {
fontWeight: '500',
},
},
-
- // disabled: {
- // true: {
- // color: '$tertiaryText',
- // },
- // },
+ disabled: {} as Record<'true' | 'false', ViewStyle>,
} as const,
});
diff --git a/packages/ui/src/components/Channel/ChannelFooter.tsx b/packages/ui/src/components/Channel/ChannelFooter.tsx
index 0c5e7aab26..1908897300 100644
--- a/packages/ui/src/components/Channel/ChannelFooter.tsx
+++ b/packages/ui/src/components/Channel/ChannelFooter.tsx
@@ -49,14 +49,18 @@ export function ChannelFooter({
const animatedStyle = useAnimatedStyle(() => {
const opacity = interpolate(shownAmount.value, [0, 1], [1, 0]);
- const height = interpolate(shownAmount.value, [0, 1], [50, 0]);
+ const height = interpolate(
+ shownAmount.value,
+ [0, 1],
+ [insets.bottom + 50, 0]
+ );
return {
transform: [{ translateY: shownAmount.value * -(insets.top * 0.2) }],
opacity: opacity,
height: height,
};
- }, [easedValue, insets.top]);
+ }, [shownAmount.value, insets.top]);
return (
diff --git a/packages/ui/src/components/Channel/ChannelHeader.tsx b/packages/ui/src/components/Channel/ChannelHeader.tsx
index 18b4d21397..0426a7ac66 100644
--- a/packages/ui/src/components/Channel/ChannelHeader.tsx
+++ b/packages/ui/src/components/Channel/ChannelHeader.tsx
@@ -1,12 +1,76 @@
import * as db from '@tloncorp/shared/dist/db';
-import { useCallback, useRef } from 'react';
+import {
+ createContext,
+ useCallback,
+ useContext,
+ useEffect,
+ useRef,
+ useState,
+} from 'react';
-import { Button } from '../Button';
import { ChatOptionsSheet, ChatOptionsSheetMethods } from '../ChatOptionsSheet';
-import { GenericHeader } from '../GenericHeader';
-import { Icon } from '../Icon';
+import { ScreenHeader } from '../ScreenHeader';
import { BaubleHeader } from './BaubleHeader';
+export interface ChannelHeaderItemsContextValue {
+ registerItem: (options: { item: JSX.Element }) => { remove: () => void };
+ items: readonly JSX.Element[];
+}
+
+const ChannelHeaderItemsContext =
+ createContext(null);
+
+/**
+ * Provides a way for children to dynamically register new header items.
+ * These items are rendered between the search and overflow menu buttons.
+ *
+ * ```tsx
+ * // in a child:
+ * useRegisterChannelHeaderItem(useMemo(() => Add flarb, []));
+ * // make sure to use `useMemo` to avoid re-registering the item on every render!
+ * ```
+ */
+export function ChannelHeaderItemsProvider({
+ children,
+}: {
+ children: JSX.Element;
+}) {
+ const [items, setItems] = useState([]);
+ const registerItem = useCallback(
+ ({ item }: { item: JSX.Element }) => {
+ setItems((prev) => [...prev, item]);
+ return {
+ remove: () => {
+ setItems((prev) => prev.filter((i) => i !== item));
+ },
+ };
+ },
+ [setItems]
+ );
+ return (
+
+ {children}
+
+ );
+}
+
+export function useRegisterChannelHeaderItem(item: JSX.Element | null) {
+ const registerItem = useContext(ChannelHeaderItemsContext)?.registerItem;
+
+ // NB: Since we're mutating the ChannelHeaderItemsContext in this effect, we
+ // need to be careful about the dependencies to avoid recursively updating on
+ // every change to the context. We avoid this by (1) defining `registerItem`
+ // using a `useCallback`, and (2) only listing `registerItem` as a dependency
+ // of the effect (and importantly not `items` nor the full context value).
+ useEffect(() => {
+ if (registerItem == null || item == null) {
+ return;
+ }
+ const { remove } = registerItem({ item });
+ return remove;
+ }, [registerItem, item]);
+}
+
export function ChannelHeader({
title,
mode = 'default',
@@ -15,8 +79,6 @@ export function ChannelHeader({
goBack,
goToSearch,
showSpinner,
- showAddButton = false,
- onPressAddButton,
showSearchButton = true,
showMenuButton = false,
}: {
@@ -27,8 +89,6 @@ export function ChannelHeader({
goBack?: () => void;
goToSearch?: () => void;
showSpinner?: boolean;
- showAddButton?: boolean;
- onPressAddButton?: () => void;
showSearchButton?: boolean;
showMenuButton?: boolean;
post?: db.Post;
@@ -39,44 +99,30 @@ export function ChannelHeader({
chatOptionsSheetRef.current?.open(channel.id, channel.type);
}, [channel.id, channel.type]);
+ const contextItems = useContext(ChannelHeaderItemsContext)?.items ?? [];
+
if (mode === 'next') {
return ;
}
return (
<>
- }
+ rightControls={
<>
{showSearchButton && (
-
-
-
- )}
- {showAddButton && (
-
-
-
+
)}
+ {contextItems}
{showMenuButton && (
-
-
-
+ />
)}
>
}
diff --git a/packages/ui/src/components/Channel/DmInviteOptions.tsx b/packages/ui/src/components/Channel/DmInviteOptions.tsx
index df3f93921e..12320a3ad6 100644
--- a/packages/ui/src/components/Channel/DmInviteOptions.tsx
+++ b/packages/ui/src/components/Channel/DmInviteOptions.tsx
@@ -1,6 +1,7 @@
import * as db from '@tloncorp/shared/dist/db';
import * as store from '@tloncorp/shared/dist/store';
import { useCallback } from 'react';
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { YStack } from 'tamagui';
import { Button } from '../Button';
@@ -12,6 +13,8 @@ export function DmInviteOptions({
channel: db.Channel;
goBack: () => void;
}) {
+ const { bottom } = useSafeAreaInsets();
+
const accept = useCallback(() => {
store.respondToDMInvite({ channel, accept: true });
}, [channel]);
@@ -31,7 +34,12 @@ export function DmInviteOptions({
}, [channel, goBack]);
return (
-
+
Accept
diff --git a/packages/ui/src/components/Channel/EmptyChannelNotice.tsx b/packages/ui/src/components/Channel/EmptyChannelNotice.tsx
index 57ef0847fa..fe5e975925 100644
--- a/packages/ui/src/components/Channel/EmptyChannelNotice.tsx
+++ b/packages/ui/src/components/Channel/EmptyChannelNotice.tsx
@@ -37,7 +37,7 @@ export function EmptyChannelNotice({
{noticeText}
- {isGroupAdmin && isFirstVisit && isWelcomeChannel && (
+ {isGroupAdmin && isWelcomeChannel && (
)}
diff --git a/packages/ui/src/components/Channel/Scroller.tsx b/packages/ui/src/components/Channel/Scroller.tsx
index b64a63d0b9..83a2b1295b 100644
--- a/packages/ui/src/components/Channel/Scroller.tsx
+++ b/packages/ui/src/components/Channel/Scroller.tsx
@@ -107,6 +107,7 @@ const Scroller = forwardRef(
hasNewerPosts,
activeMessage,
setActiveMessage,
+ headerMode,
}: {
anchor?: ScrollAnchor | null;
showDividers?: boolean;
@@ -133,7 +134,7 @@ const Scroller = forwardRef(
activeMessage: db.Post | null;
setActiveMessage: (post: db.Post | null) => void;
ref?: RefObject<{ scrollToIndex: (params: { index: number }) => void }>;
-
+ headerMode: 'default' | 'next';
// Unused
hasOlderPosts?: boolean;
},
@@ -295,12 +296,15 @@ const Scroller = forwardRef(
: channelType === 'gallery'
? {
paddingHorizontal: '$l',
+ paddingTop: headerMode === 'next' ? insets.top + 54 : 0,
paddingBottom: insets.bottom,
gap: '$l',
}
: channelType === 'notebook'
? {
paddingHorizontal: '$m',
+ paddingTop: headerMode === 'next' ? insets.top + 54 : 0,
+ paddingBottom: insets.bottom,
gap: '$l',
}
: {
@@ -437,7 +441,10 @@ const Scroller = forwardRef(
setEditingPost?.(activeMessage);
setActiveMessage(null);
}}
- onViewReactions={setViewReactionsPost}
+ onViewReactions={(post) => {
+ setViewReactionsPost(post);
+ setActiveMessage(null);
+ }}
/>
)}
diff --git a/packages/ui/src/components/Channel/index.tsx b/packages/ui/src/components/Channel/index.tsx
index 9dcc6b4522..0265be2d15 100644
--- a/packages/ui/src/components/Channel/index.tsx
+++ b/packages/ui/src/components/Channel/index.tsx
@@ -10,7 +10,7 @@ import { JSONContent, Story } from '@tloncorp/shared/dist/urbit';
import { ImagePickerAsset } from 'expo-image-picker';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { FlatList } from 'react-native';
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { AnimatePresence, SizableText, View, YStack } from 'tamagui';
import {
@@ -24,21 +24,21 @@ import { Attachment, AttachmentProvider } from '../../contexts/attachment';
import { RequestsProvider } from '../../contexts/requests';
import { ScrollContextProvider } from '../../contexts/scroll';
import * as utils from '../../utils';
-import AddGalleryPost from '../AddGalleryPost';
-import { BigInput } from '../BigInput';
import { ChatMessage } from '../ChatMessage';
-import { FloatingActionButton } from '../FloatingActionButton';
import { GalleryPost } from '../GalleryPost';
import { GroupPreviewAction, GroupPreviewSheet } from '../GroupPreviewSheet';
-import { Icon } from '../Icon';
-import KeyboardAvoidingView from '../KeyboardAvoidingView';
-import { MessageInput } from '../MessageInput';
import { NotebookPost } from '../NotebookPost';
+import {
+ ChatInput,
+ DraftInputContext,
+ GalleryInput,
+ NotebookInput,
+} from '../draftInputs';
+import { DraftInputHandle } from '../draftInputs/shared';
import { ChannelFooter } from './ChannelFooter';
-import { ChannelHeader } from './ChannelHeader';
+import { ChannelHeader, ChannelHeaderItemsProvider } from './ChannelHeader';
import { DmInviteOptions } from './DmInviteOptions';
import { EmptyChannelNotice } from './EmptyChannelNotice';
-import GalleryImagePreview from './GalleryImagePreview';
import Scroller, { ScrollAnchor } from './Scroller';
export { INITIAL_POSTS_PER_PAGE } from './Scroller';
@@ -89,7 +89,7 @@ export function Channel({
channel: db.Channel;
initialChannelUnread?: db.ChannelUnread | null;
selectedPostId?: string | null;
- headerMode?: 'default' | 'next';
+ headerMode: 'default' | 'next';
posts: db.Post[] | null;
group: db.Group | null;
goBack: () => void;
@@ -127,8 +127,6 @@ export function Channel({
}) {
const [activeMessage, setActiveMessage] = useState(null);
const [inputShouldBlur, setInputShouldBlur] = useState(false);
- const [showBigInput, setShowBigInput] = useState(false);
- const [showAddGalleryPost, setShowAddGalleryPost] = useState(false);
const [groupPreview, setGroupPreview] = useState(null);
const disableNicknames = !!useCalm()?.disableNicknames;
const title = channel ? utils.getChannelTitle(channel, disableNicknames) : '';
@@ -181,12 +179,6 @@ export function Channel({
return null;
}, [channel.type, selectedPostId, initialChannelUnread]);
- const bigInputGoBack = () => {
- setShowBigInput(false);
- };
-
- const { bottom } = useSafeAreaInsets();
-
const flatListRef = useRef>(null);
const handleRefPress = useCallback(
@@ -212,30 +204,43 @@ export function Channel({
[onPressRef, posts, channel]
);
- const [isUploadingGalleryImage, setIsUploadingGalleryImage] = useState(false);
- const handleGalleryImageSet = useCallback(
- (assets?: ImagePickerAsset[] | null) => {
- setIsUploadingGalleryImage(!!assets);
- },
- []
- );
+ /** when `null`, input is not shown or presentation is unknown */
+ const [draftInputPresentationMode, setDraftInputPresentationMode] = useState<
+ null | 'fullscreen' | 'inline'
+ >(null);
- const handleGalleryPreviewClosed = useCallback(() => {
- setIsUploadingGalleryImage(false);
- }, []);
-
- const handleMessageSent = useCallback(() => {
- setIsUploadingGalleryImage(false);
- }, []);
+ const draftInputRef = useRef(null);
- const handleSetEditingPost = useCallback(
- (post: db.Post | undefined) => {
- setEditingPost?.(post);
- if (channel.type === 'gallery' || channel.type === 'notebook') {
- setShowBigInput(true);
- }
- },
- [setEditingPost, channel.type]
+ const draftInputContext = useMemo(
+ (): DraftInputContext => ({
+ channel,
+ clearDraft,
+ draftInputRef,
+ editPost,
+ editingPost,
+ getDraft,
+ group,
+ onPresentationModeChange: setDraftInputPresentationMode,
+ send: messageSender,
+ setEditingPost,
+ setShouldBlur: setInputShouldBlur,
+ shouldBlur: inputShouldBlur,
+ storeDraft,
+ headerMode: headerMode,
+ }),
+ [
+ channel,
+ clearDraft,
+ editPost,
+ editingPost,
+ getDraft,
+ group,
+ inputShouldBlur,
+ messageSender,
+ setEditingPost,
+ storeDraft,
+ headerMode,
+ ]
);
return (
@@ -261,182 +266,132 @@ export function Channel({
initialAttachments={initialAttachments}
uploadAsset={uploadAsset}
>
-
+
-
- showBigInput ? bigInputGoBack() : goBack()
- }
- showSearchButton={isChatChannel}
- showAddButton={
- !isChatChannel && canWrite && !showBigInput
- }
- onPressAddButton={() =>
- channel.type === 'gallery'
- ? setShowAddGalleryPost(true)
- : setShowBigInput(true)
- }
- goToSearch={goToSearch}
- showSpinner={isLoadingPosts}
- showMenuButton={true}
- />
-
-
-
- {showBigInput ? (
-
-
-
- ) : isUploadingGalleryImage ? (
-
- ) : (
-
- {channel && posts && (
- 0
- ? initialChannelUnread?.firstUnreadPostId
- : null
- }
- unreadCount={
- initialChannelUnread?.countWithoutThreads ??
- 0
- }
- onPressPost={
- isChatChannel ? undefined : goToPost
- }
- onPressReplies={goToPost}
- onPressImage={goToImageViewer}
- onEndReached={onScrollEndReached}
- onStartReached={onScrollStartReached}
- onPressRetry={onPressRetry}
- onPressDelete={onPressDelete}
- activeMessage={activeMessage}
- setActiveMessage={setActiveMessage}
- ref={flatListRef}
+
+ <>
+
+ draftInputPresentationMode === 'fullscreen' &&
+ draftInputRef.current != null
+ ? draftInputRef.current.exitFullscreen()
+ : goBack()
+ }
+ showSearchButton={isChatChannel}
+ goToSearch={goToSearch}
+ showSpinner={isLoadingPosts}
+ showMenuButton={true}
+ />
+
+
+ {draftInputPresentationMode !== 'fullscreen' && (
+
+ {channel && posts && (
+ 0
+ ? initialChannelUnread?.firstUnreadPostId
+ : null
+ }
+ unreadCount={
+ initialChannelUnread?.countWithoutThreads ??
+ 0
+ }
+ onPressPost={
+ isChatChannel ? undefined : goToPost
+ }
+ onPressReplies={goToPost}
+ onPressImage={goToImageViewer}
+ onEndReached={onScrollEndReached}
+ onStartReached={onScrollStartReached}
+ onPressRetry={onPressRetry}
+ onPressDelete={onPressDelete}
+ activeMessage={activeMessage}
+ setActiveMessage={setActiveMessage}
+ ref={flatListRef}
+ headerMode={headerMode}
+ />
+ )}
+
+ )}
+
+
+ {canWrite && (
+ <>
+ {isChatChannel &&
+ !channel.isDmInvite &&
+ (negotiationMatch ? (
+
+ ) : (
+
+
+
+ ))}
+
+ {channel.type === 'gallery' && (
+
)}
-
+
+ {channel.type === 'notebook' && (
+
+ )}
+ >
)}
-
- {negotiationMatch &&
- !channel.isDmInvite &&
- !editingPost &&
- (isChatChannel ||
- (channel.type === 'gallery' &&
- isUploadingGalleryImage)) &&
- canWrite && (
-
)}
- {!negotiationMatch && isChatChannel && canWrite && (
-
- )}
- {channel.isDmInvite && (
-
- )}
- {!negotiationMatch && isChatChannel && canWrite && (
-
- )}
- {channel.type === 'gallery' && canWrite && (
-
+ {headerMode === 'next' ? (
+
- )}
-
-
- {headerMode === 'next' ? (
-
- ) : null}
- setGroupPreview(null)}
- onActionComplete={handleGroupAction}
- />
+ ) : null}
+ setGroupPreview(null)}
+ onActionComplete={handleGroupAction}
+ />
+ >
+
diff --git a/packages/ui/src/components/ChannelMembersScreenView.tsx b/packages/ui/src/components/ChannelMembersScreenView.tsx
index 054188e9d6..657a1c25f9 100644
--- a/packages/ui/src/components/ChannelMembersScreenView.tsx
+++ b/packages/ui/src/components/ChannelMembersScreenView.tsx
@@ -4,8 +4,8 @@ import { FlatList, ListRenderItemInfo } from 'react-native';
import { View, getTokenValue } from 'tamagui';
import ContactName from './ContactName';
-import { GenericHeader } from './GenericHeader';
import { ListItem } from './ListItem';
+import { ScreenHeader } from './ScreenHeader';
export function ChannelMembersScreenView({
channel,
@@ -33,9 +33,9 @@ export function ChannelMembersScreenView({
return (
-
void;
sortBy: 'recency' | 'arranged';
paddingBottom?: number;
+ onLongPress?: (channel: any) => void;
}) {
const unGroupedChannels = useMemo(
() =>
@@ -56,6 +58,7 @@ export default function ChannelNavSections({
model={item}
onPress={onSelect}
useTypeIcon={true}
+ onLongPress={onLongPress}
/>
))}
@@ -97,6 +100,7 @@ export default function ChannelNavSections({
key={item.id}
model={item}
onPress={onSelect}
+ onLongPress={onLongPress}
useTypeIcon={true}
/>
))}
diff --git a/packages/ui/src/components/ChatList.tsx b/packages/ui/src/components/ChatList.tsx
index e0e3bfba57..afcc9b2d0c 100644
--- a/packages/ui/src/components/ChatList.tsx
+++ b/packages/ui/src/components/ChatList.tsx
@@ -1,34 +1,26 @@
+import { ContentStyle, FlashList, ListRenderItem } from '@shopify/flash-list';
import * as db from '@tloncorp/shared/dist/db';
import * as logic from '@tloncorp/shared/dist/logic';
import * as store from '@tloncorp/shared/dist/store';
import Fuse from 'fuse.js';
import { debounce } from 'lodash';
-import {
+import React, {
useCallback,
useEffect,
useLayoutEffect,
useMemo,
useState,
} from 'react';
-import React from 'react';
-import {
- LayoutChangeEvent,
- SectionList,
- SectionListData,
- SectionListRenderItemInfo,
- StyleProp,
- ViewStyle,
-} from 'react-native';
+import { LayoutChangeEvent } from 'react-native';
import Animated, {
Easing,
useAnimatedStyle,
useSharedValue,
} from 'react-native-reanimated';
-import { Text, View, YStack, useStyle } from 'tamagui';
+import { Text, View, YStack, getTokenValue, useStyle } from 'tamagui';
import { interactionWithTiming } from '../utils/animation';
-import { Icon } from './Icon';
-import { Input } from './Input';
+import { TextInputWithIconAndButton } from './Form';
import { ChatListItem, InteractableChatListItem } from './ListItem';
import Pressable from './Pressable';
import { SectionListHeader } from './SectionList';
@@ -38,13 +30,10 @@ export type Chat = db.Channel | db.Group;
export type TabName = 'all' | 'groups' | 'messages';
-type ChatListItemData = Chat;
-type ChatListSectionData = SectionListData<
- Chat,
- { title: string; data: ChatListItemData[] }
->;
+type SectionHeaderData = { type: 'sectionHeader'; title: string };
+type ChatListItemData = Chat | SectionHeaderData;
-function ChatListComponent({
+export const ChatList = React.memo(function ChatListComponent({
pinned,
unpinned,
pendingChats,
@@ -53,7 +42,10 @@ function ChatListComponent({
onPressMenuButton,
activeTab,
setActiveTab,
- showFilters,
+ showSearchInput,
+ searchQuery,
+ onSearchQueryChange,
+ onSearchToggle,
}: store.CurrentChats & {
pendingChats: store.PendingChats;
onPressItem?: (chat: Chat) => void;
@@ -62,9 +54,11 @@ function ChatListComponent({
onSectionChange?: (title: string) => void;
activeTab: TabName;
setActiveTab: (tab: TabName) => void;
- showFilters: boolean;
+ showSearchInput: boolean;
+ searchQuery: string;
+ onSearchQueryChange: (query: string) => void;
+ onSearchToggle: () => void;
}) {
- const [searchQuery, setSearchQuery] = useState('');
const displayData = useFilteredChats({
pinned,
unpinned,
@@ -73,25 +67,37 @@ function ChatListComponent({
activeTab,
});
+ const listItems: ChatListItemData[] = useMemo(
+ () =>
+ displayData.flatMap((section) => {
+ return [
+ { title: section.title, type: 'sectionHeader' },
+ ...section.data,
+ ];
+ }),
+ [displayData]
+ );
+
const contentContainerStyle = useStyle(
{
- gap: '$s',
- paddingHorizontal: '$l',
+ padding: '$l',
paddingBottom: 100, // bottom nav height + some cushion
},
{ resolveValues: 'value' }
- ) as StyleProp;
+ ) as ContentStyle;
- const renderItem = useCallback(
- ({
- item,
- }: SectionListRenderItemInfo) => {
- const itemModel = item as Chat;
-
- if (logic.isChannel(itemModel)) {
+ const renderItem: ListRenderItem = useCallback(
+ ({ item }) => {
+ if (isSectionHeader(item)) {
+ return (
+
+ {item.title}
+
+ );
+ } else if (logic.isChannel(item)) {
return (
@@ -110,33 +116,27 @@ function ChatListComponent({
[onPressItem, onLongPressItem, onPressMenuButton]
);
- const renderSectionHeader = useCallback(
- ({ section }: { section: ChatListSectionData }) => {
- return (
-
- {section.title}
-
- );
- },
- []
- );
-
const handlePressTryAll = useCallback(() => {
setActiveTab('all');
}, [setActiveTab]);
const handlePressClear = useCallback(() => {
- setSearchQuery('');
- }, []);
+ onSearchQueryChange('');
+ }, [onSearchQueryChange]);
+
+ const handlePressClose = useCallback(() => {
+ onSearchToggle();
+ }, [onSearchToggle]);
return (
<>
-
+
{searchQuery !== '' && !displayData[0]?.data.length ? (
) : (
-
)}
>
);
-}
+});
-export const ChatList = React.memo(ChatListComponent);
+function getItemType(item: ChatListItemData) {
+ return isSectionHeader(item)
+ ? 'sectionHeader'
+ : logic.isGroup(item)
+ ? 'group'
+ : logic.isChannel(item)
+ ? item.type === 'dm' ||
+ item.type === 'groupDm' ||
+ item.pin?.type === 'channel'
+ ? 'channel'
+ : 'groupAdapter'
+ : 'default';
+}
-function getChatKey(item: unknown) {
- const chatItem = item as Chat;
+function isSectionHeader(data: ChatListItemData): data is SectionHeaderData {
+ return 'type' in data && data.type === 'sectionHeader';
+}
- if (!chatItem || typeof chatItem !== 'object' || !chatItem.id) {
+function getChatKey(chatItem: ChatListItemData) {
+ if (!chatItem || typeof chatItem !== 'object') {
return 'invalid-item';
}
+ if (isSectionHeader(chatItem)) {
+ return chatItem.title;
+ }
+
if (logic.isGroup(chatItem)) {
return chatItem.id;
}
return `${chatItem.id}-${chatItem.pin?.itemId ?? ''}`;
}
-function ChatListFiltersComponent({
+function ChatListTabs({
activeTab,
onPressTab,
+}: {
+ activeTab: TabName;
+ onPressTab: (tab: TabName) => void;
+}) {
+ return (
+
+
+ All
+
+
+ Groups
+
+
+ Messages
+
+
+ );
+}
+
+const ChatListSearch = React.memo(function ChatListSearchComponent({
isOpen,
query,
onQueryChange,
+ onPressClear,
+ onPressClose,
}: {
query: string;
onQueryChange: (query: string) => void;
isOpen: boolean;
- activeTab: TabName;
- onPressTab: (tab: TabName) => void;
+ onPressClear: () => void;
+ onPressClose: () => void;
}) {
const [contentHeight, setContentHeight] = useState(0);
@@ -236,42 +268,23 @@ function ChatListFiltersComponent({
left={0}
right={0}
>
-
-
-
-
-
-
-
+
+
-
-
- All
-
-
- Groups
-
-
- Messages
-
-
);
-}
-
-const ChatListFilters = React.memo(ChatListFiltersComponent);
+});
function useFilteredChats({
pinned,
@@ -308,7 +321,12 @@ function useFilteredChats({
? [pinnedSection, allSection]
: [allSection];
} else {
- return [{ title: 'Search', data: filterChats(searchResults, activeTab) }];
+ return [
+ {
+ title: 'Search results',
+ data: filterChats(searchResults, activeTab),
+ },
+ ];
}
}, [activeTab, pending, searchQuery, searchResults, unpinned, pinned]);
}
diff --git a/packages/ui/src/components/ChatMessage/ChatMessage.tsx b/packages/ui/src/components/ChatMessage/ChatMessage.tsx
index 3f52195bc6..170df52dc4 100644
--- a/packages/ui/src/components/ChatMessage/ChatMessage.tsx
+++ b/packages/ui/src/components/ChatMessage/ChatMessage.tsx
@@ -7,6 +7,7 @@ import { View, XStack, YStack } from 'tamagui';
import AuthorRow from '../AuthorRow';
import { Icon } from '../Icon';
import { MessageInput } from '../MessageInput';
+import { ParentAgnosticKeyboardAvoidingView } from '../ParentAgnosticKeyboardAvoidingView';
import { createContentRenderer } from '../PostContent/ContentRenderer';
import { usePostContent } from '../PostContent/contentUtils';
import { SendPostRetrySheet } from '../SendPostRetrySheet';
@@ -94,20 +95,22 @@ const ChatMessage = ({
const messageInputForEditing = useMemo(
() => (
- {}}
- clearDraft={() => {}}
- getDraft={async () => ({})}
- shouldBlur={false}
- setShouldBlur={() => {}}
- send={async () => {}}
- channelId={post.channelId}
- editingPost={post}
- editPost={editPost}
- setEditingPost={setEditingPost}
- channelType="chat"
- />
+
+ {}}
+ clearDraft={() => {}}
+ getDraft={async () => ({})}
+ shouldBlur={false}
+ setShouldBlur={() => {}}
+ send={async () => {}}
+ channelId={post.channelId}
+ editingPost={post}
+ editPost={editPost}
+ setEditingPost={setEditingPost}
+ channelType="chat"
+ />
+
),
[post, editPost, setEditingPost]
);
diff --git a/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageActions.tsx b/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageActions.tsx
index 382a93281e..9a09a83962 100644
--- a/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageActions.tsx
+++ b/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageActions.tsx
@@ -1,9 +1,11 @@
import Clipboard from '@react-native-clipboard/clipboard';
+import { type Session, useCurrentSession } from '@tloncorp/shared';
import * as db from '@tloncorp/shared/dist/db';
import * as logic from '@tloncorp/shared/dist/logic';
import * as store from '@tloncorp/shared/dist/store';
import * as Haptics from 'expo-haptics';
import { useMemo } from 'react';
+import { Alert } from 'react-native';
import { useChannelContext, useCurrentUserId } from '../../../contexts';
import { Attachment, useAttachmentContext } from '../../../contexts/attachment';
@@ -27,6 +29,7 @@ export default function MessageActions({
post: db.Post;
channelType: db.ChannelType;
}) {
+ const currentSession = useCurrentSession();
const currentUserId = useCurrentUserId();
const { addAttachment } = useAttachmentContext();
const channel = useChannelContext();
@@ -61,6 +64,10 @@ export default function MessageActions({
{postActions.map((action, index) => (
handleAction({
id: action.id,
@@ -73,6 +80,8 @@ export default function MessageActions({
onEdit,
onViewReactions,
addAttachment,
+ currentSession,
+ isNetworkDependent: action.networkDependent,
})
}
key={action.id}
@@ -103,6 +112,7 @@ interface ChannelAction {
id: string;
label: string;
actionType?: 'destructive';
+ networkDependent: boolean;
}
export function getPostActions({
post,
@@ -116,48 +126,112 @@ export function getPostActions({
switch (channelType) {
case 'gallery':
return [
- { id: 'startThread', label: 'Comment on post' },
- { id: 'muteThread', label: isMuted ? 'Unmute thread' : 'Mute thread' },
- { id: 'copyRef', label: 'Copy link to post' },
- { id: 'edit', label: 'Edit post' },
- { id: 'report', label: 'Report post' },
- { id: 'visibility', label: post?.hidden ? 'Show post' : 'Hide post' },
- { id: 'delete', label: 'Delete message', actionType: 'destructive' },
+ { id: 'startThread', label: 'Comment on post', networkDependent: true },
+ {
+ id: 'muteThread',
+ label: isMuted ? 'Unmute thread' : 'Mute thread',
+ networkDependent: true,
+ },
+ { id: 'copyRef', label: 'Copy link to post', networkDependent: false },
+ { id: 'edit', label: 'Edit post', networkDependent: true },
+ { id: 'report', label: 'Report post', networkDependent: true },
+ {
+ id: 'visibility',
+ label: post?.hidden ? 'Show post' : 'Hide post',
+ networkDependent: true,
+ },
+ {
+ id: 'delete',
+ label: 'Delete message',
+ actionType: 'destructive',
+ networkDependent: true,
+ },
];
case 'notebook':
return [
- { id: 'startThread', label: 'Comment on post' },
- { id: 'muteThread', label: isMuted ? 'Unmute thread' : 'Mute thread' },
- { id: 'copyRef', label: 'Copy link to post' },
- { id: 'edit', label: 'Edit post' },
- { id: 'report', label: 'Report post' },
- { id: 'visibility', label: post?.hidden ? 'Show post' : 'Hide post' },
- { id: 'delete', label: 'Delete message', actionType: 'destructive' },
+ { id: 'startThread', label: 'Comment on post', networkDependent: true },
+ {
+ id: 'muteThread',
+ label: isMuted ? 'Unmute thread' : 'Mute thread',
+ networkDependent: true,
+ },
+ { id: 'copyRef', label: 'Copy link to post', networkDependent: false },
+ { id: 'edit', label: 'Edit post', networkDependent: true },
+ { id: 'report', label: 'Report post', networkDependent: true },
+ {
+ id: 'visibility',
+ label: post?.hidden ? 'Show post' : 'Hide post',
+ networkDependent: true,
+ },
+ {
+ id: 'delete',
+ label: 'Delete message',
+ actionType: 'destructive',
+ networkDependent: true,
+ },
];
case 'dm':
case 'groupDm':
return [
// { id: 'quote', label: 'Quote' },
- { id: 'startThread', label: 'Start thread' },
- { id: 'muteThread', label: isMuted ? 'Unmute thread' : 'Mute thread' },
- { id: 'viewReactions', label: 'View reactions' },
- { id: 'copyText', label: 'Copy message text' },
- { id: 'visibility', label: post?.hidden ? 'Show post' : 'Hide post' },
- { id: 'delete', label: 'Delete message', actionType: 'destructive' },
+ { id: 'startThread', label: 'Start thread', networkDependent: true },
+ {
+ id: 'muteThread',
+ label: isMuted ? 'Unmute thread' : 'Mute thread',
+ networkDependent: true,
+ },
+ {
+ id: 'viewReactions',
+ label: 'View reactions',
+ networkDependent: false,
+ },
+ { id: 'copyText', label: 'Copy message text', networkDependent: false },
+ {
+ id: 'visibility',
+ label: post?.hidden ? 'Show post' : 'Hide post',
+ networkDependent: true,
+ },
+ {
+ id: 'delete',
+ label: 'Delete message',
+ actionType: 'destructive',
+ networkDependent: true,
+ },
];
case 'chat':
default:
return [
- { id: 'quote', label: 'Quote' },
- { id: 'startThread', label: 'Start thread' },
- { id: 'muteThread', label: isMuted ? 'Unmute thread' : 'Mute thread' },
- { id: 'viewReactions', label: 'View reactions' },
- { id: 'copyRef', label: 'Copy link to message' },
- { id: 'copyText', label: 'Copy message text' },
- { id: 'edit', label: 'Edit message' },
- { id: 'visibility', label: post?.hidden ? 'Show post' : 'Hide post' },
- { id: 'report', label: 'Report message' },
- { id: 'delete', label: 'Delete message', actionType: 'destructive' },
+ { id: 'quote', label: 'Quote', networkDependent: true },
+ { id: 'startThread', label: 'Start thread', networkDependent: true },
+ {
+ id: 'muteThread',
+ label: isMuted ? 'Unmute thread' : 'Mute thread',
+ networkDependent: true,
+ },
+ {
+ id: 'viewReactions',
+ label: 'View reactions',
+ networkDependent: false,
+ },
+ {
+ id: 'copyRef',
+ label: 'Copy link to message',
+ networkDependent: false,
+ },
+ { id: 'copyText', label: 'Copy message text', networkDependent: false },
+ { id: 'edit', label: 'Edit message', networkDependent: true },
+ {
+ id: 'visibility',
+ label: post?.hidden ? 'Show post' : 'Hide post',
+ networkDependent: true,
+ },
+ { id: 'report', label: 'Report message', networkDependent: true },
+ {
+ id: 'delete',
+ label: 'Delete message',
+ actionType: 'destructive',
+ networkDependent: true,
+ },
];
}
}
@@ -173,6 +247,8 @@ export async function handleAction({
onEdit,
onViewReactions,
addAttachment,
+ currentSession,
+ isNetworkDependent,
}: {
id: string;
post: db.Post;
@@ -184,7 +260,20 @@ export async function handleAction({
onEdit?: () => void;
onViewReactions?: (post: db.Post) => void;
addAttachment: (attachment: Attachment) => void;
+ currentSession: Session | null;
+ isNetworkDependent: boolean;
}) {
+ if (
+ isNetworkDependent &&
+ (!currentSession || currentSession?.isReconnecting)
+ ) {
+ Alert.alert(
+ 'App is disconnected',
+ 'This action is unavailable while the app is in a disconnected state.'
+ );
+ return;
+ }
+
const [path, reference] = logic.postToContentReference(post);
switch (id) {
diff --git a/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageContainer.tsx b/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageContainer.tsx
index c36700aa6a..9c5abbbcdd 100644
--- a/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageContainer.tsx
+++ b/packages/ui/src/components/ChatMessage/ChatMessageActions/MessageContainer.tsx
@@ -23,7 +23,7 @@ export function MessageContainer({ post }: { post: db.Post }) {
padding="$l"
borderRadius="$l"
>
-
+
);
}
diff --git a/packages/ui/src/components/ChatOptionsSheet.tsx b/packages/ui/src/components/ChatOptionsSheet.tsx
index fb6c274099..45e9d81faa 100644
--- a/packages/ui/src/components/ChatOptionsSheet.tsx
+++ b/packages/ui/src/components/ChatOptionsSheet.tsx
@@ -1,5 +1,5 @@
import { sync } from '@tloncorp/shared';
-import type * as db from '@tloncorp/shared/dist/db';
+import * as db from '@tloncorp/shared/dist/db';
import * as logic from '@tloncorp/shared/dist/logic';
import * as store from '@tloncorp/shared/dist/store';
import * as ub from '@tloncorp/shared/dist/urbit';
@@ -30,47 +30,53 @@ export type ChatOptionsSheetMethods = {
export type ChatOptionsSheetRef = React.Ref;
-const ChatOptionsSheetComponent = React.forwardRef(
- function ChatOptionsSheetImpl(props, ref) {
- const [open, setOpen] = useState(false);
- const [chat, setChat] = useState<{ type: ChatType; id: string } | null>(
- null
- );
-
- useImperativeHandle(
- ref,
- () => ({
- open: (chatId, chatType) => {
- setOpen(true);
- setChat({ id: chatId, type: chatType });
- },
- }),
- []
- );
+type ChatOptionsSheetProps = {
+ // We pass in setSortBy from GroupChannelsScreenView to live-update the sort
+ // preference in the channel list.
+ setSortBy?: (sortBy: db.ChannelSortPreference) => void;
+};
- if (!chat || !open) {
- return null;
- }
+const ChatOptionsSheetComponent = React.forwardRef<
+ ChatOptionsSheetMethods,
+ ChatOptionsSheetProps
+>(function ChatOptionsSheetImpl(props, ref) {
+ const [open, setOpen] = useState(false);
+ const [chat, setChat] = useState<{ type: ChatType; id: string } | null>(null);
+
+ useImperativeHandle(
+ ref,
+ () => ({
+ open: (chatId, chatType) => {
+ setOpen(true);
+ setChat({ id: chatId, type: chatType });
+ },
+ }),
+ []
+ );
- if (chat.type === 'group') {
- return (
-
- );
- }
+ if (!chat || !open) {
+ return null;
+ }
+ if (chat.type === 'group') {
return (
-
);
}
-);
+
+ return (
+
+ );
+});
export const ChatOptionsSheet = React.memo(ChatOptionsSheetComponent);
@@ -78,13 +84,17 @@ export function GroupOptionsSheetLoader({
groupId,
open,
onOpenChange,
+ setSortBy,
}: {
groupId: string;
open: boolean;
onOpenChange: (open: boolean) => void;
+ setSortBy?: (sortBy: db.ChannelSortPreference) => void;
}) {
const groupQuery = store.useGroup({ id: groupId });
- const [pane, setPane] = useState<'initial' | 'notifications'>('initial');
+ const [pane, setPane] = useState<
+ 'initial' | 'edit' | 'notifications' | 'sort'
+ >('initial');
const openChangeHandler = useCallback(
(open: boolean) => {
if (!open) {
@@ -97,7 +107,12 @@ export function GroupOptionsSheetLoader({
return groupQuery.data ? (
-
+
) : null;
}
@@ -106,10 +121,12 @@ export function GroupOptions({
group,
pane,
setPane,
+ setSortBy,
}: {
group: db.Group;
- pane: 'initial' | 'notifications';
- setPane: (pane: 'initial' | 'notifications') => void;
+ pane: 'initial' | 'edit' | 'notifications' | 'sort';
+ setPane: (pane: 'initial' | 'edit' | 'notifications' | 'sort') => void;
+ setSortBy?: (sortBy: db.ChannelSortPreference) => void;
}) {
const currentUser = useCurrentUserId();
const { data: currentVolumeLevel } = store.useGroupVolumeLevel(group.id);
@@ -125,6 +142,7 @@ export function GroupOptions({
onPressGroupPrivacy,
onPressLeave,
onTogglePinned,
+ onSelectSort,
} = useChatOptions() ?? {};
useEffect(() => {
@@ -198,6 +216,45 @@ export function GroupOptions({
[currentVolumeLevel, handleVolumeUpdate]
);
+ const actionEdit = useMemo(() => {
+ const metadataAction: Action = {
+ title: 'Edit group info',
+ description: 'Change name, description, and image',
+ action: () => {
+ sheetRef.current.setOpen(false);
+ onPressGroupMeta?.(group.id);
+ },
+ endIcon: 'ChevronRight',
+ };
+
+ const manageChannelsAction: Action = {
+ title: 'Manage channels',
+ description: 'Add or remove channels in this group',
+ action: () => {
+ sheetRef.current.setOpen(false);
+ onPressManageChannels?.(group.id);
+ },
+ endIcon: 'ChevronRight',
+ };
+
+ const managePrivacyAction: Action = {
+ title: 'Privacy',
+ description: 'Change who can find or join this group',
+ action: () => {
+ sheetRef.current.setOpen(false);
+ onPressGroupPrivacy?.(group.id);
+ },
+ endIcon: 'ChevronRight',
+ };
+ const actionEdit: ActionGroup[] = [
+ {
+ accent: 'neutral',
+ actions: [metadataAction, manageChannelsAction, managePrivacyAction],
+ },
+ ];
+ return actionEdit;
+ }, [group.id, onPressGroupMeta, onPressGroupPrivacy, onPressManageChannels]);
+
const actionGroups = useMemo(() => {
const groupRef = logic.getGroupReferencePath(group.id);
@@ -228,20 +285,20 @@ export function GroupOptions({
},
];
- const manageChannelsAction: Action = {
- title: 'Manage channels',
- action: () => {
- sheetRef.current.setOpen(false);
- onPressManageChannels?.(group.id);
- },
- endIcon: 'ChevronRight',
- };
+ if (group.channels && group.channels.length > 1) {
+ actionGroups[0].actions.push({
+ title: 'Sort channels',
+ endIcon: 'ChevronRight',
+ action: () => {
+ setPane('sort');
+ },
+ });
+ }
- const managePrivacyAction: Action = {
- title: 'Privacy',
+ const editAction: Action = {
+ title: 'Edit group',
action: () => {
- sheetRef.current.setOpen(false);
- onPressGroupPrivacy?.(group.id);
+ setPane('edit');
},
endIcon: 'ChevronRight',
};
@@ -255,15 +312,6 @@ export function GroupOptions({
},
};
- const metadataAction: Action = {
- title: 'Edit group info',
- action: () => {
- sheetRef.current.setOpen(false);
- onPressGroupMeta?.(group.id);
- },
- endIcon: 'ChevronRight',
- };
-
const inviteAction: Action = {
title: 'Invite people',
action: () => {
@@ -273,10 +321,16 @@ export function GroupOptions({
endIcon: 'ChevronRight',
};
+ const inviteNotice: Action = {
+ accent: 'disabled',
+ title: 'Invites disabled',
+ description: 'Only admins may invite people to this group.',
+ };
+
if (currentUserIsAdmin) {
actionGroups.push({
accent: 'neutral',
- actions: [manageChannelsAction, managePrivacyAction, metadataAction],
+ actions: [editAction],
});
}
@@ -289,9 +343,9 @@ export function GroupOptions({
actionGroups.push({
accent: 'neutral',
actions:
- group.privacy === 'public' || group.privacy === 'private'
+ group.privacy === 'public'
? [goToMembersAction, inviteAction]
- : [goToMembersAction],
+ : [goToMembersAction, inviteNotice],
});
}
@@ -312,28 +366,86 @@ export function GroupOptions({
}
return actionGroups;
}, [
- isPinned,
- onTogglePinned,
group,
+ isPinned,
currentUserIsAdmin,
setPane,
- onPressManageChannels,
+ onTogglePinned,
onPressGroupMembers,
- onPressGroupMeta,
- onPressLeave,
onPressInvite,
- onPressGroupPrivacy,
+ onPressLeave,
]);
- const memberCount = group?.members?.length ?? 0;
+ const actionSort: ActionGroup[] = useMemo(() => {
+ return [
+ {
+ accent: 'neutral',
+ actions: [
+ {
+ title: 'Sort by recency',
+ action: () => {
+ onSelectSort?.('recency');
+ setSortBy?.('recency');
+ sheetRef.current.setOpen(false);
+ },
+ },
+ {
+ title: 'Sort by arrangement',
+ action: () => {
+ onSelectSort?.('arranged');
+ setSortBy?.('arranged');
+ sheetRef.current.setOpen(false);
+ },
+ },
+ ],
+ },
+ ];
+ }, [onSelectSort, setSortBy]);
+
+ const memberCount = group?.members?.length
+ ? group.members.length.toLocaleString()
+ : 0;
const title = group?.title ?? 'Loading…';
- const subtitle = memberCount ? `Group with ${memberCount} members` : '';
+ const privacy = group?.privacy
+ ? group.privacy.charAt(0).toUpperCase() + group.privacy.slice(1)
+ : '';
+ const subtitle = memberCount
+ ? `${privacy} group with ${memberCount} member${group.members?.length === 1 ? '' : 's'}`
+ : '';
return (
group?.currentUserIsHost ?? false,
@@ -587,6 +703,44 @@ export function ChannelOptions({
} as ActionGroup,
]
: []),
+ // TODO: redefine in a more readable way.
+ ...(group &&
+ !['groupDm', 'dm'].includes(channel.type) &&
+ (group.privacy === 'public' ||
+ (currentUserIsAdmin &&
+ ['private', 'secret'].includes(group.privacy ?? '')))
+ ? [
+ {
+ accent: 'neutral',
+ actions: [
+ {
+ title: 'Invite people',
+ action: () => {
+ sheetRef.current.setOpen(false);
+ onPressInvite?.(group);
+ },
+ endIcon: 'ChevronRight',
+ },
+ ],
+ } as ActionGroup,
+ ]
+ : []),
+ ...(group &&
+ !['groupDm', 'dm'].includes(channel.type) &&
+ !currentUserIsAdmin &&
+ ['private', 'secret'].includes(group.privacy ?? '')
+ ? [
+ {
+ accent: 'disabled',
+ actions: [
+ {
+ title: 'Invites disabled',
+ description: 'Only admins may invite people to this group.',
+ },
+ ],
+ } as ActionGroup,
+ ]
+ : []),
...(!currentUserIsHost
? [
{
@@ -627,14 +781,15 @@ export function ChannelOptions({
];
}, [
channel,
- onPressChannelMembers,
- onPressChannelMeta,
- setPane,
- title,
currentUserIsAdmin,
- currentUserIsHost,
group,
+ currentUserIsHost,
+ setPane,
+ onPressChannelMeta,
+ onPressChannelMembers,
onPressManageChannels,
+ onPressInvite,
+ title,
]);
return (
void;
onScrollChange?: (scrolling: boolean) => void;
- showCancelButton?: boolean;
- onPressCancel?: () => void;
explanationComponent?: React.ReactElement;
quickActions?: React.ReactElement;
}) {
@@ -48,8 +47,6 @@ export function ContactBook({
contactsIndex ?? {}
);
- const Explanation = () => explanationComponent ?? null;
-
const [query, setQuery] = useState('');
const queryContacts = useSortedContacts({
contacts: contacts ?? [],
@@ -97,6 +94,7 @@ export function ContactBook({
selectable={multiSelect}
selected={isSelected}
onPress={handleSelect}
+ pressStyle={{ backgroundColor: '$shadow' }}
/>
);
},
@@ -121,7 +119,17 @@ export function ContactBook({
[onScrollChange]
);
- const QuickActions = () => quickActions ?? null;
+ const insets = useSafeAreaInsets();
+
+ const contentContainerStyle = useStyle({
+ paddingBottom: insets.bottom,
+ paddingTop: '$s',
+ }) as StyleProp;
+
+ const scrollIndicatorInsets = useStyle({
+ bottom: insets.bottom,
+ top: '$xl',
+ }) as Insets;
return (
@@ -129,33 +137,32 @@ export function ContactBook({
- {showCancelButton && (
- onPressCancel?.()}>Cancel
- )}
)}
{!showSearchResults && explanationComponent ? (
-
+ explanationComponent
) : (
)}
diff --git a/packages/ui/src/components/ContactRow.tsx b/packages/ui/src/components/ContactRow.tsx
index cdbd25e920..7b128982da 100644
--- a/packages/ui/src/components/ContactRow.tsx
+++ b/packages/ui/src/components/ContactRow.tsx
@@ -32,7 +32,7 @@ function ContactRowItemRaw({
);
return (
-
+
diff --git a/packages/ui/src/components/CreateGroupView.tsx b/packages/ui/src/components/CreateGroupView.tsx
index fd18b1a115..5554279f81 100644
--- a/packages/ui/src/components/CreateGroupView.tsx
+++ b/packages/ui/src/components/CreateGroupView.tsx
@@ -1,18 +1,13 @@
import * as db from '@tloncorp/shared/dist/db';
import { useCallback, useState } from 'react';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
-import { Text, View, YStack } from 'tamagui';
+import { View, YStack } from 'tamagui';
-import {
- AppDataContextProvider,
- useContacts,
- useCurrentUserId,
-} from '../contexts';
import { CreateGroupWidget } from './AddChats';
import { Button } from './Button';
import { TextButton } from './Buttons';
import { ContactBook } from './ContactBook';
-import { GenericHeader } from './GenericHeader';
+import { ScreenHeader } from './ScreenHeader';
type screen = 'InviteUsers' | 'CreateGroup';
@@ -26,8 +21,6 @@ export function CreateGroupView({
const { bottom } = useSafeAreaInsets();
const [screen, setScreen] = useState('InviteUsers');
const [invitees, setInvitees] = useState([]);
- const contacts = useContacts();
- const currentUserId = useCurrentUserId();
const handleCreatedGroup = useCallback(
({ channel }: { channel: db.Channel }) => {
@@ -38,13 +31,13 @@ export function CreateGroupView({
return (
-
+ backAction={() =>
screen === 'InviteUsers' ? goBack() : setScreen('InviteUsers')
}
showSessionStatus={false}
- rightContent={
+ rightControls={
screen === 'InviteUsers' ? (
{
@@ -57,44 +50,36 @@ export function CreateGroupView({
) : null
}
/>
-
- {screen === 'InviteUsers' ? (
-
-
-
- Select members
-
-
- {
- setScreen('CreateGroup');
- }}
- disabled={invitees.length === 0}
- >
-
- {invitees.length === 0
- ? 'Invite'
- : `Invite ${invitees.length} and continue`}
-
-
-
-
- ) : (
-
+
- )}
-
+
+ {
+ setScreen('CreateGroup');
+ }}
+ disabled={invitees.length === 0}
+ >
+
+ {invitees.length === 0
+ ? 'Invite'
+ : `Invite ${invitees.length} and continue`}
+
+
+
+ ) : (
+
+ )}
);
}
diff --git a/packages/ui/src/components/DetailView.tsx b/packages/ui/src/components/DetailView.tsx
index 412781bc48..d088e2ae5c 100644
--- a/packages/ui/src/components/DetailView.tsx
+++ b/packages/ui/src/components/DetailView.tsx
@@ -29,6 +29,7 @@ export interface DetailViewProps {
onPressDelete: (post: db.Post) => void;
setActiveMessage: (post: db.Post | null) => void;
activeMessage: db.Post | null;
+ headerMode: 'default' | 'next';
}
export const DetailView = ({
@@ -43,6 +44,7 @@ export const DetailView = ({
onPressDelete,
setActiveMessage,
activeMessage,
+ headerMode,
}: DetailViewProps) => {
const channelType = useMemo(
() => urbit.getChannelType(post.channelId),
@@ -79,6 +81,7 @@ export const DetailView = ({
unreadCount={initialPostUnread?.count ?? 0}
activeMessage={activeMessage}
setActiveMessage={setActiveMessage}
+ headerMode={headerMode}
/>
);
@@ -95,6 +98,7 @@ export const DetailView = ({
resolvedPosts,
setActiveMessage,
setEditingPost,
+ headerMode,
]);
return isChat ? (
diff --git a/packages/ui/src/components/EditProfileScreenView.tsx b/packages/ui/src/components/EditProfileScreenView.tsx
index b3a0d2d9dd..2c124741b4 100644
--- a/packages/ui/src/components/EditProfileScreenView.tsx
+++ b/packages/ui/src/components/EditProfileScreenView.tsx
@@ -16,7 +16,6 @@ import {
} from './Form';
import KeyboardAvoidingView from './KeyboardAvoidingView';
import { ScreenHeader } from './ScreenHeader';
-import { Text } from './TextV2';
interface Props {
onGoBack: () => void;
@@ -89,28 +88,15 @@ export function EditProfileScreenView(props: Props) {
return (
-
-
-
- Cancel
-
-
- Edit Profile
-
-
+
Done
-
-
-
+
+ }
+ />
diff --git a/packages/ui/src/components/Emoji/EmojiPickerSheet.tsx b/packages/ui/src/components/Emoji/EmojiPickerSheet.tsx
index a1ed6769be..40da5700ff 100644
--- a/packages/ui/src/components/Emoji/EmojiPickerSheet.tsx
+++ b/packages/ui/src/components/Emoji/EmojiPickerSheet.tsx
@@ -130,7 +130,7 @@ export function EmojiPickerSheet(
marginHorizontal="$m"
onChangeQuery={handleQueryChange}
onFocus={handleInputFocus}
- areaProps={{ spellCheck: false, autoComplete: 'off' }}
+ inputProps={{ spellCheck: false, autoComplete: 'off' }}
/>
Keyboard.dismiss()}>
diff --git a/packages/ui/src/components/FeatureFlagScreenView.tsx b/packages/ui/src/components/FeatureFlagScreenView.tsx
index 1605b6b253..f775bc44a7 100644
--- a/packages/ui/src/components/FeatureFlagScreenView.tsx
+++ b/packages/ui/src/components/FeatureFlagScreenView.tsx
@@ -2,7 +2,7 @@ import { Switch } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { ScrollView, SizableText, View, XStack } from 'tamagui';
-import { GenericHeader } from './GenericHeader';
+import { ScreenHeader } from './ScreenHeader';
export function FeatureFlagScreenView({
features,
@@ -18,7 +18,7 @@ export function FeatureFlagScreenView({
return (
-
+
(
-
- On Tlon, people host groups.
- Look for groups hosted by people above.
-
-);
-
-type screens = 'FindGroups' | 'ViewGroupsByContact';
+import { ScreenHeader } from './ScreenHeader';
export function FindGroupsView({
- onCancel,
- onGroupAction,
+ goBack,
+ goToContactHostedGroups,
}: {
- onCancel: () => void;
- onGroupAction: (action: GroupPreviewAction, group: db.Group) => void;
+ goBack: () => void;
+ goToContactHostedGroups: (params: { contactId: string }) => void;
}) {
- const { top } = useSafeAreaInsets();
- const contacts = useContacts();
- const currentUserId = useCurrentUserId();
- const [screen, setScreen] = useState('FindGroups');
- const [viewGroupsForContact, setViewGroupsForContact] = useState<
- string | null
- >(null);
- const [groupForPreview, setGroupForPreview] = useState(null);
-
- const onSelectGroup = useCallback(
- (group: db.Group) => {
- setGroupForPreview(group);
+ const handleContactSelected = useCallback(
+ (contactId: string) => {
+ console.log('go to contact hosted groups', contactId);
+ goToContactHostedGroups({ contactId: contactId });
},
- [setGroupForPreview]
- );
-
- const handleGroupAction = useCallback(
- (action: GroupPreviewAction, group: db.Group) => {
- onGroupAction(action, group);
- setGroupForPreview(null);
- },
- [onGroupAction]
+ [goToContactHostedGroups]
);
return (
-
- {screen === 'FindGroups' ? (
-
- {
- setViewGroupsForContact(contact);
- setScreen('ViewGroupsByContact');
- }}
- showCancelButton
- onPressCancel={onCancel}
- explanationComponent={}
- />
-
- ) : (
- <>
-
- setScreen('FindGroups')} />
-
-
- >
- )}
- {
- if (!open) {
- setGroupForPreview(null);
- }
- }}
- onActionComplete={handleGroupAction}
- group={groupForPreview ?? undefined}
+
+
+ }
/>
);
}
+
+const GroupJoinExplanation = () => (
+
+ On Tlon, people host groups.
+ Look for groups hosted by people above.
+
+);
diff --git a/packages/ui/src/components/Form/Form.tsx b/packages/ui/src/components/Form/Form.tsx
index a58674efba..b27dcaa50b 100644
--- a/packages/ui/src/components/Form/Form.tsx
+++ b/packages/ui/src/components/Form/Form.tsx
@@ -57,4 +57,5 @@ export const FieldLabel = React.memo(
export const FieldErrorMessage = styled(FieldLabel, {
color: '$negativeActionText',
+ paddingTop: '$l',
});
diff --git a/packages/ui/src/components/Form/inputs.tsx b/packages/ui/src/components/Form/inputs.tsx
index a7537d1071..981ae075ed 100644
--- a/packages/ui/src/components/Form/inputs.tsx
+++ b/packages/ui/src/components/Form/inputs.tsx
@@ -1,5 +1,5 @@
import React, { ComponentProps, ReactElement } from 'react';
-import { TextInput as BaseTextInput } from 'react-native';
+import { TextInput as RNTextInput } from 'react-native';
import { ScrollView, View, XStack, YStack, styled } from 'tamagui';
import { Button } from '../Button';
@@ -9,40 +9,148 @@ import { useBoundHandler } from '../ListItem/listItemUtils';
import { Text } from '../TextV2';
import { FieldContext } from './Form';
+const StyledTextInput = styled(
+ RNTextInput,
+ {},
+ {
+ isInput: true,
+ accept: {
+ placeholderTextColor: 'color',
+ selectionColor: 'color',
+ } as const,
+ }
+);
+
// Text input
-export const TextInput = React.memo(
- styled(
- BaseTextInput,
- {
- context: FieldContext,
- color: '$primaryText',
- borderRadius: '$l',
- borderWidth: 1,
- borderColor: '$border',
- placeholderTextColor: '$tertiaryText',
- fontSize: '$l',
- padding: '$xl',
- fontFamily: '$body',
- textAlignVertical: 'top',
- variants: {
- accent: {
- negative: {
- backgroundColor: '$negativeBackground',
- color: '$negativeActionText',
- borderColor: '$negativeBorder',
- },
- },
+export const BaseTextInput = styled(StyledTextInput, {
+ context: FieldContext,
+ color: '$primaryText',
+ borderRadius: '$l',
+ borderWidth: 1,
+ borderColor: '$border',
+ placeholderTextColor: '$tertiaryText',
+ fontSize: '$l',
+ padding: '$xl',
+ fontFamily: '$body',
+ textAlignVertical: 'top',
+ variants: {
+ accent: {
+ negative: {
+ backgroundColor: '$negativeBackground',
+ color: '$negativeActionText',
+ borderColor: '$negativeBorder',
},
},
- {
- isInput: true,
- accept: {
- placeholderTextColor: 'color',
- selectionColor: 'color',
- } as const,
- }
- )
+ },
+});
+
+export const TextInput = React.memo(BaseTextInput);
+
+export const TextInputWithIcon = React.memo(
+ BaseTextInput.styleable<{ icon: IconType }>(({ icon, ...props }, ref) => {
+ return (
+
+
+
+
+ );
+ })
+);
+
+interface TextInputWithButtonProps extends ComponentProps {
+ buttonText: string;
+ onButtonPress: () => void;
+}
+
+// Needs polish, I know we just talked about Ochre conformance plz forgive
+export const TextInputWithButton: React.FC =
+ React.memo(function TextInputWithButtonRaw({
+ buttonText,
+ onButtonPress,
+ ...textInputProps
+ }) {
+ return (
+
+
+
+ {buttonText}
+
+
+ );
+ });
+
+interface TextInputWithIconAndButtonProps
+ extends ComponentProps {
+ icon: IconType;
+ buttonText: string;
+ onButtonPress: () => void;
+}
+
+export const TextInputWithIconAndButton = React.memo(
+ function TextInputWithIconAndButtonRaw({
+ icon,
+ buttonText,
+ onButtonPress,
+ ...textInputProps
+ }: TextInputWithIconAndButtonProps) {
+ return (
+
+
+
+
+ {buttonText}
+
+
+ );
+ }
);
// Toggle group
diff --git a/packages/ui/src/components/GenericHeader.tsx b/packages/ui/src/components/GenericHeader.tsx
deleted file mode 100644
index bc68ead37c..0000000000
--- a/packages/ui/src/components/GenericHeader.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useCurrentSession } from '@tloncorp/shared';
-import Animated, { FadeInDown, FadeOutUp } from 'react-native-reanimated';
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
-import { SizableText, View, XStack, isWeb } from 'tamagui';
-
-import { Button } from './Button';
-import { Icon } from './Icon';
-
-export function GenericHeader({
- title,
- goBack,
- showSpinner,
- rightContent,
- showSessionStatus,
-}: {
- title?: string;
- goBack?: () => void;
- showSpinner?: boolean;
- rightContent?: React.ReactNode;
- showSessionStatus?: boolean;
-}) {
- const insets = useSafeAreaInsets();
- const currentSession = useCurrentSession();
- const textColor =
- showSessionStatus === false
- ? '$primaryText'
- : currentSession
- ? '$primaryText'
- : '$tertiaryText';
-
- return (
-
-
-
- {goBack && (
-
-
-
- )}
- {isWeb ? (
-
-
- {showSpinner ? 'Loading…' : title}
-
-
- ) : (
-
-
- {showSpinner ? 'Loading…' : title}
-
-
- )}
-
-
- {rightContent}
-
-
-
- );
-}
diff --git a/packages/ui/src/components/GroupChannelsScreenView.tsx b/packages/ui/src/components/GroupChannelsScreenView.tsx
index d6a1be553e..f87cddbc76 100644
--- a/packages/ui/src/components/GroupChannelsScreenView.tsx
+++ b/packages/ui/src/components/GroupChannelsScreenView.tsx
@@ -1,45 +1,48 @@
import * as db from '@tloncorp/shared/dist/db';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
-import { ScrollView, View } from 'tamagui';
+import { ScrollView, View, YStack } from 'tamagui';
+import { useCurrentUserId } from '../contexts';
import { useChatOptions } from '../contexts/chatOptions';
-import { SimpleActionSheet } from './ActionSheet';
-import { Button } from './Button';
+import { useIsAdmin } from '../utils/channelUtils';
import ChannelNavSections from './ChannelNavSections';
import { ChatOptionsSheet, ChatOptionsSheetMethods } from './ChatOptionsSheet';
-import { GenericHeader } from './GenericHeader';
-import { Icon } from './Icon';
-
-const ChannelSortOptions = ({
- setShowSortOptions,
-}: {
- setShowSortOptions: (show: boolean) => void;
-}) => {
- return (
- setShowSortOptions(true)}>
-
-
- );
-};
+import { LoadingSpinner } from './LoadingSpinner';
+import {
+ ChannelTypeName,
+ CreateChannelSheet,
+} from './ManageChannels/CreateChannelSheet';
+import { ScreenHeader } from './ScreenHeader';
type GroupChannelsScreenViewProps = {
onChannelPressed: (channel: db.Channel) => void;
onBackPressed: () => void;
currentUser: string;
+ createChannel: ({
+ title,
+ description,
+ channelType,
+ }: {
+ title: string;
+ description: string;
+ channelType: ChannelTypeName;
+ }) => Promise;
};
export function GroupChannelsScreenView({
onChannelPressed,
onBackPressed,
+ createChannel,
}: GroupChannelsScreenViewProps) {
const groupOptions = useChatOptions();
const group = groupOptions?.group;
const chatOptionsSheetRef = useRef(null);
-
- const [showSortOptions, setShowSortOptions] = useState(false);
+ const [showCreateChannel, setShowCreateChannel] = useState(false);
const [sortBy, setSortBy] = useState('recency');
const insets = useSafeAreaInsets();
+ const userId = useCurrentUserId();
+ const isGroupAdmin = useIsAdmin(group?.id ?? '', userId);
useEffect(() => {
const getSortByPreference = async () => {
@@ -50,89 +53,87 @@ export function GroupChannelsScreenView({
getSortByPreference();
}, [setSortBy]);
- const handleSortByChanged = useCallback(
- (newSortBy: 'recency' | 'arranged') => {
- setSortBy(newSortBy);
- setShowSortOptions(false);
- db.storeChannelSortPreference(newSortBy);
- },
- []
- );
-
const handlePressOverflowButton = useCallback(() => {
if (group) {
chatOptionsSheetRef.current?.open(group.id, 'group');
}
}, [group]);
+ const title = group ? group?.title ?? 'Untitled' : '';
+
+ const handleOpenChannelOptions = useCallback(
+ (channel: db.Channel) => {
+ if (group) {
+ chatOptionsSheetRef.current?.open(channel.id, channel.type);
+ }
+ },
+ [group]
+ );
+
return (
-
-
-
-
-
-
+
+ {isGroupAdmin && (
+ setShowCreateChannel(true)}
+ />
+ )}
+
+ >
}
/>
-
- {group && groupOptions.groupChannels ? (
+ {group &&
+ groupOptions.groupChannels &&
+ groupOptions.groupChannels.length ? (
+
- ) : null}
-
-
-
-
- );
-}
+
+ ) : (
+
+
+
+ )}
-export function ChannelSortActionsSheet({
- open,
- onOpenChange,
- onSelectSort,
-}: {
- open: boolean;
- onOpenChange: (open: boolean) => void;
- onSelectSort: (sortBy: db.ChannelSortPreference) => void;
-}) {
- return (
- {
- onSelectSort('recency');
- },
- },
- {
- title: 'Sort by arrangement',
- action: () => {
- onSelectSort('arranged');
- },
- },
- ]}
- />
+ {showCreateChannel && (
+ setShowCreateChannel(open)}
+ createChannel={async ({ title, description, channelType }) =>
+ createChannel({
+ title,
+ description,
+ channelType,
+ })
+ }
+ />
+ )}
+
+
);
}
diff --git a/packages/ui/src/components/GroupMembersScreenView.tsx b/packages/ui/src/components/GroupMembersScreenView.tsx
index 397ea41707..33986a7382 100644
--- a/packages/ui/src/components/GroupMembersScreenView.tsx
+++ b/packages/ui/src/components/GroupMembersScreenView.tsx
@@ -6,9 +6,9 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { View, getTokenValue } from 'tamagui';
import { ContactList } from './ContactList';
-import { GenericHeader } from './GenericHeader';
import { GroupJoinRequestSheet } from './GroupJoinRequestSheet';
import { ProfileSheet } from './ProfileSheet';
+import { ScreenHeader } from './ScreenHeader';
import { SectionListHeader } from './SectionList';
export function GroupMembersScreenView({
@@ -130,7 +130,7 @@ export function GroupMembersScreenView({
]
: []
),
- [membersByRole, membersWithoutRoles, bannedUserData]
+ [membersByRole, joinRequestData, bannedUserData, membersWithoutRoles]
);
const keyExtractor = useCallback((item: db.ChatMember) => item.contactId, []);
@@ -173,7 +173,7 @@ export function GroupMembersScreenView({
return (
<>
-
+
Only administrators may invite people to this group.;
+ }
+
return (
-
-
- {status !== 'ready' || typeof shareUrl !== 'string' ? (
-
- ) : (
-
+
+
+ {status === 'error' || status === 'disabled' ? (
+
+ ) : null}
+ {(status === 'loading' || status === 'stale') && (
+
+ )}
+ {status === 'ready' && (
+
)}
-
- Invite Friends to Tlon
+
+ {status === 'disabled' && 'Public invite links are disabled'}
+ {status === 'error' && 'Error generating invite link'}
+ {(status === 'loading' || status === 'stale') &&
+ 'Generating invite link...'}
+ {status === 'ready' &&
+ typeof shareUrl === 'string' &&
+ 'Invite Friends to Tlon'}
+ {status === 'ready' && (
+
+ )}
-
);
}
diff --git a/packages/ui/src/components/InviteUsersWidget.tsx b/packages/ui/src/components/InviteUsersWidget.tsx
index 3cf0ddd1ab..a3c3cf0f47 100644
--- a/packages/ui/src/components/InviteUsersWidget.tsx
+++ b/packages/ui/src/components/InviteUsersWidget.tsx
@@ -1,16 +1,11 @@
import * as db from '@tloncorp/shared/dist/db';
import * as store from '@tloncorp/shared/dist/store';
-import React, { useCallback, useEffect, useMemo, useState } from 'react';
-import { Share } from 'react-native';
-import { isWeb } from 'tamagui';
+import React, { useCallback, useMemo, useState } from 'react';
-import { useBranchDomain, useBranchKey, useCurrentUserId } from '../contexts';
-import { useCopy } from '../hooks/useCopy';
import { ActionSheet } from './ActionSheet';
import { Button } from './Button';
import { ContactBook } from './ContactBook';
-import { Icon } from './Icon';
-import { LoadingSpinner } from './LoadingSpinner';
+import { InviteFriendsToTlonButton } from './InviteFriendsToTlonButton';
const InviteUsersWidgetComponent = ({
group,
@@ -20,105 +15,29 @@ const InviteUsersWidgetComponent = ({
onInviteComplete: () => void;
}) => {
const [invitees, setInvitees] = useState([]);
- const currentUser = useCurrentUserId();
- const branchDomain = useBranchDomain();
- const branchKey = useBranchKey();
- const { status, shareUrl, toggle, describe } = store.useLureLinkStatus({
- flag: group.id,
- branchDomain: branchDomain,
- branchKey: branchKey,
- });
- const { doCopy } = useCopy(shareUrl || '');
- const currentUserIsAdmin = useMemo(
- () =>
- group?.members?.some(
- (m) =>
- m.contactId === currentUser &&
- m.roles?.some((r) => r.roleId === 'admin')
- ) ?? false,
- [currentUser, group?.members]
- );
-
- const handleInviteButtonPress = useCallback(async () => {
- if (invitees.length === 0 && shareUrl && status === 'ready') {
- if (isWeb) {
- if (navigator.share !== undefined) {
- await navigator.share({
- title: `Join ${group.title} on Tlon`,
- url: shareUrl,
- });
- return;
- }
-
- doCopy();
- return;
- }
-
- await Share.share({
- message: `Join ${group.title} on Tlon: ${shareUrl}`,
- title: `Join ${group.title} on Tlon`,
- });
-
- return;
- }
+ const handleInviteGroupMembers = useCallback(async () => {
await store.inviteGroupMembers({
groupId: group.id,
contactIds: invitees,
});
onInviteComplete();
- }, [
- invitees,
- group.id,
- onInviteComplete,
- shareUrl,
- group.title,
- doCopy,
- status,
- ]);
-
- useEffect(() => {
- const meta = {
- title: group.title ?? '',
- description: group.description ?? '',
- cover: group.coverImage ?? '',
- image: group.iconImage ?? '',
- };
-
- const toggleLink = async () => {
- await toggle(meta);
- };
- if (status === 'disabled' && currentUserIsAdmin) {
- toggleLink();
- }
- if (status === 'stale') {
- describe(meta);
- }
- }, [
- group,
- branchDomain,
- branchKey,
- toggle,
- status,
- currentUserIsAdmin,
- describe,
- ]);
+ }, [invitees, group.id, onInviteComplete]);
const buttonText = useMemo(() => {
- if (invitees.length === 0 && status === 'ready') {
- return `Invite friends that aren't on Tlon`;
- }
-
if (invitees.length === 0) {
- return `Invite`;
+ return `Select people to invite`;
}
return `Invite ${invitees.length} and continue`;
- }, [invitees, status]);
+ }, [invitees]);
return (
<>
+
+
+
{buttonText}
- {status !== 'ready' || typeof shareUrl !== 'string' ? (
-
- ) : null}
>
diff --git a/packages/ui/src/components/ListItem/ChannelListItem.tsx b/packages/ui/src/components/ListItem/ChannelListItem.tsx
index 3f59969d1c..fdf1eb9b65 100644
--- a/packages/ui/src/components/ListItem/ChannelListItem.tsx
+++ b/packages/ui/src/components/ListItem/ChannelListItem.tsx
@@ -6,7 +6,6 @@ import * as utils from '../../utils';
import { capitalize } from '../../utils';
import { Badge } from '../Badge';
import { ListItem, type ListItemProps } from './ListItem';
-import { useBoundHandler } from './listItemUtils';
export function ChannelListItem({
model,
@@ -25,6 +24,14 @@ export function ChannelListItem({
const firstMemberId = model.members?.[0]?.contactId ?? '';
const memberCount = model.members?.length ?? 0;
+ const handlePress = logic.useMutableCallback(() => {
+ onPress?.(model);
+ });
+
+ const handleLongPress = logic.useMutableCallback(() => {
+ onLongPress?.(model);
+ });
+
const { subtitle, subtitleIcon } = useMemo(() => {
if (model.type === 'dm' || model.type === 'groupDm') {
return {
@@ -45,11 +52,7 @@ export function ChannelListItem({
}, [model, firstMemberId, memberCount]);
return (
-
+
) {
- const handlePress = useBoundHandler(model, onPress);
- const handleLongPress = useBoundHandler(model, onLongPress);
+ const handlePress = logic.useMutableCallback(() => {
+ onPress?.(model);
+ });
+
+ const handleLongPress = logic.useMutableCallback(() => {
+ onLongPress?.(model);
+ });
// if the chat list item is a group, it's pending
if (logic.isGroup(model)) {
diff --git a/packages/ui/src/components/ListItem/InteractableChatListItem.tsx b/packages/ui/src/components/ListItem/InteractableChatListItem.tsx
index 2c471a6f3c..c05b8bb651 100644
--- a/packages/ui/src/components/ListItem/InteractableChatListItem.tsx
+++ b/packages/ui/src/components/ListItem/InteractableChatListItem.tsx
@@ -10,6 +10,7 @@ import React, {
useRef,
useState,
} from 'react';
+import { StyleProp, ViewStyle } from 'react-native';
import Swipeable, {
SwipeableMethods,
} from 'react-native-gesture-handler/ReanimatedSwipeable';
@@ -54,7 +55,7 @@ function BaseInteractableChatRow({
}
}, [isMuted, mutedState]);
- const handleAction = useCallback(
+ const handleAction = logic.useMutableCallback(
async (actionId: 'pin' | 'mute') => {
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
utils.triggerHaptic('swipeAction');
@@ -69,8 +70,7 @@ function BaseInteractableChatRow({
break;
}
swipeableRef.current?.close();
- },
- [model, isMuted]
+ }
);
const renderRightActions = useCallback(
@@ -149,26 +149,28 @@ function BaseRightActions({
const handlePin = useBoundHandler('pin', handleAction);
const handleMute = useBoundHandler('mute', handleAction);
- const containerStyle = useAnimatedStyle(
+ const containerWidthStyle = useAnimatedStyle(
() => ({
width: Math.abs(drag.value),
- flexDirection: 'row',
- overflow: 'hidden',
}),
[drag]
);
+ const containerStyle: StyleProp = useMemo(() => {
+ return [
+ containerWidthStyle,
+ {
+ flexDirection: 'row',
+ overflow: 'hidden',
+ borderBottomRightRadius: getTokenValue('$m', 'radius'),
+ borderTopRightRadius: getTokenValue('$m', 'radius'),
+ },
+ ] as const;
+ }, [containerWidthStyle]);
+
return (
-
+
void;
@@ -65,12 +65,11 @@ export function EditChannelScreenView({
justifyContent="space-between"
flex={1}
>
-
-
-
+
void;
goBack?: () => void;
}>) => {
+ const currentSession = useCurrentSession();
+ const isDisconnected =
+ !currentSession || currentSession.isReconnecting === true;
const { canUpload } = useAttachmentContext();
if (isEditing) {
return (
@@ -125,7 +129,7 @@ export const MessageInputContainer = ({
{children}
(
const editor = useEditorBridge({
customSource: editorHtml,
+ // setting autofocus to true if we have editPost here doesn't seem to work
+ // so we're using a useEffect to set it
autofocus: false,
bridgeExtensions,
});
@@ -332,6 +334,12 @@ export const MessageInput = forwardRef(
addAttachment,
]);
+ useEffect(() => {
+ if (editor && !shouldBlur && !editorState.isFocused && !!editingPost) {
+ editor.focus();
+ }
+ }, [shouldBlur, editor, editorState, editingPost]);
+
useEffect(() => {
if (editor && shouldBlur && editorState.isFocused) {
editor.blur();
diff --git a/packages/ui/src/components/MetaEditorScreenView.tsx b/packages/ui/src/components/MetaEditorScreenView.tsx
index 6dd0feee0f..575f08e533 100644
--- a/packages/ui/src/components/MetaEditorScreenView.tsx
+++ b/packages/ui/src/components/MetaEditorScreenView.tsx
@@ -1,14 +1,19 @@
import * as db from '@tloncorp/shared/dist/db';
import * as logic from '@tloncorp/shared/dist/logic';
-import { PropsWithChildren, useEffect, useMemo, useState } from 'react';
+import {
+ PropsWithChildren,
+ useCallback,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react';
import { useForm } from 'react-hook-form';
import { View, YStack } from 'tamagui';
-import { Button } from './Button';
import { EditablePofileImages } from './EditableProfileImages';
import { FormInput } from './FormInput';
-import { GenericHeader } from './GenericHeader';
import KeyboardAvoidingView from './KeyboardAvoidingView';
+import { ScreenHeader } from './ScreenHeader';
export function MetaEditorScreenView({
title,
@@ -50,17 +55,22 @@ export function MetaEditorScreenView({
}
}, [chat, modelLoaded, reset, defaultValues]);
- const saveButton = useMemo(() => {
- return ;
- }, [handleSubmit, onSubmit]);
+ const runSubmit = useCallback(
+ () => handleSubmit(onSubmit),
+ [handleSubmit, onSubmit]
+ );
return (
-
+ Save
+
+ }
/>
@@ -95,14 +105,6 @@ export function MetaEditorScreenView({
);
}
-export function SaveButton({ onPress }: { onPress: () => void }) {
- return (
-
- Save
-
- );
-}
-
export function getMetaWithDefaults(
chat: db.Group | db.Channel | null | undefined,
defaults = {
diff --git a/packages/ui/src/components/NotebookPost/NotebookPost.tsx b/packages/ui/src/components/NotebookPost/NotebookPost.tsx
index 7d37e932b2..70f0b9fdd2 100644
--- a/packages/ui/src/components/NotebookPost/NotebookPost.tsx
+++ b/packages/ui/src/components/NotebookPost/NotebookPost.tsx
@@ -44,7 +44,7 @@ export function NotebookPost({
showDate?: boolean;
viewMode?: 'activity';
isHighlighted?: boolean;
- size?: '$l' | '$s';
+ size?: '$l' | '$s' | '$xs';
}) {
const [showRetrySheet, setShowRetrySheet] = useState(false);
const handleLongPress = useCallback(() => {
@@ -92,6 +92,7 @@ export function NotebookPost({
post={post}
showDate={showDate}
showAuthor={showAuthor && viewMode !== 'activity'}
+ size={size}
/>
{viewMode !== 'activity' && (
@@ -135,11 +136,13 @@ function NotebookPostHeader({
showDate,
showAuthor,
post,
+ size,
...props
}: {
showAuthor?: boolean;
showDate?: boolean;
post: db.Post;
+ size?: '$l' | '$s' | '$xs';
} & ComponentProps) {
const formattedDate = useMemo(() => {
return makePrettyShortDate(new Date(post.receivedAt));
@@ -147,7 +150,7 @@ function NotebookPostHeader({
return (
- {post.image && (
+ {post.image && size !== '$xs' && (
,
+ size: {} as Record<'$s' | '$l' | '$xs', ViewStyle>,
} as const,
});
diff --git a/packages/ui/src/components/ParentAgnosticKeyboardAvoidingView.tsx b/packages/ui/src/components/ParentAgnosticKeyboardAvoidingView.tsx
new file mode 100644
index 0000000000..8784c59c36
--- /dev/null
+++ b/packages/ui/src/components/ParentAgnosticKeyboardAvoidingView.tsx
@@ -0,0 +1,90 @@
+import * as React from 'react';
+import {
+ Keyboard,
+ LayoutAnimation,
+ StyleProp,
+ StyleSheet,
+ View,
+ ViewProps,
+ ViewStyle,
+} from 'react-native';
+
+/**
+ * React Native's `KeyboardAvoidingView` does not work when its parent has a
+ * vertical offset within the screen (causes content to show below keyboard).
+ * This component works in those cases, but is more likely to have timing
+ * issues (since it uses async `measure` instead of `onLayout`).
+ *
+ * This component does not support Android - which isn't an issue for us,
+ * since we use `windowSoftInputMode="adjustResize"`.
+ */
+export function ParentAgnosticKeyboardAvoidingView({
+ children,
+ contentContainerStyle,
+ ...passedProps
+}: Omit & {
+ contentContainerStyle?: StyleProp;
+}) {
+ const containerRef = React.useRef>(null);
+ const [keyboardFrame, setKeyboardFrame] = React.useState<{
+ screenY: number;
+ } | null>(null);
+ const keyboardAnimationDurationRef = React.useRef(null);
+ const [containerFrame, setContainerFrame] = React.useState<{
+ pageY: number;
+ height: number;
+ } | null>(null);
+
+ const measure = React.useCallback(() => {
+ containerRef.current?.measure((_x, _y, _width, height, _pageX, pageY) => {
+ setContainerFrame({ pageY, height });
+ });
+ }, []);
+
+ React.useEffect(() => {
+ const sub = Keyboard.addListener('keyboardWillChangeFrame', (event) => {
+ keyboardAnimationDurationRef.current = event.duration;
+ measure();
+ setKeyboardFrame(event.endCoordinates);
+ });
+ return () => sub.remove();
+ }, [measure]);
+
+ const adjustmentPaddingBottom = React.useMemo(() => {
+ if (keyboardFrame == null || containerFrame == null) {
+ return 0;
+ }
+ return containerFrame.pageY + containerFrame.height - keyboardFrame.screenY;
+ }, [keyboardFrame, containerFrame]);
+
+ // Why `useLayoutEffect`?
+ // Using `useEffect` here causes animation to fail - likely because
+ // `useEffect` is not guaranteed to run before applying the layout, causing
+ // `configureNext` to fire after changing padding.
+ React.useLayoutEffect(() => {
+ const duration = keyboardAnimationDurationRef.current;
+ if (duration == null) {
+ return;
+ }
+ LayoutAnimation.configureNext({
+ // We have to pass the duration equal to minimal accepted duration defined here: RCTLayoutAnimation.m
+ duration: duration > 10 ? duration : 10,
+ update: {
+ duration: duration > 10 ? duration : 10,
+ type: 'keyboard',
+ },
+ });
+ }, [adjustmentPaddingBottom]);
+
+ const combinedStyle = React.useMemo(() => {
+ return StyleSheet.compose(contentContainerStyle, {
+ paddingBottom: adjustmentPaddingBottom,
+ });
+ }, [contentContainerStyle, adjustmentPaddingBottom]);
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/packages/ui/src/components/PostScreenView.tsx b/packages/ui/src/components/PostScreenView.tsx
index be41acfbbd..da1d975c60 100644
--- a/packages/ui/src/components/PostScreenView.tsx
+++ b/packages/ui/src/components/PostScreenView.tsx
@@ -67,7 +67,7 @@ export function PostScreenView({
onPressRetry: (post: db.Post) => void;
onPressDelete: (post: db.Post) => void;
negotiationMatch: boolean;
- headerMode?: 'default' | 'next';
+ headerMode: 'default' | 'next';
canUpload: boolean;
}) {
const [activeMessage, setActiveMessage] = useState(null);
@@ -128,6 +128,7 @@ export function PostScreenView({
goBack={goBack}
activeMessage={activeMessage}
setActiveMessage={setActiveMessage}
+ headerMode={headerMode}
/>
) : null}
diff --git a/packages/ui/src/components/ProfileScreenView.tsx b/packages/ui/src/components/ProfileScreenView.tsx
index 73d4b32c51..d4e27fffc1 100644
--- a/packages/ui/src/components/ProfileScreenView.tsx
+++ b/packages/ui/src/components/ProfileScreenView.tsx
@@ -59,9 +59,7 @@ export function ProfileScreenView(props: Props) {
return (
<>
-
- Settings
-
+
void;
+ showSessionStatus?: boolean;
}>) => {
const { top } = useSafeAreaInsets();
+ const resolvedTitle = isLoading ? 'Loading…' : title;
+ const currentSession = useCurrentSession();
+ const textColor =
+ showSessionStatus === false
+ ? '$primaryText'
+ : currentSession?.isReconnecting || !currentSession
+ ? '$tertiaryText'
+ : '$primaryText';
return (
@@ -28,49 +47,91 @@ export const ScreenHeaderComponent = ({
paddingHorizontal="$2xl"
paddingVertical="$l"
>
- {typeof title === 'string' ? (
- isWeb ? (
- {title}
- ) : (
-
- {title}
-
- )
+ {typeof resolvedTitle === 'string' ? (
+
) : (
- title
+ resolvedTitle
)}
- {leftControls}
- {rightControls}
+
+ {backAction ? : null}
+ {leftControls}
+
+
+ {rightControls}
+
{children}
);
};
+const HeaderIconButton = styled(Icon, {
+ customSize: ['$3xl', '$2xl'],
+ borderRadius: '$m',
+ pressStyle: {
+ opacity: 0.5,
+ },
+});
+
+const HeaderTextButton = styled(Text, {
+ size: '$label/2xl',
+ paddingHorizontal: '$s',
+ pressStyle: {
+ opacity: 0.5,
+ },
+});
+
const HeaderBackButton = ({ onPress }: { onPress?: () => void }) => {
- return (
-
-
-
- );
+ return ;
};
-const HeaderTitle = styled(Text, {
+const HeaderTitleText = styled(Text, {
size: '$label/2xl',
- textAlign: 'left',
+ textAlign: 'center',
width: '100%',
+ paddingHorizontal: '$2xl',
+ numberOfLines: 1,
});
+function HeaderTitle({
+ title,
+ ...props
+}: {
+ title: string;
+} & ComponentProps) {
+ const hasMounted = useHasMounted();
+ const renderedTitle = {title};
+
+ return isWeb ? (
+ renderedTitle
+ ) : (
+
+ {renderedTitle}
+
+ );
+}
+function useHasMounted() {
+ const [hasMounted, setHasMounted] = useState(false);
+
+ useEffect(() => {
+ setHasMounted(true);
+ }, []);
+
+ return hasMounted;
+}
+
const HeaderControls = styled(XStack, {
position: 'absolute',
top: 0,
bottom: 0,
- gap: '$m',
+ gap: '$xl',
alignItems: 'center',
zIndex: 1,
variants: {
@@ -89,6 +150,8 @@ const HeaderControls = styled(XStack, {
export const ScreenHeader = withStaticProperties(ScreenHeaderComponent, {
Controls: HeaderControls,
- Title: HeaderTitle,
+ Title: HeaderTitleText,
BackButton: HeaderBackButton,
+ IconButton: HeaderIconButton,
+ TextButton: HeaderTextButton,
});
diff --git a/packages/ui/src/components/SearchBar.tsx b/packages/ui/src/components/SearchBar.tsx
index 7bf9fc74ff..4e9b9f7752 100644
--- a/packages/ui/src/components/SearchBar.tsx
+++ b/packages/ui/src/components/SearchBar.tsx
@@ -1,8 +1,8 @@
import { debounce } from 'lodash';
import { ComponentProps, useCallback, useMemo, useState } from 'react';
-import { Input as TInput, View } from 'tamagui';
-import { Circle } from 'tamagui';
+import { Circle, View, XStack } from 'tamagui';
+import { TextInput, TextInputWithIcon } from './Form';
import { Icon } from './Icon';
import { Input } from './Input';
@@ -10,13 +10,13 @@ export function SearchBar({
placeholder,
onChangeQuery,
debounceTime = 300,
- areaProps,
+ inputProps,
...rest
}: {
placeholder?: string;
onChangeQuery: (query: string) => void;
debounceTime?: number;
- areaProps?: ComponentProps;
+ inputProps?: ComponentProps;
} & ComponentProps) {
const [value, setValue] = useState('');
const debouncedOnChangeQuery = useMemo(
@@ -51,34 +51,34 @@ export function SearchBar({
flexDirection="column"
justifyContent="center"
alignItems="center"
+ {...rest}
>
-
-
-
-
-
-
-
- onTextChange('')}
- disabled={value === ''}
- opacity={value === '' ? 0 : undefined}
+
+ onTextChange('')}
+ disabled={value === ''}
+ opacity={value === '' ? 0 : undefined}
+ >
+
-
-
-
-
-
+
+
+
);
}
diff --git a/packages/ui/src/components/SectionList.tsx b/packages/ui/src/components/SectionList.tsx
index 4e3100c493..44c1aa330e 100644
--- a/packages/ui/src/components/SectionList.tsx
+++ b/packages/ui/src/components/SectionList.tsx
@@ -1,24 +1,23 @@
import { getRadius } from '@tamagui/get-token';
import { useCallback, useMemo } from 'react';
import {
- Platform,
SectionList,
SectionListData,
SectionListProps,
SectionListRenderItemInfo,
} from 'react-native';
import { View, styled, withStaticProperties } from 'tamagui';
-import { SizableText } from 'tamagui';
+
+import { Text } from './TextV2';
const SectionListHeaderFrame = styled(View, {
paddingHorizontal: '$l',
paddingVertical: '$m',
});
-const SectionListHeaderText = styled(SizableText, {
- size: '$s',
+const SectionListHeaderText = styled(Text, {
+ size: '$label/s',
color: '$secondaryText',
- lineHeight: Platform.OS === 'ios' ? 0 : undefined,
});
export const SectionListHeader = withStaticProperties(SectionListHeaderFrame, {
diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx
index dfe929d9ed..14d2eaf933 100644
--- a/packages/ui/src/components/UserProfileScreenView.tsx
+++ b/packages/ui/src/components/UserProfileScreenView.tsx
@@ -27,6 +27,7 @@ interface Props {
userId: string;
onBack: () => void;
connectionStatus: api.ConnectionStatus | null;
+ onPressGroup: (group: db.Group) => void;
}
export function UserProfileScreenView(props: Props) {
@@ -58,13 +59,19 @@ export function UserProfileScreenView(props: Props) {
? 'offline'
: 'online';
+ const onPressGroup = useCallback(
+ (group: db.Group) => {
+ props.onPressGroup(group);
+ },
+ [props]
+ );
+
return (
}
- >
- Profile
-
+ />
onPressGroup(group)}
>
@@ -287,7 +295,7 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) {
return (
-
+
void }) {
+function ProfileButton(props: {
+ title: string;
+ onPress: () => void;
+ hero?: boolean;
+}) {
return (
void }) {
paddingHorizontal="$2xl"
borderRadius="$2xl"
onPress={props.onPress}
+ hero={props.hero}
>
- {props.title}
+
+ {props.title}
+
);
}
diff --git a/packages/ui/src/components/draftInputs/ChatInput.tsx b/packages/ui/src/components/draftInputs/ChatInput.tsx
new file mode 100644
index 0000000000..fe01d11441
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/ChatInput.tsx
@@ -0,0 +1,51 @@
+import { SafeAreaView } from 'react-native-safe-area-context';
+
+import { MessageInput } from '../MessageInput';
+import { ParentAgnosticKeyboardAvoidingView } from '../ParentAgnosticKeyboardAvoidingView';
+import { DraftInputContext } from './shared';
+
+export function ChatInput({
+ draftInputContext,
+}: {
+ draftInputContext: DraftInputContext;
+}) {
+ const {
+ channel,
+ clearDraft,
+ editPost,
+ editingPost,
+ getDraft,
+ group,
+ send,
+ setEditingPost,
+ setShouldBlur,
+ shouldBlur,
+ storeDraft,
+ } = draftInputContext;
+ if (editingPost != null) {
+ return null;
+ }
+
+ return (
+
+
+
+
+
+ );
+}
diff --git a/packages/ui/src/components/draftInputs/DraftInputConnectedBigInput.tsx b/packages/ui/src/components/draftInputs/DraftInputConnectedBigInput.tsx
new file mode 100644
index 0000000000..996f0d7012
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/DraftInputConnectedBigInput.tsx
@@ -0,0 +1,76 @@
+import { Dispatch, SetStateAction } from 'react';
+import { AnimatePresence, View } from 'tamagui';
+
+import { BigInput } from '../BigInput';
+import { DraftInputContext } from './shared';
+
+/**
+ * `BigInput` set up for multiple kinds of draft inputs.
+ */
+export function DraftInputConnectedBigInput({
+ draftInputContext,
+ setShowBigInput,
+
+ /**
+ * Use this prop instead of unmounting the component to enable the default
+ * presence animation.
+ */
+ hidden = false,
+}: {
+ draftInputContext: DraftInputContext;
+ // TODO: I think this is only used to dismiss big input on send - remove and just dismiss in `onSent` callback
+ setShowBigInput: Dispatch>;
+ hidden?: boolean;
+}) {
+ const {
+ channel,
+ clearDraft,
+ editPost,
+ editingPost,
+ getDraft,
+ group,
+ send,
+ setEditingPost,
+ setShouldBlur,
+ shouldBlur,
+ storeDraft,
+ } = draftInputContext;
+
+ return (
+
+ {!hidden && (
+
+
+
+ )}
+
+ );
+}
diff --git a/packages/ui/src/components/draftInputs/GalleryInput.tsx b/packages/ui/src/components/draftInputs/GalleryInput.tsx
new file mode 100644
index 0000000000..cf456f5833
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/GalleryInput.tsx
@@ -0,0 +1,161 @@
+import { ImagePickerAsset } from 'expo-image-picker';
+import {
+ useCallback,
+ useEffect,
+ useImperativeHandle,
+ useMemo,
+ useState,
+} from 'react';
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
+import { View, YStack } from 'tamagui';
+
+import AddGalleryPost from '../AddGalleryPost';
+import { useRegisterChannelHeaderItem } from '../Channel/ChannelHeader';
+import GalleryImagePreview from '../Channel/GalleryImagePreview';
+import { FloatingActionButton } from '../FloatingActionButton';
+import { Icon } from '../Icon';
+import { MessageInput } from '../MessageInput';
+import { ParentAgnosticKeyboardAvoidingView } from '../ParentAgnosticKeyboardAvoidingView';
+import { ScreenHeader } from '../ScreenHeader';
+import { DraftInputConnectedBigInput } from './DraftInputConnectedBigInput';
+import { DraftInputContext } from './shared';
+
+export function GalleryInput({
+ draftInputContext,
+}: {
+ draftInputContext: DraftInputContext;
+}) {
+ const {
+ channel,
+ clearDraft,
+ draftInputRef,
+ editPost,
+ editingPost,
+ getDraft,
+ group,
+ onPresentationModeChange,
+ send,
+ setEditingPost,
+ setShouldBlur,
+ shouldBlur,
+ storeDraft,
+ headerMode,
+ } = draftInputContext;
+ const safeAreaInsets = useSafeAreaInsets();
+
+ const [showBigInput, setShowBigInput] = useState(false);
+ const [showAddGalleryPost, setShowAddGalleryPost] = useState(false);
+ const [isUploadingGalleryImage, setIsUploadingGalleryImage] = useState(false);
+
+ const handleGalleryPreviewClosed = useCallback(() => {
+ setIsUploadingGalleryImage(false);
+ }, []);
+ const handleGalleryImageSet = useCallback(
+ (assets?: ImagePickerAsset[] | null) => {
+ setIsUploadingGalleryImage(!!assets);
+ },
+ []
+ );
+
+ const isShowingImagePreview = !editingPost && isUploadingGalleryImage;
+
+ // Notify host when changing presentation mode
+ useEffect(() => {
+ const isFullscreen = showBigInput || isShowingImagePreview;
+ onPresentationModeChange?.(isFullscreen ? 'fullscreen' : 'inline');
+ }, [showBigInput, isShowingImagePreview, onPresentationModeChange]);
+
+ // Use big input when editing a post
+ const isEditingPost = editingPost != null;
+ useEffect(() => {
+ setShowBigInput(isEditingPost);
+ }, [isEditingPost]);
+
+ useRegisterChannelHeaderItem(
+ useMemo(
+ () =>
+ showBigInput ? null : (
+ setShowAddGalleryPost(true)}
+ />
+ ),
+ [showBigInput]
+ )
+ );
+
+ useImperativeHandle(draftInputRef, () => ({
+ exitFullscreen: () => {
+ setShowBigInput(false);
+ },
+ }));
+
+ return (
+ <>
+
+
+ {headerMode === 'next' &&
+ !showBigInput &&
+ !showAddGalleryPost &&
+ !isUploadingGalleryImage && (
+
+ setShowAddGalleryPost(true)}
+ icon={}
+ />
+
+ )}
+
+ {isShowingImagePreview && (
+
+
+
+ {
+ setIsUploadingGalleryImage(false);
+ }}
+ showInlineAttachments={false}
+ showAttachmentButton={false}
+ />
+
+
+ )}
+
+
+ >
+ );
+}
diff --git a/packages/ui/src/components/draftInputs/NotebookInput.tsx b/packages/ui/src/components/draftInputs/NotebookInput.tsx
new file mode 100644
index 0000000000..f7637239d2
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/NotebookInput.tsx
@@ -0,0 +1,89 @@
+import { useEffect, useImperativeHandle, useMemo, useState } from 'react';
+import {
+ SafeAreaView,
+ useSafeAreaInsets,
+} from 'react-native-safe-area-context';
+import { View } from 'tamagui';
+
+import { useRegisterChannelHeaderItem } from '../Channel/ChannelHeader';
+import { FloatingActionButton } from '../FloatingActionButton';
+import { Icon } from '../Icon';
+import { ParentAgnosticKeyboardAvoidingView } from '../ParentAgnosticKeyboardAvoidingView';
+import { ScreenHeader } from '../ScreenHeader';
+import { DraftInputConnectedBigInput } from './DraftInputConnectedBigInput';
+import { DraftInputContext } from './shared';
+
+export function NotebookInput({
+ draftInputContext,
+}: {
+ draftInputContext: DraftInputContext;
+}) {
+ const { draftInputRef, editingPost, onPresentationModeChange, headerMode } =
+ draftInputContext;
+ const safeAreaInsets = useSafeAreaInsets();
+ const [showBigInput, setShowBigInput] = useState(false);
+
+ // Notify host when presenting/dismissing big input
+ useEffect(() => {
+ onPresentationModeChange?.(showBigInput ? 'fullscreen' : 'inline');
+ }, [showBigInput, onPresentationModeChange]);
+
+ // Use big input when editing a post
+ const isEditingPost = editingPost != null;
+ useEffect(() => {
+ setShowBigInput(isEditingPost);
+ }, [isEditingPost]);
+
+ useRegisterChannelHeaderItem(
+ useMemo(
+ () =>
+ showBigInput ? null : (
+ setShowBigInput(true)}
+ />
+ ),
+ [showBigInput]
+ )
+ );
+
+ useImperativeHandle(draftInputRef, () => ({
+ exitFullscreen: () => {
+ setShowBigInput(false);
+ },
+ }));
+
+ return (
+
+
+
+
+ {headerMode === 'next' && !showBigInput && (
+
+ setShowBigInput(true)}
+ icon={}
+ />
+
+ )}
+
+
+ );
+}
diff --git a/packages/ui/src/components/draftInputs/index.ts b/packages/ui/src/components/draftInputs/index.ts
new file mode 100644
index 0000000000..1553fcfc4b
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/index.ts
@@ -0,0 +1,4 @@
+export type { DraftInputContext } from './shared';
+export { ChatInput } from './ChatInput';
+export { GalleryInput } from './GalleryInput';
+export { NotebookInput } from './NotebookInput';
diff --git a/packages/ui/src/components/draftInputs/shared.ts b/packages/ui/src/components/draftInputs/shared.ts
new file mode 100644
index 0000000000..d95efe7109
--- /dev/null
+++ b/packages/ui/src/components/draftInputs/shared.ts
@@ -0,0 +1,49 @@
+import * as db from '@tloncorp/shared/dist/db';
+import { JSONContent, Story } from '@tloncorp/shared/dist/urbit';
+import { Dispatch, SetStateAction } from 'react';
+
+export interface DraftInputHandle {
+ /**
+ * @deprecated
+ * We are using this to implement a weird navigation pattern where we present
+ * draft input in a modal-like presentation, and reuse the container screen's
+ * header back button to dismiss the "modal".
+ * This requires the containing screen to command the draft input to exit its "big input".
+ * We should move to implement the nav bar in the draft inputs themselves.
+ */
+ exitFullscreen: () => void;
+}
+
+/**
+ * Shared API for all draft inputs.
+ */
+export interface DraftInputContext {
+ channel: db.Channel;
+ clearDraft: () => void;
+ draftInputRef?: React.Ref;
+ editPost: (post: db.Post, content: Story) => Promise;
+ editingPost?: db.Post;
+ getDraft: () => Promise;
+ group: db.Group | null;
+ headerMode: 'default' | 'next';
+
+ /**
+ * Called when the draft input takes over the entire screen.
+ * (This is useful because `fullscreen` presentation currently reuses the
+ * same container as the channel contents - so when we enter
+ * `fullscreen`, the needs to hide its contents to make way for
+ * the input.)
+ */
+ onPresentationModeChange?: (
+ presentationMode: 'inline' | 'fullscreen'
+ ) => void;
+ send: (
+ content: Story,
+ channelId: string,
+ metadata?: db.PostMetadata
+ ) => Promise;
+ setEditingPost?: (update: db.Post | undefined) => void;
+ setShouldBlur: Dispatch>;
+ shouldBlur: boolean;
+ storeDraft: (content: JSONContent) => void;
+}
diff --git a/packages/ui/src/contexts/chatOptions.tsx b/packages/ui/src/contexts/chatOptions.tsx
index ec2ca8ba45..356ff6bd44 100644
--- a/packages/ui/src/contexts/chatOptions.tsx
+++ b/packages/ui/src/contexts/chatOptions.tsx
@@ -23,6 +23,7 @@ export type ChatOptionsContextValue = {
onPressChannelMeta: (channelId: string) => void;
onTogglePinned: () => void;
onPressLeave: () => Promise;
+ onSelectSort?: (sortBy: 'recency' | 'arranged') => void;
} | null;
const ChatOptionsContext = createContext(null);
@@ -45,6 +46,7 @@ type ChatOptionsProviderProps = {
onPressChannelMembers: (channelId: string) => void;
onPressChannelMeta: (channelId: string) => void;
onPressRoles: (groupId: string) => void;
+ onSelectSort?: (sortBy: 'recency' | 'arranged') => void;
};
export const ChatOptionsProvider = ({
@@ -80,6 +82,10 @@ export const ChatOptionsProvider = ({
}
}, [group]);
+ const onSelectSort = useCallback((sortBy: 'recency' | 'arranged') => {
+ db.storeChannelSortPreference(sortBy);
+ }, []);
+
const contextValue: ChatOptionsContextValue = {
pinned,
useGroup,
@@ -95,6 +101,7 @@ export const ChatOptionsProvider = ({
onTogglePinned,
onPressChannelMembers,
onPressChannelMeta,
+ onSelectSort,
};
return (
diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx
index fdf658531d..a81eea3b16 100644
--- a/packages/ui/src/index.tsx
+++ b/packages/ui/src/index.tsx
@@ -24,6 +24,7 @@ export * from './components/ChatOptionsSheet';
export * from './components/ContactBook';
export * from './components/ContactList';
export { default as ContactName } from './components/ContactName';
+export { useContactName } from './components/ContactNameV2';
export * from './components/ContactRow';
export * from './components/ContentReference';
export * from './components/CreateGroupView';
@@ -39,7 +40,6 @@ export * from './components/FloatingActionButton';
export * from './components/FormInput';
export * from './components/Form';
export * from './components/GalleryPost';
-export * from './components/GenericHeader';
export * from './components/GroupChannelsScreenView';
export * from './components/GroupMembersScreenView';
export * from './components/GroupPreviewSheet';
@@ -59,6 +59,7 @@ export * from './components/MessageInput/AttachmentPreviewList';
export * from './components/NavBarView';
export * from './components/Modal';
export * from './components/NavBar';
+export * from './components/ParentAgnosticKeyboardAvoidingView';
export * from './components/PostScreenView';
export * from './components/ProfileScreenView';
export * from './components/ProfileSheet';
diff --git a/patches/react-native-gesture-handler@2.18.1.patch b/patches/react-native-gesture-handler@2.18.1.patch
deleted file mode 100644
index c4df590303..0000000000
--- a/patches/react-native-gesture-handler@2.18.1.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff --git a/lib/module/components/Pressable/PressableProps.js b/lib/module/components/Pressable/PressableProps.js
-index c67a50450dcfa4e698dd8c78d0f56c7588925d6d..2060389e45fba2d5eb44ce7c456b0f9e02c72729 100644
---- a/lib/module/components/Pressable/PressableProps.js
-+++ b/lib/module/components/Pressable/PressableProps.js
-@@ -1,2 +1,3 @@
--export {};
-+const PressableProps = {};
-+export { PressableProps };
- //# sourceMappingURL=PressableProps.js.map
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 46cdb1febb..0bc0e15f4c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -39,9 +39,6 @@ patchedDependencies:
drizzle-orm@0.30.9:
hash: cegrec33e6f7d6ltk7vff5r7w4
path: patches/drizzle-orm@0.30.9.patch
- react-native-gesture-handler@2.18.1:
- hash: 3cmtvqiauuehrkeqz6qjuqgv4a
- path: patches/react-native-gesture-handler@2.18.1.patch
react-native-reanimated@3.8.1:
hash: n2blcrn244i77n7euhqt5mi2km
path: patches/react-native-reanimated@3.8.1.patch
@@ -92,7 +89,7 @@ importers:
version: 15.2.0
tsup:
specifier: ^8.0.1
- version: 8.0.1(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.35)(typescript@5.4.5)
+ version: 8.0.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.4.35)(typescript@5.4.5)
vitest:
specifier: ^1.2.2
version: 1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1)
@@ -122,7 +119,7 @@ importers:
version: 18.4.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
'@gorhom/bottom-sheet':
specifier: ^4.5.1
- version: 4.6.0(@types/react-native@0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(@types/react@18.2.55)(react-native-gesture-handler@2.18.1(patch_hash=3cmtvqiauuehrkeqz6qjuqgv4a)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ version: 4.6.0(@types/react-native@0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(@types/react@18.2.55)(react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
'@op-engineering/op-sqlite':
specifier: 5.0.5
version: 5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
@@ -153,6 +150,9 @@ importers:
'@react-navigation/native-stack':
specifier: ^6.9.13
version: 6.9.18(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@shopify/flash-list':
+ specifier: 1.6.3
+ version: 1.6.3(@babel/runtime@7.25.6)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
'@tanstack/react-query':
specifier: ~5.32.1
version: 5.32.1(react@18.2.0)
@@ -283,8 +283,8 @@ importers:
specifier: ^3.0.0
version: 3.0.0
react-native-gesture-handler:
- specifier: ~2.18.0
- version: 2.18.1(patch_hash=3cmtvqiauuehrkeqz6qjuqgv4a)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ specifier: ~2.20.0
+ version: 2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
react-native-get-random-values:
specifier: ^1.11.0
version: 1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))
@@ -344,8 +344,8 @@ importers:
specifier: ^0.73.5
version: 0.73.5(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)
'@tamagui/babel-plugin':
- specifier: 1.101.3
- version: 1.101.3(encoding@0.1.13)(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react@18.2.0)
'@testing-library/react-native':
specifier: ^12.5.2
version: 12.5.3(jest@29.7.0(@types/node@20.14.10)(babel-plugin-macros@3.1.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react-test-renderer@18.2.0(react@18.2.0))(react@18.2.0)
@@ -476,8 +476,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tamagui/vite-plugin':
- specifier: 1.101.3
- version: 1.101.3(encoding@0.1.13)(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/react-query':
specifier: ^4.28.0
version: 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
@@ -1020,8 +1020,8 @@ importers:
specifier: ^6.1.7
version: 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
'@tamagui/vite-plugin':
- specifier: 1.101.3
- version: 1.101.3(encoding@0.1.13)(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/react-query':
specifier: ^4.28.0
version: 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
@@ -1665,7 +1665,7 @@ importers:
version: 0.20.17
tsup:
specifier: ^8.0.1
- version: 8.0.1(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.35)(typescript@5.4.5)
+ version: 8.0.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.4.35)(typescript@5.4.5)
typescript:
specifier: 5.4.5
version: 5.4.5
@@ -1688,14 +1688,14 @@ importers:
specifier: ^1.14.0
version: 1.14.0(react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
'@tamagui/animations-moti':
- specifier: 1.101.3
- version: 1.101.3(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))
+ specifier: ~1.112.12
+ version: 1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0)
'@tamagui/get-token':
- specifier: 1.101.3
- version: 1.101.3(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(react@18.2.0)
'@tamagui/image':
- specifier: 1.101.3
- version: 1.101.3(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(react@18.2.0)
'@tloncorp/editor':
specifier: workspace:*
version: link:../editor
@@ -1763,15 +1763,15 @@ importers:
specifier: ^3.0.4
version: 3.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
tamagui:
- specifier: 1.101.3
- version: 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ specifier: ~1.112.12
+ version: 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
urbit-ob:
specifier: ^5.0.1
version: 5.0.1
devDependencies:
'@tamagui/build':
- specifier: 1.101.3
- version: 1.101.3
+ specifier: ~1.112.12
+ version: 1.112.12(@swc/helpers@0.5.13)
packages:
@@ -2211,18 +2211,22 @@ packages:
resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.23.6':
- resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
- engines: {node: '>=6.9.0'}
-
'@babel/generator@7.25.0':
resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.25.6':
+ resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-annotate-as-pure@7.22.5':
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-annotate-as-pure@7.24.7':
+ resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-builder-binary-assignment-operator-visitor@7.22.15':
resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
engines: {node: '>=6.9.0'}
@@ -2301,6 +2305,10 @@ packages:
resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-plugin-utils@7.24.8':
+ resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-remap-async-to-generator@7.22.20':
resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
engines: {node: '>=6.9.0'}
@@ -2383,6 +2391,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.25.6':
+ resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3':
resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==}
engines: {node: '>=6.9.0'}
@@ -2552,6 +2565,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-jsx@7.24.7':
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4':
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
@@ -2864,6 +2883,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-react-jsx@7.25.2':
+ resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-react-pure-annotations@7.23.3':
resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==}
engines: {node: '>=6.9.0'}
@@ -2990,8 +3015,8 @@ packages:
resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==}
engines: {node: '>=6.9.0'}
- '@babel/template@7.22.15':
- resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+ '@babel/runtime@7.25.6':
+ resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
engines: {node: '>=6.9.0'}
'@babel/template@7.25.0':
@@ -3002,14 +3027,14 @@ packages:
resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.23.7':
- resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==}
- engines: {node: '>=6.9.0'}
-
'@babel/traverse@7.25.3':
resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==}
engines: {node: '>=6.9.0'}
+ '@babel/traverse@7.25.6':
+ resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.17.0':
resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
engines: {node: '>=6.9.0'}
@@ -3022,6 +3047,10 @@ packages:
resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.25.6':
+ resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==}
+ engines: {node: '>=6.9.0'}
+
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -3118,9 +3147,9 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.21.5':
- resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
- engines: {node: '>=12'}
+ '@esbuild/aix-ppc64@0.24.0':
+ resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
+ engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -3136,9 +3165,9 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.21.5':
- resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
- engines: {node: '>=12'}
+ '@esbuild/android-arm64@0.24.0':
+ resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -3154,9 +3183,9 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.21.5':
- resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
- engines: {node: '>=12'}
+ '@esbuild/android-arm@0.24.0':
+ resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
+ engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -3172,9 +3201,9 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.21.5':
- resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
- engines: {node: '>=12'}
+ '@esbuild/android-x64@0.24.0':
+ resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -3190,9 +3219,9 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.21.5':
- resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
- engines: {node: '>=12'}
+ '@esbuild/darwin-arm64@0.24.0':
+ resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -3208,9 +3237,9 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.21.5':
- resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
- engines: {node: '>=12'}
+ '@esbuild/darwin-x64@0.24.0':
+ resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -3226,9 +3255,9 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.21.5':
- resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
- engines: {node: '>=12'}
+ '@esbuild/freebsd-arm64@0.24.0':
+ resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -3244,9 +3273,9 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.21.5':
- resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
- engines: {node: '>=12'}
+ '@esbuild/freebsd-x64@0.24.0':
+ resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -3262,9 +3291,9 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.21.5':
- resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
- engines: {node: '>=12'}
+ '@esbuild/linux-arm64@0.24.0':
+ resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -3280,9 +3309,9 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
+ '@esbuild/linux-arm@0.24.0':
+ resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
+ engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -3298,9 +3327,9 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.21.5':
- resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
- engines: {node: '>=12'}
+ '@esbuild/linux-ia32@0.24.0':
+ resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
+ engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -3316,9 +3345,9 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.21.5':
- resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
- engines: {node: '>=12'}
+ '@esbuild/linux-loong64@0.24.0':
+ resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
+ engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -3334,9 +3363,9 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.21.5':
- resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
- engines: {node: '>=12'}
+ '@esbuild/linux-mips64el@0.24.0':
+ resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
+ engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -3352,9 +3381,9 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.21.5':
- resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
- engines: {node: '>=12'}
+ '@esbuild/linux-ppc64@0.24.0':
+ resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
+ engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -3370,9 +3399,9 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.21.5':
- resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
- engines: {node: '>=12'}
+ '@esbuild/linux-riscv64@0.24.0':
+ resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
+ engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -3388,9 +3417,9 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.21.5':
- resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
- engines: {node: '>=12'}
+ '@esbuild/linux-s390x@0.24.0':
+ resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
+ engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -3406,9 +3435,9 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.21.5':
- resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
- engines: {node: '>=12'}
+ '@esbuild/linux-x64@0.24.0':
+ resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [linux]
@@ -3424,12 +3453,18 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.21.5':
- resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
- engines: {node: '>=12'}
+ '@esbuild/netbsd-x64@0.24.0':
+ resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/openbsd-arm64@0.24.0':
+ resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
@@ -3442,9 +3477,9 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.21.5':
- resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
- engines: {node: '>=12'}
+ '@esbuild/openbsd-x64@0.24.0':
+ resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -3460,9 +3495,9 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.21.5':
- resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
- engines: {node: '>=12'}
+ '@esbuild/sunos-x64@0.24.0':
+ resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -3478,9 +3513,9 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.21.5':
- resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
- engines: {node: '>=12'}
+ '@esbuild/win32-arm64@0.24.0':
+ resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
+ engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -3496,9 +3531,9 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.21.5':
- resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
- engines: {node: '>=12'}
+ '@esbuild/win32-ia32@0.24.0':
+ resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
+ engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -3514,9 +3549,9 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.21.5':
- resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
- engines: {node: '>=12'}
+ '@esbuild/win32-x64@0.24.0':
+ resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
+ engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -3660,14 +3695,20 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
+ '@floating-ui/react-dom@2.1.2':
+ resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
'@floating-ui/react-native@0.10.6':
resolution: {integrity: sha512-/9tXRdwhPFUQhReb4XLWMClVDIi1620+pHDxfqPXXkRrH2cTIb9AJu3Cg7XszbXNArPdrPsB7OILrq92TOVVNg==}
peerDependencies:
react: '>=16.8.0'
react-native: '>=0.64.0'
- '@floating-ui/react@0.26.18':
- resolution: {integrity: sha512-enDDX09Jpi3kmhcXXpvs+fvRXOfBj1jUV2KF6uDMf5HjS+SOZJzNTFUW71lKbFcxz0BkmQqwbvqdmHIxMq/fyQ==}
+ '@floating-ui/react@0.26.24':
+ resolution: {integrity: sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
@@ -3675,6 +3716,9 @@ packages:
'@floating-ui/utils@0.2.3':
resolution: {integrity: sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww==}
+ '@floating-ui/utils@0.2.8':
+ resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
+
'@gar/promisify@1.1.3':
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
@@ -3869,15 +3913,9 @@ packages:
'@jridgewell/source-map@0.3.5':
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
- '@jridgewell/sourcemap-codec@1.4.14':
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
-
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- '@jridgewell/trace-mapping@0.3.18':
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
-
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
@@ -3891,7 +3929,7 @@ packages:
react: '>=16.x.x'
react-native: '>=0.62.x'
react-native-gesture-handler: '>=2.x.x'
- react-native-reanimated: 3.10.1
+ react-native-reanimated: '>=2.x.x'
'@microsoft/applicationinsights-web-snippet@1.1.2':
resolution: {integrity: sha512-qPoOk3MmEx3gS6hTc1/x8JWQG5g4BvRdH7iqZMENBsKCL927b7D7Mvl19bh3sW9Ucrg1fVrF+4hqShwQNdqLxQ==}
@@ -4933,6 +4971,13 @@ packages:
'@segment/loosely-validate-event@2.0.0':
resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==}
+ '@shopify/flash-list@1.6.3':
+ resolution: {integrity: sha512-XM2iu4CeD9SOEUxaGG3UkxfUxGPWG9yacga1yQSgskAjUsRDFTsD3y4Dyon9n8MfDwgrRpEwuijd+7NeQQoWaQ==}
+ peerDependencies:
+ '@babel/runtime': '*'
+ react: '*'
+ react-native: '*'
+
'@sideway/address@4.1.5':
resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
@@ -5035,71 +5080,71 @@ packages:
peerDependencies:
'@svgr/core': '*'
- '@swc/core-darwin-arm64@1.4.16':
- resolution: {integrity: sha512-UOCcH1GvjRnnM/LWT6VCGpIk0OhHRq6v1U6QXuPt5wVsgXnXQwnf5k3sG5Cm56hQHDvhRPY6HCsHi/p0oek8oQ==}
+ '@swc/core-darwin-arm64@1.7.26':
+ resolution: {integrity: sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@swc/core-darwin-x64@1.4.16':
- resolution: {integrity: sha512-t3bgqFoYLWvyVtVL6KkFNCINEoOrIlyggT/kJRgi1y0aXSr0oVgcrQ4ezJpdeahZZ4N+Q6vT3ffM30yIunELNA==}
+ '@swc/core-darwin-x64@1.7.26':
+ resolution: {integrity: sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
- '@swc/core-linux-arm-gnueabihf@1.4.16':
- resolution: {integrity: sha512-DvHuwvEF86YvSd0lwnzVcjOTZ0jcxewIbsN0vc/0fqm9qBdMMjr9ox6VCam1n3yYeRtj4VFgrjeNFksqbUejdQ==}
+ '@swc/core-linux-arm-gnueabihf@1.7.26':
+ resolution: {integrity: sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@swc/core-linux-arm64-gnu@1.4.16':
- resolution: {integrity: sha512-9Uu5YlPbyCvbidjKtYEsPpyZlu16roOZ5c2tP1vHfnU9bgf5Tz5q5VovSduNxPHx+ed2iC1b1URODHvDzbbDuQ==}
+ '@swc/core-linux-arm64-gnu@1.7.26':
+ resolution: {integrity: sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/core-linux-arm64-musl@1.4.16':
- resolution: {integrity: sha512-/YZq/qB1CHpeoL0eMzyqK5/tYZn/rzKoCYDviFU4uduSUIJsDJQuQA/skdqUzqbheOXKAd4mnJ1hT04RbJ8FPQ==}
+ '@swc/core-linux-arm64-musl@1.7.26':
+ resolution: {integrity: sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/core-linux-x64-gnu@1.4.16':
- resolution: {integrity: sha512-UUjaW5VTngZYDcA8yQlrFmqs1tLi1TxbKlnaJwoNhel9zRQ0yG1YEVGrzTvv4YApSuIiDK18t+Ip927bwucuVQ==}
+ '@swc/core-linux-x64-gnu@1.7.26':
+ resolution: {integrity: sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/core-linux-x64-musl@1.4.16':
- resolution: {integrity: sha512-aFhxPifevDTwEDKPi4eRYWzC0p/WYJeiFkkpNU5Uc7a7M5iMWPAbPFUbHesdlb9Jfqs5c07oyz86u+/HySBNPQ==}
+ '@swc/core-linux-x64-musl@1.7.26':
+ resolution: {integrity: sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/core-win32-arm64-msvc@1.4.16':
- resolution: {integrity: sha512-bTD43MbhIHL2s5QgCwyleaGwl96Gk/scF2TaVKdUe4QlJCDV/YK9h5oIBAp63ckHtE8GHlH4c8dZNBiAXn4Org==}
+ '@swc/core-win32-arm64-msvc@1.7.26':
+ resolution: {integrity: sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@swc/core-win32-ia32-msvc@1.4.16':
- resolution: {integrity: sha512-/lmZeAN/qV5XbK2SEvi8e2RkIg8FQNYiSA8y2/Zb4gTUMKVO5JMLH0BSWMiIKMstKDPDSxMWgwJaQHF8UMyPmQ==}
+ '@swc/core-win32-ia32-msvc@1.7.26':
+ resolution: {integrity: sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
- '@swc/core-win32-x64-msvc@1.4.16':
- resolution: {integrity: sha512-BPAfFfODWXtUu6SwaTTftDHvcbDyWBSI/oanUeRbQR5vVWkXoQ3cxLTsDluc3H74IqXS5z1Uyoe0vNo2hB1opA==}
+ '@swc/core-win32-x64-msvc@1.7.26':
+ resolution: {integrity: sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@swc/core@1.4.16':
- resolution: {integrity: sha512-Xaf+UBvW6JNuV131uvSNyMXHn+bh6LyKN4tbv7tOUFQpXyz/t9YWRE04emtlUW9Y0qrm/GKFCbY8n3z6BpZbTA==}
+ '@swc/core@1.7.26':
+ resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==}
engines: {node: '>=10'}
peerDependencies:
- '@swc/helpers': ^0.5.0
+ '@swc/helpers': '*'
peerDependenciesMeta:
'@swc/helpers':
optional: true
@@ -5110,11 +5155,11 @@ packages:
'@swc/helpers@0.5.1':
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
- '@swc/helpers@0.5.10':
- resolution: {integrity: sha512-CU+RF9FySljn7HVSkkjiB84hWkvTaI3rtLvF433+jRSBL2hMu3zX5bGhHS8C80SM++h4xy8hBSnUHFQHmRXSBw==}
+ '@swc/helpers@0.5.13':
+ resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
- '@swc/types@0.1.6':
- resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==}
+ '@swc/types@0.1.12':
+ resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==}
'@tailwindcss/aspect-ratio@0.4.2':
resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==}
@@ -5131,348 +5176,456 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
- '@tamagui/accordion@1.101.3':
- resolution: {integrity: sha512-S35DtOv/l7uCMeBMxEQnxGHmwUIIhugPns4WJ0dH0l365g//zE3o5lGdjYV25za6ReGDBUUUK/6NnDDJX4j6Kw==}
+ '@tamagui/accordion@1.112.12':
+ resolution: {integrity: sha512-bJsPm3GcyLL9HSnt6023s0o1nSZ/pR5DnqHrKff50nGQv87azsEd+N7UfrGlKZAfjRgb6YZAJj4O6EgcCBrX/w==}
+ peerDependencies:
+ react: '*'
- '@tamagui/adapt@1.101.3':
- resolution: {integrity: sha512-xUsitRP/kT+oGdj3DBpVQTkZw2/d1WRFPq8qgMJFDKKtaRhEk+ZKk0WwuD5VTib366raNqDeUEIPjpdwtgfzvA==}
+ '@tamagui/adapt@1.112.12':
+ resolution: {integrity: sha512-kwMsduoBRF8CgzdSV48gga6UEs8swY4tZnIA3npoK5IbQkCHuE9FqX7g0mka8EjPMhF9WTg2La5/z68CgWBduw==}
- '@tamagui/alert-dialog@1.101.3':
- resolution: {integrity: sha512-DIOdrtJyL01H6Y1ADlVWssK0Ewf/HOGgRTvmSpvPx5bd7fIyaY62JULezIq09T4Wy8G6mRMug43KfzE8c1G4+w==}
+ '@tamagui/alert-dialog@1.112.12':
+ resolution: {integrity: sha512-7GloAZ5S3iEzKVN++PkTzzYvcWRpI/gGlQhw9AuyGm+GKCt9Ff97+0YAC9NQI2O1epafzXjn9/hdmTk1hEoQ1Q==}
+ peerDependencies:
+ react: '*'
- '@tamagui/animate-presence@1.101.3':
- resolution: {integrity: sha512-Cey5jFDHvtDk2tBEmXbbV6+iWsVSQp3BPs6aMSmwxZtHnjy72Wml11g717j8flOVnGXe4yzrKMjGG3YK69/vOA==}
+ '@tamagui/animate-presence@1.112.12':
+ resolution: {integrity: sha512-f5Vf4HXiCDb4fbbutQhUYKrIDuDaQM6fnqoQVJm+NbBnpVsj54aBLP+GXGzMPcWjSNB6DCH2Rez2ztyL7j01UA==}
- '@tamagui/animate@1.101.3':
- resolution: {integrity: sha512-DYDXi5CRoN5HWwChRcz/p7NuKOPBzdfHxXmCujBiup+rfIPQbhvZj0sS7M+pKqJAe5UfDYevrI/CsS4u+DJ5jQ==}
+ '@tamagui/animate@1.112.12':
+ resolution: {integrity: sha512-9FAGebvmukqOnhRO3Nd5PyUuLVCJmvM9M+g7XwwVRh38E2HNsk2eTyxt2BwsvvYV6CGN25wmWmR1pQtJ8rbl3w==}
- '@tamagui/animations-css@1.101.3':
- resolution: {integrity: sha512-Rfidmg6xEuU6+uE+oCmCrZpbaxxzTsbWy6TjLsAmeBcahodICHVciu+vl2EjGpIbZ0zWXzutlhmH9Rlgss1sEw==}
+ '@tamagui/animations-css@1.112.12':
+ resolution: {integrity: sha512-0mAZbo2ZjpmK3394CwHfNA8bmBJXac32Ao5XmzOXWUJdJmibTFfgdsSyeo99zxj4UK6wKhailLz56P4nJelWhg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/animations-moti@1.101.3':
- resolution: {integrity: sha512-OdN8KY5fsPmRRijwkMOHFqXlRdCoOkxQR7hQtoJnkr40nP9eIXx66UTmpD+ab1Gmg8d2zUN9UACEXb1NTHgrYQ==}
+ '@tamagui/animations-moti@1.112.12':
+ resolution: {integrity: sha512-CTZww/9iruyZNYC/t8moYfcaNB/y6KcS/lP8uEZu4bUZ9mer2LrPqyvvkKnbe7r4aJCkV3oeLZQ58m9POM+l6g==}
peerDependencies:
moti: '*'
+ react: '*'
- '@tamagui/animations-react-native@1.101.3':
- resolution: {integrity: sha512-ir9hoNrgdTLFItJ1EdqAbUH7MFHnsrD/+bE5TcV7LKfAMp2X8NioY82pDSJwLcFtCPraQtWIode3dP3TshE9KA==}
+ '@tamagui/animations-react-native@1.112.12':
+ resolution: {integrity: sha512-AMM+8kXAbkAyXpCDuLNQBMD1cvLzSEgE5Keo4AHAkGE1qBZJzhXJB4aHMtpYD1IoaXnu/Uua+AuTq1Rh0GARAw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/aria-hidden@1.101.3':
- resolution: {integrity: sha512-AaPSkI56h+ynuUxn14/NoS7pv86OG6BzuA04PHtGoMR2bGLTbTdWBiR7BBhNGLbkvET7xQdaw13wQPJhoe2T4g==}
+ '@tamagui/aria-hidden@1.112.12':
+ resolution: {integrity: sha512-YpB2UgmqEfRYl2YWmsm9LZN29pgUtZV1AHECgu6f1+XCn25ufPIqI9ZtyIJbJ/I3n0CMkyv6Q9y34Ax1Bp2/jA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/avatar@1.101.3':
- resolution: {integrity: sha512-H4fOtocEtbCfkt3mV5HNY7/NU9D+yqBmVPqdmZM9G5yHkZyqu5ZpC928uFAR29pA905RF3tS36jEAukRzZLYew==}
+ '@tamagui/avatar@1.112.12':
+ resolution: {integrity: sha512-xDdePJB4aykJViRlhckdmOW9Zi2zLtoEUkoaeGJPL4aqBkfSh8kzuuwH8M7DO4vJ4mNUZNQnB/uvgnF8TyHOQA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/babel-plugin-fully-specified@1.101.3':
- resolution: {integrity: sha512-uYA6sp1kFb1a3QlN8CCn5ClSKd7rw2RzRXCctuLDeVS2bp/dnpgxMu05Sa7TKNGXsXTGP8KC6dfBTKo5lP1fQg==}
+ '@tamagui/babel-plugin-fully-specified@1.112.12':
+ resolution: {integrity: sha512-IeWEDDYcX0WR1FTCMfMLkpKSxWTy7UtOfNJLtiYdhYGS99ttYxU7VCBDEEkp1qY8TwD0wi4GVvqRY4t6o5GUZw==}
- '@tamagui/babel-plugin@1.101.3':
- resolution: {integrity: sha512-aa4IAxYAItvV10umpirg+XMpuLnBrxE+cgN+P9jvJY0sLi2BfA47rlPI47MUws1lQeK11NqB8M37O3F8Hsqnjg==}
+ '@tamagui/babel-plugin@1.112.12':
+ resolution: {integrity: sha512-ZbJenBHgCb3Av3BA9HMYTx79+6xg/E4OzWXCZ71kD+ong2IKwkN6/U4P/DHnrq1lvUUkOGPfCFdhdEdLbvlozA==}
- '@tamagui/build@1.101.3':
- resolution: {integrity: sha512-fZZV6SuGXq2wA84XjgiJO/yr4TMETkdWWN4+gD0WZ/OG/Xgs8tLy/XLb7Z1TItFwODz3gTAJI6mtL+Q00WukUw==}
+ '@tamagui/build@1.112.12':
+ resolution: {integrity: sha512-gVuZJl0rCGWzy0JLrdn5Niw4jqZk96bRAINVMOpmPNKCBXWKe/PmMxvB2dzOfM9rduxfNOlF/J/ggxhMMr5e+Q==}
hasBin: true
- '@tamagui/button@1.101.3':
- resolution: {integrity: sha512-xkDUMrawv3Gq83noIuSFZV99XU+0xS+GBWD/0l3DJgicwjHcklLCifeP6BRtjRZM69pKhCDe3N0BtOK/zLLWsg==}
+ '@tamagui/button@1.112.12':
+ resolution: {integrity: sha512-dK7g3O1+KfPgkiIoRdxR7W+hJNS41Pjt8RWi5l/u30MRqbcVrZZifWpgRguU9Lr0d2PQGNIK767HG3EEeOduzw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/card@1.101.3':
- resolution: {integrity: sha512-wkwai9scBF3RYIfKIgEmnjMJQZ32qpY5iixIzFH6KHTexIdPfcg/GbZ9Rs2rhWJ9r5OQJpDV4zbOF1hFyKkw8g==}
+ '@tamagui/card@1.112.12':
+ resolution: {integrity: sha512-PIfKvCfu3cqyidYytSQeKWBetHG0kCEbiQ7bxtFcyKQcwnIzrRub1CFCrohy5sETzGnm0xosTI7wi/plKjKHxg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/checkbox-headless@1.101.3':
- resolution: {integrity: sha512-jlhCz3+SWSaYJh+jDJoijvbZWtt22v3UCppFnVmigtk9w000LsHgpkVMhkiKHhnlicx8Mex9AB4TVFYJopAOkw==}
+ '@tamagui/checkbox-headless@1.112.12':
+ resolution: {integrity: sha512-hs1ZOxGVzHqmUK+EwFqehrCjZfeI6yYcNOvd8O9uDr0SLpABZCBbn32BF+SwhgOMZotbK0ae0pA2x+Tb3ueIDg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/checkbox@1.101.3':
- resolution: {integrity: sha512-1RT8nTTkE5BxfkA0fnn92HZyKQNi6pqkUYVlBFsA4CH+FamTs4n8uZrLmB/HMyigT4qYLdjnTemDSVc2SxvfFw==}
+ '@tamagui/checkbox@1.112.12':
+ resolution: {integrity: sha512-2W2xhquVqdV73J4d3ea6tkHs8Kg/z5hF7FI47t9t0xUVS6cLnGyGHqrY5c/kXHQM0T3Hgf+CAx5d2OnK5t1Kqg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/cli-color@1.101.3':
- resolution: {integrity: sha512-UiCDbBZGiq0tJ00m/hAZKQrg0k5WOtMpp3Ln8zsOqU7EC/r8bhELTH56GWemDE1ojw39YMo2t7B5vaJTYzpYZw==}
+ '@tamagui/cli-color@1.112.12':
+ resolution: {integrity: sha512-wTOUE9n6xKEJyWfj0asri0KGrYk9Yj2agbZhjG57KcR8RIbM02hoZ84Ljn3M43F8J8LxNRIti8s6aW6SnSJ1QA==}
- '@tamagui/collapsible@1.101.3':
- resolution: {integrity: sha512-Czf5bmQFu9HHidYio6m+avdkns6ZH8S02ePu33DV1in1F/enbaljkczxWgf8qSlzWaiDWhEKN25aZ7tqJZMU6A==}
+ '@tamagui/collapsible@1.112.12':
+ resolution: {integrity: sha512-nZFlnILNM0eo1EZ2tPywnPcLNcU/vq72+5dV9y8CdxRd/HUnO9JoU1+CyZ2ZEkky7k8eXivLdD7DuudSSr9qRg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/collection@1.101.3':
- resolution: {integrity: sha512-NJZEbcBunGRBd0Ky5qji4iDOjC2C3Yq2xyZhE98p+iwLBXpKIH3aMJdax4a9MwYpVBUHMJOU8NafieMichLKMg==}
+ '@tamagui/collection@1.112.12':
+ resolution: {integrity: sha512-DCBwPiDMEOZLlTLiHAjavD6O6RXUz+3S3M+5yUFs5ANUVIcNjyIzIMbD+QLVoCGHKjjuCSyTqh9kuj+zGC7Vtg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/compose-refs@1.101.3':
- resolution: {integrity: sha512-p4T4ea0qDzRN8n7+pgvn5XkGcFZf+gxS/JAq2DCUupJSjhzA3ZTdVCoMTzEfiZDTYHfx0mj12z7V4PU3WObXNg==}
+ '@tamagui/compose-refs@1.112.12':
+ resolution: {integrity: sha512-xwijG1j+IAn5RmhQ+8KoiJ9HtQQyKjsOLWGLBvQ5MdN9NHH9hTt83W4FbY4tTdWOgwQ9KywP9doMvzK69SgBMg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/config-default@1.101.3':
- resolution: {integrity: sha512-VnKKZmdb8HFwhDRKVPHZggtWfjf/FQ5K3dbEnbu0BogvtU7V9OVGAJ/qYqoPD9Y+tfJrJ9keUcfpBt6io7dEWA==}
+ '@tamagui/config-default@1.112.12':
+ resolution: {integrity: sha512-j/wpsBsBF4hj9r778Kq7ANsgPh50bUVa7VLzWLe48FrV35J+MjafBGjwSPThLkFcPM8TRnHBFRPuKL4GAX4MuQ==}
- '@tamagui/constants@1.101.3':
- resolution: {integrity: sha512-nVppG0HaS7R0Tq3rAY0zVjcc5xszKcmCee4JRIJ8T6k4yPxW6Aqv8NJyAnS/5npET3ku72exVv9DeyU0WaJ07w==}
+ '@tamagui/constants@1.112.12':
+ resolution: {integrity: sha512-GkcqeF0m0ZHThPcAeDx9Z4qYGt7Cm1J72P8NQ7ax2WpilLlheGILRhrN9TUbKb0DXCz789GOjk+HnbksG1ihZw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/core@1.101.3':
- resolution: {integrity: sha512-dhCguFJd/gfvULHBFh2OQPs8KVeMHbcBuY0WXeBIuU4h088QtNG5U0pgrwqHa05yuV4LirpIJc9y7j0OePqlBg==}
+ '@tamagui/core@1.112.12':
+ resolution: {integrity: sha512-s6GbHi0c2HgaFm/LOVuMIalb2ntXmSk9C+tsKFgwK6tg6k6w2qhWvrR05Gfm3IUN19Yb9X2VBqnXOzICwjaf+w==}
- '@tamagui/create-context@1.101.3':
- resolution: {integrity: sha512-b7j+kOXr7P5bo91Jrt3f0oHj1IDzacg200fwGivFm5u30o7g/ZF+o4kQYoWTFe5mhbHT3NQbjIiPM2lt0B9u8A==}
+ '@tamagui/create-context@1.112.12':
+ resolution: {integrity: sha512-OkWlIKLOudQ93r4vM1yXUeEUU2lJ+steJvsrEatTfxnaMW4flpTaFxK6UrG8rrfGrPKMWJecSzSwPD5RctCftg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/create-theme@1.101.3':
- resolution: {integrity: sha512-YFZUyAduxyrQ33wAewFT1cos5mgaRnCItetdHC5g+R8TpwEpSzfC+1e9t+ZBbWDP48usEp9euEnm3MbxpDqp6w==}
+ '@tamagui/create-theme@1.112.12':
+ resolution: {integrity: sha512-EVsV2UfihuGS8ThIQtUNAkft1+7nfABE8hHMiIm4djx2p/OOvJPy8u8oB0rUacygtFHQqTQ5uoVHuCxz8yPMfA==}
- '@tamagui/cubic-bezier-animator@1.101.3':
- resolution: {integrity: sha512-l7KuR1pOiKbe1N7cW08U7t0LxlAH0gA2f9XN8E5nMt3wftA7jLAE7FvbRPbaPXD4OPR2DwH/scWM8tY2i1SjYg==}
+ '@tamagui/cubic-bezier-animator@1.112.12':
+ resolution: {integrity: sha512-7M8iyfd5hFjwB4IlCjjuqP4rj6a61reLjaFuWLOCkEF+qOtlAhGPE8IJQgmlz8//RN/DrxsICXXvXuk9O5dmPg==}
- '@tamagui/dialog@1.101.3':
- resolution: {integrity: sha512-uVykx33T/sB6cFzVWA1XEgl7xxza0IhPxoLMKWaVpQk9ayf0ajknyJz1E4pXDI5orldfuq60AYiWmxA8FBOTpw==}
+ '@tamagui/dialog@1.112.12':
+ resolution: {integrity: sha512-/bIiV9ntGrYOKSwTNzFM2wBijYHUsd6xdy5c4NWLc/HWDWVERi+zCSbS2abT0I6kllvsOsVNz0eDEnh7UymM+g==}
peerDependencies:
react: '*'
- '@tamagui/dismissable@1.101.3':
- resolution: {integrity: sha512-LUrrtCCigaiDNbzWg4dP4BMz7nT0BqANJXL4986T2pQ/oYoZJZVKRU0pQmod9Z6Jdme0L0TpBSr7syiPQvuU0Q==}
+ '@tamagui/dismissable@1.112.12':
+ resolution: {integrity: sha512-DdKWky75Vu0HUfBcjKLo+KAI/oL0gfE8656Q/s4UX3gIx5DYZ2MrYKR72RUC2AsexnibP2yn1PWOMLLoOdDb2w==}
+ peerDependencies:
+ react: '*'
- '@tamagui/elements@1.101.3':
- resolution: {integrity: sha512-NM8acGgwUo9Fpkehd7HA4HsP6LBXJZLEyK46Z/WaPolWdR2deSY9C+HIa3QZ0ilaXEmXtYXMj+5lCstvVGQjYA==}
+ '@tamagui/elements@1.112.12':
+ resolution: {integrity: sha512-DULrW10o0KlP8dHN3O0oflGeswdTBWH3tQ9FW3sY2KCqjwVs3vwJM/2VS9eiMPSxeOv/UDS+trrcD3bIXFZfaQ==}
peerDependencies:
react: '*'
- '@tamagui/fake-react-native@1.101.3':
- resolution: {integrity: sha512-Qsp5NBd4f/RN/qxPIRzKZJ5UWHWbIoVyzZVOdg9gkEYmIo6ZLIx0heRtIsuLY1bAu1u5SwB/lX8LnX3chzXaEA==}
+ '@tamagui/fake-react-native@1.112.12':
+ resolution: {integrity: sha512-ZsGGq6w74VgdBzgQ0m7YyBibDXPdxJK1I3Z28HoO7mtRhSMRXl/u0jE+r/KAkquMz78n5JP+ZLDa/jaKfKqbhA==}
- '@tamagui/floating@1.101.3':
- resolution: {integrity: sha512-EoA0tiR/rD3PNPXuLZD96VsQLmPMhE2F+rT4ntuqx3ldUzI5xGeAKlQ8ziftWtdANZMnYYcBos8KFqrfUz2pew==}
+ '@tamagui/floating@1.112.12':
+ resolution: {integrity: sha512-dOi6vXUMKJRyxePq/JEglTM432HyxqwFVWCUV3GDEfsWNaWG1ntuYQs+uISKyVpfpAn7/ruQ8b+sqLqzY+URow==}
peerDependencies:
react: '*'
- '@tamagui/focus-scope@1.101.3':
- resolution: {integrity: sha512-5Tp+slG317idU51OO3u1TDshEYyux5vfmGaIMkszQQpEmeMQA1WTVqqK717Tfd2HySSO2K5d50bN51GYez640g==}
+ '@tamagui/focus-scope@1.112.12':
+ resolution: {integrity: sha512-MvRp3CP0mIUx5beiMtjZmMepWY3c/t86AgCR+tpzCFJJeY29nOaAofQpU7ZEgGM34+OlvJcNllEiigQsN8vWbA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/focusable@1.101.3':
- resolution: {integrity: sha512-jJVqQZAfjtqTJCkH7ayNLEMHW0KzB6tBONO2kOJD/0aPpmOqdshz1dPNYq/QCqOyeGVlyDHUakQ0SsASJlbxCw==}
+ '@tamagui/focusable@1.112.12':
+ resolution: {integrity: sha512-rr1xZQstxgvB0/71cqsV4awG5ZZ+A9krmbCkIwPYDQl8CJiX+5kCokqZyrVkeVrg2GRkmCnBJQtC+kcZt6D5mA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/font-size@1.101.3':
- resolution: {integrity: sha512-rlkPqnjXF0FMDCOhDxUrkSYyEbeXpYBvkiXlkfpZ9cT/p4jSoWpKliYt1VKQR4hsdKLjm8GT6luqSB5NaCKtgA==}
+ '@tamagui/font-size@1.112.12':
+ resolution: {integrity: sha512-/Y5K9ZobR69dzcBOMm+EIZfKaLlaEYqicZ0Zostr/2vfjf7oW1xE2b7KZiSo2gz8POUwKYY8ybbg4Z3bcknYkg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/form@1.101.3':
- resolution: {integrity: sha512-UphTCnNkJ0R0h6lTN9R3+agpHn57BS5nhJ6itGWdF15B3N8NDs+cUb1u8q0Muu7psGShUGNPYzssBiME2PT6NQ==}
+ '@tamagui/form@1.112.12':
+ resolution: {integrity: sha512-GFKqpqbxR2talj70E4hUNng4uT3kqiQ53mNso8S8UGdv3jb9jHByMNzsMNUqRvp8t+Gi97gvN4PlhdXcb2/5BA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/generate-themes@1.101.3':
- resolution: {integrity: sha512-T+PXN2ZxBhmc3l2XO8hOrFA5ZBn9LfMWYV80srPR4W1LHd/Zc+wX3uwVVjbLPpUEvssUFfGpG6Y09542Wo9xWg==}
+ '@tamagui/generate-themes@1.112.12':
+ resolution: {integrity: sha512-hSVjTGQ9fq5HOwnMB1NAhvEnVgrigQiQstlxxRWmHf9bfPioTcvxkhKbfD6xQIg7BzbhGxf567aNr5wT9adkSg==}
- '@tamagui/get-button-sized@1.101.3':
- resolution: {integrity: sha512-VQCy6RaioeIMcwH6HaWAmW743/kHwSxY3UvOcGPatB05ciiiSstAAKCB0bV98i/pyfCY/v/K4bKLxO3v6Eps/g==}
+ '@tamagui/get-button-sized@1.112.12':
+ resolution: {integrity: sha512-gIdHe65Wa05sef5zt9KY9jJ9nO22ZMivAauoyGS80HVRYacGoFFhJ+rEeQQmXdIdRa+Q+m9+4yjVyPgHDpXyhg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/get-font-sized@1.101.3':
- resolution: {integrity: sha512-4OtWJOeI2bnD/QUe8ap56JJ3wcVzuRowsyoruufTFJlEZef3IyZ5GhIjUQriEfoqLqiSpoJ3SaY6XXU86tykrg==}
+ '@tamagui/get-font-sized@1.112.12':
+ resolution: {integrity: sha512-zqNRrIKj9l5kbqGdXU4kuLNLIc/o4l8olusxbv7wRdt30HwIDit7hbVBcjgxx0qkzrEzzdAIo731mH9lxNOQCQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/get-token@1.101.3':
- resolution: {integrity: sha512-mU4yPbbmCbQqrHJS8HtCUdHLQlwfsY3V2hFOVp2/O7EGFKOKNI7UOY22T/elAaq2jhEDgaj6O5U1s35N42rdfw==}
+ '@tamagui/get-token@1.112.12':
+ resolution: {integrity: sha512-9y4JjQYoBbN8cV7TQ6T+YyH0RLLmVwNMUdTGfE2Orrs+MnpwIpVRhE2KTjIK60fZSIWDlKOYGshEm+wrZp79UA==}
peerDependencies:
react: '*'
- '@tamagui/group@1.101.3':
- resolution: {integrity: sha512-Jr2b7gpf9a3bRD/5LfcIm+FQqGW/we1Yh5BFbAVnogYwtBH88RW/pkAZ1jgsYrCPS78NE8nWIwZyrXeQdFEOJQ==}
+ '@tamagui/group@1.112.12':
+ resolution: {integrity: sha512-7OlX1x9MB/M8dz/54m4ChG6qz8YlR5gWZIIBvVHmgBxhhLwj5D71oHeOXLLiE3918/QHeyG19SMnvcWWX8RzBg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/helpers-node@1.101.3':
- resolution: {integrity: sha512-ZWXSeHHcxKkSb+IHweevnjCtH7r9jyDJ8meAPcdmkhUMuxtiz4+BZAHD/wOf1uHUTaSZF/o7mf1LylE6j4n+fA==}
+ '@tamagui/helpers-node@1.112.12':
+ resolution: {integrity: sha512-EABUdvWOe3LLnZKd++FrtNZy058GrTNhhs2GilswRIjwA2HLPDbcqGmdJwq5FWo7tBbvi5CW98fcVKINrI1uUg==}
- '@tamagui/helpers-tamagui@1.101.3':
- resolution: {integrity: sha512-S1nafjVnan27nQRnkGuw5+Hcy2NnATcMYnn9d7QHfnK41iHvGVVNMpnBoc/egS5zdJZ0Yw/p5qgPNpICj2FoCA==}
+ '@tamagui/helpers-tamagui@1.112.12':
+ resolution: {integrity: sha512-oXePJyQV5I6wC7ZUsJdDFacC7Cfeqgt+rwvpBwxtN0UXBY6H4J7G6CcGezJaA7ZOGgv9aMkTrDBlrPTF9PZF9w==}
peerDependencies:
react: '*'
- '@tamagui/helpers@1.101.3':
- resolution: {integrity: sha512-ertVEdjXUmkVRQA6/dHHG9P12ai7z6Upt+/N6Fguo84qcdlHVA2aSYshI3eOOatVjd4HOlNUpVHaqQ/JtuJboA==}
+ '@tamagui/helpers@1.112.12':
+ resolution: {integrity: sha512-OxnUIiaY27DPyZ0/N3RB4gqFGNr0yf3EUehjDLtTH9Hcpt1Z8ZVDXRrngdGd7p+jrktaXts5BWDelN3sXJiRWA==}
- '@tamagui/image@1.101.3':
- resolution: {integrity: sha512-n3ZoEpLEP9hD5QcJiKrKQL/2TKAO3GfgBSGC22Ph+BQrWVFOoG58N/7Xnzv2wHZOX7lKYPIeL7W7aHDDrz3vDg==}
+ '@tamagui/image@1.112.12':
+ resolution: {integrity: sha512-3O00UE6yaA8ZocD+VzWHVn9oLsJ/IsfAY8TS2IMZjL+rFrdzRfRCJOUMJJLV7ZvidUlgnWAWGY7INBUrq2XdsQ==}
peerDependencies:
react: '*'
- '@tamagui/label@1.101.3':
- resolution: {integrity: sha512-mQV6ZBmxZjGcua1NH69uCOb3s/Z4FDWFjJ2CLl28qAdbEu87TKK3iAvQjL+8l3yQ07YScmWuFzM2PFVCoMBwMg==}
+ '@tamagui/label@1.112.12':
+ resolution: {integrity: sha512-dyAB5DZhxq36ynvYnxwjA/ntLD7hyIP9/NAkip4dJLvheX+FNJKn28tCs/vEEvNCJ02FQ8Hy8/x6r3zd9rdDMw==}
peerDependencies:
react: '*'
react-native: '*'
- '@tamagui/linear-gradient@1.101.3':
- resolution: {integrity: sha512-16V37ZE1nRoFaElTDTxWWmy3OxEF0bqcomhrGKqr8H60mnQy8VnbDL7aJpbdKF3zPT1mMpxpDGTHsQGLeaPJLw==}
+ '@tamagui/linear-gradient@1.112.12':
+ resolution: {integrity: sha512-0UWaPTrQJZUHvga5qBJ3zJPlObi8ULcHU196l+WRmFhln8SJ3I7HVe9rp5a0SWNVIJ7dA2KrcS0AyA15K6uA+w==}
+ peerDependencies:
+ react: '*'
- '@tamagui/list-item@1.101.3':
- resolution: {integrity: sha512-9dtY1vjwcapJcAqDwQk5At/vpFqmT7HW0XCE02gL4LhMfyqSnL2wAPF9lKZlaDLkUGzDCRkDcxdLrPNwqchCyA==}
+ '@tamagui/list-item@1.112.12':
+ resolution: {integrity: sha512-LZ8sB08sfn+mJ06Y59He+e8aAIwVd9vxLsBYOyN2EOANTDNJomkrfCzrPG+4HrtbxooIlZ3uBKmAryeb+UA7hQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/normalize-css-color@1.101.3':
- resolution: {integrity: sha512-F10Ao6btHQnBJb5yHtqbZYnWDXoWWMluusPNyS6WkOCTXky8FGA7P1rUkXG/CD6g8l1A8CZ7WmBBsX4lkC/ICg==}
+ '@tamagui/normalize-css-color@1.112.12':
+ resolution: {integrity: sha512-r8KU0h0bmad5i0fWx9pVwYLXLnYQ0OJp7C70KmJtP751cp/6y8BK2OZTGeJUq5DjyQhIf8M4foLvsM6ZarBe+g==}
- '@tamagui/polyfill-dev@1.101.3':
- resolution: {integrity: sha512-ueolBx9xFmELDPIn9U2mlOmFAmdOIl4cVXF9t0fTK3hro81RHmJti18IGz8ljIOIvHFHLla7BsUOnPAniz7u5w==}
+ '@tamagui/polyfill-dev@1.112.12':
+ resolution: {integrity: sha512-puZRQoEQsBVUAnkFIhEWcjhCJeIazqOGxTKt5zSHG1DF6LRrZiY3qrrriaqTEFaZogW0lVLiFH21+3CLPg3kkQ==}
- '@tamagui/popover@1.101.3':
- resolution: {integrity: sha512-Zz0fRvRlPWphNsZa/MBHcZYv/cWqzm6yZzELv67vLnvGGnS6PYmTVOWIrgj4Q0JhziGi0j4wLxmfvaKf3AR9Cg==}
+ '@tamagui/popover@1.112.12':
+ resolution: {integrity: sha512-h4+1uFf4h/zFU2fG6fv5yJUNzqiQrkgPXiwsrd2QAAUccj96gdrafx/WRynr12RRFk2ANXCuKXr3atDlRVh//A==}
peerDependencies:
react: '*'
- '@tamagui/popper@1.101.3':
- resolution: {integrity: sha512-PpDqYdoellFXXsV7YfKlJegtBdZNSMEYnJGAJ7PpF/bCuiiWmmcmWRHoAlOP8gGzTx8/rPT4aitUM96ETgh6gQ==}
+ '@tamagui/popper@1.112.12':
+ resolution: {integrity: sha512-cb3y1SkqUBxx8kHqiU9N+zP5fSiMbGP8adof0dQS7yObH8Rprx4NWD8RzNMvKROOLsXpwK/Yn5dqLf4QiA6OUQ==}
peerDependencies:
react: '*'
- '@tamagui/portal@1.101.3':
- resolution: {integrity: sha512-Qi9xanmrk0Hrl3L/uj39Hg43l4rCctlbYw9v2W4JG4Wj1u2NldXGJ3mTDRZ+D2vZZGOmoNOd8nnK0qYpdJpSRQ==}
+ '@tamagui/portal@1.112.12':
+ resolution: {integrity: sha512-CkJ5hN0wofeXMGqMhG41NGB/O447t2GE61qPoQJ3bxvjq7dtnpmTcMbznbWcMwKwFnTIu38guo/k39xOocWtqg==}
peerDependencies:
react: '*'
- '@tamagui/progress@1.101.3':
- resolution: {integrity: sha512-kkxGLJCIXOEk87GxAyQJctsR+/1fPjKlVnGbPyBUYXsRpv58Fm//u7F/rQ5aDbm0sCf0RBW8VCuqlK9siRcXFQ==}
+ '@tamagui/progress@1.112.12':
+ resolution: {integrity: sha512-dNjUhSgKZpeudUAuzIg+BsmGLAZAeVTy9ZLT2yYbCsf31TRTPhbi8G3iv8djCSf2Gjzy/aBWhj43IXRddcuvZw==}
peerDependencies:
react: '*'
- '@tamagui/proxy-worm@1.101.3':
- resolution: {integrity: sha512-9pGPhOTy2JFbKpJwcaBcTeCLJxhqGyXymcRlkwQKSBKlDRCEsC1R76b1IEBdxDMXzIXtI0xkRa2aNMwd3IoOLw==}
+ '@tamagui/proxy-worm@1.112.12':
+ resolution: {integrity: sha512-+uCBd4OraEmdS2wnYzc3XzZyBnuf8ewKplgXEHF3vpj8jGbRgPybFMTuFcdgZ5rLltYpnJg9JKAJ3ZPizQX5OA==}
- '@tamagui/radio-group@1.101.3':
- resolution: {integrity: sha512-Qn/n38Ly2XxF0J6SSH+sZdISAoFfyFCpD6SnDoyBQBSSDlRcjIGCIRhmC4IdW4t8DBtHyW9xlqKoRyTb2LMxQg==}
+ '@tamagui/radio-group@1.112.12':
+ resolution: {integrity: sha512-eA1RnvbxKFgEwpU7W6fXGvnP9z8BvfeTf7PyfV65pAhtLI6EQMMju/kkt2KbNk51IcfmYJIb47wPtRAWqhh7jw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/radio-headless@1.101.3':
- resolution: {integrity: sha512-ALNPUnSZJLNau1Ad3AGtSBEOTqGj6miRwODqKfzfUUUQzL8bUySGKvplYs087BdqkU1a/7rb4kn/0gYdfGwQRw==}
+ '@tamagui/radio-headless@1.112.12':
+ resolution: {integrity: sha512-qXFfUdNCALesu4Irs6APq5ve4Be+MHd7kEiX4HCU7WjjtFJFiEx8kHtkBHiMi4XAnXV1kR1VOHmgo1QsYiBEqg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/react-native-media-driver@1.101.3':
- resolution: {integrity: sha512-52dnaY9gyS21rSKabP23pfC+C2Q2xf79zaAm2tV1rM1VSBkCBeR89ol3THk8XDlTftEAV6fRVTCQz9r+IT/1cw==}
+ '@tamagui/react-native-media-driver@1.112.12':
+ resolution: {integrity: sha512-mmJOahjLg43krV+y7wnDDWaJQQIQ1GW3jV4JbsKNJQEDlwXKMTcA/UO8L2MsVdWP8OtxX5Sg6p79OFUAnUNMpQ==}
peerDependencies:
react-native: '*'
- '@tamagui/react-native-svg@1.101.3':
- resolution: {integrity: sha512-/HOiFsCyEf79H1E+0BCte1x4godcGKJEKAv+crcoLKE4IWsbsgQuC8xsx+Dnv/cxuqKx0RqryP3yeA+CysVRiQ==}
+ '@tamagui/react-native-svg@1.112.12':
+ resolution: {integrity: sha512-ZLVdySFRrqwj4nqkxUSCC5IPCIVxRb9+JyZXdiVw444+bZ8ssfh5tu8iaPaltFkl2A41Xq69Y/217gi5Juw1sA==}
+
+ '@tamagui/react-native-use-pressable@1.112.12':
+ resolution: {integrity: sha512-JodPKfCanZR3hyn694rN22ExzPdINRJim63vZ5eKVnXnyTJ7ml/6JvzxlBgkozt3RBJjzUHm4Xha0JNwmG+law==}
+ peerDependencies:
+ react: '*'
+
+ '@tamagui/react-native-use-responder-events@1.112.12':
+ resolution: {integrity: sha512-vI4ORRAgfuiXTtSuEIbfcwsES9dy4Jqs9zdnD+vLII+5cdkjV9njM9AWS2kXnz+zvPdblXcIvaaH3hDOX14YeA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/react-native-use-pressable@1.101.3':
- resolution: {integrity: sha512-nhz23ImLaAtmkG/5GvSsCCnpoS3uUS5iSQiU6kqY1AB5UOtIjZzS+613lB24ap5gXjagpUVmzrtJcB3Czx852Q==}
+ '@tamagui/react-native-web-internals@1.112.12':
+ resolution: {integrity: sha512-+dOHO6NkNx7hW01alv4bgWc8D6nOQjdGDiowghsO4zvfZr27ABzsw7f+hzCwtFJBh0psOrMxJb1rcoYZYzUtNA==}
- '@tamagui/react-native-use-responder-events@1.101.3':
- resolution: {integrity: sha512-iMDAGggb2DflmxptMYNwDIj6/0bfAuNtcnQXlB1Ar/C4xfG6Ubc6LhfUyyH++50PcFxYVpxN0KMqnsWSAptMdQ==}
+ '@tamagui/react-native-web-lite@1.112.12':
+ resolution: {integrity: sha512-Bx5Yb7obxHqhm6G4bqCKSKHgPbqwWOvVFgjth+XP6m7UStu0i/TxKKmoGQeHhlVs6Y27p/JspD4nEKenkLJAGw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/remove-scroll@1.101.3':
- resolution: {integrity: sha512-chneqVAA2gozjrFkpHSWWZSlz0+lMiOsVoQI2ryr3tm/n3sG+5zI0Bh/i/M18o9YW8EBfymxqT0acWRmsevfag==}
+ '@tamagui/remove-scroll@1.112.12':
+ resolution: {integrity: sha512-YHtr/fZWz70c08U7yHXHJxWWspM4+OftHjyWufBniVgg+VJ6ymTt+UGGYOxkCLNm6SMecpQd0i1IobOLK6ehJg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/roving-focus@1.101.3':
- resolution: {integrity: sha512-aQLU8QUbnvY5vWYPx2XWq/Yl66xMlNsCsLWJgSp7jnWspJk7Z+6VD6h9O9Gq3pX4CrIChuWp2kzfjQfCgqjhCg==}
+ '@tamagui/roving-focus@1.112.12':
+ resolution: {integrity: sha512-WynoBCzXNSpkJzwmqVqffnshom5euDjzaZjGvcuM6icZMi2N71JhdauTkzGpn9mqsj14VijH2t+50rTnjqTV/g==}
+ peerDependencies:
+ react: '*'
- '@tamagui/scroll-view@1.101.3':
- resolution: {integrity: sha512-KeAZNlwqHMA+ubh332iUA8XD4DMvNGjEKscssUxs+vO6WPjhiHRsivM2/eMt120WLrIaedN3aqJ72DwjRNGugg==}
+ '@tamagui/scroll-view@1.112.12':
+ resolution: {integrity: sha512-YqLAWmE87YL+GmWEXTo3nPCEtbOM2BqF+NA/NctVFdjqzxy1nwjtPU4KQsOp6qLPk+dlS2CcyXaeT9iGdsYPlQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/select@1.101.3':
- resolution: {integrity: sha512-Ea8ewJoKYaGowJFHQot82sWG0ytWyfkdYkWPILyQLfGig5oM3PXys+NgsaSsjUfaD/OMOpoclPG+ePmxDL9xAA==}
+ '@tamagui/select@1.112.12':
+ resolution: {integrity: sha512-4QKrQBf50fNbsFBOfqDt51A2MFQRpatmEPrb7D/KEwPr/GgJSaojw27A8BFrcSsgDHOce9bpAmxr0xKqMQI8VA==}
peerDependencies:
react: '*'
- '@tamagui/separator@1.101.3':
- resolution: {integrity: sha512-OQbyYpKOaQluykmxdAe0Kbfq6dLdWXNaCCPCbl+ZJMXLpEX1PgyeMJYsbTum49f8e2vDu942lOgMAxCS3XfDBg==}
+ '@tamagui/separator@1.112.12':
+ resolution: {integrity: sha512-C1y0liH9hoEptGaE+4PocFisaocYUrLXQl81TGzxCYDz1/minEoTfOAoG/Q0kIHlTZozNa64X3I9x5maLdVtHg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/shapes@1.101.3':
- resolution: {integrity: sha512-IP25zk0keQTM3AI1OqHG8Ee/49Yot7IaIp7xz75E10Kd0/KXzTecm1Ei2Rd1vF9FcC43LcjTIpTiAwJyk3rB/w==}
+ '@tamagui/shapes@1.112.12':
+ resolution: {integrity: sha512-b585zMob96/vZZ0A+snH5WqTpDxDonzUNbEgVs01mNbtMA6ab1iI/oeJHGZzIGxNlj5rGztPLKmjx+wuh/ofTQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/sheet@1.101.3':
- resolution: {integrity: sha512-w0zP2RFecI1R7TW0PKkqfRZb3YFWlkm6KyS0l06saa4sXlbIDO4fzx18QQ3TdcvXPuctjlpUITLBBnv/b4AigA==}
+ '@tamagui/sheet@1.112.12':
+ resolution: {integrity: sha512-xfD7KeJ7BXxGoKIblFscNStmXkgq4CgrVn63sZrO/ar0Xg3km2B9O9P/xHlFNYHbaSwNXJxxkAm/xnGYn4Z4mQ==}
peerDependencies:
react: '*'
- '@tamagui/shorthands@1.101.3':
- resolution: {integrity: sha512-ADtfyBk+6JnS4xHQCWyEiVIn/jdtx4OZNxs5LLN4epUDYdTRem2w/xvV2uPPshMrqRRiMGYTYG4pPNTjBKRWlg==}
+ '@tamagui/shorthands@1.112.12':
+ resolution: {integrity: sha512-ei9uWmnszNFzi+9CBKx+v9pDe3XQuyweBQNolZxgAzRE/pLBkKMCfPZfK4xEaU8BgIwZBleg2iIf2LExH1IrTA==}
- '@tamagui/simple-hash@1.101.3':
- resolution: {integrity: sha512-yzRJXgzW1nxksCduzfZ03RjaFHZr3yzanaNUCUtQA6PFweIHnYw2UQTK26ZCWCSNjkrwVmL7RsB6h3WTjl/XUw==}
+ '@tamagui/simple-hash@1.112.12':
+ resolution: {integrity: sha512-G860Qc76HaxhPShNlcyifeMGJOqVD0brTQIQniv/+/8Zj12tSZezLvUVzt4XEWaGGt46VM8G4asM1ns0TEq3fg==}
- '@tamagui/slider@1.101.3':
- resolution: {integrity: sha512-RZS1miMe8ZOFK2HKh8GHHj+mFejBFKBrtvzLdSW00N5zKw5/wKRZISDOysfnitJOlU/fi+FB8duju6Oo6EAtAA==}
+ '@tamagui/slider@1.112.12':
+ resolution: {integrity: sha512-L7iW9ck2rep3sQQ8ads6v5iR3ocmmFX72zHxUmPtpEatPmBYcpzyPe8VPCf4NEH08wnNmi6k+F+Lfbsn+bgahg==}
peerDependencies:
react: '*'
- '@tamagui/stacks@1.101.3':
- resolution: {integrity: sha512-E28USMuMI3CWnTig8hNhq+2tYL0xqgzDV0l989z8PW5f+moCvE0e5HtVeN2qgwC8SutqwHrDHgL8o9ypnCQ1Zw==}
+ '@tamagui/stacks@1.112.12':
+ resolution: {integrity: sha512-dWag6I49tfjCbfMcFvQ7NsGMYGmvAy+++4HxoNFZU90DcJncjX2Ikz/5hFy9+Fe+Td8/JEVbxw5vYjD4W83Zig==}
+ peerDependencies:
+ react: '*'
- '@tamagui/static@1.101.3':
- resolution: {integrity: sha512-8Z6tYK5uh3eKxv4p+Xu5HtmsY+PoLd9PF4EEZ/dfEtby22vCmVJClH+ukt1ykCdB0ysgw6vFqoZSptBIl9w1lg==}
+ '@tamagui/start-transition@1.112.12':
+ resolution: {integrity: sha512-idb/Rm9Oex/7JorjHVh6MT299ipqz0G1Gvgek5n8keX+VamaRPqmCSK4MakHIDIUV4h6+sHFbhfKTJ85WvlN0w==}
+
+ '@tamagui/static@1.112.12':
+ resolution: {integrity: sha512-Vt8TV7CWbDypV3JklQ3TFacKkCIz7aOPq0A/nSs++4KM2/0YSoKth6s03o4uaWLunOcSqW0VdOx9FnMAEGtlTw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/switch-headless@1.101.3':
- resolution: {integrity: sha512-+d7cU9udDFIyV2C9DW32JXVjsHLEP40hNVCgq8z/WQJaVQ3f0BDosqr36QK7ey8lJ63olRGkNKB1OgUv7PXaZw==}
+ '@tamagui/switch-headless@1.112.12':
+ resolution: {integrity: sha512-JPirCNOIAvxsAaufXjgAhAGGWn8NLKyerW+AX0RcdW+lwuYnA5AMiAc37CNxQgEqxX6UGJgXulwePe/4l133Rw==}
peerDependencies:
react: '*'
- '@tamagui/switch@1.101.3':
- resolution: {integrity: sha512-ofKnkV02e3V7u7RvQpkld5Ks2Kep46JYm+Vv5WbS4PFQxdpfLR6J1NxJv+tyNOkdoAb2mG0TjsXf3T9Ax/0v5Q==}
+ '@tamagui/switch@1.112.12':
+ resolution: {integrity: sha512-2rR4lnJtgLTZjTn2ypSFAGuVPa3ikUaKiAVY3nlBx28hVHhYUHHN9Qr1plE/CQrlGGPK8aA4VcodpZsTHlVh+Q==}
peerDependencies:
react: '*'
- '@tamagui/tabs@1.101.3':
- resolution: {integrity: sha512-+2SW/kfQv6fmLuS/X2uT4sG3iubJ+4Bvhp1G+3MmcxtSdaIorofbCy8IuONSchNFPbTmCkM63n52iNgGnS878g==}
+ '@tamagui/tabs@1.112.12':
+ resolution: {integrity: sha512-SczlaOOW4VibC+YOppmQshSimuZe8qiXekvSaA9YEp/CYjfMORIy+Ck36qQW/vIUdrzxz/NADJd+4yuEzQuhBw==}
peerDependencies:
react: '*'
- '@tamagui/text@1.101.3':
- resolution: {integrity: sha512-kzBMpUcBrYbmhjTvcAO3z+K0XOJKmY4kSZMZf2UGkuetvCZMJA+k7RaQPrkkjx+6GsahIuXroHgasYz/8y0DiQ==}
+ '@tamagui/text@1.112.12':
+ resolution: {integrity: sha512-glGROJvrFEktWmoIsd1G5U06IuHC8vLY3MTLZg7Np3zF/cb64SIvfDTDA9SiFmCbOXNKTtk+9+SVpU73NqZz2Q==}
+ peerDependencies:
+ react: '*'
- '@tamagui/theme-builder@1.101.3':
- resolution: {integrity: sha512-PS9juD8yxO8r0h5A9F4+1ywmZ0G2iGIPLm6IbRj5z33cKL8Q4DfKWFdbo2RIwFoondkNG1dG5ObpHyYmkKvRqw==}
+ '@tamagui/theme-builder@1.112.12':
+ resolution: {integrity: sha512-EhYiUNGiRfqx9/URZlQRza/2t4S1dpKsjSthzA0arJhPv5H3wGmF1qw1XBS43wjTEy8X1hF+1fa+1zm8NLoYnA==}
- '@tamagui/theme@1.101.3':
- resolution: {integrity: sha512-UYFUiwBSuGuZ+Z7+lrjEATA53oNDgpJah3qQlcaMQ5mlx6fEXCMc6P4wpoihsQ5sjU3ik/4iCzVeShDa5iOUmg==}
+ '@tamagui/theme@1.112.12':
+ resolution: {integrity: sha512-6yqmMSZ5Pmt9A4uIdRSUH5s/GFWpA/B17+1XUlYLt0cajRx9bAzFdtHUGmL3iRnPIvAEhEJhUX1124nO6j7lSA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/timer@1.101.3':
- resolution: {integrity: sha512-chQEvSRnXHy9iJirxcf3D/z29b+YuMow2opyBZf8ce0IcCA8hOpQtqVmF6tvNcOSf2CE+UN+SLVglCWrnR0phg==}
+ '@tamagui/timer@1.112.12':
+ resolution: {integrity: sha512-/mH+iaPJfr91OShPL4cHnswbPv810+17JX/bLQmeeMo2Db4Nu3dMlf0CHdgxXHeL8jHdhWaC50U2Dj2ZmMxQqA==}
- '@tamagui/toggle-group@1.101.3':
- resolution: {integrity: sha512-oSfMCv4KHudXvRw7/6yGgB9unNxfmRfAO4C8oct6fjdrHQF6O4J2hsGzSOFCDw/w2sGE0cXIJ585L83YJH29gQ==}
+ '@tamagui/toggle-group@1.112.12':
+ resolution: {integrity: sha512-XwXZwk3NfEg/XanMmIDxv+MUIz8vlpbwiw5sRQVdEBRrAR8YYHppD8NhZUs7IUQ3kK3vThxNV4AV50h4n/JCVg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/tooltip@1.101.3':
- resolution: {integrity: sha512-IEwVOwoufUWGCPrY5AD8NkY84zri2yNsUNYHUnjsM/ywD2y1ljiu5t/htAPrcUvSgr+4r7uKPtFJ2LvP+ewMCQ==}
+ '@tamagui/tooltip@1.112.12':
+ resolution: {integrity: sha512-vhrUWfukNHfJPs2XPpj6fSMRI5hJkz55ii7Lp6Js6BdzCoYV+4N24thqcKgp3PCoR8riC5woKotmkV7c3/40oA==}
peerDependencies:
react: '*'
- '@tamagui/types@1.101.3':
- resolution: {integrity: sha512-CjPh6+Oyy7KVt5TRVxtqLrS/36GuvdrKYEHz7Zq1N4R8r3OwmjzUDiSCyJizLxD896DLiTMbDz9abAeDB5XWJA==}
+ '@tamagui/types@1.112.12':
+ resolution: {integrity: sha512-L/HgxcHwwnx0QV0f6aJFxIIUgRJ9WydDP8tBlvAropF0tinMSzqET8oMZ75/hVni/04vNrU1Mk+Ey12kERXvxg==}
- '@tamagui/use-callback-ref@1.101.3':
- resolution: {integrity: sha512-j0ToTzcrB+4qB9mTDhUBr6/0FYaFELeQmu9COAhbBYl0rTxB6ejgbKMEPKJ20DbGkywCtbCnk3EpqR3shmNtgQ==}
+ '@tamagui/use-callback-ref@1.112.12':
+ resolution: {integrity: sha512-A7OpBkPf+xOIa56cmsNlc/jhC07fURbQyMSlZMbGhEqNzkZ28je37XWMzaNuaNRY/hEdZHreE28Eu57jm3jm+Q==}
- '@tamagui/use-constant@1.101.3':
- resolution: {integrity: sha512-SbT5ZZTmB965VVY7dSvnpmy3+sw0cakmXkgLoV+L+olF1NgzCrd2HP+vgAd5hGRKYv7Aa/HQ3vP0LCxl4n0HEQ==}
+ '@tamagui/use-constant@1.112.12':
+ resolution: {integrity: sha512-USFmjsjh/PCuTSnhDydXVDW6lBzyH1CFtcnLy4Ivtx56MXJcEwCduBTX8CEB/GEpjMKrLMqqxBzR4iVITwupBg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-controllable-state@1.101.3':
- resolution: {integrity: sha512-ZD+KCuOeo2znqKgt6kVJxZJ8V4rz0jsmhnM88JA44NleV09tmEzd1Vu1uEu07w+CjYI4mQOX4suPGZAix+SZBQ==}
+ '@tamagui/use-controllable-state@1.112.12':
+ resolution: {integrity: sha512-EjfZpxn3kdfA9CzTavGhaCXEDqeFAP/0vUWGHMwucCDm+Ahqhwht/KsVoWkN02FXyB1gcAvLSNKOob1KwyYv8A==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-debounce@1.101.3':
- resolution: {integrity: sha512-mhc9ZSFdHyD6hwGppBGux461fQnVAZBsIsKeCvQFdwO7iO58pnjynA6yt/jfIZyuDwIQK8vBXgvIGLYmGOv2LQ==}
+ '@tamagui/use-debounce@1.112.12':
+ resolution: {integrity: sha512-K2ECWHiocMo1xF/Xz03didOnD/w3nf0SgeLU3/IH+7tdRHhmCzIuBg0DAdFmO2+Mn5aEDafvojYzBdSIcSUbAw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-did-finish-ssr@1.101.3':
- resolution: {integrity: sha512-5MOehyuYLeNwwHM973YNKbV39XE2/LFsUJmrR/EgXgI5fJZa452IdICkOrhVh6T86yohURh9NHAEG6oybcdPrA==}
+ '@tamagui/use-did-finish-ssr@1.112.12':
+ resolution: {integrity: sha512-Avi9xdYZ79rgN08O3znaZypVlSEMq1vq07qmmly7XH237Q5dIVstZfJtcrkc9uvw9/RpecrYne8UmMuy1sM1KQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-direction@1.101.3':
- resolution: {integrity: sha512-Xc97wWkVSVNEWQS4utlo2wF501Oo5Jg65qo4ecZPsBfYQrXEaU7Uf/oo4Kk00OFrIdgJGYLKp9vKAeP4iB5U5Q==}
+ '@tamagui/use-direction@1.112.12':
+ resolution: {integrity: sha512-pRhZJhBUSrBjQfiTLmBNlJeVez3sFSfYDNhQmp8uCnJuv08J6oDyYfNXEXeKJZDJh8JKgIxD/XPUtNCsItPAQQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-escape-keydown@1.101.3':
- resolution: {integrity: sha512-A9rLCkLcemiiNYJqbAng0ZZVde1xUeaQFp2h0YUrTnEII9tZR8fmM4EGpTmMO7JWyH2wFYCt30N+klMs8at/2A==}
+ '@tamagui/use-escape-keydown@1.112.12':
+ resolution: {integrity: sha512-3WAa48LJts55TOgiHY/NmeOEq98MALzpjXsT96SLuSe4mtGtfhBwFca1EbwkA/ZHNMPt7lCMXufsxMqP+IW/lg==}
- '@tamagui/use-event@1.101.3':
- resolution: {integrity: sha512-ruB/ztONB7yxgYYIhOvWbWQeyjzFVcrgmgkwhzFn6UVbcw6Nq2SsFdeHAkzbF87yvp5Sd4ESVysRkO9VILP1Mw==}
+ '@tamagui/use-event@1.112.12':
+ resolution: {integrity: sha512-2Se3QquSRUcjomfVQHSrWFAEvBzSmSpNLiRIQIEFbevz1n7jE+u/AdKyQRH0KgU32urJ230Fyyij20conX8zjQ==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-force-update@1.101.3':
- resolution: {integrity: sha512-Smmd5wkzJ5noWuSRFuwxQcGnaPaDCInNcKeKLJDCWEj/9c0S7CFiOTW0109Ftv8dXAOmJp1t1pBWq8xk/KXy+A==}
+ '@tamagui/use-force-update@1.112.12':
+ resolution: {integrity: sha512-x4Vf5IOpNfeHjax/K7Ow7roMPAHcmw+K6EWdBG8uKpIVQjzQ3U+JlbAcmvzRWCNiwCqS8sd5k/GzttvRDgQtzA==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-keyboard-visible@1.101.3':
- resolution: {integrity: sha512-I8fSYOG3aW+x16yvuNRjL5k3mXax9xcazMVE0uiSJkGX2PQiTdy5YVeAEYrPhCvlgY7dWBnJGDjqPVYnhCtdwg==}
+ '@tamagui/use-keyboard-visible@1.112.12':
+ resolution: {integrity: sha512-7AJ67970G8bFCfeE+ubnWCxRDi1/Jzj8Dc1MwWq2VhUeF6lipQRgdhNzlaNAbSwR+h/1RgJ64XjK9xy1jKacGA==}
peerDependencies:
react: '*'
- '@tamagui/use-presence@1.101.3':
- resolution: {integrity: sha512-o1LxS/6J/vseO1fVh+vbTe6Y8iEXGHNnnGRQL5z0XfLacnL8936OaOnc0PvEKENvZE/7Tnxgo7a/QJpLvIDJsA==}
+ '@tamagui/use-presence@1.112.12':
+ resolution: {integrity: sha512-qpU6AvQMLubb9xqY6zKr0Ihk6PeJ3vxRjivoXCQL/JWBMe64TM9Tk1cYd7QkyuO3wN1ydLLgpSl7Dn3ANAdYBg==}
+ peerDependencies:
+ react: '*'
- '@tamagui/use-previous@1.101.3':
- resolution: {integrity: sha512-mL7uU1Gz9ztXNH3wAdrvMzw/j6mrllVE96UaCYPZoz+C8UvApFoTkesBhA4joikZ3i5y4aBXh3rCnMu/cQvNPw==}
+ '@tamagui/use-previous@1.112.12':
+ resolution: {integrity: sha512-WQdD8VhOBRNbrKJqnuI2/dYySOXWhzF+TkZHlA1OSQUfQSFFfWVFP16w9SKaVJOAnOL9sG4OuzxUSty+czEyRA==}
- '@tamagui/use-window-dimensions@1.101.3':
- resolution: {integrity: sha512-5UCVXIyJhi6OHydCDtr/tWYQKCCQVeha8x2Zz4cICL+PW8HXPTqJ2chZowZTZByGLJxDm9Z2IGaJ5sIn1M5+fw==}
+ '@tamagui/use-window-dimensions@1.112.12':
+ resolution: {integrity: sha512-znKOxIVIdGT2HuquNg3u8Ai0pNpJgWtljnkm8lPNKpkPrvQS4B/wsDd5+HOV3rr7s76lucXlPxPfMCuYOirW0Q==}
peerDependencies:
react: '*'
- '@tamagui/visually-hidden@1.101.3':
- resolution: {integrity: sha512-8kn02hWd7bvM6wYvpVME8BhLHLYaEFcqRktPzKYJUYraBRqKcMdd+QdqGZyqRH1vBf0qJeCWKJo9d3vcdUEkpg==}
+ '@tamagui/visually-hidden@1.112.12':
+ resolution: {integrity: sha512-nlR1NtXMJsgh3+WrXOyq6QWeefe9Uom7+AkhmEmpRHj/UlML6HQ5cV1pRgsASRvOpFhDIq1UvDWRrUB001IbRw==}
+ peerDependencies:
+ react: '*'
- '@tamagui/vite-plugin@1.101.3':
- resolution: {integrity: sha512-+FPYUuJyUEn4JFBcqEXYaeQhzmQqKfcIUzyyuEgXvy8KlCkT8iRTtu11tyAAqpPaivIous0aifQHRVwSBn47jA==}
+ '@tamagui/vite-plugin@1.112.12':
+ resolution: {integrity: sha512-iMIPmfcrJALKIQ9E5E8+RuE3d9+HKY9M0QZSmLjv+u7gdFUrnSYIOsaVfPFNPva5yvvKcnWOoIdnrRvpom/93A==}
- '@tamagui/web@1.101.3':
- resolution: {integrity: sha512-JQqyOxbDyDsQ+7ddsTI6zFGmhFKK2SOlTiFo4jXTGvPiooVSxZxkXufvXbsLp887VrdhnhOWZruFYGoCkorv2A==}
+ '@tamagui/web@1.112.12':
+ resolution: {integrity: sha512-6JqU0gyogmMX3ofPALyeVKAze1bshXm+1DSJ2PYJR8hNR5WQhikN0XBX1X65Iq9Fr3wcCg3ZKGKy/5X3H6enCg==}
'@tanstack/match-sorter-utils@8.8.4':
resolution: {integrity: sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==}
@@ -7833,17 +7986,22 @@ packages:
es6-weak-map@2.0.3:
resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==}
- esbuild-plugin-es5@2.1.0:
- resolution: {integrity: sha512-V0rsjIHa/pswTvqM/N+jrhhBAiOdp+Ppwmhk9HQKfpvhYRUKsdeImiHeFP0oWkc+GX7pFxJzmceaPJT1RA7jyQ==}
+ esbuild-plugin-es5@2.1.1:
+ resolution: {integrity: sha512-GRcHLUwjmrjxz9bN24ooTedrBrAVx7+F8M1aD7FFB+7RTHkt7FY8tHAQ9znyzsV16+95ojbTyJLY+HPO0OI7zA==}
engines: {node: '>=12.0'}
peerDependencies:
- esbuild: ^0.19.0
+ esbuild: '*'
esbuild-register@3.5.0:
resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==}
peerDependencies:
esbuild: '>=0.12 <1'
+ esbuild-register@3.6.0:
+ resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+
esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
@@ -7854,9 +8012,9 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.21.5:
- resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
- engines: {node: '>=12'}
+ esbuild@0.24.0:
+ resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
+ engines: {node: '>=18'}
hasBin: true
escalade@3.1.1:
@@ -10518,9 +10676,6 @@ packages:
resolution: {integrity: sha512-ZpbOf4dj9/fQg5tQzTqv4jSKJQsK7tPl0pm4/pvPcZVjZcJg7TMfr3PBk6gJH97lnpJDu4e4v8UUqEz5daipCg==}
engines: {node: '>=14.0.0'}
- performant-array-to-tree@1.11.0:
- resolution: {integrity: sha512-YwCqIDvnaebXaKuKQhI5yJD6ryDc3FxvoeX/5ougXTKDUWb7s5S2BuBgIyftCa4sBe1+ZU5Kmi4RJy+pjjjrpw==}
-
picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
@@ -11114,8 +11269,8 @@ packages:
react: '*'
react-native: '*'
- react-native-gesture-handler@2.18.1:
- resolution: {integrity: sha512-WF2fxQ5kTaxHghlkBM4YxO86SyGWVwrSNgJ1E8z/ZtL2xD5B3bg5agvuVFfOzvceC114yq71s6E9vKPz94ZxRw==}
+ react-native-gesture-handler@2.20.0:
+ resolution: {integrity: sha512-rFKqgHRfxQ7uSAivk8vxCiW4SB3G0U7jnv7kZD4Y90K5kp6YrU8Q3tWhxe3Rx55BIvSd3mBe9ZWbWVJ0FsSHPA==}
peerDependencies:
react: '*'
react-native: '*'
@@ -11190,14 +11345,6 @@ packages:
peerDependencies:
react-native: '*'
- react-native-web-internals@1.101.3:
- resolution: {integrity: sha512-xjisf0UVxkxiZQwnnsYlo3ms11qHoo7TIGWnH78exkfsgfFrAOzVodH/Mu0p5Yeofs7KQ9YFUhj31/fuaKF4yA==}
-
- react-native-web-lite@1.101.3:
- resolution: {integrity: sha512-6MD+R3M+UmlopPM6/QEMHPflg6gfiS8Kssr36GNxADwCykvr3/e2Eo6Bv89yarClL1LWG5bBix53wtgu9M4//Q==}
- peerDependencies:
- react: '*'
-
react-native-web@0.19.12:
resolution: {integrity: sha512-o2T0oztoVDQjztt4YksO9S1XRjoH/AqcSvifgWLrPJgGVbMWsfhILgl6lfUdEamVZzZSVV/2gqDVMAk/qq7mZw==}
peerDependencies:
@@ -11376,6 +11523,12 @@ packages:
resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
engines: {node: '>= 0.10'}
+ recyclerlistview@4.2.0:
+ resolution: {integrity: sha512-uuBCi0c+ggqHKwrzPX4Z/mJOzsBbjZEAwGGmlwpD/sD7raXixdAbdJ6BTcAmuWG50Cg4ru9p12M94Njwhr/27A==}
+ peerDependencies:
+ react: '>= 15.2.1'
+ react-native: '>= 0.30.0'
+
redent@3.0.0:
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
engines: {node: '>=8'}
@@ -11387,11 +11540,6 @@ packages:
resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
engines: {node: '>= 0.4'}
- reforest@0.13.0:
- resolution: {integrity: sha512-f0It/s51f1UWCCCni0viULALDBhxWBPFnLmZRYtKcz4zYeNWqeNTdcnU/OpBry9tk+jyMQcH3MLK8UdzsAvA5w==}
- peerDependencies:
- react: '>=16.8'
-
refractor@4.8.0:
resolution: {integrity: sha512-SVOnWUJiEBFNiBlHbudSpSpDfDhDY1UHF0CMKgdvPsMYNQQ4rnqFxyGvP07UmteNC8V12mTF2c0lEsGS7lKaGw==}
@@ -12198,8 +12346,10 @@ packages:
engines: {node: '>=14.0.0'}
hasBin: true
- tamagui@1.101.3:
- resolution: {integrity: sha512-6CSdwa6JyK6kwrisi6Y/e3KtvDBa/TDAfvJ9Ob79UrVs0nPP66RSXCLn7Xh/mxDuxoKkiy0uVUhqWk2h484j3A==}
+ tamagui@1.112.12:
+ resolution: {integrity: sha512-elbyYEjKqZP5THwYMKocbU5i+yG0Pi2qhxqHDB6xWn4h9l/ZcpvlFE62klaAQ3TL+ltyBsvnnDb2YzYvNiJ0AQ==}
+ peerDependencies:
+ react: '*'
tar-fs@2.1.1:
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
@@ -12373,6 +12523,9 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+ ts-object-utils@0.0.5:
+ resolution: {integrity: sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==}
+
tsc-files@1.1.4:
resolution: {integrity: sha512-RePsRsOLru3BPpnf237y1Xe1oCGta8rmSYzM76kYo5tLGsv5R2r3s64yapYorGTPuuLyfS9NVbh9ydzmvNie2w==}
hasBin: true
@@ -12382,6 +12535,9 @@ packages:
tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ tslib@2.4.0:
+ resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
+
tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
@@ -13252,21 +13408,6 @@ packages:
react:
optional: true
- zustand@4.5.1:
- resolution: {integrity: sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==}
- engines: {node: '>=12.7.0'}
- peerDependencies:
- '@types/react': '>=16.8'
- immer: '>=9.0.6'
- react: '>=16.8'
- peerDependenciesMeta:
- '@types/react':
- optional: true
- immer:
- optional: true
- react:
- optional: true
-
snapshots:
'@10play/tentap-editor@0.5.11(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
@@ -14078,13 +14219,13 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.2.0
'@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
+ '@babel/generator': 7.25.0
'@babel/helper-compilation-targets': 7.23.6
'@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
'@babel/helpers': 7.23.8
'@babel/parser': 7.23.6
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.7
+ '@babel/template': 7.25.0
+ '@babel/traverse': 7.25.3
'@babel/types': 7.23.9
convert-source-map: 2.0.0
debug: 4.3.4
@@ -14120,27 +14261,31 @@ snapshots:
jsesc: 2.5.2
source-map: 0.5.7
- '@babel/generator@7.23.6':
+ '@babel/generator@7.25.0':
dependencies:
- '@babel/types': 7.23.9
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
+ '@babel/types': 7.25.2
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
- '@babel/generator@7.25.0':
+ '@babel/generator@7.25.6':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
'@babel/helper-annotate-as-pure@7.22.5':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
+
+ '@babel/helper-annotate-as-pure@7.24.7':
+ dependencies:
+ '@babel/types': 7.25.6
'@babel/helper-builder-binary-assignment-operator-visitor@7.22.15':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-compilation-targets@7.23.6':
dependencies:
@@ -14182,7 +14327,7 @@ snapshots:
dependencies:
'@babel/core': 7.25.2
'@babel/helper-compilation-targets': 7.25.2
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
debug: 4.3.4
lodash.debounce: 4.0.8
resolve: 1.22.4
@@ -14193,7 +14338,7 @@ snapshots:
dependencies:
'@babel/core': 7.25.2
'@babel/helper-compilation-targets': 7.25.2
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
debug: 4.3.4
lodash.debounce: 4.0.8
resolve: 1.22.4
@@ -14213,16 +14358,16 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.23.0':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-module-imports@7.22.15':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-module-imports@7.24.7':
dependencies:
- '@babel/traverse': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
transitivePeerDependencies:
- supports-color
@@ -14241,16 +14386,18 @@ snapshots:
'@babel/helper-module-imports': 7.24.7
'@babel/helper-simple-access': 7.24.7
'@babel/helper-validator-identifier': 7.24.7
- '@babel/traverse': 7.25.3
+ '@babel/traverse': 7.25.6
transitivePeerDependencies:
- supports-color
'@babel/helper-optimise-call-expression@7.22.5':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-plugin-utils@7.22.5': {}
+ '@babel/helper-plugin-utils@7.24.8': {}
+
'@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -14267,18 +14414,18 @@ snapshots:
'@babel/helper-simple-access@7.22.5':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-simple-access@7.24.7':
dependencies:
- '@babel/traverse': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
dependencies:
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helper-split-export-declaration@7.22.6':
dependencies:
@@ -14300,7 +14447,7 @@ snapshots:
dependencies:
'@babel/helper-function-name': 7.23.0
'@babel/template': 7.25.0
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/helpers@7.23.8':
dependencies:
@@ -14313,7 +14460,7 @@ snapshots:
'@babel/helpers@7.25.0':
dependencies:
'@babel/template': 7.25.0
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@babel/highlight@7.23.4':
dependencies:
@@ -14336,6 +14483,10 @@ snapshots:
dependencies:
'@babel/types': 7.25.2
+ '@babel/parser@7.25.6':
+ dependencies:
+ '@babel/types': 7.25.6
+
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -14433,7 +14584,7 @@ snapshots:
'@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)':
dependencies:
@@ -14495,6 +14646,11 @@ snapshots:
'@babel/core': 7.25.2
'@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -14538,7 +14694,7 @@ snapshots:
'@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)':
dependencies:
@@ -14563,7 +14719,7 @@ snapshots:
dependencies:
'@babel/core': 7.25.2
'@babel/helper-module-imports': 7.24.7
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2)
transitivePeerDependencies:
- supports-color
@@ -14696,7 +14852,7 @@ snapshots:
dependencies:
'@babel/core': 7.25.2
'@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2)
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@babel/helper-simple-access': 7.22.5
transitivePeerDependencies:
- supports-color
@@ -14833,6 +14989,17 @@ snapshots:
'@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.25.2)
'@babel/types': 7.25.2
+ '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2)
+ '@babel/types': 7.25.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -15008,7 +15175,7 @@ snapshots:
'@babel/preset-flow@7.23.3(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@babel/helper-validator-option': 7.24.8
'@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.25.2)
@@ -15055,11 +15222,9 @@ snapshots:
dependencies:
regenerator-runtime: 0.14.1
- '@babel/template@7.22.15':
+ '@babel/runtime@7.25.6':
dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/parser': 7.23.6
- '@babel/types': 7.23.9
+ regenerator-runtime: 0.14.1
'@babel/template@7.25.0':
dependencies:
@@ -15070,7 +15235,7 @@ snapshots:
'@babel/traverse@7.23.2':
dependencies:
'@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
+ '@babel/generator': 7.25.0
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
@@ -15082,28 +15247,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/traverse@7.23.7':
+ '@babel/traverse@7.25.3':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/generator': 7.25.0
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/generator': 7.25.6
+ '@babel/parser': 7.25.6
+ '@babel/template': 7.25.0
+ '@babel/types': 7.25.6
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/traverse@7.25.3':
+ '@babel/traverse@7.25.6':
dependencies:
'@babel/code-frame': 7.24.7
- '@babel/generator': 7.25.0
- '@babel/parser': 7.25.3
+ '@babel/generator': 7.25.6
+ '@babel/parser': 7.25.6
'@babel/template': 7.25.0
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
@@ -15126,6 +15288,12 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
+ '@babel/types@7.25.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.24.8
+ '@babel/helper-validator-identifier': 7.24.7
+ to-fast-properties: 2.0.0
+
'@bcoe/v8-coverage@0.2.3': {}
'@dev-plugins/async-storage@0.0.3(@react-native-async-storage/async-storage@1.21.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))':
@@ -15244,7 +15412,7 @@ snapshots:
'@esbuild/aix-ppc64@0.19.12':
optional: true
- '@esbuild/aix-ppc64@0.21.5':
+ '@esbuild/aix-ppc64@0.24.0':
optional: true
'@esbuild/android-arm64@0.18.20':
@@ -15253,7 +15421,7 @@ snapshots:
'@esbuild/android-arm64@0.19.12':
optional: true
- '@esbuild/android-arm64@0.21.5':
+ '@esbuild/android-arm64@0.24.0':
optional: true
'@esbuild/android-arm@0.18.20':
@@ -15262,7 +15430,7 @@ snapshots:
'@esbuild/android-arm@0.19.12':
optional: true
- '@esbuild/android-arm@0.21.5':
+ '@esbuild/android-arm@0.24.0':
optional: true
'@esbuild/android-x64@0.18.20':
@@ -15271,7 +15439,7 @@ snapshots:
'@esbuild/android-x64@0.19.12':
optional: true
- '@esbuild/android-x64@0.21.5':
+ '@esbuild/android-x64@0.24.0':
optional: true
'@esbuild/darwin-arm64@0.18.20':
@@ -15280,7 +15448,7 @@ snapshots:
'@esbuild/darwin-arm64@0.19.12':
optional: true
- '@esbuild/darwin-arm64@0.21.5':
+ '@esbuild/darwin-arm64@0.24.0':
optional: true
'@esbuild/darwin-x64@0.18.20':
@@ -15289,7 +15457,7 @@ snapshots:
'@esbuild/darwin-x64@0.19.12':
optional: true
- '@esbuild/darwin-x64@0.21.5':
+ '@esbuild/darwin-x64@0.24.0':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
@@ -15298,7 +15466,7 @@ snapshots:
'@esbuild/freebsd-arm64@0.19.12':
optional: true
- '@esbuild/freebsd-arm64@0.21.5':
+ '@esbuild/freebsd-arm64@0.24.0':
optional: true
'@esbuild/freebsd-x64@0.18.20':
@@ -15307,7 +15475,7 @@ snapshots:
'@esbuild/freebsd-x64@0.19.12':
optional: true
- '@esbuild/freebsd-x64@0.21.5':
+ '@esbuild/freebsd-x64@0.24.0':
optional: true
'@esbuild/linux-arm64@0.18.20':
@@ -15316,7 +15484,7 @@ snapshots:
'@esbuild/linux-arm64@0.19.12':
optional: true
- '@esbuild/linux-arm64@0.21.5':
+ '@esbuild/linux-arm64@0.24.0':
optional: true
'@esbuild/linux-arm@0.18.20':
@@ -15325,7 +15493,7 @@ snapshots:
'@esbuild/linux-arm@0.19.12':
optional: true
- '@esbuild/linux-arm@0.21.5':
+ '@esbuild/linux-arm@0.24.0':
optional: true
'@esbuild/linux-ia32@0.18.20':
@@ -15334,7 +15502,7 @@ snapshots:
'@esbuild/linux-ia32@0.19.12':
optional: true
- '@esbuild/linux-ia32@0.21.5':
+ '@esbuild/linux-ia32@0.24.0':
optional: true
'@esbuild/linux-loong64@0.18.20':
@@ -15343,7 +15511,7 @@ snapshots:
'@esbuild/linux-loong64@0.19.12':
optional: true
- '@esbuild/linux-loong64@0.21.5':
+ '@esbuild/linux-loong64@0.24.0':
optional: true
'@esbuild/linux-mips64el@0.18.20':
@@ -15352,7 +15520,7 @@ snapshots:
'@esbuild/linux-mips64el@0.19.12':
optional: true
- '@esbuild/linux-mips64el@0.21.5':
+ '@esbuild/linux-mips64el@0.24.0':
optional: true
'@esbuild/linux-ppc64@0.18.20':
@@ -15361,7 +15529,7 @@ snapshots:
'@esbuild/linux-ppc64@0.19.12':
optional: true
- '@esbuild/linux-ppc64@0.21.5':
+ '@esbuild/linux-ppc64@0.24.0':
optional: true
'@esbuild/linux-riscv64@0.18.20':
@@ -15370,7 +15538,7 @@ snapshots:
'@esbuild/linux-riscv64@0.19.12':
optional: true
- '@esbuild/linux-riscv64@0.21.5':
+ '@esbuild/linux-riscv64@0.24.0':
optional: true
'@esbuild/linux-s390x@0.18.20':
@@ -15379,7 +15547,7 @@ snapshots:
'@esbuild/linux-s390x@0.19.12':
optional: true
- '@esbuild/linux-s390x@0.21.5':
+ '@esbuild/linux-s390x@0.24.0':
optional: true
'@esbuild/linux-x64@0.18.20':
@@ -15388,7 +15556,7 @@ snapshots:
'@esbuild/linux-x64@0.19.12':
optional: true
- '@esbuild/linux-x64@0.21.5':
+ '@esbuild/linux-x64@0.24.0':
optional: true
'@esbuild/netbsd-x64@0.18.20':
@@ -15397,7 +15565,10 @@ snapshots:
'@esbuild/netbsd-x64@0.19.12':
optional: true
- '@esbuild/netbsd-x64@0.21.5':
+ '@esbuild/netbsd-x64@0.24.0':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.24.0':
optional: true
'@esbuild/openbsd-x64@0.18.20':
@@ -15406,7 +15577,7 @@ snapshots:
'@esbuild/openbsd-x64@0.19.12':
optional: true
- '@esbuild/openbsd-x64@0.21.5':
+ '@esbuild/openbsd-x64@0.24.0':
optional: true
'@esbuild/sunos-x64@0.18.20':
@@ -15415,7 +15586,7 @@ snapshots:
'@esbuild/sunos-x64@0.19.12':
optional: true
- '@esbuild/sunos-x64@0.21.5':
+ '@esbuild/sunos-x64@0.24.0':
optional: true
'@esbuild/win32-arm64@0.18.20':
@@ -15424,7 +15595,7 @@ snapshots:
'@esbuild/win32-arm64@0.19.12':
optional: true
- '@esbuild/win32-arm64@0.21.5':
+ '@esbuild/win32-arm64@0.24.0':
optional: true
'@esbuild/win32-ia32@0.18.20':
@@ -15433,7 +15604,7 @@ snapshots:
'@esbuild/win32-ia32@0.19.12':
optional: true
- '@esbuild/win32-ia32@0.21.5':
+ '@esbuild/win32-ia32@0.24.0':
optional: true
'@esbuild/win32-x64@0.18.20':
@@ -15442,7 +15613,7 @@ snapshots:
'@esbuild/win32-x64@0.19.12':
optional: true
- '@esbuild/win32-x64@0.21.5':
+ '@esbuild/win32-x64@0.24.0':
optional: true
'@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)':
@@ -15817,22 +15988,30 @@ snapshots:
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ '@floating-ui/react-dom@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@floating-ui/dom': 1.6.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+
'@floating-ui/react-native@0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
'@floating-ui/core': 1.6.0
react: 18.2.0
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
- '@floating-ui/react@0.26.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
+ '@floating-ui/react@0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- '@floating-ui/utils': 0.2.3
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@floating-ui/utils': 0.2.8
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
tabbable: 6.2.0
'@floating-ui/utils@0.2.3': {}
+ '@floating-ui/utils@0.2.8': {}
+
'@gar/promisify@1.1.3': {}
'@google-cloud/recaptcha-enterprise-react-native@18.4.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
@@ -15840,13 +16019,13 @@ snapshots:
react: 18.2.0
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
- '@gorhom/bottom-sheet@4.6.0(@types/react-native@0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(@types/react@18.2.55)(react-native-gesture-handler@2.18.1(patch_hash=3cmtvqiauuehrkeqz6qjuqgv4a)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@gorhom/bottom-sheet@4.6.0(@types/react-native@0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(@types/react@18.2.55)(react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
'@gorhom/portal': 1.0.14(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
invariant: 2.2.4
react: 18.2.0
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
- react-native-gesture-handler: 2.18.1(patch_hash=3cmtvqiauuehrkeqz6qjuqgv4a)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ react-native-gesture-handler: 2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
optionalDependencies:
'@types/react': 18.2.55
@@ -16103,7 +16282,7 @@ snapshots:
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
+ '@jridgewell/trace-mapping': 0.3.25
'@jridgewell/gen-mapping@0.3.5':
dependencies:
@@ -16122,15 +16301,8 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
- '@jridgewell/sourcemap-codec@1.4.14': {}
-
'@jridgewell/sourcemap-codec@1.4.15': {}
- '@jridgewell/trace-mapping@0.3.18':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
-
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.0
@@ -17350,7 +17522,7 @@ snapshots:
'@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.25.2)
'@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.25.2)
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.25.2)
@@ -17634,6 +17806,14 @@ snapshots:
component-type: 1.2.2
join-component: 1.1.0
+ '@shopify/flash-list@1.6.3(@babel/runtime@7.25.6)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@babel/runtime': 7.25.6
+ react: 18.2.0
+ react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
+ recyclerlistview: 4.2.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ tslib: 2.4.0
+
'@sideway/address@4.1.5':
dependencies:
'@hapi/hoek': 9.3.0
@@ -17745,52 +17925,52 @@ snapshots:
transitivePeerDependencies:
- typescript
- '@swc/core-darwin-arm64@1.4.16':
+ '@swc/core-darwin-arm64@1.7.26':
optional: true
- '@swc/core-darwin-x64@1.4.16':
+ '@swc/core-darwin-x64@1.7.26':
optional: true
- '@swc/core-linux-arm-gnueabihf@1.4.16':
+ '@swc/core-linux-arm-gnueabihf@1.7.26':
optional: true
- '@swc/core-linux-arm64-gnu@1.4.16':
+ '@swc/core-linux-arm64-gnu@1.7.26':
optional: true
- '@swc/core-linux-arm64-musl@1.4.16':
+ '@swc/core-linux-arm64-musl@1.7.26':
optional: true
- '@swc/core-linux-x64-gnu@1.4.16':
+ '@swc/core-linux-x64-gnu@1.7.26':
optional: true
- '@swc/core-linux-x64-musl@1.4.16':
+ '@swc/core-linux-x64-musl@1.7.26':
optional: true
- '@swc/core-win32-arm64-msvc@1.4.16':
+ '@swc/core-win32-arm64-msvc@1.7.26':
optional: true
- '@swc/core-win32-ia32-msvc@1.4.16':
+ '@swc/core-win32-ia32-msvc@1.7.26':
optional: true
- '@swc/core-win32-x64-msvc@1.4.16':
+ '@swc/core-win32-x64-msvc@1.7.26':
optional: true
- '@swc/core@1.4.16(@swc/helpers@0.5.10)':
+ '@swc/core@1.7.26(@swc/helpers@0.5.13)':
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.6
+ '@swc/types': 0.1.12
optionalDependencies:
- '@swc/core-darwin-arm64': 1.4.16
- '@swc/core-darwin-x64': 1.4.16
- '@swc/core-linux-arm-gnueabihf': 1.4.16
- '@swc/core-linux-arm64-gnu': 1.4.16
- '@swc/core-linux-arm64-musl': 1.4.16
- '@swc/core-linux-x64-gnu': 1.4.16
- '@swc/core-linux-x64-musl': 1.4.16
- '@swc/core-win32-arm64-msvc': 1.4.16
- '@swc/core-win32-ia32-msvc': 1.4.16
- '@swc/core-win32-x64-msvc': 1.4.16
- '@swc/helpers': 0.5.10
+ '@swc/core-darwin-arm64': 1.7.26
+ '@swc/core-darwin-x64': 1.7.26
+ '@swc/core-linux-arm-gnueabihf': 1.7.26
+ '@swc/core-linux-arm64-gnu': 1.7.26
+ '@swc/core-linux-arm64-musl': 1.7.26
+ '@swc/core-linux-x64-gnu': 1.7.26
+ '@swc/core-linux-x64-musl': 1.7.26
+ '@swc/core-win32-arm64-msvc': 1.7.26
+ '@swc/core-win32-ia32-msvc': 1.7.26
+ '@swc/core-win32-x64-msvc': 1.7.26
+ '@swc/helpers': 0.5.13
'@swc/counter@0.1.3': {}
@@ -17798,11 +17978,11 @@ snapshots:
dependencies:
tslib: 2.6.2
- '@swc/helpers@0.5.10':
+ '@swc/helpers@0.5.13':
dependencies:
tslib: 2.6.2
- '@swc/types@0.1.6':
+ '@swc/types@0.1.12':
dependencies:
'@swc/counter': 0.1.3
@@ -17822,427 +18002,457 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.1
- '@tamagui/accordion@1.101.3':
- dependencies:
- '@tamagui/collapsible': 1.101.3
- '@tamagui/collection': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
-
- '@tamagui/adapt@1.101.3':
- dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/helpers': 1.101.3
-
- '@tamagui/alert-dialog@1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/aria-hidden': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/dialog': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/dismissable': 1.101.3
- '@tamagui/focus-scope': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/popper': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/remove-scroll': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/accordion@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/collapsible': 1.112.12(react@18.2.0)
+ '@tamagui/collection': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ react: 18.2.0
+
+ '@tamagui/adapt@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
+
+ '@tamagui/alert-dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/aria-hidden': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/dismissable': 1.112.12(react@18.2.0)
+ '@tamagui/focus-scope': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- - react
- react-dom
- react-native
- '@tamagui/animate-presence@1.101.3':
+ '@tamagui/animate-presence@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/helpers': 1.101.3
- '@tamagui/use-constant': 1.101.3
- '@tamagui/use-force-update': 1.101.3
- '@tamagui/use-presence': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/use-constant': 1.112.12(react@18.2.0)
+ '@tamagui/use-force-update': 1.112.12(react@18.2.0)
+ '@tamagui/use-presence': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
- '@tamagui/animate@1.101.3':
+ '@tamagui/animate@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/animate-presence': 1.101.3
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
- '@tamagui/animations-css@1.101.3':
+ '@tamagui/animations-css@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/cubic-bezier-animator': 1.101.3
- '@tamagui/use-presence': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/cubic-bezier-animator': 1.112.12
+ '@tamagui/use-presence': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/animations-moti@1.101.3(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))':
+ '@tamagui/animations-moti@1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/use-presence': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/use-presence': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
moti: 0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0)
+ react: 18.2.0
- '@tamagui/animations-react-native@1.101.3':
+ '@tamagui/animations-react-native@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/use-presence': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/use-presence': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/aria-hidden@1.101.3':
+ '@tamagui/aria-hidden@1.112.12(react@18.2.0)':
dependencies:
aria-hidden: 1.2.3
+ react: 18.2.0
- '@tamagui/avatar@1.101.3(react@18.2.0)':
+ '@tamagui/avatar@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/image': 1.101.3(react@18.2.0)
- '@tamagui/shapes': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- transitivePeerDependencies:
- - react
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/image': 1.112.12(react@18.2.0)
+ '@tamagui/shapes': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/babel-plugin-fully-specified@1.101.3':
+ '@tamagui/babel-plugin-fully-specified@1.112.12':
dependencies:
'@babel/core': 7.25.2
transitivePeerDependencies:
- supports-color
- '@tamagui/babel-plugin@1.101.3(encoding@0.1.13)(react@18.2.0)':
+ '@tamagui/babel-plugin@1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react@18.2.0)':
dependencies:
- '@babel/generator': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/template': 7.22.15
- '@babel/traverse': 7.23.7
- '@tamagui/static': 1.101.3(encoding@0.1.13)(react@18.2.0)
+ '@babel/generator': 7.25.6
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/template': 7.25.0
+ '@babel/traverse': 7.25.6
+ '@tamagui/static': 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react@18.2.0)
transitivePeerDependencies:
+ - '@swc/helpers'
- encoding
- react
- supports-color
- '@tamagui/build@1.101.3':
+ '@tamagui/build@1.112.12(@swc/helpers@0.5.13)':
dependencies:
'@babel/core': 7.25.2
- '@tamagui/babel-plugin-fully-specified': 1.101.3
+ '@swc/core': 1.7.26(@swc/helpers@0.5.13)
+ '@tamagui/babel-plugin-fully-specified': 1.112.12
'@types/fs-extra': 9.0.13
babel-plugin-fully-specified: 1.3.0(@babel/core@7.25.2)
chokidar: 3.5.3
- esbuild: 0.21.5
- esbuild-plugin-es5: 2.1.0(esbuild@0.21.5)
- esbuild-register: 3.5.0(esbuild@0.21.5)
+ esbuild: 0.24.0
+ esbuild-plugin-es5: 2.1.1(esbuild@0.24.0)
+ esbuild-register: 3.6.0(esbuild@0.24.0)
execa: 5.1.1
fast-glob: 3.3.2
fs-extra: 11.2.0
- get-tsconfig: 4.7.2
lodash.debounce: 4.0.8
+ typescript: 5.4.5
transitivePeerDependencies:
+ - '@swc/helpers'
- supports-color
- '@tamagui/button@1.101.3(react@18.2.0)':
+ '@tamagui/button@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/font-size': 1.101.3
- '@tamagui/get-button-sized': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/web': 1.101.3
- transitivePeerDependencies:
- - react
+ '@tamagui/font-size': 1.112.12(react@18.2.0)
+ '@tamagui/get-button-sized': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/card@1.101.3':
+ '@tamagui/card@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/create-context': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/checkbox-headless@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/checkbox-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
+ react: 18.2.0
transitivePeerDependencies:
- - react
- react-native
- '@tamagui/checkbox@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@tamagui/checkbox-headless': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/font-size': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/checkbox@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@tamagui/checkbox-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/font-size': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
+ react: 18.2.0
transitivePeerDependencies:
- - react
- react-native
- '@tamagui/cli-color@1.101.3': {}
+ '@tamagui/cli-color@1.112.12': {}
- '@tamagui/collapsible@1.101.3':
+ '@tamagui/collapsible@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/collection@1.101.3':
+ '@tamagui/collection@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
-
- '@tamagui/compose-refs@1.101.3': {}
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/config-default@1.101.3':
+ '@tamagui/compose-refs@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/animations-css': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/shorthands': 1.101.3
-
- '@tamagui/constants@1.101.3': {}
+ react: 18.2.0
- '@tamagui/core@1.101.3':
+ '@tamagui/config-default@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/react-native-use-pressable': 1.101.3
- '@tamagui/react-native-use-responder-events': 1.101.3
- '@tamagui/use-event': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/animations-css': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/shorthands': 1.112.12
+ transitivePeerDependencies:
+ - react
- '@tamagui/create-context@1.101.3': {}
+ '@tamagui/constants@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/create-theme@1.101.3':
+ '@tamagui/core@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/web': 1.101.3
+ '@tamagui/react-native-use-pressable': 1.112.12(react@18.2.0)
+ '@tamagui/react-native-use-responder-events': 1.112.12(react@18.2.0)
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
- '@tamagui/cubic-bezier-animator@1.101.3': {}
+ '@tamagui/create-context@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/dialog@1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/create-theme@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/adapt': 1.101.3
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/aria-hidden': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/dismissable': 1.101.3
- '@tamagui/focus-scope': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/popper': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/remove-scroll': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/sheet': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
+
+ '@tamagui/cubic-bezier-animator@1.112.12': {}
+
+ '@tamagui/dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@tamagui/adapt': 1.112.12(react@18.2.0)
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/aria-hidden': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/dismissable': 1.112.12(react@18.2.0)
+ '@tamagui/focus-scope': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- react-dom
- react-native
- '@tamagui/dismissable@1.101.3':
+ '@tamagui/dismissable@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/use-escape-keydown': 1.101.3
- '@tamagui/use-event': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/use-escape-keydown': 1.112.12
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/elements@1.101.3(react@18.2.0)':
+ '@tamagui/elements@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
+ '@tamagui/core': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/fake-react-native@1.101.3': {}
+ '@tamagui/fake-react-native@1.112.12': {}
- '@tamagui/floating@1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/floating@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
react: 18.2.0
transitivePeerDependencies:
- react-dom
- react-native
- '@tamagui/focus-scope@1.101.3':
+ '@tamagui/focus-scope@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/use-event': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/start-transition': 1.112.12
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/focusable@1.101.3':
+ '@tamagui/focusable@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/font-size@1.101.3':
+ '@tamagui/font-size@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/form@1.101.3(react@18.2.0)':
+ '@tamagui/form@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/get-button-sized': 1.101.3(react@18.2.0)
- '@tamagui/get-font-sized': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- transitivePeerDependencies:
- - react
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/get-button-sized': 1.112.12(react@18.2.0)
+ '@tamagui/get-font-sized': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/generate-themes@1.101.3(esbuild@0.21.5)':
+ '@tamagui/generate-themes@1.112.12(esbuild@0.24.0)(react@18.2.0)':
dependencies:
- '@tamagui/create-theme': 1.101.3
- '@tamagui/theme-builder': 1.101.3
- '@tamagui/types': 1.101.3
- esbuild-register: 3.5.0(esbuild@0.21.5)
+ '@tamagui/create-theme': 1.112.12(react@18.2.0)
+ '@tamagui/theme-builder': 1.112.12(react@18.2.0)
+ '@tamagui/types': 1.112.12
+ esbuild-register: 3.6.0(esbuild@0.24.0)
fs-extra: 11.2.0
transitivePeerDependencies:
- esbuild
+ - react
- supports-color
- '@tamagui/get-button-sized@1.101.3(react@18.2.0)':
+ '@tamagui/get-button-sized@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/web': 1.101.3
- transitivePeerDependencies:
- - react
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/get-font-sized@1.101.3':
+ '@tamagui/get-font-sized@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/get-token@1.101.3(react@18.2.0)':
+ '@tamagui/get-token@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/web': 1.101.3
+ '@tamagui/web': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/group@1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)':
+ '@tamagui/group@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- reforest: 0.13.0(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- - immer
- - react
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/helpers-node@1.101.3':
+ '@tamagui/helpers-node@1.112.12':
dependencies:
- '@tamagui/types': 1.101.3
+ '@tamagui/types': 1.112.12
- '@tamagui/helpers-tamagui@1.101.3(react@18.2.0)':
+ '@tamagui/helpers-tamagui@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/helpers': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/helpers@1.101.3':
+ '@tamagui/helpers@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/simple-hash': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/simple-hash': 1.112.12
+ transitivePeerDependencies:
+ - react
- '@tamagui/image@1.101.3(react@18.2.0)':
+ '@tamagui/image@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/label@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/label@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/get-button-sized': 1.101.3(react@18.2.0)
- '@tamagui/get-font-sized': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/web': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/get-button-sized': 1.112.12(react@18.2.0)
+ '@tamagui/get-font-sized': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
react: 18.2.0
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
- '@tamagui/linear-gradient@1.101.3':
+ '@tamagui/linear-gradient@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
- '@tamagui/stacks': 1.101.3
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/list-item@1.101.3(react@18.2.0)':
+ '@tamagui/list-item@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/font-size': 1.101.3
- '@tamagui/get-font-sized': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/web': 1.101.3
- transitivePeerDependencies:
- - react
+ '@tamagui/font-size': 1.112.12(react@18.2.0)
+ '@tamagui/get-font-sized': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/normalize-css-color@1.101.3':
+ '@tamagui/normalize-css-color@1.112.12':
dependencies:
'@react-native/normalize-color': 2.1.0
- '@tamagui/polyfill-dev@1.101.3': {}
-
- '@tamagui/popover@1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@floating-ui/react': 0.26.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- '@tamagui/adapt': 1.101.3
- '@tamagui/animate': 1.101.3
- '@tamagui/aria-hidden': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/dismissable': 1.101.3
- '@tamagui/floating': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/focus-scope': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/popper': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/remove-scroll': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/scroll-view': 1.101.3
- '@tamagui/sheet': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/polyfill-dev@1.112.12': {}
+
+ '@tamagui/popover@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@tamagui/adapt': 1.112.12(react@18.2.0)
+ '@tamagui/animate': 1.112.12(react@18.2.0)
+ '@tamagui/aria-hidden': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/dismissable': 1.112.12(react@18.2.0)
+ '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/focus-scope': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/scroll-view': 1.112.12(react@18.2.0)
+ '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
react: 18.2.0
react-freeze: 1.0.3(react@18.2.0)
transitivePeerDependencies:
@@ -18250,411 +18460,463 @@ snapshots:
- react-dom
- react-native
- '@tamagui/popper@1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/popper@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/floating': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/start-transition': 1.112.12
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
react: 18.2.0
transitivePeerDependencies:
- react-dom
- react-native
- '@tamagui/portal@1.101.3(react@18.2.0)':
+ '@tamagui/portal@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-did-finish-ssr': 1.101.3
- '@tamagui/use-event': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/start-transition': 1.112.12
+ '@tamagui/use-did-finish-ssr': 1.112.12(react@18.2.0)
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/progress@1.101.3(react@18.2.0)':
+ '@tamagui/progress@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/stacks': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/proxy-worm@1.101.3': {}
-
- '@tamagui/radio-group@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/radio-headless': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/roving-focus': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/proxy-worm@1.112.12': {}
+
+ '@tamagui/radio-group@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/radio-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/roving-focus': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
+ react: 18.2.0
transitivePeerDependencies:
- - react
- react-native
- '@tamagui/radio-headless@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/radio-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
+ react: 18.2.0
transitivePeerDependencies:
- - react
- react-native
- '@tamagui/react-native-media-driver@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))':
+ '@tamagui/react-native-media-driver@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/web': 1.101.3
+ '@tamagui/web': 1.112.12(react@18.2.0)
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
+ transitivePeerDependencies:
+ - react
+
+ '@tamagui/react-native-svg@1.112.12': {}
+
+ '@tamagui/react-native-use-pressable@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/react-native-svg@1.101.3': {}
+ '@tamagui/react-native-use-responder-events@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/react-native-use-pressable@1.101.3': {}
+ '@tamagui/react-native-web-internals@1.112.12':
+ dependencies:
+ '@tamagui/normalize-css-color': 1.112.12
+ '@tamagui/react-native-use-pressable': 1.112.12(react@18.2.0)
+ '@tamagui/react-native-use-responder-events': 1.112.12(react@18.2.0)
+ '@tamagui/simple-hash': 1.112.12
+ react: 18.2.0
+ styleq: 0.1.3
- '@tamagui/react-native-use-responder-events@1.101.3': {}
+ '@tamagui/react-native-web-lite@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/normalize-css-color': 1.112.12
+ '@tamagui/react-native-use-pressable': 1.112.12(react@18.2.0)
+ '@tamagui/react-native-use-responder-events': 1.112.12(react@18.2.0)
+ '@tamagui/react-native-web-internals': 1.112.12
+ invariant: 2.2.4
+ react: 18.2.0
+ styleq: 0.1.3
- '@tamagui/remove-scroll@1.101.3(@types/react@18.2.55)(react@18.2.0)':
+ '@tamagui/remove-scroll@1.112.12(@types/react@18.2.55)(react@18.2.0)':
dependencies:
+ react: 18.2.0
react-remove-scroll: 2.5.5(@types/react@18.2.55)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- - react
- '@tamagui/roving-focus@1.101.3':
- dependencies:
- '@tamagui/collection': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-direction': 1.101.3
- '@tamagui/use-event': 1.101.3
+ '@tamagui/roving-focus@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/collection': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-direction': 1.112.12(react@18.2.0)
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/scroll-view@1.101.3':
+ '@tamagui/scroll-view@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/stacks': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/select@1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/select@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@floating-ui/react': 0.26.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/adapt': 1.101.3
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/dismissable': 1.101.3
- '@tamagui/focus-scope': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/list-item': 1.101.3(react@18.2.0)
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/remove-scroll': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/separator': 1.101.3
- '@tamagui/sheet': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-debounce': 1.101.3
- '@tamagui/use-event': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/adapt': 1.112.12(react@18.2.0)
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/dismissable': 1.112.12(react@18.2.0)
+ '@tamagui/focus-scope': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/list-item': 1.112.12(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/separator': 1.112.12(react@18.2.0)
+ '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-debounce': 1.112.12(react@18.2.0)
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- react-dom
- react-native
- '@tamagui/separator@1.101.3':
+ '@tamagui/separator@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/shapes@1.101.3':
+ '@tamagui/shapes@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/stacks': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/sheet@1.101.3(@types/react@18.2.55)(react@18.2.0)':
- dependencies:
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/animations-react-native': 1.101.3
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/remove-scroll': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/scroll-view': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-constant': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-keyboard-visible': 1.101.3(react@18.2.0)
+ '@tamagui/sheet@1.112.12(@types/react@18.2.55)(react@18.2.0)':
+ dependencies:
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/animations-react-native': 1.112.12(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/scroll-view': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-constant': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-keyboard-visible': 1.112.12(react@18.2.0)
react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- '@tamagui/shorthands@1.101.3': {}
+ '@tamagui/shorthands@1.112.12': {}
- '@tamagui/simple-hash@1.101.3': {}
+ '@tamagui/simple-hash@1.112.12': {}
- '@tamagui/slider@1.101.3(react@18.2.0)':
+ '@tamagui/slider@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-direction': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-debounce': 1.112.12(react@18.2.0)
+ '@tamagui/use-direction': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/stacks@1.101.3':
+ '@tamagui/stacks@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/core': 1.101.3
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ react: 18.2.0
+
+ '@tamagui/start-transition@1.112.12':
+ dependencies:
+ react: 18.2.0
- '@tamagui/static@1.101.3(encoding@0.1.13)(react@18.2.0)':
+ '@tamagui/static@1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react@18.2.0)':
dependencies:
'@babel/core': 7.25.2
- '@babel/generator': 7.23.6
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/parser': 7.23.6
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.2)
- '@babel/runtime': 7.23.8
- '@babel/traverse': 7.23.7
- '@babel/types': 7.23.9
- '@tamagui/build': 1.101.3
- '@tamagui/cli-color': 1.101.3
- '@tamagui/config-default': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/fake-react-native': 1.101.3
- '@tamagui/generate-themes': 1.101.3(esbuild@0.21.5)
- '@tamagui/helpers': 1.101.3
- '@tamagui/helpers-node': 1.101.3
- '@tamagui/proxy-worm': 1.101.3
- '@tamagui/shorthands': 1.101.3
- '@tamagui/types': 1.101.3
+ '@babel/generator': 7.25.6
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/parser': 7.25.6
+ '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2)
+ '@babel/runtime': 7.25.6
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
+ '@tamagui/build': 1.112.12(@swc/helpers@0.5.13)
+ '@tamagui/cli-color': 1.112.12
+ '@tamagui/config-default': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/fake-react-native': 1.112.12
+ '@tamagui/generate-themes': 1.112.12(esbuild@0.24.0)(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-node': 1.112.12
+ '@tamagui/proxy-worm': 1.112.12
+ '@tamagui/react-native-web-internals': 1.112.12
+ '@tamagui/react-native-web-lite': 1.112.12(react@18.2.0)
+ '@tamagui/shorthands': 1.112.12
+ '@tamagui/types': 1.112.12
babel-literal-to-ast: 2.1.0(@babel/core@7.25.2)
- browserslist: 4.22.2
+ browserslist: 4.23.3
check-dependency-version-consistency: 4.1.0
- esbuild: 0.21.5
- esbuild-register: 3.5.0(esbuild@0.21.5)
+ esbuild: 0.24.0
+ esbuild-register: 3.6.0(esbuild@0.24.0)
find-cache-dir: 3.3.2
find-root: 1.1.0
fs-extra: 11.2.0
invariant: 2.2.4
lodash: 4.17.21
+ react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-native-web: 0.19.12(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- react-native-web-internals: 1.101.3
- react-native-web-lite: 1.101.3(react@18.2.0)
transitivePeerDependencies:
+ - '@swc/helpers'
- encoding
- - react
- supports-color
- '@tamagui/switch-headless@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ '@tamagui/switch-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
react: 18.2.0
transitivePeerDependencies:
- react-native
- '@tamagui/switch@1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/switch-headless': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-previous': 1.101.3
+ '@tamagui/switch@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/switch-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-previous': 1.112.12
react: 18.2.0
transitivePeerDependencies:
- react-native
- '@tamagui/tabs@1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)':
- dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/get-button-sized': 1.101.3(react@18.2.0)
- '@tamagui/group': 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/roving-focus': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-direction': 1.101.3
- '@tamagui/web': 1.101.3
+ '@tamagui/tabs@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/get-button-sized': 1.112.12(react@18.2.0)
+ '@tamagui/group': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/roving-focus': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-direction': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
react: 18.2.0
- transitivePeerDependencies:
- - '@types/react'
- - immer
- '@tamagui/text@1.101.3(react@18.2.0)':
+ '@tamagui/text@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/get-font-sized': 1.101.3
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/web': 1.101.3
- transitivePeerDependencies:
- - react
+ '@tamagui/get-font-sized': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/theme-builder@1.101.3':
+ '@tamagui/theme-builder@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/create-theme': 1.101.3
+ '@tamagui/create-theme': 1.112.12(react@18.2.0)
color2k: 2.0.3
+ transitivePeerDependencies:
+ - react
- '@tamagui/theme@1.101.3':
+ '@tamagui/theme@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/web': 1.101.3
-
- '@tamagui/timer@1.101.3': {}
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/toggle-group@1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)':
- dependencies:
- '@tamagui/constants': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/font-size': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/group': 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/roving-focus': 1.101.3
- '@tamagui/stacks': 1.101.3
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-direction': 1.101.3
- '@tamagui/web': 1.101.3
- transitivePeerDependencies:
- - '@types/react'
- - immer
- - react
+ '@tamagui/timer@1.112.12': {}
+
+ '@tamagui/toggle-group@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/font-size': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/group': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/roving-focus': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-direction': 1.112.12(react@18.2.0)
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/tooltip@1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
- dependencies:
- '@floating-ui/react': 0.26.18(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/floating': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/helpers': 1.101.3
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/popover': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/popper': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
+ '@tamagui/tooltip@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- react-dom
- react-native
- '@tamagui/types@1.101.3': {}
+ '@tamagui/types@1.112.12': {}
- '@tamagui/use-callback-ref@1.101.3': {}
+ '@tamagui/use-callback-ref@1.112.12': {}
- '@tamagui/use-constant@1.101.3': {}
+ '@tamagui/use-constant@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/use-controllable-state@1.101.3':
+ '@tamagui/use-controllable-state@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/use-event': 1.101.3
+ '@tamagui/start-transition': 1.112.12
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/use-debounce@1.101.3': {}
+ '@tamagui/use-debounce@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/use-did-finish-ssr@1.101.3':
+ '@tamagui/use-did-finish-ssr@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
+ react: 18.2.0
- '@tamagui/use-direction@1.101.3': {}
+ '@tamagui/use-direction@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/use-escape-keydown@1.101.3':
+ '@tamagui/use-escape-keydown@1.112.12':
dependencies:
- '@tamagui/use-callback-ref': 1.101.3
+ '@tamagui/use-callback-ref': 1.112.12
- '@tamagui/use-event@1.101.3':
+ '@tamagui/use-event@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/use-force-update@1.101.3': {}
+ '@tamagui/use-force-update@1.112.12(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
- '@tamagui/use-keyboard-visible@1.101.3(react@18.2.0)':
+ '@tamagui/use-keyboard-visible@1.112.12(react@18.2.0)':
dependencies:
react: 18.2.0
- '@tamagui/use-presence@1.101.3':
+ '@tamagui/use-presence@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/web': 1.101.3
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/use-previous@1.101.3': {}
+ '@tamagui/use-previous@1.112.12': {}
- '@tamagui/use-window-dimensions@1.101.3(react@18.2.0)':
+ '@tamagui/use-window-dimensions@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/constants': 1.101.3
+ '@tamagui/constants': 1.112.12(react@18.2.0)
react: 18.2.0
- '@tamagui/visually-hidden@1.101.3':
+ '@tamagui/visually-hidden@1.112.12(react@18.2.0)':
dependencies:
- '@tamagui/web': 1.101.3
+ '@tamagui/web': 1.112.12(react@18.2.0)
+ react: 18.2.0
- '@tamagui/vite-plugin@1.101.3(encoding@0.1.13)(react@18.2.0)':
+ '@tamagui/vite-plugin@1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@tamagui/fake-react-native': 1.101.3
- '@tamagui/proxy-worm': 1.101.3
- '@tamagui/react-native-svg': 1.101.3
- '@tamagui/static': 1.101.3(encoding@0.1.13)(react@18.2.0)
+ '@tamagui/fake-react-native': 1.112.12
+ '@tamagui/proxy-worm': 1.112.12
+ '@tamagui/react-native-svg': 1.112.12
+ '@tamagui/static': 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react@18.2.0)
esm-resolve: 1.0.11
fs-extra: 11.2.0
outdent: 0.8.0
+ react-native-web: 0.19.12(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
transitivePeerDependencies:
+ - '@swc/helpers'
- encoding
- react
+ - react-dom
- supports-color
- '@tamagui/web@1.101.3':
- dependencies:
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/helpers': 1.101.3
- '@tamagui/normalize-css-color': 1.101.3
- '@tamagui/timer': 1.101.3
- '@tamagui/types': 1.101.3
- '@tamagui/use-did-finish-ssr': 1.101.3
- '@tamagui/use-event': 1.101.3
- '@tamagui/use-force-update': 1.101.3
+ '@tamagui/web@1.112.12(react@18.2.0)':
+ dependencies:
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/helpers': 1.112.12(react@18.2.0)
+ '@tamagui/normalize-css-color': 1.112.12
+ '@tamagui/timer': 1.112.12
+ '@tamagui/types': 1.112.12
+ '@tamagui/use-did-finish-ssr': 1.112.12(react@18.2.0)
+ '@tamagui/use-event': 1.112.12(react@18.2.0)
+ '@tamagui/use-force-update': 1.112.12(react@18.2.0)
+ transitivePeerDependencies:
+ - react
'@tanstack/match-sorter-utils@8.8.4':
dependencies:
@@ -19070,8 +19332,8 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/parser': 7.25.6
+ '@babel/types': 7.25.6
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.20.1
@@ -19994,9 +20256,9 @@ snapshots:
babel-literal-to-ast@2.1.0(@babel/core@7.25.2):
dependencies:
'@babel/core': 7.25.2
- '@babel/parser': 7.25.3
- '@babel/traverse': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/parser': 7.25.6
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
transitivePeerDependencies:
- supports-color
@@ -20010,7 +20272,7 @@ snapshots:
babel-plugin-istanbul@6.1.1:
dependencies:
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/helper-plugin-utils': 7.24.8
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-instrument: 5.2.1
@@ -20021,13 +20283,13 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.25.0
- '@babel/types': 7.25.2
+ '@babel/types': 7.25.6
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.1
babel-plugin-macros@3.1.0:
dependencies:
- '@babel/runtime': 7.23.8
+ '@babel/runtime': 7.25.6
cosmiconfig: 7.1.0
resolve: 1.22.4
@@ -20135,7 +20397,7 @@ snapshots:
'@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.25.2)
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2)
'@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-spread': 7.23.3(@babel/core@7.25.2)
'@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.25.2)
@@ -21414,12 +21676,12 @@ snapshots:
es6-iterator: 2.0.3
es6-symbol: 3.1.4
- esbuild-plugin-es5@2.1.0(esbuild@0.21.5):
+ esbuild-plugin-es5@2.1.1(esbuild@0.24.0):
dependencies:
- '@swc/core': 1.4.16(@swc/helpers@0.5.10)
- '@swc/helpers': 0.5.10
+ '@swc/core': 1.7.26(@swc/helpers@0.5.13)
+ '@swc/helpers': 0.5.13
deepmerge: 4.3.1
- esbuild: 0.21.5
+ esbuild: 0.24.0
esbuild-register@3.5.0(esbuild@0.19.12):
dependencies:
@@ -21428,10 +21690,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- esbuild-register@3.5.0(esbuild@0.21.5):
+ esbuild-register@3.6.0(esbuild@0.24.0):
dependencies:
debug: 4.3.4
- esbuild: 0.21.5
+ esbuild: 0.24.0
transitivePeerDependencies:
- supports-color
@@ -21486,31 +21748,32 @@ snapshots:
'@esbuild/win32-ia32': 0.19.12
'@esbuild/win32-x64': 0.19.12
- esbuild@0.21.5:
+ esbuild@0.24.0:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.21.5
- '@esbuild/android-arm': 0.21.5
- '@esbuild/android-arm64': 0.21.5
- '@esbuild/android-x64': 0.21.5
- '@esbuild/darwin-arm64': 0.21.5
- '@esbuild/darwin-x64': 0.21.5
- '@esbuild/freebsd-arm64': 0.21.5
- '@esbuild/freebsd-x64': 0.21.5
- '@esbuild/linux-arm': 0.21.5
- '@esbuild/linux-arm64': 0.21.5
- '@esbuild/linux-ia32': 0.21.5
- '@esbuild/linux-loong64': 0.21.5
- '@esbuild/linux-mips64el': 0.21.5
- '@esbuild/linux-ppc64': 0.21.5
- '@esbuild/linux-riscv64': 0.21.5
- '@esbuild/linux-s390x': 0.21.5
- '@esbuild/linux-x64': 0.21.5
- '@esbuild/netbsd-x64': 0.21.5
- '@esbuild/openbsd-x64': 0.21.5
- '@esbuild/sunos-x64': 0.21.5
- '@esbuild/win32-arm64': 0.21.5
- '@esbuild/win32-ia32': 0.21.5
- '@esbuild/win32-x64': 0.21.5
+ '@esbuild/aix-ppc64': 0.24.0
+ '@esbuild/android-arm': 0.24.0
+ '@esbuild/android-arm64': 0.24.0
+ '@esbuild/android-x64': 0.24.0
+ '@esbuild/darwin-arm64': 0.24.0
+ '@esbuild/darwin-x64': 0.24.0
+ '@esbuild/freebsd-arm64': 0.24.0
+ '@esbuild/freebsd-x64': 0.24.0
+ '@esbuild/linux-arm': 0.24.0
+ '@esbuild/linux-arm64': 0.24.0
+ '@esbuild/linux-ia32': 0.24.0
+ '@esbuild/linux-loong64': 0.24.0
+ '@esbuild/linux-mips64el': 0.24.0
+ '@esbuild/linux-ppc64': 0.24.0
+ '@esbuild/linux-riscv64': 0.24.0
+ '@esbuild/linux-s390x': 0.24.0
+ '@esbuild/linux-x64': 0.24.0
+ '@esbuild/netbsd-x64': 0.24.0
+ '@esbuild/openbsd-arm64': 0.24.0
+ '@esbuild/openbsd-x64': 0.24.0
+ '@esbuild/sunos-x64': 0.24.0
+ '@esbuild/win32-arm64': 0.24.0
+ '@esbuild/win32-ia32': 0.24.0
+ '@esbuild/win32-x64': 0.24.0
escalade@3.1.1: {}
@@ -23080,7 +23343,7 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
'@babel/core': 7.25.2
- '@babel/parser': 7.25.3
+ '@babel/parser': 7.25.6
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -23090,7 +23353,7 @@ snapshots:
istanbul-lib-instrument@6.0.3:
dependencies:
'@babel/core': 7.25.2
- '@babel/parser': 7.25.3
+ '@babel/parser': 7.25.6
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.6.0
@@ -23557,7 +23820,7 @@ snapshots:
jscodeshift@0.14.0(@babel/preset-env@7.23.7(@babel/core@7.25.2)):
dependencies:
'@babel/core': 7.25.2
- '@babel/parser': 7.25.3
+ '@babel/parser': 7.25.6
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2)
'@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2)
'@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2)
@@ -24146,9 +24409,9 @@ snapshots:
metro-transform-plugins@0.80.5:
dependencies:
'@babel/core': 7.25.2
- '@babel/generator': 7.25.0
+ '@babel/generator': 7.25.6
'@babel/template': 7.25.0
- '@babel/traverse': 7.25.3
+ '@babel/traverse': 7.25.6
nullthrows: 1.1.1
transitivePeerDependencies:
- supports-color
@@ -24156,9 +24419,9 @@ snapshots:
metro-transform-worker@0.80.5(encoding@0.1.13):
dependencies:
'@babel/core': 7.25.2
- '@babel/generator': 7.25.0
- '@babel/parser': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/generator': 7.25.6
+ '@babel/parser': 7.25.6
+ '@babel/types': 7.25.6
metro: 0.80.5(encoding@0.1.13)
metro-babel-transformer: 0.80.5
metro-cache: 0.80.5
@@ -24177,11 +24440,11 @@ snapshots:
dependencies:
'@babel/code-frame': 7.24.7
'@babel/core': 7.25.2
- '@babel/generator': 7.25.0
- '@babel/parser': 7.25.3
+ '@babel/generator': 7.25.6
+ '@babel/parser': 7.25.6
'@babel/template': 7.25.0
- '@babel/traverse': 7.25.3
- '@babel/types': 7.25.2
+ '@babel/traverse': 7.25.6
+ '@babel/types': 7.25.6
accepts: 1.3.8
chalk: 4.1.2
ci-info: 2.0.0
@@ -24786,8 +25049,6 @@ snapshots:
os-tmpdir: 1.0.2
which: 2.0.2
- performant-array-to-tree@1.11.0: {}
-
picocolors@1.0.0: {}
picocolors@1.0.1: {}
@@ -25415,7 +25676,7 @@ snapshots:
react: 18.2.0
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
- react-native-gesture-handler@2.18.1(patch_hash=3cmtvqiauuehrkeqz6qjuqgv4a)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
+ react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
dependencies:
'@egjs/hammerjs': 2.0.17
hoist-non-react-statics: 3.3.2
@@ -25555,28 +25816,9 @@ snapshots:
react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
whatwg-url-without-unicode: 8.0.0-3
- react-native-web-internals@1.101.3:
- dependencies:
- '@tamagui/normalize-css-color': 1.101.3
- '@tamagui/react-native-use-pressable': 1.101.3
- '@tamagui/react-native-use-responder-events': 1.101.3
- '@tamagui/simple-hash': 1.101.3
- react: 18.2.0
- styleq: 0.1.3
-
- react-native-web-lite@1.101.3(react@18.2.0):
- dependencies:
- '@tamagui/normalize-css-color': 1.101.3
- '@tamagui/react-native-use-pressable': 1.101.3
- '@tamagui/react-native-use-responder-events': 1.101.3
- invariant: 2.2.4
- react: 18.2.0
- react-native-web-internals: 1.101.3
- styleq: 0.1.3
-
react-native-web@0.19.12(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
dependencies:
- '@babel/runtime': 7.23.8
+ '@babel/runtime': 7.25.6
'@react-native/normalize-colors': 0.74.84
fbjs: 3.0.5(encoding@0.1.13)
inline-style-prefixer: 6.0.4
@@ -25598,7 +25840,7 @@ snapshots:
react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
dependencies:
- '@babel/runtime': 7.23.8
+ '@babel/runtime': 7.25.6
'@jest/create-cache-key-function': 29.7.0
'@react-native-community/cli': 12.3.6(encoding@0.1.13)
'@react-native-community/cli-platform-android': 12.3.6(encoding@0.1.13)
@@ -25878,6 +26120,14 @@ snapshots:
dependencies:
resolve: 1.22.8
+ recyclerlistview@4.2.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
+ dependencies:
+ lodash.debounce: 4.0.8
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)
+ ts-object-utils: 0.0.5
+
redent@3.0.0:
dependencies:
indent-string: 4.0.0
@@ -25896,15 +26146,6 @@ snapshots:
globalthis: 1.0.3
which-builtin-type: 1.1.3
- reforest@0.13.0(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0):
- dependencies:
- performant-array-to-tree: 1.11.0
- react: 18.2.0
- zustand: 4.5.1(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
- - immer
-
refractor@4.8.0:
dependencies:
'@types/hast': 2.3.4
@@ -25928,7 +26169,7 @@ snapshots:
regenerator-transform@0.15.2:
dependencies:
- '@babel/runtime': 7.23.8
+ '@babel/runtime': 7.25.6
regexp.prototype.flags@1.5.1:
dependencies:
@@ -26792,64 +27033,63 @@ snapshots:
transitivePeerDependencies:
- ts-node
- tamagui@1.101.3(@types/react@18.2.55)(immer@9.0.21)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
- dependencies:
- '@tamagui/accordion': 1.101.3
- '@tamagui/adapt': 1.101.3
- '@tamagui/alert-dialog': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/animate-presence': 1.101.3
- '@tamagui/avatar': 1.101.3(react@18.2.0)
- '@tamagui/button': 1.101.3(react@18.2.0)
- '@tamagui/card': 1.101.3
- '@tamagui/checkbox': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/compose-refs': 1.101.3
- '@tamagui/constants': 1.101.3
- '@tamagui/core': 1.101.3
- '@tamagui/create-context': 1.101.3
- '@tamagui/dialog': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/elements': 1.101.3(react@18.2.0)
- '@tamagui/fake-react-native': 1.101.3
- '@tamagui/focusable': 1.101.3
- '@tamagui/font-size': 1.101.3
- '@tamagui/form': 1.101.3(react@18.2.0)
- '@tamagui/get-button-sized': 1.101.3(react@18.2.0)
- '@tamagui/get-font-sized': 1.101.3
- '@tamagui/get-token': 1.101.3(react@18.2.0)
- '@tamagui/group': 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- '@tamagui/helpers-tamagui': 1.101.3(react@18.2.0)
- '@tamagui/image': 1.101.3(react@18.2.0)
- '@tamagui/label': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/linear-gradient': 1.101.3
- '@tamagui/list-item': 1.101.3(react@18.2.0)
- '@tamagui/polyfill-dev': 1.101.3
- '@tamagui/popover': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/popper': 1.101.3(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/portal': 1.101.3(react@18.2.0)
- '@tamagui/progress': 1.101.3(react@18.2.0)
- '@tamagui/radio-group': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/react-native-media-driver': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))
- '@tamagui/scroll-view': 1.101.3
- '@tamagui/select': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/separator': 1.101.3
- '@tamagui/shapes': 1.101.3
- '@tamagui/sheet': 1.101.3(@types/react@18.2.55)(react@18.2.0)
- '@tamagui/slider': 1.101.3(react@18.2.0)
- '@tamagui/stacks': 1.101.3
- '@tamagui/switch': 1.101.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/tabs': 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- '@tamagui/text': 1.101.3(react@18.2.0)
- '@tamagui/theme': 1.101.3
- '@tamagui/toggle-group': 1.101.3(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0)
- '@tamagui/tooltip': 1.101.3(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
- '@tamagui/use-controllable-state': 1.101.3
- '@tamagui/use-debounce': 1.101.3
- '@tamagui/use-force-update': 1.101.3
- '@tamagui/use-window-dimensions': 1.101.3(react@18.2.0)
- '@tamagui/visually-hidden': 1.101.3
+ tamagui@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0):
+ dependencies:
+ '@tamagui/accordion': 1.112.12(react@18.2.0)
+ '@tamagui/adapt': 1.112.12(react@18.2.0)
+ '@tamagui/alert-dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/animate-presence': 1.112.12(react@18.2.0)
+ '@tamagui/avatar': 1.112.12(react@18.2.0)
+ '@tamagui/button': 1.112.12(react@18.2.0)
+ '@tamagui/card': 1.112.12(react@18.2.0)
+ '@tamagui/checkbox': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/compose-refs': 1.112.12(react@18.2.0)
+ '@tamagui/constants': 1.112.12(react@18.2.0)
+ '@tamagui/core': 1.112.12(react@18.2.0)
+ '@tamagui/create-context': 1.112.12(react@18.2.0)
+ '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/elements': 1.112.12(react@18.2.0)
+ '@tamagui/fake-react-native': 1.112.12
+ '@tamagui/focusable': 1.112.12(react@18.2.0)
+ '@tamagui/font-size': 1.112.12(react@18.2.0)
+ '@tamagui/form': 1.112.12(react@18.2.0)
+ '@tamagui/get-button-sized': 1.112.12(react@18.2.0)
+ '@tamagui/get-font-sized': 1.112.12(react@18.2.0)
+ '@tamagui/get-token': 1.112.12(react@18.2.0)
+ '@tamagui/group': 1.112.12(react@18.2.0)
+ '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0)
+ '@tamagui/image': 1.112.12(react@18.2.0)
+ '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/linear-gradient': 1.112.12(react@18.2.0)
+ '@tamagui/list-item': 1.112.12(react@18.2.0)
+ '@tamagui/polyfill-dev': 1.112.12
+ '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/portal': 1.112.12(react@18.2.0)
+ '@tamagui/progress': 1.112.12(react@18.2.0)
+ '@tamagui/radio-group': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/react-native-media-driver': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/scroll-view': 1.112.12(react@18.2.0)
+ '@tamagui/select': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/separator': 1.112.12(react@18.2.0)
+ '@tamagui/shapes': 1.112.12(react@18.2.0)
+ '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0)
+ '@tamagui/slider': 1.112.12(react@18.2.0)
+ '@tamagui/stacks': 1.112.12(react@18.2.0)
+ '@tamagui/switch': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/tabs': 1.112.12(react@18.2.0)
+ '@tamagui/text': 1.112.12(react@18.2.0)
+ '@tamagui/theme': 1.112.12(react@18.2.0)
+ '@tamagui/toggle-group': 1.112.12(react@18.2.0)
+ '@tamagui/tooltip': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)
+ '@tamagui/use-controllable-state': 1.112.12(react@18.2.0)
+ '@tamagui/use-debounce': 1.112.12(react@18.2.0)
+ '@tamagui/use-force-update': 1.112.12(react@18.2.0)
+ '@tamagui/use-window-dimensions': 1.112.12(react@18.2.0)
+ '@tamagui/visually-hidden': 1.112.12(react@18.2.0)
+ react: 18.2.0
transitivePeerDependencies:
- '@types/react'
- - immer
- - react
- react-dom
- react-native
@@ -27031,15 +27271,19 @@ snapshots:
ts-interface-checker@0.1.13: {}
+ ts-object-utils@0.0.5: {}
+
tsc-files@1.1.4(typescript@5.4.5):
dependencies:
typescript: 5.4.5
tslib@1.14.1: {}
+ tslib@2.4.0: {}
+
tslib@2.6.2: {}
- tsup@8.0.1(@swc/core@1.4.16(@swc/helpers@0.5.10))(postcss@8.4.35)(typescript@5.4.5):
+ tsup@8.0.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.4.35)(typescript@5.4.5):
dependencies:
bundle-require: 4.0.2(esbuild@0.19.12)
cac: 6.7.14
@@ -27056,7 +27300,7 @@ snapshots:
sucrase: 3.35.0
tree-kill: 1.2.2
optionalDependencies:
- '@swc/core': 1.4.16(@swc/helpers@0.5.10)
+ '@swc/core': 1.7.26(@swc/helpers@0.5.13)
postcss: 8.4.35
typescript: 5.4.5
transitivePeerDependencies:
@@ -27760,7 +28004,7 @@ snapshots:
'@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0)
'@babel/core': 7.25.2
'@babel/preset-env': 7.23.7(@babel/core@7.25.2)
- '@babel/runtime': 7.23.8
+ '@babel/runtime': 7.25.6
'@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1)
'@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
'@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
@@ -28028,11 +28272,3 @@ snapshots:
zustand@3.7.2(react@18.2.0):
optionalDependencies:
react: 18.2.0
-
- zustand@4.5.1(@types/react@18.2.55)(immer@9.0.21)(react@18.2.0):
- dependencies:
- use-sync-external-store: 1.2.0(react@18.2.0)
- optionalDependencies:
- '@types/react': 18.2.55
- immer: 9.0.21
- react: 18.2.0