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 @@ -13,6 +13,7 @@ } from 'lib/reducers/enabled-apps-reducer'; import type { SupportedApps } from 'lib/types/enabled-apps'; +import Button from '../components/button.react'; import SWMansionIcon from '../SWMansionIcon.react'; import css from './apps.css'; @@ -52,18 +53,15 @@ ); } - const iconClasses = classnames( - css.appListingIcon, - css.appListingIconState, - { - [css.iconEnabled]: enabled, - [css.iconDisabled]: !enabled, - }, - ); + const iconClasses = classnames({ + [css.appListingIconState]: true, + [css.iconEnabled]: enabled, + [css.iconDisabled]: !enabled, + }); return ( -
+
+ ); }, [enabled, readOnly, switchAppState]); return ( diff --git a/web/apps/apps.css b/web/apps/apps.css --- a/web/apps/apps.css +++ b/web/apps/apps.css @@ -46,7 +46,8 @@ align-items: center; } -div.appListingIconState { +.appListingIconState { + padding: 0 20px; font-size: var(--xl-font-20); } @@ -54,10 +55,10 @@ color: var(--app-list-icon-read-only-color); } -div.iconEnabled { +.iconEnabled { color: var(--app-list-icon-enabled-color); } -div.iconDisabled { +.iconDisabled { color: var(--app-list-icon-disabled-color); } diff --git a/web/chat/chat-thread-composer.css b/web/chat/chat-thread-composer.css --- a/web/chat/chat-thread-composer.css +++ b/web/chat/chat-thread-composer.css @@ -34,10 +34,7 @@ flex-grow: 1; } -div.closeSearch { - cursor: pointer; - display: flex; - align-items: center; +.closeSearch { color: var(--thread-creation-close-search-color); margin: 0 8px; } 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 @@ -174,9 +174,9 @@ placeholder="Select users for chat" /> -
+
+ {tagsList} {userSearchResultList} 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 @@ -6,6 +6,7 @@ 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/nav-selectors'; import SWMansionIcon from '../SWMansionIcon.react'; import css from './chat-thread-list-item-menu.css'; @@ -59,14 +60,14 @@ }); return (
- +
- +
); 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 @@ -4,6 +4,7 @@ import * as React from 'react'; import SWMansionIcon from '../SWMansionIcon.react'; +import Button from './button.react'; import css from './search.css'; type ClearSearchButtonProps = { @@ -17,9 +18,9 @@ [css.clearSearchDisabled]: !active, }); return ( - + ); } diff --git a/web/components/label.css b/web/components/label.css --- a/web/components/label.css +++ b/web/components/label.css @@ -7,10 +7,6 @@ } button.close { - display: flex; - align-items: center; margin-left: 4px; - background: transparent; - border: none; color: inherit; } 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 @@ -3,6 +3,7 @@ import * as React from 'react'; import SWMansionIcon from '../SWMansionIcon.react'; +import Button from './button.react'; import css from './label.css'; type Props = { @@ -36,9 +37,9 @@ return null; } return ( - + ); }, [onClose, size]); 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 @@ -4,6 +4,7 @@ import * as React from 'react'; import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; +import Button from './button.react'; import css from './menu.css'; type MenuItemProps = { @@ -19,13 +20,14 @@ const itemClasses = classNames(css.menuAction, { [css.menuActionDangerous]: dangerous, }); + return ( - + ); } diff --git a/web/components/menu.css b/web/components/menu.css --- a/web/components/menu.css +++ b/web/components/menu.css @@ -35,14 +35,10 @@ button.menuAction { color: inherit; z-index: 1; - background-color: transparent; padding: 12px 16px; line-height: 1.5; - border: none; - cursor: pointer; - display: flex; - align-items: center; font-size: inherit; + justify-content: start; } button.menuAction:hover { diff --git a/web/components/search.css b/web/components/search.css --- a/web/components/search.css +++ b/web/components/search.css @@ -30,10 +30,8 @@ button.clearSearch { color: var(--search-clear-color); transition: ease-in-out 0.15s; - border: none; background: var(--search-clear-bg); border-radius: 50%; - display: flex; padding: 6px; } diff --git a/web/components/tabs-header.js b/web/components/tabs-header.js --- a/web/components/tabs-header.js +++ b/web/components/tabs-header.js @@ -3,10 +3,11 @@ import classnames from 'classnames'; import * as React from 'react'; +import Button from './button.react'; import css from './tabs.css'; type Props = { - +children?: React.Node, + +children: React.Node, +isActive: boolean, +setTab: T => mixed, +id: T, @@ -19,9 +20,9 @@ }); const onClickSetTab = React.useCallback(() => setTab(id), [setTab, id]); return ( -
+
+ ); } diff --git a/web/components/tabs.css b/web/components/tabs.css --- a/web/components/tabs.css +++ b/web/components/tabs.css @@ -6,26 +6,25 @@ max-height: 100%; flex: 1; } + div.tabsHeaderContainer { display: flex; } -div.tabHeader { +.tabHeader { flex: 1; padding: 16px; - display: flex; - justify-content: center; + font-size: var(--m-font-16); color: var(--tabs-header-active-color); border-bottom: 2px solid var(--tabs-header-active-border); } -div.backgroundTabHeader { - cursor: pointer; +.backgroundTabHeader { color: var(--tabs-header-background-color); border-bottom-color: var(--tabs-header-background-border); } -div.backgroundTabHeader:hover { +.backgroundTabHeader:hover { color: var(--tabs-header-background-color-hover); border-bottom-color: var(--tabs-header-background-border-hover); } diff --git a/web/media/media.css b/web/media/media.css --- a/web/media/media.css +++ b/web/media/media.css @@ -9,22 +9,18 @@ position: relative; vertical-align: top; } -span.multimedia > span.multimediaImage { - display: inline-flex; - align-items: center; - justify-content: center; +span.multimedia > .multimediaImage { position: relative; min-height: 50px; min-width: 50px; } -span.multimedia > span.multimediaImage > img { +span.multimedia > .multimediaImage > img { max-height: 200px; max-width: 100%; } -span.multimedia > span.multimediaImage > svg.removeUpload { +span.multimedia > .multimediaImage svg.removeUpload { display: none; position: absolute; - cursor: pointer; top: 3px; right: 3px; color: white; @@ -32,7 +28,7 @@ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); background-color: rgba(34, 34, 34, 0.67); } -span.multimedia:hover > span.multimediaImage > svg.removeUpload { +span.multimedia:hover > .multimediaImage svg.removeUpload { display: inherit; } span.multimedia > svg.uploadError { diff --git a/web/media/multimedia.react.js b/web/media/multimedia.react.js --- a/web/media/multimedia.react.js +++ b/web/media/multimedia.react.js @@ -12,6 +12,7 @@ import { useModalContext } from 'lib/components/modal-provider.react'; +import Button from '../components/button.react'; import { type PendingMultimediaUpload } from '../input/input-state'; import css from './media.css'; import MultimediaModal from './multimedia-modal.react'; @@ -71,7 +72,9 @@ if (remove) { removeButton = ( - + ); } } @@ -85,13 +88,13 @@ const containerClasses = [css.multimedia, this.props.multimediaCSSClass]; return ( - {removeButton} - + {progressIndicator} {errorIndicator} @@ -109,9 +112,7 @@ remove(pendingUpload.localID); }; - onClick: (event: SyntheticEvent) => void = event => { - event.stopPropagation(); - + onClick: () => void = () => { const { pushModal, uri } = this.props; pushModal(); }; diff --git a/web/modals/components/add-members-item.react.js b/web/modals/components/add-members-item.react.js --- a/web/modals/components/add-members-item.react.js +++ b/web/modals/components/add-members-item.react.js @@ -4,6 +4,7 @@ import type { UserListItem } from 'lib/types/user-types'; +import Button from '../../components/button.react'; import css from './add-members.css'; type AddMembersItemProps = { @@ -36,14 +37,14 @@ }, [canBeAdded, userAdded, userInfo.alertTitle]); return ( - + ); } diff --git a/web/modals/components/add-members.css b/web/modals/components/add-members.css --- a/web/modals/components/add-members.css +++ b/web/modals/components/add-members.css @@ -5,14 +5,9 @@ } button.addMemberItem { - display: flex; - flex-direction: row; justify-content: space-between; - align-items: center; color: var(--add-members-item-color); font-size: var(--l-font-18); - background-color: transparent; - border: none; width: 100%; } diff --git a/web/modals/modal.css b/web/modals/modal.css --- a/web/modals/modal.css +++ b/web/modals/modal.css @@ -15,13 +15,11 @@ width: 500px; } -span.modalClose { - display: flex; +.modalClose { color: var(--modal-close-color); } -span.modalClose:hover { - cursor: pointer; +.modalClose:hover { color: var(--modal-close-color-hover); } 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 @@ -5,6 +5,7 @@ import ModalOverlay from 'lib/components/modal-overlay.react'; +import Button from '../components/button.react'; import SWMansionIcon, { type Icon } from '../SWMansionIcon.react'; import css from './modal.css'; @@ -47,9 +48,9 @@ return null; } return ( - + ); }, [onClose, withCloseButton]); diff --git a/web/modals/threads/color-selector-button.css b/web/modals/threads/color-selector-button.css --- a/web/modals/threads/color-selector-button.css +++ b/web/modals/threads/color-selector-button.css @@ -1,15 +1,11 @@ -div.container { +.container { height: 48px; width: 48px; border-radius: 24px; - cursor: pointer; - align-items: center; - justify-content: center; - display: flex; } -div.active, -div.container:hover { +.active, +.container:hover { background-color: var(--color-selector-active-bg); } diff --git a/web/modals/threads/color-selector-button.react.js b/web/modals/threads/color-selector-button.react.js --- a/web/modals/threads/color-selector-button.react.js +++ b/web/modals/threads/color-selector-button.react.js @@ -4,6 +4,7 @@ import * as React from 'react'; import tinycolor from 'tinycolor2'; +import Button from '../../components/button.react'; import css from './color-selector-button.css'; type ColorSelectorButtonProps = { @@ -31,9 +32,9 @@ }, [onColorSelection, color]); return ( -
+ ); } diff --git a/web/modals/threads/sidebars/sidebar.react.js b/web/modals/threads/sidebars/sidebar.react.js --- a/web/modals/threads/sidebars/sidebar.react.js +++ b/web/modals/threads/sidebars/sidebar.react.js @@ -7,6 +7,7 @@ import { getMessagePreview } from 'lib/shared/message-utils'; import { shortAbsoluteDate } from 'lib/utils/date-utils'; +import Button from '../../../components/button.react'; import { getDefaultTextMessageRules } from '../../../markdown/rules.react'; import { useSelector } from '../../../redux/redux-utils'; import { useOnClickThread } from '../../../selectors/nav-selectors'; @@ -58,7 +59,7 @@ }, [lastActivity, mostRecentMessageInfo, threadInfo]); return ( -
{lastMessage}
- + ); } diff --git a/web/modals/threads/sidebars/sidebars-modal.css b/web/modals/threads/sidebars/sidebars-modal.css --- a/web/modals/threads/sidebars/sidebars-modal.css +++ b/web/modals/threads/sidebars/sidebars-modal.css @@ -18,13 +18,10 @@ } button.sidebarContainer { - cursor: pointer; - display: flex; padding: 0 16px; column-gap: 8px; align-items: flex-start; width: 100%; - border: none; font-size: inherit; text-align: inherit; line-height: inherit; 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 @@ -7,6 +7,7 @@ import { getMessagePreview } from 'lib/shared/message-utils'; import { shortAbsoluteDate } from 'lib/utils/date-utils'; +import Button from '../../../components/button.react'; import { getDefaultTextMessageRules } from '../../../markdown/rules.react'; import { useSelector } from '../../../redux/redux-utils'; import { useOnClickThread } from '../../../selectors/nav-selectors'; @@ -62,13 +63,13 @@ }, [lastActivity, mostRecentMessageInfo, threadInfo]); return ( -
+
+ ); } diff --git a/web/modals/threads/subchannels/subchannels-modal.css b/web/modals/threads/subchannels/subchannels-modal.css --- a/web/modals/threads/subchannels/subchannels-modal.css +++ b/web/modals/threads/subchannels/subchannels-modal.css @@ -2,8 +2,6 @@ display: flex; flex-direction: column; overflow: auto; - line-height: var(--line-height-text); - color: var(--subchannels-modal-color); row-gap: 8px; width: 383px; height: 458px; @@ -13,14 +11,16 @@ text-align: center; } -div.subchannelContainer { - cursor: pointer; - display: flex; +.subchannelContainer { + align-items: flex-start; + font-size: var(--m-font-18); + line-height: var(--line-height-text); + color: var(--subchannels-modal-color); padding: 8px 16px; column-gap: 8px; } -div.subchannelContainer:hover { +.subchannelContainer:hover { color: var(--subchannels-modal-color-hover); } @@ -33,6 +33,7 @@ } div.longTextEllipsis { + align-self: flex-start; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; diff --git a/web/modals/threads/thread-picker-modal.css b/web/modals/threads/thread-picker-modal.css --- a/web/modals/threads/thread-picker-modal.css +++ b/web/modals/threads/thread-picker-modal.css @@ -12,12 +12,16 @@ div.threadPickerOptionContainer { display: flex; - align-items: center; +} + +.threadPickerOptionButton { + flex: 1; + justify-content: left; padding: 12px 16px; - cursor: pointer; + font-size: var(--m-font-16); } -div.threadPickerOptionContainer:hover { +.threadPickerOptionButton:hover { background-color: var(--thread-hover-bg); border-radius: 8px; } diff --git a/web/modals/threads/thread-picker-modal.react.js b/web/modals/threads/thread-picker-modal.react.js --- a/web/modals/threads/thread-picker-modal.react.js +++ b/web/modals/threads/thread-picker-modal.react.js @@ -8,6 +8,7 @@ import { onScreenEntryEditableThreadInfos } from 'lib/selectors/thread-selectors'; import type { ThreadInfo } from 'lib/types/thread-types'; +import Button from '../../components/button.react'; import Search from '../../components/search.react'; import { useSelector } from '../../redux/redux-utils'; import Modal, { type ModalOverridableProps } from '../modal.react'; @@ -35,13 +36,14 @@ ); return ( -
-
-
{threadInfo.uiName}
+
+
); } diff --git a/web/settings/relationship/add-users-list-item.react.js b/web/settings/relationship/add-users-list-item.react.js --- a/web/settings/relationship/add-users-list-item.react.js +++ b/web/settings/relationship/add-users-list-item.react.js @@ -4,6 +4,7 @@ import type { AccountUserInfo } from 'lib/types/user-types.js'; +import Button from '../../components/button.react'; import css from './add-users-list.css'; type Props = { @@ -18,10 +19,10 @@ userInfo.id, ]); return ( - + ); } diff --git a/web/settings/relationship/add-users-list.css b/web/settings/relationship/add-users-list.css --- a/web/settings/relationship/add-users-list.css +++ b/web/settings/relationship/add-users-list.css @@ -20,15 +20,11 @@ } .addUserButton { - display: flex; - flex-direction: row; justify-content: space-between; padding: 16px; color: var(--relationship-modal-color); font-size: var(--l-font-18); line-height: var(--line-height-display); - background: transparent; - border: none; } .addUserButtonUsername {