import { color, ColorProps, composeRestyleFunctions, createRestyleFunction, useRestyle, VariantProps } from '@shopify/restyle'; import AddUser from '~/assets/svg/ic-add-user.svg'; import ArrowDown from '~/assets/svg/ic-arrow-down.svg'; import ArrowRight from '~/assets/svg/ic-arrow-right.svg'; import ArrowTopRight from '~/assets/svg/ic-arrow-top-right.svg'; import ArrowUp from '~/assets/svg/ic-arrow-up.svg'; import BarChartOutline from '~/assets/svg/ic-bar-chart-outline.svg'; import CalendarToday from '~/assets/svg/ic-calendar-today.svg'; import Calendar from '~/assets/svg/ic-calendar.svg'; import CalendarMonth from '~/assets/svg/ic-calendar_month.svg'; import Camera from '~/assets/svg/ic-camera.svg'; import CheckCircle from '~/assets/svg/ic-check-circle.svg'; import ChevronDown from '~/assets/svg/ic-chevron-down.svg'; import ChevronLeft from '~/assets/svg/ic-chevron-left.svg'; import ChevronRight from '~/assets/svg/ic-chevron-right.svg'; import CircleClose from '~/assets/svg/ic-circle-close.svg'; import ClipboardIcon from '~/assets/svg/ic-clipboard.svg'; import CommentIcon from '~/assets/svg/ic-comment.svg'; import ContactSupport from '~/assets/svg/ic-contact-support.svg'; import Contacts from '~/assets/svg/ic-contacts.svg'; import DataBuyers from '~/assets/svg/ic-data-buyers.svg'; import Download from '~/assets/svg/ic-download.svg'; import EditAvatar from '~/assets/svg/ic-edit-avatar.svg'; import Edit from '~/assets/svg/ic-edit.svg'; import EditPencil from '~/assets/svg/ic-edit_pencil.svg'; import Email from '~/assets/svg/ic-email.svg'; import Explore from '~/assets/svg/ic-explore.svg'; import EyeHiddenIcon from '~/assets/svg/ic-eye-hidden.svg'; import EyeShowIcon from '~/assets/svg/ic-eye-show.svg'; import FlagOutlined from '~/assets/svg/ic-flag-outlined.svg'; import Flag from '~/assets/svg/ic-flag.svg'; import FullScreen from '~/assets/svg/ic-full-screen.svg'; import GobletSearch from '~/assets/svg/ic-goblet-search.svg'; import Goblet from '~/assets/svg/ic-goblet.svg'; import Grid from '~/assets/svg/ic-grid.svg'; import Groups from '~/assets/svg/ic-groups.svg'; import HeartOutline from '~/assets/svg/ic-heart-outline.svg'; import Heart from '~/assets/svg/ic-heart.svg'; import Human from '~/assets/svg/ic-human.svg'; import ImagePicker from '~/assets/svg/ic-image-picker.svg'; import InfoFilled from '~/assets/svg/ic-info-filled.svg'; import Info from '~/assets/svg/ic-info.svg'; import InviteContacts from '~/assets/svg/ic-invite-contacts.svg'; import LeadingStar from '~/assets/svg/ic-leading-star.svg'; import Link from '~/assets/svg/ic-link.svg'; import LocationMarkIcon from '~/assets/svg/ic-location-mark.svg'; import Lock from '~/assets/svg/ic-lock.svg'; import Logout from '~/assets/svg/ic-logout.svg'; import ManageAccounts from '~/assets/svg/ic-manage-accounts.svg'; import ManageAdmins from '~/assets/svg/ic-manage-admins.svg'; import Menu from '~/assets/svg/ic-menu.svg'; import Message from '~/assets/svg/ic-message.svg'; import EmptyMembers from '~/assets/svg/ic-multiple-accounts-empty.svg'; import NotFoundLocationMark from '~/assets/svg/ic-not-found-location-mark.svg'; import Notifications from '~/assets/svg/ic-notifications.svg'; import OnlyLocationMark from '~/assets/svg/ic-only-location-mark.svg'; import PersonOutline from '~/assets/svg/ic-person-outline.svg'; import Person from '~/assets/svg/ic-person.svg'; import PersonalInfo from '~/assets/svg/ic-personal-info.svg'; import Phone from '~/assets/svg/ic-phone.svg'; import Photo from '~/assets/svg/ic-photo.svg'; import PlaceIcon from '~/assets/svg/ic-place.svg'; import PrivacyPolicy from '~/assets/svg/ic-privacy-policy.svg'; import Profile from '~/assets/svg/ic-profile.svg'; import QuestionMarkSquare from '~/assets/svg/ic-question-mark-square.svg'; import Reload from '~/assets/svg/ic-reload.svg'; import RemoveUser from '~/assets/svg/ic-remove-user.svg'; import Rocket from '~/assets/svg/ic-rocket.svg'; import Rotate from '~/assets/svg/ic-rotate.svg'; import Search from '~/assets/svg/ic-search.svg'; import SendIcon from '~/assets/svg/ic-send.svg'; import Settings from '~/assets/svg/ic-settings.svg'; import Share from '~/assets/svg/ic-share.svg'; import SmileSad from '~/assets/svg/ic-smile-sad.svg'; import Star from '~/assets/svg/ic-star.svg'; import VoteIcon from '~/assets/svg/ic-vote.svg'; import Wallet from '~/assets/svg/ic-wallet.svg'; import Wearable from '~/assets/svg/ic-wearable.svg'; import Website from '~/assets/svg/ic-website.svg'; import ZoomOut from '~/assets/svg/ic-zoom-out.svg'; import Discord from '~/assets/svg/social/ic-discord.svg'; import Facebook from '~/assets/svg/social/ic-facebook.svg'; import Instagram from '~/assets/svg/social/ic-instagram.svg'; import Linkedin from '~/assets/svg/social/ic-linkedin.svg'; import Telegram from '~/assets/svg/social/ic-telegram.svg'; import Tiktok from '~/assets/svg/social/ic-tiktok.svg'; import Twitter from '~/assets/svg/social/ic-twitter.svg'; import Whatsapp from '~/assets/svg/social/ic-whatsapp.svg'; import DiscordMain from '~/assets/svg/socials/discord.svg'; import FacebookMain from '~/assets/svg/socials/facebook.svg'; import InstagramMain from '~/assets/svg/socials/instagram.svg'; import TelegramMain from '~/assets/svg/socials/telegram.svg'; import TikTokMain from '~/assets/svg/socials/tiktok.svg'; import TwitterMain from '~/assets/svg/socials/twitter.svg'; import WhatsappMain from '~/assets/svg/socials/whatsapp.svg'; import TabActivities from '~/assets/svg/tabs/ic-tab-activity.svg'; import TabEvents from '~/assets/svg/tabs/ic-tab-events.svg'; import TabHome from '~/assets/svg/tabs/ic-tab-home.svg'; import TabProfile from '~/assets/svg/tabs/ic-tab-profile.svg'; import { AppTheme } from '~/view/theme'; export type IconName = | 'tab-home' | 'tab-activities' | 'tab-events' | 'tab-profile' | 'add-user' | 'calendar' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'edit' | 'flag-outlined' | 'flag' | 'goblet' | 'grid' | 'goblet-search' | 'groups' | 'edit-avatar' | 'link' | 'lock' | 'info-filled' | 'heart-outline' | 'heart' | 'place' | 'personal-info' | 'person-outline' | 'human' | 'data-buyers' | 'wearable' | 'profile' | 'logout' | 'invite-contacts' | 'menu' | 'eye-show' | 'eye-hidden' | 'contacts' | 'email' | 'phone' | 'question-mark-square' | 'rotate' | 'image-picker' | 'share' | 'smile-sad' | 'settings' | 'location-mark' | 'comment' | 'vote' | 'bar-chart-outline' | 'download' | 'reload' | 'not-found-location-mark' | 'rocket' | 'manage-accounts' | 'calendar-month' | 'facebook' | 'website' | 'instagram' | 'linkedin' | 'tiktok' | 'twitter' | 'person' | 'star' | 'full-screen' | 'zoom-out' | 'wallet' | 'manage-admins' | 'only-location-mark' | 'website-main' | 'tiktok-main' | 'facebook-main' | 'instagram-main' | 'twitter-main' | 'discord-main' | 'telegram-main' | 'whatsapp-main' | 'edit-pencil' | 'check-circle' | 'camera' | 'photo' | 'empty-accounts' | 'remove-user' | 'message' | 'send' | 'calendar-today' | 'arrow-right' | 'arrow-top-right' | 'arrow-up' | 'arrow-down' | 'leading-star' | 'notifications' | 'contact-support' | 'explore' | 'privacy-policy' | 'clipboard' | 'whatsapp' | 'telegram' | 'discord' | 'search' | 'info' | 'circle-close'; export type IconProps = ThemedProps & { name: IconName; }; type ThemedProps = ColorProps & VariantProps; /** * map "size" prop to "width" StylProp using iconSizes from AppTheme */ const size = createRestyleFunction({ property: 'size', styleProperty: 'width', transform: v => { const key = v.value as keyof typeof v.theme.iconSizes; return v.theme.iconSizes[key]; } }); const restyleFunctions = composeRestyleFunctions([color, size as any]); export const AppIcon = ({ name, color = 'onSurface', size = 'm' }: IconProps) => { // seems like types are broken ... :(, so "any" for now const props: any = useRestyle(restyleFunctions as any, { color, size }); const style: any = props.style[0]; const widthValue = style['width']; const colorValue = style['color']; switch (name) { case 'tab-home': return ; case 'tab-activities': return ; case 'tab-events': return ; case 'tab-profile': return ; case 'add-user': return ; case 'calendar': return ; case 'chevron-down': return ; case 'chevron-left': return ; case 'chevron-right': return ; case 'edit': return ; case 'flag-outlined': return ; case 'flag': return ; case 'goblet': return ; case 'grid': return ; case 'goblet-search': return ; case 'groups': return ; case 'edit-avatar': return ; case 'link': return ; case 'lock': return ; case 'info-filled': return ; case 'heart-outline': return ; case 'heart': return ; case 'place': return ; case 'personal-info': return ; case 'person-outline': return ; case 'human': return ; case 'data-buyers': return ; case 'wearable': return ; case 'profile': return ; case 'logout': return ; case 'invite-contacts': return ; case 'menu': return ; case 'eye-show': return ; case 'eye-hidden': return ; case 'contacts': return ; case 'email': return ; case 'phone': return ; case 'question-mark-square': return ; case 'rotate': return ; case 'image-picker': return ; case 'share': return ; case 'smile-sad': return ; case 'settings': return ; case 'info': return ; case 'location-mark': return ; case 'comment': return ; case 'vote': return ; case 'bar-chart-outline': return ; case 'download': return ; case 'reload': return ; case 'not-found-location-mark': return ; case 'rocket': return ; case 'manage-accounts': return ; case 'calendar-month': return ; case 'facebook': return ; case 'website': return ; case 'instagram': return ; case 'linkedin': return ; case 'tiktok': return ; case 'twitter': return ; case 'person': return ; case 'star': return ; case 'full-screen': return ; case 'zoom-out': return ; case 'wallet': return ; case 'manage-admins': return ; case 'only-location-mark': return ; case 'website-main': return ; case 'tiktok-main': return ; case 'facebook-main': return ; case 'instagram-main': return ; case 'twitter-main': return ; case 'discord-main': return ; case 'telegram-main': return ; case 'whatsapp-main': return ; case 'edit-pencil': return ; case 'check-circle': return ; case 'camera': return ; case 'photo': return ; case 'empty-accounts': return ; case 'remove-user': return ; case 'message': return ; case 'send': return ; case 'calendar-today': return ( ); case 'arrow-right': return ; case 'arrow-top-right': return ( ); case 'arrow-up': return ; case 'arrow-down': return ; case 'leading-star': return ( ); case 'notifications': return ( ); case 'contact-support': return ( ); case 'explore': return ; case 'privacy-policy': return ( ); case 'clipboard': return ( ); case 'whatsapp': return ; case 'telegram': return ; case 'discord': return ; case 'search': return ; case 'circle-close': return ( ); default: return null; } };