diff --git a/web/SWMansionIcon.react.js b/lib/components/SWMansionIcon.react.js rename from web/SWMansionIcon.react.js rename to lib/components/SWMansionIcon.react.js --- a/web/SWMansionIcon.react.js +++ b/lib/components/SWMansionIcon.react.js @@ -3,7 +3,7 @@ import * as React from 'react'; import IcomoonReact from 'react-icomoon'; -import iconSet from 'lib/shared/swmansion-icon-config.json'; +import iconSet from '../shared/swmansion-icon-config.json'; /* To see all of the icons the application uses and what their names are: diff --git a/lib/package.json b/lib/package.json --- a/lib/package.json +++ b/lib/package.json @@ -35,6 +35,7 @@ "just-clone": "^3.2.1", "lodash": "^4.17.21", "react": "18.1.0", + "react-icomoon": "^2.4.1", "react-redux": "^7.1.1", "reselect": "^4.0.0", "reselect-map": "^1.0.5", diff --git a/web/account/connected-wallet-info.react.js b/web/account/connected-wallet-info.react.js --- a/web/account/connected-wallet-info.react.js +++ b/web/account/connected-wallet-info.react.js @@ -4,9 +4,9 @@ import * as React from 'react'; import { useAccount, useEnsAvatar } from 'wagmi'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useENSName } from 'lib/hooks/ens-cache.js'; -import SWMansionIcon from '../SWMansionIcon.react.js'; import css from './connected-wallet-info.css'; function shortenAddressToFitWidth(address: string): string { diff --git a/web/account/password-input.react.js b/web/account/password-input.react.js --- a/web/account/password-input.react.js +++ b/web/account/password-input.react.js @@ -2,9 +2,12 @@ import * as React from 'react'; +import SWMansionIcon, { + type Icon, +} from 'lib/components/SWMansionIcon.react.js'; + import Button from '../components/button.react'; import Input, { type BaseInputProps } from '../modals/input.react'; -import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; import css from './password-input.css'; type PasswordInputProps = BaseInputProps; diff --git a/web/account/siwe-login-form.react.js b/web/account/siwe-login-form.react.js --- a/web/account/siwe-login-form.react.js +++ b/web/account/siwe-login-form.react.js @@ -14,6 +14,7 @@ siweAuth, siweAuthActionTypes, } from 'lib/actions/siwe-actions'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors'; import type { LogInStartingPayload } from 'lib/types/account-types.js'; import { @@ -32,7 +33,6 @@ import { setPrimaryIdentityPublicKey } from '../redux/primary-identity-public-key-reducer'; import { useSelector } from '../redux/redux-utils'; import { webLogInExtraInfoSelector } from '../selectors/account-selectors.js'; -import SWMansionIcon from '../SWMansionIcon.react.js'; import ConnectedWalletInfo from './connected-wallet-info.react.js'; import HeaderSeparator from './header-separator.react.js'; import css from './siwe.css'; diff --git a/web/apps/app-listing.react.js b/web/apps/app-listing.react.js --- a/web/apps/app-listing.react.js +++ b/web/apps/app-listing.react.js @@ -7,6 +7,7 @@ import * as React from 'react'; import { useDispatch } from 'react-redux'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { disableAppActionType, enableAppActionType, @@ -14,7 +15,6 @@ import type { SupportedApps } from 'lib/types/enabled-apps'; import Button from '../components/button.react'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './apps.css'; type Props = { diff --git a/web/calendar/calendar.react.js b/web/calendar/calendar.react.js --- a/web/calendar/calendar.react.js +++ b/web/calendar/calendar.react.js @@ -10,6 +10,7 @@ updateCalendarQueryActionTypes, updateCalendarQuery, } from 'lib/actions/entry-actions'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { currentDaysToEntries } from 'lib/selectors/thread-selectors'; import { isLoggedIn } from 'lib/selectors/user-selectors'; import { @@ -36,7 +37,6 @@ monthAssertingSelector, webCalendarQuery, } from '../selectors/nav-selectors'; -import SWMansionIcon from '../SWMansionIcon.react'; import type { NavInfo } from '../types/nav-types'; import { canonicalURLFromReduxState } from '../url-utils'; import css from './calendar.css'; diff --git a/web/chat/chat-input-bar.react.js b/web/chat/chat-input-bar.react.js --- a/web/chat/chat-input-bar.react.js +++ b/web/chat/chat-input-bar.react.js @@ -9,6 +9,7 @@ joinThread, newThreadActionTypes, } from 'lib/actions/thread-actions'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors'; import { userStoreSearchIndex, @@ -50,7 +51,6 @@ import Multimedia from '../media/multimedia.react'; import { useSelector } from '../redux/redux-utils'; import { nonThreadCalendarQuery } from '../selectors/nav-selectors'; -import SWMansionIcon from '../SWMansionIcon.react'; import { webTypeaheadRegex } from '../utils/typeahead-utils'; import css from './chat-input-bar.css'; import TypeaheadTooltip from './typeahead-tooltip.react'; diff --git a/web/chat/chat-thread-ancestors.react.js b/web/chat/chat-thread-ancestors.react.js --- a/web/chat/chat-thread-ancestors.react.js +++ b/web/chat/chat-thread-ancestors.react.js @@ -3,6 +3,7 @@ import classNames from 'classnames'; import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useAncestorThreads } from 'lib/shared/ancestor-threads'; import { colorIsDark } from 'lib/shared/thread-utils'; import { useKeyserverAdmin } from 'lib/shared/user-utils'; @@ -10,7 +11,6 @@ import { useResolvedThreadInfo } from 'lib/utils/entity-helpers'; import CommIcon from '../CommIcon.react'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './chat-thread-ancestors.css'; const SHOW_SEE_FULL_STRUCTURE = false; diff --git a/web/chat/chat-thread-composer.react.js b/web/chat/chat-thread-composer.react.js --- a/web/chat/chat-thread-composer.react.js +++ b/web/chat/chat-thread-composer.react.js @@ -3,6 +3,7 @@ import * as React from 'react'; import { useDispatch } from 'react-redux'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useENSNames } from 'lib/hooks/ens-cache'; import { userSearchIndexForPotentialMembers } from 'lib/selectors/user-selectors'; import { getPotentialMemberItems } from 'lib/shared/search-utils'; @@ -15,7 +16,6 @@ import type { InputState } from '../input/input-state'; import { updateNavInfoActionType } from '../redux/action-types'; import { useSelector } from '../redux/redux-utils'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './chat-thread-composer.css'; type Props = { diff --git a/web/chat/chat-thread-list-item-menu.react.js b/web/chat/chat-thread-list-item-menu.react.js --- a/web/chat/chat-thread-list-item-menu.react.js +++ b/web/chat/chat-thread-list-item-menu.react.js @@ -3,12 +3,12 @@ import classNames from 'classnames'; import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import useToggleUnreadStatus from 'lib/hooks/toggle-unread-status'; import type { ThreadInfo } from 'lib/types/thread-types'; import Button from '../components/button.react'; import { useThreadIsActive } from '../selectors/thread-selectors'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './chat-thread-list-item-menu.css'; type Props = { diff --git a/web/chat/chat-thread-list-item.react.js b/web/chat/chat-thread-list-item.react.js --- a/web/chat/chat-thread-list-item.react.js +++ b/web/chat/chat-thread-list-item.react.js @@ -3,6 +3,7 @@ import classNames from 'classnames'; import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import type { ChatThreadItem } from 'lib/selectors/chat-selectors'; import { useAncestorThreads } from 'lib/shared/ancestor-threads'; import { shortAbsoluteDate } from 'lib/utils/date-utils'; @@ -16,7 +17,6 @@ useOnClickThread, useThreadIsActive, } from '../selectors/thread-selectors'; -import SWMansionIcon from '../SWMansionIcon.react'; import ChatThreadListItemMenu from './chat-thread-list-item-menu.react'; import ChatThreadListSeeMoreSidebars from './chat-thread-list-see-more-sidebars.react'; import ChatThreadListSidebar from './chat-thread-list-sidebar.react'; diff --git a/web/chat/chat-thread-tab.react.js b/web/chat/chat-thread-tab.react.js --- a/web/chat/chat-thread-tab.react.js +++ b/web/chat/chat-thread-tab.react.js @@ -2,7 +2,10 @@ import * as React from 'react'; -import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; +import SWMansionIcon, { + type Icon, +} from 'lib/components/SWMansionIcon.react.js'; + import css from './chat-tabs.css'; type Props = { diff --git a/web/chat/thread-menu.react.js b/web/chat/thread-menu.react.js --- a/web/chat/thread-menu.react.js +++ b/web/chat/thread-menu.react.js @@ -7,6 +7,7 @@ leaveThreadActionTypes, } from 'lib/actions/thread-actions'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { usePromoteSidebar } from 'lib/hooks/promote-sidebar.react'; import { childThreadInfos } from 'lib/selectors/thread-selectors'; import { @@ -35,7 +36,6 @@ import SidebarsModal from '../modals/threads/sidebars/sidebars-modal.react'; import SubchannelsModal from '../modals/threads/subchannels/subchannels-modal.react'; import { useSelector } from '../redux/redux-utils'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './thread-menu.css'; type ThreadMenuProps = { diff --git a/web/components/clear-search-button.react.js b/web/components/clear-search-button.react.js --- a/web/components/clear-search-button.react.js +++ b/web/components/clear-search-button.react.js @@ -3,7 +3,8 @@ import classNames from 'classnames'; import * as React from 'react'; -import SWMansionIcon from '../SWMansionIcon.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import Button from './button.react'; import css from './search.css'; diff --git a/web/components/enum-settings-option-info.react.js b/web/components/enum-settings-option-info.react.js --- a/web/components/enum-settings-option-info.react.js +++ b/web/components/enum-settings-option-info.react.js @@ -3,7 +3,8 @@ import classnames from 'classnames'; import * as React from 'react'; -import SWMansionIcon from '../SWMansionIcon.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import css from './enum-settings-option-info.css'; type Props = { diff --git a/web/components/label.react.js b/web/components/label.react.js --- a/web/components/label.react.js +++ b/web/components/label.react.js @@ -2,7 +2,8 @@ import * as React from 'react'; -import SWMansionIcon from '../SWMansionIcon.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import Button from './button.react'; import css from './label.css'; diff --git a/web/components/menu-item.react.js b/web/components/menu-item.react.js --- a/web/components/menu-item.react.js +++ b/web/components/menu-item.react.js @@ -3,7 +3,10 @@ import classNames from 'classnames'; import * as React from 'react'; -import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; +import SWMansionIcon, { + type Icon, +} from 'lib/components/SWMansionIcon.react.js'; + import Button from './button.react'; import css from './menu.css'; diff --git a/web/components/navigation-arrows.react.js b/web/components/navigation-arrows.react.js --- a/web/components/navigation-arrows.react.js +++ b/web/components/navigation-arrows.react.js @@ -3,9 +3,10 @@ import classnames from 'classnames'; import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import electron from '../electron.js'; import history from '../router-history.js'; -import SWMansionIcon from '../SWMansionIcon.react.js'; import css from './navigation-arrows.css'; const stopDoubleClickPropagation = e => e.stopPropagation(); diff --git a/web/components/search.react.js b/web/components/search.react.js --- a/web/components/search.react.js +++ b/web/components/search.react.js @@ -2,7 +2,8 @@ import * as React from 'react'; -import SWMansionIcon from '../SWMansionIcon.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import ClearSearchButton from './clear-search-button.react'; import css from './search.css'; diff --git a/web/modals/modal.react.js b/web/modals/modal.react.js --- a/web/modals/modal.react.js +++ b/web/modals/modal.react.js @@ -4,9 +4,11 @@ import * as React from 'react'; import ModalOverlay from 'lib/components/modal-overlay.react'; +import SWMansionIcon, { + type Icon, +} from 'lib/components/SWMansionIcon.react.js'; import Button from '../components/button.react'; -import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; import css from './modal.css'; export type ModalSize = 'small' | 'large' | 'fit-content'; diff --git a/web/modals/threads/create/steps/subchannel-settings.react.js b/web/modals/threads/create/steps/subchannel-settings.react.js --- a/web/modals/threads/create/steps/subchannel-settings.react.js +++ b/web/modals/threads/create/steps/subchannel-settings.react.js @@ -2,12 +2,12 @@ import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { threadTypeDescriptions } from 'lib/shared/thread-utils'; import { threadTypes } from 'lib/types/thread-types'; import CommIcon from '../../../../CommIcon.react'; import EnumSettingsOption from '../../../../components/enum-settings-option.react'; -import SWMansionIcon from '../../../../SWMansionIcon.react'; import Input from '../../../input.react'; import css from './subchannel-settings.css'; diff --git a/web/modals/threads/members/member.react.js b/web/modals/threads/members/member.react.js --- a/web/modals/threads/members/member.react.js +++ b/web/modals/threads/members/member.react.js @@ -7,6 +7,7 @@ removeUsersFromThread, changeThreadMemberRoles, } from 'lib/actions/thread-actions'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { memberIsAdmin, memberHasAdminPowers, @@ -28,7 +29,6 @@ import Label from '../../../components/label.react'; import MenuItem from '../../../components/menu-item.react'; import Menu from '../../../components/menu.react'; -import SWMansionIcon from '../../../SWMansionIcon.react'; import css from './members-modal.css'; type Props = { diff --git a/web/modals/threads/settings/thread-settings-delete-tab.react.js b/web/modals/threads/settings/thread-settings-delete-tab.react.js --- a/web/modals/threads/settings/thread-settings-delete-tab.react.js +++ b/web/modals/threads/settings/thread-settings-delete-tab.react.js @@ -7,6 +7,7 @@ deleteThread, } from 'lib/actions/thread-actions'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { type SetState } from 'lib/types/hook-types'; import { type ThreadInfo } from 'lib/types/thread-types'; import { @@ -15,7 +16,6 @@ } from 'lib/utils/action-utils'; import { buttonThemes } from '../../../components/button.react'; -import SWMansionIcon from '../../../SWMansionIcon.react'; import SubmitSection from './submit-section.react'; import css from './thread-settings-delete-tab.css'; diff --git a/web/modals/threads/settings/thread-settings-privacy-tab.react.js b/web/modals/threads/settings/thread-settings-privacy-tab.react.js --- a/web/modals/threads/settings/thread-settings-privacy-tab.react.js +++ b/web/modals/threads/settings/thread-settings-privacy-tab.react.js @@ -7,6 +7,7 @@ changeThreadSettingsActionTypes, } from 'lib/actions/thread-actions'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { threadTypeDescriptions } from 'lib/shared/thread-utils'; import { type SetState } from 'lib/types/hook-types'; import { @@ -20,7 +21,6 @@ } from 'lib/utils/action-utils'; import EnumSettingsOption from '../../../components/enum-settings-option.react'; -import SWMansionIcon from '../../../SWMansionIcon.react'; import SubmitSection from './submit-section.react'; import css from './thread-settings-privacy-tab.css'; diff --git a/web/modals/threads/subchannels/subchannel.react.js b/web/modals/threads/subchannels/subchannel.react.js --- a/web/modals/threads/subchannels/subchannel.react.js +++ b/web/modals/threads/subchannels/subchannel.react.js @@ -4,6 +4,7 @@ import * as React from 'react'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { type ChatThreadItem } from 'lib/selectors/chat-selectors'; import { useMessagePreview } from 'lib/shared/message-utils'; import { shortAbsoluteDate } from 'lib/utils/date-utils'; @@ -12,7 +13,6 @@ import Button from '../../../components/button.react'; import { getDefaultTextMessageRules } from '../../../markdown/rules.react'; import { useOnClickThread } from '../../../selectors/thread-selectors'; -import SWMansionIcon from '../../../SWMansionIcon.react'; import css from './subchannels-modal.css'; type Props = { diff --git a/web/settings/account-delete-modal.react.js b/web/settings/account-delete-modal.react.js --- a/web/settings/account-delete-modal.react.js +++ b/web/settings/account-delete-modal.react.js @@ -8,6 +8,7 @@ deleteAccountActionTypes, } from 'lib/actions/user-actions'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { preRequestUserStateSelector } from 'lib/selectors/account-selectors'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors'; import { accountHasPassword } from 'lib/shared/account-utils.js'; @@ -23,7 +24,6 @@ import Input from '../modals/input.react'; import Modal from '../modals/modal.react'; import { useSelector } from '../redux/redux-utils'; -import SWMansionIcon from '../SWMansionIcon.react.js'; import css from './account-delete-modal.css'; type Props = { diff --git a/web/settings/account-settings.react.js b/web/settings/account-settings.react.js --- a/web/settings/account-settings.react.js +++ b/web/settings/account-settings.react.js @@ -4,6 +4,7 @@ import { logOut, logOutActionTypes } from 'lib/actions/user-actions'; import { useModalContext } from 'lib/components/modal-provider.react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useStringForUser } from 'lib/hooks/ens-cache'; import { preRequestUserStateSelector } from 'lib/selectors/account-selectors'; import { accountHasPassword } from 'lib/shared/account-utils.js'; @@ -14,7 +15,6 @@ import Button from '../components/button.react'; import { useSelector } from '../redux/redux-utils'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './account-settings.css'; import PasswordChangeModal from './password-change-modal'; import BlockListModal from './relationship/block-list-modal.react'; diff --git a/web/settings/relationship/block-list-row.react.js b/web/settings/relationship/block-list-row.react.js --- a/web/settings/relationship/block-list-row.react.js +++ b/web/settings/relationship/block-list-row.react.js @@ -2,11 +2,11 @@ import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useRelationshipCallbacks } from 'lib/hooks/relationship-prompt'; import MenuItem from '../../components/menu-item.react'; import Menu from '../../components/menu.react'; -import SWMansionIcon from '../../SWMansionIcon.react'; import css from './user-list-row.css'; import type { UserRowProps } from './user-list.react'; diff --git a/web/settings/relationship/friend-list-row.react.js b/web/settings/relationship/friend-list-row.react.js --- a/web/settings/relationship/friend-list-row.react.js +++ b/web/settings/relationship/friend-list-row.react.js @@ -2,13 +2,13 @@ import * as React from 'react'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useRelationshipCallbacks } from 'lib/hooks/relationship-prompt'; import { userRelationshipStatus } from 'lib/types/relationship-types'; import Button from '../../components/button.react'; import MenuItem from '../../components/menu-item.react'; import Menu from '../../components/menu.react'; -import SWMansionIcon from '../../SWMansionIcon.react'; import css from './user-list-row.css'; import type { UserRowProps } from './user-list.react'; diff --git a/web/sidebar/app-switcher.react.js b/web/sidebar/app-switcher.react.js --- a/web/sidebar/app-switcher.react.js +++ b/web/sidebar/app-switcher.react.js @@ -3,6 +3,7 @@ import * as React from 'react'; import { useDispatch } from 'react-redux'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { mostRecentlyReadThreadSelector, unreadCount, @@ -11,7 +12,6 @@ import { updateNavInfoActionType } from '../redux/action-types'; import { useSelector } from '../redux/redux-utils'; import { navTabSelector } from '../selectors/nav-selectors.js'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './left-layout-aside.css'; import NavigationPanel from './navigation-panel.react'; diff --git a/web/sidebar/community-picker.react.js b/web/sidebar/community-picker.react.js --- a/web/sidebar/community-picker.react.js +++ b/web/sidebar/community-picker.react.js @@ -4,9 +4,10 @@ import * as React from 'react'; import { useDispatch } from 'react-redux'; +import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; + import { updateNavInfoActionType } from '../redux/action-types.js'; import { useSelector } from '../redux/redux-utils.js'; -import SWMansionIcon from '../SWMansionIcon.react'; import css from './community-picker.css'; function CommunityPicker(): React.Node {