···15151616import {usePalette} from '#/lib/hooks/usePalette'
1717import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
1818-import {compressIfNeeded} from '#/lib/media/manip'
1919-import {type PickerImage} from '#/lib/media/picker.shared'
2018import {cleanError, isNetworkError} from '#/lib/strings/errors'
2119import {enforceLen} from '#/lib/strings/helpers'
2220import {richTextToString} from '#/lib/strings/rich-text-helpers'
2321import {shortenLinks, stripInvalidMentions} from '#/lib/strings/rich-text-manip'
2422import {colors, gradients, s} from '#/lib/styles'
2523import {useTheme} from '#/lib/ThemeContext'
2424+import {type ImageMeta} from '#/state/gallery'
2625import {useModalControls} from '#/state/modals'
2726import {
2827 useListCreateMutation,
2928 useListMetadataMutation,
3029} from '#/state/queries/list'
3130import {useAgent} from '#/state/session'
3232-import {ErrorMessage} from '../util/error/ErrorMessage'
3333-import {Text} from '../util/text/Text'
3434-import * as Toast from '../util/Toast'
3535-import {EditableUserAvatar} from '../util/UserAvatar'
3131+import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
3232+import {Text} from '#/view/com/util/text/Text'
3333+import * as Toast from '#/view/com/util/Toast'
3434+import {EditableUserAvatar} from '#/view/com/util/UserAvatar'
36353736const MAX_NAME = 64 // todo
3837const MAX_DESCRIPTION = 300 // todo
···9594 const isDescriptionOver = graphemeLength > MAX_DESCRIPTION
96959796 const [avatar, setAvatar] = useState<string | undefined>(list?.avatar)
9898- const [newAvatar, setNewAvatar] = useState<PickerImage | undefined | null>()
9797+ const [newAvatar, setNewAvatar] = useState<ImageMeta | undefined | null>()
999810099 const onDescriptionChange = useCallback(
101100 (newText: string) => {
···112111 }, [closeModal])
113112114113 const onSelectNewAvatar = useCallback(
115115- async (img: PickerImage | null) => {
114114+ (img: ImageMeta | null) => {
116115 if (!img) {
117116 setNewAvatar(null)
118117 setAvatar(undefined)
119118 return
120119 }
121120 try {
122122- const finalImg = await compressIfNeeded(img, 1000000)
123123- setNewAvatar(finalImg)
124124- setAvatar(finalImg.path)
121121+ setNewAvatar(img)
122122+ setAvatar(img.path)
125123 } catch (e: any) {
126124 setError(cleanError(e))
127125 }
+1-5
src/view/com/modals/Modal.tsx
···1010import * as ChangePasswordModal from './ChangePassword'
1111import * as CreateOrEditListModal from './CreateOrEditList'
1212import * as DeleteAccountModal from './DeleteAccount'
1313-import * as EditProfileModal from './EditProfile'
1413import * as InviteCodesModal from './InviteCodes'
1514import * as ContentLanguagesSettingsModal from './lang-settings/ContentLanguagesSettings'
1615import * as PostLanguagesSettingsModal from './lang-settings/PostLanguagesSettings'
···48474948 let snapPoints: (string | number)[] = DEFAULT_SNAPPOINTS
5049 let element
5151- if (activeModal?.name === 'edit-profile') {
5252- snapPoints = EditProfileModal.snapPoints
5353- element = <EditProfileModal.Component {...activeModal} />
5454- } else if (activeModal?.name === 'create-or-edit-list') {
5050+ if (activeModal?.name === 'create-or-edit-list') {
5551 snapPoints = CreateOrEditListModal.snapPoints
5652 element = <CreateOrEditListModal.Component {...activeModal} />
5753 } else if (activeModal?.name === 'user-add-remove-lists') {
+1-10
src/view/com/modals/Modal.web.tsx
···88import {useModalControls, useModals} from '#/state/modals'
99import * as ChangePasswordModal from './ChangePassword'
1010import * as CreateOrEditListModal from './CreateOrEditList'
1111-import * as CropImageModal from './CropImage.web'
1211import * as DeleteAccountModal from './DeleteAccount'
1313-import * as EditProfileModal from './EditProfile'
1412import * as InviteCodesModal from './InviteCodes'
1513import * as ContentLanguagesSettingsModal from './lang-settings/ContentLanguagesSettings'
1614import * as PostLanguagesSettingsModal from './lang-settings/PostLanguagesSettings'
···4543 }
46444745 const onPressMask = () => {
4848- if (modal.name === 'crop-image') {
4949- return // dont close on mask presses during crop
5050- }
5146 closeModal()
5247 }
5348 const onInnerPress = () => {
···5651 }
57525853 let element
5959- if (modal.name === 'edit-profile') {
6060- element = <EditProfileModal.Component {...modal} />
6161- } else if (modal.name === 'create-or-edit-list') {
5454+ if (modal.name === 'create-or-edit-list') {
6255 element = <CreateOrEditListModal.Component {...modal} />
6356 } else if (modal.name === 'user-add-remove-lists') {
6457 element = <UserAddRemoveLists.Component {...modal} />
6565- } else if (modal.name === 'crop-image') {
6666- element = <CropImageModal.Component {...modal} />
6758 } else if (modal.name === 'delete-account') {
6859 element = <DeleteAccountModal.Component />
6960 } else if (modal.name === 'invite-codes') {
+2-2
src/view/com/util/EventStopper.tsx
···11-import React from 'react'
22-import {View, ViewStyle} from 'react-native'
11+import {View, type ViewStyle} from 'react-native'
22+import type React from 'react'
3344/**
55 * This utility function captures events and stops