17 Commits

Author SHA1 Message Date
Zoë Bijl 60731df277 [bugfix] show header logo + align header buttons
the logo wasn’t showing on the small screen layout. this fixes that. it also neatly aligns the buttons in the header area.
2025-10-24 10:44:30 +02:00
tobi ac7354ca62 [chore/docker] Remove reference to vanilla in Dockerfile (#114)
Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/114
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
2025-10-21 15:49:01 +02:00
Zoë Bijl 6e2caa1c2c [docs] fix typo 2025-10-21 15:16:52 +02:00
kipvandenbos 5447f63a3c [bugfix] Use correct branch name for next publication (#113)
Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/113
Co-authored-by: kipvandenbos <kipvandenbos@noreply.codeberg.org>
Co-committed-by: kipvandenbos <kipvandenbos@noreply.codeberg.org>
2025-10-21 15:11:49 +02:00
tobi f5a55a64df [feature/cicd] Add next image publication on squerge to next branch (#112)
Build a `next` tagged docker image when we squerge something into next (makes my life a bit easier).

Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/112
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
2025-10-21 15:08:31 +02:00
Zoë Bijl b976e9438f [bugfix] rewrite basic media-gallery css (#109)
Solves an issue where only four images would show up if more than four were added.

Fixes #34 & #107

Example of a post with many images:

![A post with thirteen images attached. they form a nice two column grid with the last item being two columns wide](/attachments/c44a4985-5297-4395-8964-15651b947d87)

---

@jacksonchen666 suggested we have a limit to the number of images and perhaps some sort of indicator to show that there are more images. I’ve made [an issue to track that](https://codeberg.org/superseriousbusiness/masto-fe-standalone/issues/110).

Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/109
Co-authored-by: Zoë Bijl <code@moiety.me>
Co-committed-by: Zoë Bijl <code@moiety.me>
2025-10-21 14:34:40 +02:00
Zoë Bijl d03bfe2ab8 [bugfix] further CSS fixes for Phosphor update
commit 242cfc4b06
Author: Zoë Bijl <code@moiety.me>
Date:   Tue Oct 21 00:22:46 2025 +0200

    [bugfix] tweak display name alignment

commit 23e5d9840f
Author: Zoë Bijl <code@moiety.me>
Date:   Tue Oct 21 00:00:59 2025 +0200

    [bugfix] improve display name alignment

commit 1664835c94
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 17:03:52 2025 +0200

    [feature] add text-decoration to usernames and hashtags

commit d4fdb18549
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 16:38:08 2025 +0200

    [bugfix] correct spacing in status__content__spoiler

commit c19307a115
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 16:28:30 2025 +0200

    [feature] remove giant logo in multi-column view

commit 51e2c6e1c3
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 16:24:52 2025 +0200

    [feature] add gts logo in the multi-column menu

commit edc83b0f54
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 16:23:26 2025 +0200

    [bugfix] fix width of fullwidth media gallery

commit 9923c1b6da
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 15:17:25 2025 +0200

    [chore] remove `fixedWith` from icons

commit 935d6b73ef
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 15:09:43 2025 +0200

    [chore] lint

commit 776f02bd5f
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 15:07:52 2025 +0200

    [bugfix] correctly align multiline column-header button

commit d988d35671
Author: Zoë Bijl <code@moiety.me>
Date:   Mon Oct 20 15:04:35 2025 +0200

    [feat] add new size variables

commit 34bcbb669d
Author: Zoë Bijl <code@moiety.me>
Date:   Sun Oct 19 23:47:20 2025 +0200

    [bugfix] re-enable hicolor privacy icons

commit 97f2cb8f69
Author: Zoë Bijl <code@moiety.me>
Date:   Sun Oct 19 23:26:16 2025 +0200

    [bugfix] correctly align “toot” buttons

commit 52bcd4b6d0
Author: Zoë Bijl <code@moiety.me>
Date:   Thu Oct 16 16:22:44 2025 +0200

    [bugfix] replace `--size` with global `--size-icon`

    BREAKING CHANGE: any user styles that overwrote `--size` in a `,gts-icon` class will need to be updated.

commit 9812a2611f
Author: Zoë Bijl <code@moiety.me>
Date:   Thu Oct 16 15:53:37 2025 +0200

    [bugfix] further tweaks to `.poll__footer` alignment

commit 798d6fbf79
Author: Zoë Bijl <code@moiety.me>
Date:   Thu Oct 16 15:38:45 2025 +0200

    [bugfix] correctly align .poll__footer
2025-10-21 00:31:41 +02:00
Annika Backstrom 9e1c6c3646 [chore] disable collapsed posts by default
Fixes #98
2025-10-18 12:51:36 +01:00
Zoë Bijl 4b4b4b9d38 [bugfix] correct lock-open-simple direction
the lock opened the wrong way; it was pointing left when it should’ve pointed right to be consistent with GTS.
2025-10-16 15:21:46 +02:00
Zoë Bijl 7f073ccd59 [docs] update changelog 2025-10-16 14:40:54 +02:00
Zoë Bijl 02c368b22a [chore] remove last reference to font-awesome 2025-10-16 12:57:43 +02:00
Zoë Bijl 39720bf7d2 [chore] remove unused assets
searched the repo for references to these and found none
2025-10-16 00:26:57 +02:00
Zoë Bijl 2dc019f1e9 [chore] remove unused font files
i missed these in 7c51ea30a4
2025-10-15 21:15:15 +02:00
Zoë Bijl 25af845912 [chore] lint sass files (#103)
commit c811679128
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 21:02:39 2025 +0200

    [chore] remove unused override

commit a3e56447aa
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 18:57:22 2025 +0200

    [chore] lint Sass files
2025-10-15 21:08:31 +02:00
prinlu 59c8cb987f [feature] change mastodon logo with the sloth (#96)
replace mastodon logo to gotosocial icon

Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/96
Co-authored-by: prinlu <prinlu@noreply.codeberg.org>
Co-committed-by: prinlu <prinlu@noreply.codeberg.org>
2025-10-15 18:23:17 +02:00
Zoë Bijl 39b0552b6a [bugfix] various CSS fixes (#100)
Some fixes for the CSS / Phosphor revamp

- Corrected avatar position
- Corrected various button/icon sizes
- Change the way a status background is set
- Improved icon-button disabled state
- Improved contrast and light theme colours

commit b307fa93b4
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 17:49:11 2025 +0200

    [chore] lint

commit 1352425b81
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 17:46:42 2025 +0200

    [chore] lint

commit 276480b5a4
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 17:46:32 2025 +0200

    [bugfix] set direct message background

commit 4e5764a70b
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 17:44:46 2025 +0200

    [bugfix] improve obviousness of disabled icon button state

commit dec5bb66e7
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 16:52:55 2025 +0200

    [chore] lint

commit 72869917ab
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 16:52:44 2025 +0200

    [bugfix] start work on status content spacing

commit 5aa8333f71
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 15:57:56 2025 +0200

    lint

commit df0bb84ce4
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 15:57:48 2025 +0200

    [bugfix] correctly set status background (on focus)

    fixes an issue where a weird gradient would show up in the status__info section

commit 2fab5ff2e7
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 09:40:28 2025 +0200

    [bugfix] fix lint issues

commit 5d823b2195
Author: Zoë Bijl <code@moiety.me>
Date:   Wed Oct 15 01:19:01 2025 +0200

    [bugfix] set avatars to cover available space

    no more squashed avatars
2025-10-15 18:10:58 +02:00
tobi 075b46d050 [chore] Update runtime docker container with apk upgrade (#102)
Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/102
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
2025-10-15 11:24:54 +02:00
112 changed files with 671 additions and 65173 deletions
+24
View File
@@ -0,0 +1,24 @@
# https://woodpecker-ci.org/docs/usage/workflow-syntax#when---global-workflow-conditions
when:
- event: push
branch: next
# https://goreleaser.com/ci/woodpecker/
# https://woodpecker-ci.org/docs/usage/workflow-syntax#clone
clone:
git:
image: woodpeckerci/plugin-git
settings:
tags: true
# https://woodpecker-ci.org/plugins/docker-buildx
steps:
publish:
image: woodpeckerci/plugin-docker-buildx:5.2.2
settings:
pull_image: true
username: gotosocial
password:
from_secret: gts_docker_password
repo: superseriousbusiness/masto-fe-standalone
tag: next
+14 -2
View File
@@ -11,19 +11,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added documentation for `yarn dev` (#75) - Added documentation for `yarn dev` (#75)
- Added an .editorconfig (#78) - Added an .editorconfig (#78)
- Added a changelog basaed on “Keep a Changelog” (#80) - Added a CHANGELOG.md based on “Keep a Changelog” (#80)
### Changed ### Changed
- Preserve mastodon-settings in localStorage (#66) - Preserve mastodon-settings in localStorage (#66)
- Redesigned the login page (#76) - Redesigned the login page (#76)
- Changed all icons with the Phosphor icon set (#77) - Changed all icons to the Phosphor icon set (#77)
- Changed AUTHORS.md to reflect fork contributors (#89)
### Fixed ### Fixed
- Updated caniuse-lite browserlist (#82) - Updated caniuse-lite browserlist (#82)
- Fixed various linter issues (#85) - Fixed various linter issues (#85)
- Fixed various CSS issues (#100)
- Updated Prettier to 3.6.2 (#86) - Updated Prettier to 3.6.2 (#86)
- Updated Yarn to 4.10.3 (#90)
- Updated Webpack to 5.102.1 (#83)
- Updated ESlint to 9.37.0 (#88)
- Fixed an issue where media items wouldnt show correctly (#109)
### Removed
- Removed FontAwesome (#99)
- Removed unused CSS files (#99)
- Removed various unused assets
## [0.5.0] - 2025-07-14 ## [0.5.0] - 2025-07-14
+3 -1
View File
@@ -22,9 +22,11 @@ RUN yarn && yarn build:production
### RUNTIME IMAGE ### ### RUNTIME IMAGE ###
FROM nginx:alpine AS runtime FROM nginx:alpine AS runtime
# Ensure deps up to date.
RUN apk upgrade --update --no-cache
# Copy bigger nested stuff. # Copy bigger nested stuff.
COPY --from=builder /build/public/packs/js/flavours/glitch /usr/share/nginx/html/packs/js/flavours/glitch COPY --from=builder /build/public/packs/js/flavours/glitch /usr/share/nginx/html/packs/js/flavours/glitch
COPY --from=builder /build/public/packs/js/flavours/vanilla /usr/share/nginx/html/packs/js/flavours/vanilla
# Copy remaining files. # Copy remaining files.
COPY --from=builder /build/public /usr/share/nginx/html/ COPY --from=builder /build/public /usr/share/nginx/html/
@@ -28,7 +28,8 @@ export const Avatar: React.FC<Props> = ({
...styleFromParent, ...styleFromParent,
width: `${size}px`, width: `${size}px`,
height: `${size}px`, height: `${size}px`,
backgroundSize: `${size}px ${size}px`, backgroundSize: "cover",
backgroundPosition: "center",
}; };
if (account) { if (account) {
@@ -32,7 +32,7 @@ export default class ColumnBackButton extends PureComponent {
const component = ( const component = (
<button onClick={this.handleClick} className='column-back-button'> <button onClick={this.handleClick} className='column-back-button'>
<Icon id='arrow-left' className='column-back-button__icon' fixedWidth /> <Icon id='arrow-left' className='column-back-button__icon' />
<FormattedMessage id='column_back_button.label' defaultMessage='Back' /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
</button> </button>
); );
@@ -27,7 +27,7 @@ export default class ColumnBackButtonSlim extends PureComponent {
return ( return (
<div className='column-back-button--slim'> <div className='column-back-button--slim'>
<div role='button' tabIndex={0} onClick={this.handleClick} className='column-back-button column-back-button--slim-button'> <div role='button' tabIndex={0} onClick={this.handleClick} className='column-back-button column-back-button--slim-button'>
<Icon id='arrow-left' className='column-back-button__icon' fixedWidth /> <Icon id='arrow-left' className='column-back-button__icon' />
<FormattedMessage id='column_back_button.label' defaultMessage='Back' /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
</div> </div>
</div> </div>
@@ -133,7 +133,7 @@ class ColumnHeader extends PureComponent {
if (!pinned && ((multiColumn && router.history.location?.state?.fromMastodon) || showBackButton)) { if (!pinned && ((multiColumn && router.history.location?.state?.fromMastodon) || showBackButton)) {
backButton = ( backButton = (
<button onClick={this.handleBackClick} className='column-header__back-button'> <button onClick={this.handleBackClick} className='column-header__back-button'>
<Icon id='arrow-left' className='column-back-button__icon' fixedWidth /> <Icon id='arrow-left' className='column-back-button__icon' />
<FormattedMessage id='column_back_button.label' defaultMessage='Back' /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
</button> </button>
); );
@@ -176,7 +176,7 @@ class ColumnHeader extends PureComponent {
<h1 className={buttonClassName}> <h1 className={buttonClassName}>
{hasTitle && ( {hasTitle && (
<button onClick={this.handleTitleClick}> <button onClick={this.handleTitleClick}>
<Icon id={icon} fixedWidth className='column-header__icon' /> <Icon id={icon} className='column-header__icon' />
{title} {title}
</button> </button>
)} )}
@@ -5,17 +5,10 @@ import classNames from "classnames";
interface Props extends React.HTMLAttributes<HTMLImageElement> { interface Props extends React.HTMLAttributes<HTMLImageElement> {
id: string, id: string,
className?: string, className?: string,
fixedWidth?: boolean,
children?: never, children?: never,
} }
export const Icon: React.FC<Props> = ({ export const Icon: React.FC<Props> = ({ id, className, title, ...other }) => (
id,
className,
fixedWidth,
title,
...other
}) => (
<svg className={classNames("gts-icon", className)} {...other}> <svg className={classNames("gts-icon", className)} {...other}>
{title && <title>{title}</title>} {title && <title>{title}</title>}
<use href={`/icons.svg#${id}`} /> <use href={`/icons.svg#${id}`} />
@@ -16,11 +16,11 @@ export const IconWithBadge: React.FC<Props> = ({
issueBadge, issueBadge,
className, className,
}) => ( }) => (
<div className='gts-icon-with-badge'> <div className="gts-icon-with-badge">
<Icon id={id} fixedWidth className={className} /> <Icon id={id} className={className} />
{count > 0 && ( {count > 0 && (
<span className='gts-icon-with-badge__badge'>{formatNumber(count)}</span> <span className="gts-icon-with-badge__badge">{formatNumber(count)}</span>
)} )}
{issueBadge && <div className='gts-icon-with-badge__issue-badge' />} {issueBadge && <div className="gts-icon-with-badge__issue-badge" />}
</div> </div>
); );
@@ -329,7 +329,6 @@ class StatusContent extends PureComponent {
mediaIcons.forEach((mediaIcon, idx) => { mediaIcons.forEach((mediaIcon, idx) => {
toggleText.push( toggleText.push(
<Icon <Icon
fixedWidth
className='status__content__spoiler-icon' className='status__content__spoiler-icon'
id={mediaIcon} id={mediaIcon}
aria-hidden='true' aria-hidden='true'
@@ -354,16 +353,12 @@ class StatusContent extends PureComponent {
return ( return (
<div className={classNames} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> <div className={classNames} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
<p <span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={language} />
style={{ marginBottom: hidden && status.get("mentions").isEmpty() ? "0px" : null }} {" "}
> <button type='button' className='status__content__spoiler-link' onClick={this.handleSpoilerClick} aria-expanded={!hidden}>
<span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={language} /> <Icon id={hidden ? "eye-closed" : "eye"} />
{" "} {toggleText}
<button type='button' className='status__content__spoiler-link' onClick={this.handleSpoilerClick} aria-expanded={!hidden}> </button>
<Icon id={hidden ? "eye-closed" : "eye"} />
{toggleText}
</button>
</p>
{mentionsPlaceholder} {mentionsPlaceholder}
@@ -86,7 +86,6 @@ class StatusIcons extends PureComponent {
renderIcon (mediaIcon) { renderIcon (mediaIcon) {
return ( return (
<Icon <Icon
fixedWidth
className='status__media-icon' className='status__media-icon'
key={`media-icon--${mediaIcon}`} key={`media-icon--${mediaIcon}`}
id={mediaIcon} id={mediaIcon}
@@ -113,7 +112,6 @@ class StatusIcons extends PureComponent {
{settings.get("reply") && status.get("in_reply_to_id", null) !== null ? ( {settings.get("reply") && status.get("in_reply_to_id", null) !== null ? (
<Icon <Icon
className='status__reply-icon' className='status__reply-icon'
fixedWidth
id='arrow-bend-double-up-left' id='arrow-bend-double-up-left'
aria-hidden='true' aria-hidden='true'
title={intl.formatMessage(messages.inReplyTo)} title={intl.formatMessage(messages.inReplyTo)}
@@ -121,7 +119,6 @@ class StatusIcons extends PureComponent {
) : null} ) : null}
{settings.get("local_only") && status.get("local_only") && {settings.get("local_only") && status.get("local_only") &&
<Icon <Icon
fixedWidth
id='house-line' id='house-line'
aria-hidden='true' aria-hidden='true'
title={intl.formatMessage(messages.localOnly)} title={intl.formatMessage(messages.localOnly)}
@@ -36,7 +36,6 @@ class VisibilityIcon extends ImmutablePureComponent {
const icon = (<Icon const icon = (<Icon
className='status__visibility-icon' className='status__visibility-icon'
fixedWidth
id={visibilityIcon} id={visibilityIcon}
title={label} title={label}
aria-hidden='true' aria-hidden='true'
@@ -72,7 +72,7 @@ class Section extends PureComponent {
return ( return (
<div className={classNames("about__section", { active: !collapsed })}> <div className={classNames("about__section", { active: !collapsed })}>
<div className='about__section__title' role='button' tabIndex={0} onClick={this.handleClick}> <div className='about__section__title' role='button' tabIndex={0} onClick={this.handleClick}>
<Icon id={collapsed ? "caret-right" : "caret-down"} fixedWidth /> {title} <Icon id={collapsed ? "caret-right" : "caret-down"} /> {title}
</div> </div>
{!collapsed && ( {!collapsed && (
@@ -28,7 +28,7 @@ class ActionBar extends PureComponent {
return ( return (
<div> <div>
<div className='account__disclaimer'> <div className='account__disclaimer'>
<Icon id='info' fixedWidth /> <Icon id='info' />
<FormattedMessage <FormattedMessage
id='account.suspended_disclaimer_full' id='account.suspended_disclaimer_full'
defaultMessage='This user has been suspended by a moderator.' defaultMessage='This user has been suspended by a moderator.'
@@ -43,7 +43,7 @@ class ActionBar extends PureComponent {
if (account.get("acct") !== account.get("username")) { if (account.get("acct") !== account.get("username")) {
extraInfo = ( extraInfo = (
<div className='account__disclaimer'> <div className='account__disclaimer'>
<Icon id='info' fixedWidth /> <Icon id='info' />
<FormattedMessage <FormattedMessage
id='account.disclaimer_full' id='account.disclaimer_full'
defaultMessage="Information below may reflect the user's profile incompletely." defaultMessage="Information below may reflect the user's profile incompletely."
@@ -22,12 +22,12 @@ export default class FollowRequestNote extends ImmutablePureComponent {
<div className='follow-request-banner__action'> <div className='follow-request-banner__action'>
<button type='button' className='button button-tertiary button--confirmation' onClick={onAuthorize}> <button type='button' className='button button-tertiary button--confirmation' onClick={onAuthorize}>
<Icon id='check' fixedWidth /> <Icon id='check' />
<FormattedMessage id='follow_request.authorize' defaultMessage='Authorize' /> <FormattedMessage id='follow_request.authorize' defaultMessage='Authorize' />
</button> </button>
<button type='button' className='button button-tertiary button--destructive' onClick={onReject}> <button type='button' className='button button-tertiary button--destructive' onClick={onReject}>
<Icon id='x' fixedWidth /> <Icon id='x' />
<FormattedMessage id='follow_request.reject' defaultMessage='Reject' /> <FormattedMessage id='follow_request.reject' defaultMessage='Reject' />
</button> </button>
</div> </div>
@@ -37,7 +37,7 @@ export default class MovedNote extends ImmutablePureComponent {
return ( return (
<div className='account__moved-note'> <div className='account__moved-note'>
<div className='account__moved-note__message'> <div className='account__moved-note__message'>
<div className='account__moved-note__icon-wrapper'><Icon id='signpost' className='account__moved-note__icon' fixedWidth /></div> <div className='account__moved-note__icon-wrapper'><Icon id='signpost' className='account__moved-note__icon' /></div>
<FormattedMessage id='account.moved_to' defaultMessage='{name} has indicated that their new account is now:' values={{ name: <bdi><strong dangerouslySetInnerHTML={displayNameHtml} /></bdi> }} /> <FormattedMessage id='account.moved_to' defaultMessage='{name} has indicated that their new account is now:' values={{ name: <bdi><strong dangerouslySetInnerHTML={displayNameHtml} /></bdi> }} />
</div> </div>
@@ -564,8 +564,8 @@ class Audio extends PureComponent {
<div className='video-player__controls active'> <div className='video-player__controls active'>
<div className='video-player__buttons-bar'> <div className='video-player__buttons-bar'>
<div className='video-player__buttons left'> <div className='video-player__buttons left'>
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay}><Icon id={paused ? "play" : "pause"} fixedWidth /></button> <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay}><Icon id={paused ? "play" : "pause"} /></button>
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? "speaker-slash" : "speaker-high"} fixedWidth /></button> <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? "speaker-slash" : "speaker-high"} /></button>
<div className={classNames("video-player__volume", { active: this.state.hovered })} ref={this.setVolumeRef} onMouseDown={this.handleVolumeMouseDown}> <div className={classNames("video-player__volume", { active: this.state.hovered })} ref={this.setVolumeRef} onMouseDown={this.handleVolumeMouseDown}>
<div className='video-player__volume__current' style={{ width: `${muted ? 0 : volume * 100}%`, backgroundColor: this._getAccentColor() }} /> <div className='video-player__volume__current' style={{ width: `${muted ? 0 : volume * 100}%`, backgroundColor: this._getAccentColor() }} />
@@ -585,9 +585,9 @@ class Audio extends PureComponent {
</div> </div>
<div className='video-player__buttons right'> <div className='video-player__buttons right'>
{!editable && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} {!editable && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' /></button>}
<a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download> <a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download>
<Icon id={"file-arrow-down"} fixedWidth /> <Icon id={"file-arrow-down"} />
</a> </a>
</div> </div>
</div> </div>
@@ -155,7 +155,7 @@ export default class ComposerOptionsDropdownContent extends PureComponent {
if (!contents) { if (!contents) {
contents = ( contents = (
<> <>
{icon && <Icon className='icon' fixedWidth id={icon} />} {icon && <Icon className='icon' id={icon} />}
<div className='privacy-dropdown__option__content'> <div className='privacy-dropdown__option__content'>
<strong>{text}</strong> <strong>{text}</strong>
@@ -393,7 +393,6 @@ class EmojiPickerDropdown extends PureComponent {
<div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}> <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>
<button ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} onClick={this.onToggle} onKeyDown={this.onToggle}> <button ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} onClick={this.onToggle} onKeyDown={this.onToggle}>
{button || <Icon {button || <Icon
fixedWidth
id='smiley' id='smiley'
aria-hidden='true' aria-hidden='true'
className={classNames("emojione", { "pulse-loading": active && loading })} className={classNames("emojione", { "pulse-loading": active && loading })}
@@ -80,7 +80,7 @@ class Header extends ImmutablePureComponent {
title={intl.formatMessage(messages.start)} title={intl.formatMessage(messages.start)}
to='/getting-started' to='/getting-started'
className='drawer__tab' className='drawer__tab'
><Icon id='asterisk' /></Link> ><Icon id='gts-simple' /></Link>
{renderForColumn("HOME", ( {renderForColumn("HOME", (
<Link <Link
aria-label={intl.formatMessage(messages.home_timeline)} aria-label={intl.formatMessage(messages.home_timeline)}
@@ -62,9 +62,10 @@ class Publisher extends ImmutablePureComponent {
} else if (privacy === "private" || privacy === "direct") { } else if (privacy === "private" || privacy === "direct") {
const iconId = privacyIcons[privacy]; const iconId = privacyIcons[privacy];
publishText = ( publishText = (
<span> <>
<Icon id={iconId} /> {intl.formatMessage(messages.publish)} <Icon id={iconId} />
</span> <span>{intl.formatMessage(messages.publish)}</span>
</>
); );
} else { } else {
publishText = privacy !== "unlisted" ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish); publishText = privacy !== "unlisted" ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);
@@ -80,26 +81,22 @@ class Publisher extends ImmutablePureComponent {
return ( return (
<div className={computedClass}> <div className={computedClass}>
{sideArm && !isEditing && sideArm !== "none" ? ( {sideArm && !isEditing && sideArm !== "none" ? (
<div className='compose-form__publish-button-wrapper'>
<Button
className='side_arm'
disabled={disabled}
onClick={onSecondarySubmit}
style={{ padding: null }}
text={<Icon id={privacyIcons[sideArm]} />}
title={`${intl.formatMessage(messages.publish)}: ${intl.formatMessage(privacyNames[sideArm])}`}
/>
</div>
) : null}
<div className='compose-form__publish-button-wrapper'>
<Button <Button
className='primary' className='side_arm'
text={publishText}
title={`${intl.formatMessage(messages.publish)}: ${intl.formatMessage(privacyNames[privacy])}`}
onClick={this.handleSubmit}
disabled={disabled} disabled={disabled}
onClick={onSecondarySubmit}
style={{ padding: null }}
text={<Icon id={privacyIcons[sideArm]} />}
title={`${intl.formatMessage(messages.publish)}: ${intl.formatMessage(privacyNames[sideArm])}`}
/> />
</div> ) : null}
<Button
className='primary'
text={publishText}
title={`${intl.formatMessage(messages.publish)}: ${intl.formatMessage(privacyNames[privacy])}`}
onClick={this.handleSubmit}
disabled={disabled}
/>
</div> </div>
); );
} }
@@ -43,7 +43,7 @@ class SearchResults extends ImmutablePureComponent {
if (results.get("accounts") && results.get("accounts").size > 0) { if (results.get("accounts") && results.get("accounts").size > 0) {
accounts = ( accounts = (
<SearchSection title={<><Icon id='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>}> <SearchSection title={<><Icon id='users' /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>}>
{withoutLastResult(results.get("accounts")).map(accountId => <AccountContainer key={accountId} id={accountId} />)} {withoutLastResult(results.get("accounts")).map(accountId => <AccountContainer key={accountId} id={accountId} />)}
{(results.get("accounts").size > INITIAL_PAGE_LIMIT && results.get("accounts").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreAccounts} />} {(results.get("accounts").size > INITIAL_PAGE_LIMIT && results.get("accounts").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreAccounts} />}
</SearchSection> </SearchSection>
@@ -52,7 +52,7 @@ class SearchResults extends ImmutablePureComponent {
if (results.get("hashtags") && results.get("hashtags").size > 0) { if (results.get("hashtags") && results.get("hashtags").size > 0) {
hashtags = ( hashtags = (
<SearchSection title={<><Icon id='tag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>}> <SearchSection title={<><Icon id='tag' /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>}>
{withoutLastResult(results.get("hashtags")).map(hashtag => <Hashtag key={hashtag.get("name")} hashtag={hashtag} />)} {withoutLastResult(results.get("hashtags")).map(hashtag => <Hashtag key={hashtag.get("name")} hashtag={hashtag} />)}
{(results.get("hashtags").size > INITIAL_PAGE_LIMIT && results.get("hashtags").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreHashtags} />} {(results.get("hashtags").size > INITIAL_PAGE_LIMIT && results.get("hashtags").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreHashtags} />}
</SearchSection> </SearchSection>
@@ -61,7 +61,7 @@ class SearchResults extends ImmutablePureComponent {
if (results.get("statuses") && results.get("statuses").size > 0) { if (results.get("statuses") && results.get("statuses").size > 0) {
statuses = ( statuses = (
<SearchSection title={<><Icon id='chat-circle-dots' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>}> <SearchSection title={<><Icon id='chat-circle-dots' /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>}>
{withoutLastResult(results.get("statuses")).map(statusId => <StatusContainer key={statusId} id={statusId} />)} {withoutLastResult(results.get("statuses")).map(statusId => <StatusContainer key={statusId} id={statusId} />)}
{(results.get("statuses").size > INITIAL_PAGE_LIMIT && results.get("statuses").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreStatuses} />} {(results.get("statuses").size > INITIAL_PAGE_LIMIT && results.get("statuses").size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreStatuses} />}
</SearchSection> </SearchSection>
@@ -71,7 +71,7 @@ class SearchResults extends ImmutablePureComponent {
return ( return (
<div className='drawer--results'> <div className='drawer--results'>
<header className='search-results__header'> <header className='search-results__header'>
<Icon id='magnifying-glass' fixedWidth /> <Icon id='magnifying-glass' />
<FormattedMessage id='explore.search_results' defaultMessage='Search results' /> <FormattedMessage id='explore.search_results' defaultMessage='Search results' />
</header> </header>
@@ -46,7 +46,6 @@ class TextareaIcons extends ImmutablePureComponent {
title={intl.formatMessage(message)} title={intl.formatMessage(message)}
> >
<Icon <Icon
fixedWidth
id={icon} id={icon}
/> />
</span> </span>
@@ -165,19 +165,19 @@ class Results extends PureComponent {
filteredResults = (accounts.size + hashtags.size + statuses.size) > 0 ? ( filteredResults = (accounts.size + hashtags.size + statuses.size) > 0 ? (
<> <>
{accounts.size > 0 && ( {accounts.size > 0 && (
<SearchSection key='accounts' title={<><Icon id='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>} onClickMore={this.handleLoadMoreAccounts}> <SearchSection key='accounts' title={<><Icon id='users' /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>} onClickMore={this.handleLoadMoreAccounts}>
{accounts.take(INITIAL_DISPLAY).map(id => <Account key={id} id={id} />)} {accounts.take(INITIAL_DISPLAY).map(id => <Account key={id} id={id} />)}
</SearchSection> </SearchSection>
)} )}
{hashtags.size > 0 && ( {hashtags.size > 0 && (
<SearchSection key='hashtags' title={<><Icon id='tag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>} onClickMore={this.handleLoadMoreHashtags}> <SearchSection key='hashtags' title={<><Icon id='tag' /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>} onClickMore={this.handleLoadMoreHashtags}>
{hashtags.take(INITIAL_DISPLAY).map(hashtag => <Hashtag key={hashtag.get("name")} hashtag={hashtag} />)} {hashtags.take(INITIAL_DISPLAY).map(hashtag => <Hashtag key={hashtag.get("name")} hashtag={hashtag} />)}
</SearchSection> </SearchSection>
)} )}
{statuses.size > 0 && ( {statuses.size > 0 && (
<SearchSection key='statuses' title={<><Icon id='chat-circle-dots' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>} onClickMore={this.handleLoadMoreStatuses}> <SearchSection key='statuses' title={<><Icon id='chat-circle-dots' /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>} onClickMore={this.handleLoadMoreStatuses}>
{statuses.take(INITIAL_DISPLAY).map(id => <Status key={id} id={id} />)} {statuses.take(INITIAL_DISPLAY).map(id => <Status key={id} id={id} />)}
</SearchSection> </SearchSection>
)} )}
@@ -78,7 +78,7 @@ class SelectFilter extends PureComponent {
renderCreateNew (name) { renderCreateNew (name) {
return ( return (
<div key='add-new-filter' role='button' tabIndex={0} className='language-dropdown__dropdown__results__item' onClick={this.handleNewFilterClick} onKeyDown={this.handleKeyDown}> <div key='add-new-filter' role='button' tabIndex={0} className='language-dropdown__dropdown__results__item' onClick={this.handleNewFilterClick} onKeyDown={this.handleKeyDown}>
<Icon id='plus' fixedWidth /> <FormattedMessage id='filter_modal.select_filter.prompt_new' defaultMessage='New category: {name}' values={{ name }} /> <Icon id='plus' /> <FormattedMessage id='filter_modal.select_filter.prompt_new' defaultMessage='New category: {name}' values={{ name }} />
</div> </div>
); );
} }
@@ -55,7 +55,7 @@ class List extends ImmutablePureComponent {
<div className='list'> <div className='list'>
<div className='list__wrapper'> <div className='list__wrapper'>
<div className='list__display-name'> <div className='list__display-name'>
<Icon id='dot' className='column-link__icon' fixedWidth /> <Icon id='dot' className='column-link__icon' />
{list.get("title")} {list.get("title")}
</div> </div>
@@ -45,7 +45,7 @@ export default class LocalSettingsPage extends PureComponent {
active, active,
}, className); }, className);
const iconElem = icon ? <Icon fixedWidth id={icon} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null); const iconElem = icon ? <Icon id={icon} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null);
if (href) { if (href) {
return ( return (
@@ -95,7 +95,7 @@ export default class AdminReport extends ImmutablePureComponent {
<div className={classNames("notification notification-admin-report focusable", { unread })} tabIndex={0}> <div className={classNames("notification notification-admin-report focusable", { unread })} tabIndex={0}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='flag' fixedWidth /> <Icon id='flag' />
</div> </div>
<span title={notification.get("created_at")}> <span title={notification.get("created_at")}>
@@ -86,7 +86,7 @@ export default class NotificationFollow extends ImmutablePureComponent {
<div className={classNames("notification notification-admin-sign-up focusable", { unread })} tabIndex={0}> <div className={classNames("notification notification-admin-sign-up focusable", { unread })} tabIndex={0}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon fixedWidth id='user-plus' /> <Icon id='user-plus' />
</div> </div>
<FormattedMessage <FormattedMessage
@@ -66,42 +66,42 @@ class FilterBar extends PureComponent {
onClick={this.onClick("mention")} onClick={this.onClick("mention")}
title={intl.formatMessage(tooltips.mentions)} title={intl.formatMessage(tooltips.mentions)}
> >
<Icon id={selectedFilter === "mention" ? "arrow-bend-double-up-left-filled" : "arrow-bend-double-up-left"} fixedWidth /> <Icon id={selectedFilter === "mention" ? "arrow-bend-double-up-left-filled" : "arrow-bend-double-up-left"} />
</button> </button>
<button <button
className={selectedFilter === "favourite" ? "active" : ""} className={selectedFilter === "favourite" ? "active" : ""}
onClick={this.onClick("favourite")} onClick={this.onClick("favourite")}
title={intl.formatMessage(tooltips.favourites)} title={intl.formatMessage(tooltips.favourites)}
> >
<Icon id={selectedFilter === "favourite" ? "star-filled" : "star"} fixedWidth /> <Icon id={selectedFilter === "favourite" ? "star-filled" : "star"} />
</button> </button>
<button <button
className={selectedFilter === "reblog" ? "active" : ""} className={selectedFilter === "reblog" ? "active" : ""}
onClick={this.onClick("reblog")} onClick={this.onClick("reblog")}
title={intl.formatMessage(tooltips.boosts)} title={intl.formatMessage(tooltips.boosts)}
> >
<Icon id={selectedFilter === "reblog" ? "rocket-launch-filled" : "rocket-launch"} fixedWidth /> <Icon id={selectedFilter === "reblog" ? "rocket-launch-filled" : "rocket-launch"} />
</button> </button>
<button <button
className={selectedFilter === "poll" ? "active" : ""} className={selectedFilter === "poll" ? "active" : ""}
onClick={this.onClick("poll")} onClick={this.onClick("poll")}
title={intl.formatMessage(tooltips.polls)} title={intl.formatMessage(tooltips.polls)}
> >
<Icon id={selectedFilter === "poll" ? "chart-bar-horizontal-filled" : "chart-bar-horizontal"} fixedWidth /> <Icon id={selectedFilter === "poll" ? "chart-bar-horizontal-filled" : "chart-bar-horizontal"} />
</button> </button>
<button <button
className={selectedFilter === "status" ? "active" : ""} className={selectedFilter === "status" ? "active" : ""}
onClick={this.onClick("status")} onClick={this.onClick("status")}
title={intl.formatMessage(tooltips.statuses)} title={intl.formatMessage(tooltips.statuses)}
> >
<Icon id={selectedFilter === "status" ? "chat-circle-dots-filled" : "chat-circle-dots"} fixedWidth /> <Icon id={selectedFilter === "status" ? "chat-circle-dots-filled" : "chat-circle-dots"} />
</button> </button>
<button <button
className={selectedFilter === "follow" ? "active" : ""} className={selectedFilter === "follow" ? "active" : ""}
onClick={this.onClick("follow")} onClick={this.onClick("follow")}
title={intl.formatMessage(tooltips.follows)} title={intl.formatMessage(tooltips.follows)}
> >
<Icon id={selectedFilter === "follow" ? "user-plus-filled" : "user-plus"} fixedWidth /> <Icon id={selectedFilter === "follow" ? "user-plus-filled" : "user-plus"} />
</button> </button>
</div> </div>
); );
@@ -86,7 +86,7 @@ export default class NotificationFollow extends ImmutablePureComponent {
<div className={classNames("notification notification-follow focusable", { unread })} tabIndex={0}> <div className={classNames("notification notification-follow focusable", { unread })} tabIndex={0}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon fixedWidth id='user-plus' /> <Icon id='user-plus' />
</div> </div>
<FormattedMessage <FormattedMessage
@@ -103,7 +103,7 @@ class FollowRequest extends ImmutablePureComponent {
<div className={classNames("notification notification-follow-request focusable", { unread })} tabIndex={0}> <div className={classNames("notification notification-follow-request focusable", { unread })} tabIndex={0}>
<div className='notification__message'> <div className='notification__message'>
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<Icon id='user' fixedWidth /> <Icon id='user' />
</div> </div>
<FormattedMessage <FormattedMessage
@@ -24,7 +24,7 @@ export default class ColumnHeader extends PureComponent {
let iconElement = ""; let iconElement = "";
if (icon) { if (icon) {
iconElement = <Icon id={icon} fixedWidth className='column-header__icon' />; iconElement = <Icon id={icon} className='column-header__icon' />;
} }
return ( return (
@@ -8,7 +8,7 @@ import { Icon } from "flavours/glitch/components/icon";
const ColumnLink = ({ icon, text, to, onClick, href, method, badge, transparent, ...other }) => { const ColumnLink = ({ icon, text, to, onClick, href, method, badge, transparent, ...other }) => {
const className = classNames("column-link", { "column-link--transparent": transparent }); const className = classNames("column-link", { "column-link--transparent": transparent });
const badgeElement = typeof badge !== "undefined" ? <span className='column-link__badge'>{badge}</span> : null; const badgeElement = typeof badge !== "undefined" ? <span className='column-link__badge'>{badge}</span> : null;
const iconElement = typeof icon === "string" ? <Icon id={icon} fixedWidth className='column-link__icon' /> : icon; const iconElement = typeof icon === "string" ? <Icon id={icon} className='column-link__icon' /> : icon;
if (href) { if (href) {
return ( return (
@@ -19,7 +19,7 @@ const Account = connect(state => ({
account: state.getIn(["accounts", me]), account: state.getIn(["accounts", me]),
}))(({ account }) => ( }))(({ account }) => (
<Permalink href={account.get("url")} to={`/@${account.get("acct")}`} title={account.get("acct")}> <Permalink href={account.get("url")} to={`/@${account.get("acct")}`} title={account.get("acct")}>
<Avatar account={account} size={35} /> <Avatar account={account} size={34} />
</Permalink> </Permalink>
)); ));
@@ -108,8 +108,7 @@ class Header extends PureComponent {
return ( return (
<div className='ui__header'> <div className='ui__header'>
<Link to='/' className='ui__header__logo'> <Link to='/' className='ui__header__logo'>
<WordmarkLogo /> <Icon id='gts-simple' />
<SymbolLogo />
</Link> </Link>
<div className='ui__header__links'> <div className='ui__header__links'>
@@ -141,8 +141,8 @@ class MediaModal extends ImmutablePureComponent {
const index = this.getIndex(); const index = this.getIndex();
const leftNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='caret-left' fixedWidth /></button>; const leftNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='caret-left' /></button>;
const rightNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='caret-right' fixedWidth /></button>; const rightNav = media.size > 1 && <button tabIndex={0} className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='caret-right' /></button>;
const content = media.map((image) => { const content = media.map((image) => {
const width = image.getIn(["meta", "original", "width"]) || null; const width = image.getIn(["meta", "original", "width"]) || null;
@@ -640,11 +640,11 @@ class Video extends PureComponent {
<div className='video-player__buttons-bar'> <div className='video-player__buttons-bar'>
<div className='video-player__buttons left'> <div className='video-player__buttons left'>
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay} autoFocus={autoFocus}> <button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay} autoFocus={autoFocus}>
<Icon id={paused ? "play" : "pause"} fixedWidth /> <Icon id={paused ? "play" : "pause"} />
</button> </button>
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}> <button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}>
<Icon id={muted ? "speaker-slash" : "speaker-high"} fixedWidth /> <Icon id={muted ? "speaker-slash" : "speaker-high"} />
</button> </button>
<div className={classNames("video-player__volume", { active: this.state.hovered })} onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> <div className={classNames("video-player__volume", { active: this.state.hovered })} onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}>
@@ -667,10 +667,10 @@ class Video extends PureComponent {
</div> </div>
<div className='video-player__buttons right'> <div className='video-player__buttons right'>
{(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash-filled' fixedWidth /></button>} {(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash-filled' /></button>}
{(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} className='player-button' onClick={this.handleOpenVideo}><Icon id='arrows-out-simple' fixedWidth /></button>} {(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} className='player-button' onClick={this.handleOpenVideo}><Icon id='arrows-out-simple' /></button>}
{onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} className='player-button' onClick={this.handleCloseVideo}><Icon id='arrows-in-simple' fixedWidth /></button>} {onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} className='player-button' onClick={this.handleCloseVideo}><Icon id='arrows-in-simple' /></button>}
<button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} className='player-button' onClick={this.toggleFullscreen}><Icon id={fullscreen ? "arrows-in-simple" : "frame-corners"} fixedWidth /></button> <button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} className='player-button' onClick={this.toggleFullscreen}><Icon id={fullscreen ? "arrows-in-simple" : "frame-corners"} /></button>
</div> </div>
</div> </div>
</div> </div>
@@ -29,7 +29,7 @@ const initialState = ImmutableMap({
shared_state : true, shared_state : true,
}), }),
collapsed : ImmutableMap({ collapsed : ImmutableMap({
enabled : true, enabled : false,
auto : ImmutableMap({ auto : ImmutableMap({
all : false, all : false,
notifications : false, notifications : false,
@@ -10,7 +10,7 @@
background-size: $size $size; background-size: $size $size;
} }
@mixin single-column($media, $parent: '&') { @mixin single-column($media, $parent: "&") {
.auto-columns #{$parent} { .auto-columns #{$parent} {
@media #{$media} { @media #{$media} {
@content; @content;
@@ -21,7 +21,7 @@
} }
} }
@mixin limited-single-column($media, $parent: '&') { @mixin limited-single-column($media, $parent: "&") {
.auto-columns #{$parent}, .auto-columns #{$parent},
.single-column #{$parent} { .single-column #{$parent} {
@media #{$media} { @media #{$media} {
@@ -30,7 +30,7 @@
} }
} }
@mixin multi-columns($media, $parent: '&') { @mixin multi-columns($media, $parent: "&") {
.auto-columns #{$parent} { .auto-columns #{$parent} {
@media #{$media} { @media #{$media} {
@content; @content;
@@ -43,9 +43,9 @@
@mixin fullwidth-gallery { @mixin fullwidth-gallery {
&.full-width { &.full-width {
margin-left: -10px; margin-left: -15px;
margin-right: -10px; margin-right: -15px;
width: inherit; width: calc(100% + 30px);
max-width: none; max-width: none;
border-radius: 0; border-radius: 0;
} }
@@ -1,7 +1,7 @@
$emojis-requiring-inversion: 'back' 'copyright' 'curly_loop' 'currency_exchange' $emojis-requiring-inversion: "back" "copyright" "curly_loop" "currency_exchange"
'end' 'heavy_check_mark' 'heavy_division_sign' 'heavy_dollar_sign' "end" "heavy_check_mark" "heavy_division_sign" "heavy_dollar_sign"
'heavy_minus_sign' 'heavy_multiplication_x' 'heavy_plus_sign' 'on' "heavy_minus_sign" "heavy_multiplication_x" "heavy_plus_sign" "on"
'registered' 'soon' 'spider' 'telephone_receiver' 'tm' 'top' 'wavy_dash' !default; "registered" "soon" "spider" "telephone_receiver" "tm" "top" "wavy_dash" !default;
%emoji-color-inversion { %emoji-color-inversion {
filter: invert(1); filter: invert(1);
@@ -9,30 +9,28 @@ $emojis-requiring-inversion: 'back' 'copyright' 'curly_loop' 'currency_exchange'
.emojione { .emojione {
@each $emoji in $emojis-requiring-inversion { @each $emoji in $emojis-requiring-inversion {
&[title=':#{$emoji}:'] { &[title=":#{$emoji}:"] {
@extend %emoji-color-inversion; @extend %emoji-color-inversion;
} }
} }
} }
.hicolor-privacy-icons { .hicolor-privacy-icons {
.status__visibility-icon.fa-globe, :is(.status__visibility-icon, .privacy-dropdown__option) use[href*="planet"] {
.privacy-dropdown__option .fa-globe {
color: #1976d2; color: #1976d2;
} }
.status__visibility-icon.fa-unlock, :is(.status__visibility-icon, .privacy-dropdown__option)
.privacy-dropdown__option .fa-unlock { use[href*="lock-open-simple"] {
color: #388e3c; color: #388e3c;
} }
.status__visibility-icon.fa-lock, :is(.status__visibility-icon, .privacy-dropdown__option)
.privacy-dropdown__option .fa-lock { use[href*="lock-simple"] {
color: #ffa000; color: #ffa000;
} }
.status__visibility-icon.fa-envelope, :is(.status__visibility-icon, .privacy-dropdown__option) use[href*="#at"] {
.privacy-dropdown__option .fa-envelope {
color: #d32f2f; color: #d32f2f;
} }
} }
@@ -1,4 +1,4 @@
@use 'sass:math'; @use "sass:math";
$no-columns-breakpoint: 600px; $no-columns-breakpoint: 600px;
$sidebar-width: 240px; $sidebar-width: 240px;
@@ -1456,7 +1456,7 @@ a.sparkline {
&::after { &::after {
display: block; display: block;
content: ''; content: "";
width: 50px; width: 50px;
height: 21px; height: 21px;
position: absolute; position: absolute;
@@ -1850,7 +1850,7 @@ a.sparkline {
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: "";
width: 1px; width: 1px;
background: $highlight-text-color; background: $highlight-text-color;
bottom: 0; bottom: 0;
@@ -1,9 +1,9 @@
@function hex-color($color) { @function hex-color($color) {
@if type-of($color) == 'color' { @if type-of($color) == "color" {
$color: str-slice(ie-hex-str($color), 4); $color: str-slice(ie-hex-str($color), 4);
} }
@return '%23' + unquote($color); @return "%23" + unquote($color);
} }
body { body {
@@ -14,7 +14,7 @@ body {
font-weight: 400; font-weight: 400;
color: var(--color-fg); color: var(--color-fg);
text-rendering: optimizelegibility; text-rendering: optimizelegibility;
font-feature-settings: 'kern'; font-feature-settings: "kern";
text-size-adjust: none; text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent;
@@ -35,13 +35,13 @@ body {
system-ui, system-ui,
-apple-system, -apple-system,
BlinkMacSystemFont, BlinkMacSystemFont,
'Segoe UI', "Segoe UI",
Oxygen, Oxygen,
Ubuntu, Ubuntu,
Cantarell, Cantarell,
'Fira Sans', "Fira Sans",
'Droid Sans', "Droid Sans",
'Helvetica Neue', "Helvetica Neue",
$font-sans-serif, $font-sans-serif,
sans-serif; sans-serif;
} }
@@ -157,7 +157,7 @@
} }
.gts-icon { .gts-icon {
--size: 20px; --size-icon: 20px;
display: block; display: block;
} }
@@ -195,7 +195,7 @@
} }
.gts-icon { .gts-icon {
--size: 16px; --size-icon: 16px;
margin-inline-end: 5px; margin-inline-end: 5px;
vertical-align: text-bottom; vertical-align: text-bottom;
@@ -370,7 +370,7 @@
} }
svg.gts-icon { svg.gts-icon {
--size: 20px; --size-icon: 20px;
} }
} }
@@ -467,12 +467,12 @@
width: 2px; width: 2px;
height: 24px; height: 24px;
background: var(--color-notifications-lines); background: var(--color-notifications-lines);
content: ''; content: "";
} }
} }
svg.gts-icon { svg.gts-icon {
--size: 20px; --size-icon: 20px;
display: block; display: block;
} }
@@ -635,7 +635,7 @@
} }
.gts-icon { .gts-icon {
--size: 24px; --size-icon: 24px;
display: block; display: block;
} }
@@ -867,18 +867,13 @@
} }
.follow-request-banner .button { .follow-request-banner .button {
--size-icon: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 5px; gap: 5px;
justify-content: center; justify-content: center;
width: 100%; width: 100%;
svg.gts-icon {
--size: 20px;
width: var(--size);
height: var(--size);
}
} }
.account-memorial-banner__message { .account-memorial-banner__message {
@@ -56,57 +56,6 @@
$ui-header-height: 55px; $ui-header-height: 55px;
.ui__header {
display: none;
box-sizing: border-box;
height: $ui-header-height;
position: sticky;
top: 0;
z-index: 3;
justify-content: space-between;
align-items: center;
&__logo {
display: inline-flex;
padding: 15px;
.logo {
height: $ui-header-height - 30px;
width: auto;
}
.logo--wordmark {
display: none;
}
@media screen and (width >= 320px) {
.logo--wordmark {
display: block;
}
.logo--icon {
display: none;
}
}
}
&__links {
display: flex;
align-items: center;
gap: 10px;
padding: 0 10px;
overflow: hidden;
.button {
flex: 0 0 auto;
}
.button-tertiary {
flex-shrink: 1;
}
}
}
.tabs-bar__wrapper { .tabs-bar__wrapper {
background: darken($ui-base-color, 8%); background: darken($ui-base-color, 8%);
position: sticky; position: sticky;
@@ -295,7 +244,7 @@ $ui-header-height: 55px;
&::before { &::before {
display: block; display: block;
content: ''; content: "";
position: absolute; position: absolute;
bottom: -13px; bottom: -13px;
inset-inline-start: 0; inset-inline-start: 0;
@@ -335,6 +284,8 @@ $ui-header-height: 55px;
.column-header__back-button, .column-header__back-button,
.column-header__footer-button, .column-header__footer-button,
.column-header__setting-btn { .column-header__setting-btn {
--size-icon: 24px;
display: flex; display: flex;
border: 0; border: 0;
color: inherit; color: inherit;
@@ -343,8 +294,6 @@ $ui-header-height: 55px;
transition: all 0.3s; transition: all 0.3s;
.gts-icon { .gts-icon {
--size: 24px;
display: block; display: block;
} }
} }
@@ -355,6 +304,7 @@ $ui-header-height: 55px;
align-items: center; align-items: center;
flex-grow: 1; flex-grow: 1;
padding: 12px 0 13px 15px; padding: 12px 0 13px 15px;
text-align: start;
} }
.column-header__buttons { .column-header__buttons {
@@ -404,16 +354,14 @@ $ui-header-height: 55px;
.column-header__footer-button, .column-header__footer-button,
.column-header__setting-btn { .column-header__setting-btn {
--size-icon: 20px;
gap: 5px; gap: 5px;
align-items: center; align-items: center;
padding: 6px; padding: 6px;
border-radius: var(--button-border-radius); border-radius: var(--button-border-radius);
color: inherit; color: inherit;
.gts-icon {
--size: 20px;
}
&:focus-visible, &:focus-visible,
&:hover, &:hover,
&.active { &.active {
@@ -735,6 +683,8 @@ $ui-header-height: 55px;
} }
.column-inline-form { .column-inline-form {
--size-icon: 20px;
padding: 7px 15px; padding: 7px 15px;
padding-inline-end: 5px; padding-inline-end: 5px;
display: flex; display: flex;
@@ -760,10 +710,6 @@ $ui-header-height: 55px;
margin: 0 5px; margin: 0 5px;
padding: 6px; padding: 6px;
} }
.gts-icon {
--size: 20px;
}
} }
.column-settings__outer { .column-settings__outer {
@@ -1054,6 +1000,8 @@ $ui-header-height: 55px;
} }
&__action { &__action {
--size-icon: 20px;
float: right; float: right;
.icon-button { .icon-button {
@@ -1066,8 +1014,6 @@ $ui-header-height: 55px;
} }
.gts-icon { .gts-icon {
--size: 20px;
display: block; display: block;
} }
} }
@@ -64,7 +64,7 @@
&:focus { &:focus {
outline: 0; outline: 0;
} }
@include single-column('screen and (max-width: 630px)') { @include single-column("screen and (max-width: 630px)") {
font-size: 16px; font-size: 16px;
} }
} }
@@ -103,7 +103,7 @@
color: $highlight-text-color; color: $highlight-text-color;
} }
input[type='checkbox'] { input[type="checkbox"] {
display: none; display: none;
} }
@@ -240,11 +240,11 @@
outline: 0; outline: 0;
} }
@include single-column('screen and (max-width: 630px)') { @include single-column("screen and (max-width: 630px)") {
font-size: 16px; font-size: 16px;
} }
@include limited-single-column('screen and (max-width: 600px)') { @include limited-single-column("screen and (max-width: 600px)") {
height: 100px !important; // prevent auto-resize textarea height: 100px !important; // prevent auto-resize textarea
resize: vertical; resize: vertical;
} }
@@ -514,7 +514,7 @@
} }
svg.gts-icon { svg.gts-icon {
--size: 20px; --size-icon: 20px;
scale: 1.2; scale: 1.2;
} }
@@ -565,16 +565,14 @@
} }
.privacy-dropdown__option { .privacy-dropdown__option {
--size-icon: 24px;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px; padding: 10px;
color: $inverted-text-color; color: $inverted-text-color;
cursor: pointer; cursor: pointer;
svg.gts-icon {
--size: 24px;
}
.privacy-dropdown__option__content { .privacy-dropdown__option__content {
flex: 1 1 auto; flex: 1 1 auto;
color: $lighter-text-color; color: $lighter-text-color;
@@ -611,23 +609,22 @@
.compose-form__publish { .compose-form__publish {
display: flex; display: flex;
justify-content: flex-end;
min-width: 0;
flex: 0 0 auto;
column-gap: 5px; column-gap: 5px;
flex: 0 0 auto;
justify-content: flex-end;
margin-top: 10px;
min-width: 0;
.compose-form__publish-button-wrapper { button {
overflow: hidden; --size-icon: 18px;
padding-top: 10px;
button { display: flex;
padding: 7px 10px; align-items: center;
text-align: center; flex-shrink: 0;
} gap: 5px;
padding: 8px 12px;
& > .side_arm { line-height: 20px;
width: 36px; text-align: center;
}
} }
} }
@@ -42,8 +42,8 @@
text-overflow: ellipsis; text-overflow: ellipsis;
cursor: pointer; cursor: pointer;
input[type='radio'], input[type="radio"],
input[type='checkbox'] { input[type="checkbox"] {
display: none; display: none;
} }
@@ -35,8 +35,8 @@ $doodle-background: #d9e1e8;
margin-inline-end: 2px; margin-inline-end: 2px;
} }
input[type='number'], input[type="number"],
input[type='text'] { input[type="text"] {
width: 40px; width: 40px;
} }
@@ -16,11 +16,11 @@
padding-inline-end: 10px; padding-inline-end: 10px;
} }
@include single-column('screen and (max-width: 630px)') { @include single-column("screen and (max-width: 630px)") {
flex: auto; flex: auto;
} }
@include limited-single-column('screen and (max-width: 630px)') { @include limited-single-column("screen and (max-width: 630px)") {
&, &,
&:first-child, &:first-child,
&:last-child { &:last-child {
@@ -34,7 +34,7 @@
flex: 1 1 200px; flex: 1 1 200px;
} }
@include single-column('screen and (max-width: 630px)') { @include single-column("screen and (max-width: 630px)") {
:root & { :root & {
// Overrides `.wide` for single-column view // Overrides `.wide` for single-column view
flex: auto; flex: auto;
@@ -73,6 +73,8 @@
} }
.layout-multiple-columns .drawer__tab { .layout-multiple-columns .drawer__tab {
--size-icon: 24px;
display: flex; display: flex;
gap: 5px; gap: 5px;
align-items: center; align-items: center;
@@ -88,8 +90,6 @@
transition: all 0.3s; transition: all 0.3s;
.gts-icon { .gts-icon {
--size: 24px;
display: block; display: block;
} }
@@ -109,11 +109,11 @@
flex: none; flex: none;
@include limited-single-column( @include limited-single-column(
'screen and (max-width: #{$no-gap-breakpoint})' "screen and (max-width: #{$no-gap-breakpoint})"
) { ) {
margin-bottom: 0; margin-bottom: 0;
} }
@include single-column('screen and (max-width: 630px)') { @include single-column("screen and (max-width: 630px)") {
font-size: 16px; font-size: 16px;
} }
} }
@@ -149,12 +149,10 @@
} }
.navigation-bar .compose__action-bar button { .navigation-bar .compose__action-bar button {
--size-icon: 20px;
display: flex; display: flex;
padding: 6px; padding: 6px;
svg.gts-icon {
--size: 20px;
}
} }
.drawer--results { .drawer--results {
@@ -299,7 +297,7 @@
.mbstobon-#{$i} .drawer__inner__mastodon { .mbstobon-#{$i} .drawer__inner__mastodon {
@if $i == 3 { @if $i == 3 {
background: background:
url('~flavours/glitch/images/wave-drawer.png') url("~flavours/glitch/images/wave-drawer.png")
no-repeat no-repeat
bottom / bottom /
100% 100%
@@ -307,7 +305,7 @@
lighten($ui-base-color, 4%); lighten($ui-base-color, 4%);
} @else { } @else {
background: background:
url('~flavours/glitch/images/wave-drawer-glitched.png') url("~flavours/glitch/images/wave-drawer-glitched.png")
no-repeat no-repeat
bottom / bottom /
100% 100%
@@ -316,7 +314,7 @@
} }
& > .mastodon { & > .mastodon {
background: url('~flavours/glitch/images/mbstobon-ui-#{$i}.png') background: url("~flavours/glitch/images/mbstobon-ui-#{$i}.png")
no-repeat no-repeat
left left
bottom / bottom /
@@ -77,8 +77,8 @@
color: $inverted-text-color; color: $inverted-text-color;
background: transparent; background: transparent;
svg { svg.gts-icon {
--size: 24px; --size-icon: 24px;
margin: 0; margin: 0;
} }
@@ -174,7 +174,7 @@
&:hover::before { &:hover::before {
z-index: 0; z-index: 0;
content: ''; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
inset-inline-start: 0; inset-inline-start: 0;
@@ -1,26 +1,26 @@
@import 'misc'; @import "misc";
@import 'boost'; @import "boost";
@import 'accounts'; @import "accounts";
@import 'domains'; @import "domains";
@import 'status'; @import "status";
@import 'modal'; @import "modal";
@import 'compose_form'; @import "compose_form";
@import 'columns'; @import "columns";
@import 'regeneration_indicator'; @import "regeneration_indicator";
@import 'directory'; @import "directory";
@import 'search'; @import "search";
@import 'emoji'; @import "emoji";
@import 'doodle'; @import "doodle";
@import 'drawer'; @import "drawer";
@import 'media'; @import "media";
@import 'sensitive'; @import "sensitive";
@import 'lists'; @import "lists";
@import 'emoji_picker'; @import "emoji_picker";
@import 'local_settings'; @import "local_settings";
@import 'single_column'; @import "single_column";
@import 'announcements'; @import "announcements";
@import 'explore'; @import "explore";
@import 'scrollbars'; @import "scrollbars";
@import 'signed_out'; @import "signed_out";
@import 'privacy_policy'; @import "privacy_policy";
@import 'about'; @import "about";
@@ -64,30 +64,7 @@
line-height: 18px; line-height: 18px;
} }
.media-gallery {
box-sizing: border-box;
margin-top: 8px;
overflow: hidden;
border-radius: 4px;
position: relative;
width: 100%;
min-height: 64px;
display: grid;
grid-template-columns: 50% 50%;
grid-template-rows: 50% 50%;
gap: 2px;
@include fullwidth-gallery;
}
.media-gallery__item { .media-gallery__item {
border: 0;
box-sizing: border-box;
display: block;
position: relative;
border-radius: 4px;
overflow: hidden;
&--tall { &--tall {
grid-row: span 2; grid-row: span 2;
} }
@@ -190,7 +167,7 @@
color: rgba($white, 0.7); color: rgba($white, 0.7);
.gts-icon { .gts-icon {
--size: 24px; --size-icon: 24px;
display: block; display: block;
} }
@@ -284,11 +261,9 @@
padding: 20px 0; padding: 20px 0;
.icon-button { .icon-button {
color: $white; --size-icon: 24px;
.gts-icon { color: $white;
--size: 24px;
}
&:hover, &:hover,
&:focus, &:focus,
@@ -572,14 +547,14 @@
} }
&__buttons-bar { &__buttons-bar {
--size-icon: 20px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding-bottom: 8px; padding-bottom: 8px;
margin: 0 -5px; margin: 0 -5px;
.gts-icon { .gts-icon {
--size: 20px;
display: block; display: block;
} }
@@ -671,7 +646,7 @@
} }
&::before { &::before {
content: ''; content: "";
width: 50px; width: 50px;
background: rgba($white, 0.35); background: rgba($white, 0.35);
border-radius: 4px; border-radius: 4px;
@@ -741,7 +716,7 @@
position: relative; position: relative;
&::before { &::before {
content: ''; content: "";
width: 100%; width: 100%;
background: rgba($white, 0.35); background: rgba($white, 0.35);
border-radius: 4px; border-radius: 4px;
@@ -180,7 +180,7 @@
} }
&.disabled { &.disabled {
color: darken($action-button-color, 13%); opacity: 0.3;
background-color: transparent; background-color: transparent;
cursor: default; cursor: default;
} }
@@ -223,7 +223,6 @@
} }
&.disabled { &.disabled {
color: lighten($lighter-text-color, 7%);
background-color: transparent; background-color: transparent;
} }
@@ -344,7 +343,7 @@ body > [data-popper-placement] {
.ellipsis { .ellipsis {
&::after { &::after {
content: ''; content: "";
} }
} }
@@ -471,7 +470,7 @@ body > [data-popper-placement] {
.image-loader__preview-canvas { .image-loader__preview-canvas {
max-width: $media-modal-media-max-width; max-width: $media-modal-media-max-width;
max-height: $media-modal-media-max-height; max-height: $media-modal-media-max-height;
background: url('~images/void.png') repeat; background: url("~images/void.png") repeat;
object-fit: contain; object-fit: contain;
} }
@@ -729,7 +728,7 @@ body > [data-popper-placement] {
&:hover, &:hover,
&:focus, &:focus,
&:active { &:active {
@include multi-columns('screen and (min-width: 631px)') { @include multi-columns("screen and (min-width: 631px)") {
background: lighten($ui-base-color, 14%); background: lighten($ui-base-color, 14%);
border-bottom-color: lighten($ui-base-color, 14%); border-bottom-color: lighten($ui-base-color, 14%);
} }
@@ -1054,7 +1053,7 @@ body > [data-popper-placement] {
border-bottom-color: $ui-highlight-color; border-bottom-color: $ui-highlight-color;
} }
@include limited-single-column('screen and (max-width: 600px)') { @include limited-single-column("screen and (max-width: 600px)") {
font-size: 16px; font-size: 16px;
} }
@@ -1150,7 +1149,7 @@ button.icon-button.active i.fa-retweet {
padding-top: 20px + 48px; padding-top: 20px + 48px;
.regeneration-indicator__figure { .regeneration-indicator__figure {
background-image: url('~flavours/glitch/images/elephant_ui_disappointed.svg'); background-image: url("~flavours/glitch/images/elephant_ui_disappointed.svg");
} }
} }
@@ -1316,6 +1315,8 @@ button.icon-button.active i.fa-retweet {
} }
.spoiler-button { .spoiler-button {
--size-icon: 18px;
top: 0; top: 0;
inset-inline-start: 0; inset-inline-start: 0;
width: 100%; width: 100%;
@@ -1324,8 +1325,6 @@ button.icon-button.active i.fa-retweet {
z-index: 100; z-index: 100;
svg.gts-icon { svg.gts-icon {
--size: 18px;
display: block; display: block;
} }
@@ -267,7 +267,7 @@
} }
.onboarding-modal__page__wrapper-0 { .onboarding-modal__page__wrapper-0 {
background: url('~images/elephant_ui_greeting.svg') no-repeat left bottom / background: url("~images/elephant_ui_greeting.svg") no-repeat left bottom /
auto 250px; auto 250px;
height: 100%; height: 100%;
padding: 0; padding: 0;
@@ -1060,15 +1060,13 @@
padding: 15px; padding: 15px;
.report-modal__close { .report-modal__close {
--size-icon: 20px;
position: absolute; position: absolute;
top: 10px; top: 10px;
inset-inline-end: 10px; inset-inline-end: 10px;
display: flex; display: flex;
padding: 6px; padding: 6px;
svg.gts-icon {
--size: 20px;
}
} }
} }
@@ -1204,7 +1202,7 @@
width: 100px; width: 100px;
height: 100px; height: 100px;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
background: url('~images/reticle.png') no-repeat 0 0; background: url("~images/reticle.png") no-repeat 0 0;
border-radius: 50%; border-radius: 50%;
box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35); box-shadow: 0 0 0 9999em rgba($base-shadow-color, 0.35);
} }
@@ -87,14 +87,14 @@
counter-increment: list-counter; counter-increment: list-counter;
&::before { &::before {
content: counter(list-counter) '.'; content: counter(list-counter) ".";
position: absolute; position: absolute;
inset-inline-start: 0; inset-inline-start: 0;
} }
} }
ul > li::before { ul > li::before {
content: ''; content: "";
position: absolute; position: absolute;
background-color: $darker-text-color; background-color: $darker-text-color;
border-radius: 50%; border-radius: 50%;
@@ -4,7 +4,7 @@
.search__icon, .search__icon,
.search__icon.gts-icon { .search__icon.gts-icon {
--size: 20px; --size-icon: 20px;
position: absolute; position: absolute;
top: 13px; top: 13px;
@@ -35,6 +35,8 @@
} }
.search__button { .search__button {
--size-icon: 20px;
position: absolute; position: absolute;
top: 7px; top: 7px;
right: 7px; right: 7px;
@@ -48,8 +50,6 @@
transition: all 0.3s; transition: all 0.3s;
.gts-icon { .gts-icon {
--size: 20px;
display: block; display: block;
} }
@@ -154,13 +154,11 @@
.search-results__header, .search-results__header,
.search-results__section__header h3 { .search-results__section__header h3 {
--size-icon: 20px;
display: flex; display: flex;
gap: 5px; gap: 5px;
align-items: center; align-items: center;
.gts-icon {
--size: 20px;
}
} }
.search-results__header { .search-results__header {
@@ -277,8 +277,8 @@
.layout-single-column .ui__header { .layout-single-column .ui__header {
display: flex; display: flex;
background: $ui-base-color;
border-bottom: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%);
background: $ui-base-color;
} }
.layout-single-column { .layout-single-column {
@@ -89,16 +89,6 @@
} }
} }
&.mention {
&:hover {
text-decoration: none;
span {
text-decoration: underline;
}
}
}
.fa { .fa {
color: $dark-text-color; color: $dark-text-color;
} }
@@ -169,12 +159,8 @@
outline: 0; outline: 0;
background: lighten($ui-base-color, 4%); background: lighten($ui-base-color, 4%);
&.status.status-direct { &.status.status-direct.muted {
background: mix(lighten($ui-base-color, 4%), $ui-highlight-color, 95%); background: transparent;
&.muted {
background: transparent;
}
} }
.detailed-status, .detailed-status,
@@ -219,7 +205,8 @@
} }
&.status-direct { &.status-direct {
background: mix($ui-base-color, $ui-highlight-color, 95%); --color-status-bg: #{mix($ui-base-color, $ui-highlight-color, 95%)};
border-bottom-color: lighten($ui-base-color, 12%); border-bottom-color: lighten($ui-base-color, 12%);
} }
@@ -277,7 +264,7 @@
rgba($base-shadow-color, 0.8) rgba($base-shadow-color, 0.8)
); );
pointer-events: none; pointer-events: none;
content: ''; content: "";
} }
.display-name:hover .display-name__html { .display-name:hover .display-name__html {
@@ -291,7 +278,7 @@
padding-top: 0; padding-top: 0;
&::after { &::after {
content: ''; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
@@ -412,19 +399,11 @@
} }
.status__action-bar { .status__action-bar {
--size-icon: 20px;
display: flex; display: flex;
gap: 10px; gap: 10px;
align-items: center; align-items: center;
svg.gts-icon {
--size: 20px;
}
&.detailed-status__action-bar {
svg.gts-icon {
--size: 24px;
}
}
} }
.status__action-bar-button, .status__action-bar-button,
@@ -449,9 +428,9 @@
} }
.detailed-status { .detailed-status {
background: lighten($ui-base-color, 4%); padding: 15px;
padding: 14px 10px;
border-top: 1px solid lighten($ui-base-color, 8%); border-top: 1px solid lighten($ui-base-color, 8%);
background: lighten($ui-base-color, 4%);
&--flex { &--flex {
display: flex; display: flex;
@@ -582,9 +561,8 @@ a.status__display-name,
.status__avatar { .status__avatar {
flex: none; flex: none;
margin-inline-end: 10px; height: var(--size-avatar);
height: 48px; width: var(--size-avatar);
width: 48px;
} }
.muted { .muted {
@@ -918,7 +896,7 @@ a.status-card.compact:hover {
&.unread { &.unread {
&::before { &::before {
content: ''; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
inset-inline-start: 0; inset-inline-start: 0;
@@ -956,7 +934,7 @@ a.status-card.compact:hover {
height: 100%; height: 100%;
&::before { &::before {
content: ''; content: "";
display: block; display: block;
position: absolute; position: absolute;
top: 10px - 4px; top: 10px - 4px;
@@ -1,3 +1,3 @@
@import 'contrast/variables'; @import "contrast/variables";
@import 'index'; @import "index";
@import 'contrast/diff'; @import "contrast/diff";
@@ -309,9 +309,9 @@ code {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
border-radius: 4px; border-radius: 4px;
background: url('images/void.png'); background: url("images/void.png");
&[src$='missing.png'] { &[src$="missing.png"] {
visibility: hidden; visibility: hidden;
} }
@@ -404,7 +404,7 @@ code {
flex: 1 1 auto; flex: 1 1 auto;
} }
input[type='checkbox'] { input[type="checkbox"] {
position: absolute; position: absolute;
inset-inline-start: 0; inset-inline-start: 0;
top: 5px; top: 5px;
@@ -420,12 +420,12 @@ code {
border-radius: 4px; border-radius: 4px;
} }
input[type='text'], input[type="text"],
input[type='number'], input[type="number"],
input[type='email'], input[type="email"],
input[type='password'], input[type="password"],
input[type='url'], input[type="url"],
input[type='datetime-local'], input[type="datetime-local"],
textarea { textarea {
box-sizing: border-box; box-sizing: border-box;
font-size: 16px; font-size: 16px;
@@ -463,11 +463,11 @@ code {
} }
} }
input[type='text'], input[type="text"],
input[type='number'], input[type="number"],
input[type='email'], input[type="email"],
input[type='password'], input[type="password"],
input[type='datetime-local'] { input[type="datetime-local"] {
&:focus:invalid:not(:placeholder-shown), &:focus:invalid:not(:placeholder-shown),
&:required:invalid:not(:placeholder-shown) { &:required:invalid:not(:placeholder-shown) {
border-color: lighten($error-red, 12%); border-color: lighten($error-red, 12%);
@@ -479,11 +479,11 @@ code {
color: lighten($error-red, 12%); color: lighten($error-red, 12%);
} }
input[type='text'], input[type="text"],
input[type='number'], input[type="number"],
input[type='email'], input[type="email"],
input[type='password'], input[type="password"],
input[type='datetime-local'], input[type="datetime-local"],
textarea, textarea,
select { select {
border-color: lighten($error-red, 12%); border-color: lighten($error-red, 12%);
@@ -619,7 +619,7 @@ code {
overflow: hidden; overflow: hidden;
&::after { &::after {
content: ''; content: "";
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
@@ -1019,7 +1019,7 @@ code {
flex: 1 1 auto; flex: 1 1 auto;
} }
input[type='text'] { input[type="text"] {
background: transparent; background: transparent;
border: 0; border: 0;
padding: 10px; padding: 10px;
@@ -1205,7 +1205,7 @@ code {
border-color: $highlight-text-color; border-color: $highlight-text-color;
&::before { &::before {
content: ''; content: "";
width: 10px; width: 10px;
height: 10px; height: 10px;
border-radius: 50%; border-radius: 50%;
+25 -20
View File
@@ -2,8 +2,8 @@
/* Variables */ /* Variables */
:root { :root {
--drawer-border-radius: 8px; --drawer-border-radius: var(--size-layout-radius);
--button-border-radius: 6px; --button-border-radius: var(--size-ui-radius);
} }
/* Icons debug */ /* Icons debug */
@@ -13,11 +13,10 @@
/* Diff */ /* Diff */
.gts-icon { .gts-icon {
--size: 1em;
display: inline-block; display: inline-block;
width: var(--size); flex-shrink: 0;
height: var(--size); width: var(--size-icon);
height: var(--size-icon);
} }
.gts-icon-with-badge { .gts-icon-with-badge {
@@ -59,7 +58,7 @@
.column-header .gts-icon, .column-header .gts-icon,
.column-link .gts-icon, .column-link .gts-icon,
.local-settings__navigation__item .gts-icon { .local-settings__navigation__item .gts-icon {
--size: 24px; --size-icon: 24px;
} }
.navigation-panel { .navigation-panel {
@@ -94,12 +93,9 @@
} }
} }
.notification__filter-bar svg, .notification__filter-bar svg.gts-icon,
.status__info__icons svg { .status__info__icons svg.gts-icon {
--size: 18px; --size-icon: 18px;
width: var(--size);
height: var(--size);
} }
.detailed-status__meta { .detailed-status__meta {
@@ -121,16 +117,25 @@
} }
.detailed-status__meta svg { .detailed-status__meta svg {
--size: 16px; --size-icon: 16px;
width: var(--size);
height: var(--size);
} }
.notification__favourite-icon-wrapper svg { .notification__favourite-icon-wrapper svg {
--size: 16px; --size-icon: 16px;
width: var(--size);
height: var(--size);
color: $highlight-text-color; color: $highlight-text-color;
} }
.drawer__pager {
flex-grow: unset;
}
.drawer__inner {
position: relative;
top: unset;
}
.drawer__inner__mastodon,
.drawer__inner.darker {
display: none;
}
@@ -6,8 +6,10 @@
*/ */
/* 🛠️ Config */ /* 🛠️ Config */
@import 'colors'; @import "colors";
@import 'sizes'; @import "sizes";
/* 🧩 Components */ /* 🧩 Components */
@import 'status'; @import "media-gallery";
@import "status";
@import "ui-header";
@@ -6,6 +6,7 @@
--color-fg: #fff; --color-fg: #fff;
--color-bg: #191b22; --color-bg: #191b22;
--color-lines: #3d4455; --color-lines: #3d4455;
--color-logo: #c76c33;
/* Accent */ /* Accent */
--color-accent: #8c8dff; --color-accent: #8c8dff;
@@ -70,4 +71,5 @@
/* Status */ /* Status */
--color-status-fg: ; --color-status-fg: ;
--color-status-bg: #282c37; --color-status-bg: #282c37;
--color-status-bg--focus: #313543;
} }
@@ -0,0 +1,73 @@
/* 🖼️ Media Gallery */
.media-gallery {
position: relative;
display: grid;
grid-template-columns: auto auto;
gap: var(--size-ui-gap);
overflow: hidden;
}
.media-gallery:not(.full-width) {
border-radius: var(--size-ui-radius);
}
.media-gallery.full-width {
margin-inline: -15px;
/* the `div` is there for specificity */
div.media-gallery__item {
border-radius: 0;
}
}
.media-gallery:not(.full-width) .spoiler-button__overlay {
border-radius: var(--size-ui-radius);
}
.media-gallery__item {
overflow: hidden;
}
/* Only one image */
.media-gallery__item:nth-child(2):nth-last-child(1) {
border-radius: var(--size-ui-radius);
}
/* First image in a set of two */
.media-gallery__item:nth-child(2):nth-last-child(2) {
border-top-left-radius: var(--size-ui-radius);
border-bottom-left-radius: var(--size-ui-radius);
}
/* Second image in a set of two */
.media-gallery__item:nth-child(3):nth-last-child(1) {
border-top-right-radius: var(--size-ui-radius);
border-bottom-right-radius: var(--size-ui-radius);
}
/* First image in a set of at least two */
.media-gallery__item:nth-child(2):not(:nth-last-child(1)) {
border-top-left-radius: var(--size-ui-radius);
}
/* Second image in a set of at least two */
.media-gallery__item:nth-child(3):not(:nth-last-child(1)) {
border-top-right-radius: var(--size-ui-radius);
}
/* Second to last image in an even set */
.media-gallery__item:nth-last-child(2):nth-child(even) {
border-bottom-left-radius: var(--size-ui-radius);
}
/* Last image in an even set */
.media-gallery__item:last-child:nth-child(odd) {
border-bottom-right-radius: var(--size-ui-radius);
}
/* Last image in an uneven set */
.media-gallery__item:last-child:nth-child(even) {
grid-column: 1/-1;
border-bottom-right-radius: var(--size-ui-radius);
border-bottom-left-radius: var(--size-ui-radius);
}
@@ -1,4 +1,15 @@
/* 📏 Sizes */ /* 📏 Sizes */
:root { :root {
/* Layout: larger elements, mostly containers */
--size-layout-gap: 10px; --size-layout-gap: 10px;
--size-layout-radius: 8px;
/* UI: smaller elements such as form elements and icons */
--size-ui-gap: 5px;
--size-ui-radius: 6px;
/* Components */
--size-avatar: 46px;
--size-icon: 20px;
--size-header-block: #{$ui-header-height};
} }
@@ -1,15 +1,50 @@
/* 🚥 Status */ /* 🚥 Status */
@import 'status/status-account'; @import "status/status-account";
@import 'status/status-display-name'; @import "status/status-display-name";
@import 'status/status-icons'; @import "status/status-icons";
@import 'status/status-info'; @import "status/status-info";
@import 'status/status-prepend'; @import "status/status-prepend";
@import 'status/status-spoiler'; @import "status/status-spoiler";
.status__content { .status {
background-color: var(--color-status-bg);
&.focusable:focus {
--color-status-bg: var(--color-status-bg--focus);
}
}
.status__content,
.detailed-status .status__content {
line-height: 1.5; line-height: 1.5;
} }
.status__content p {
margin-bottom: 12px;
}
.media-gallery {
margin-top: 16px;
}
.status__action-bar :is(a, button) { .status__action-bar :is(a, button) {
color: var(--color-secondary-fg); color: var(--color-secondary-fg);
} }
.status .mention {
&,
&:hover {
text-decoration: none;
}
}
.status .mention:is(:focus, :hover) span {
text-decoration-color: currentcolor;
}
.status .mention span {
text-decoration-line: underline;
text-decoration-color: var(--color-accent-lines);
text-decoration-thickness: 2px;
text-underline-offset: 2px;
}
@@ -2,7 +2,7 @@
.status__info__account { .status__info__account {
display: grid; display: grid;
grid-template-columns: auto 1fr; grid-template-columns: auto 1fr;
gap: 10px; gap: var(--size-layout-gap);
overflow: hidden; overflow: hidden;
text-overflow: clip; text-overflow: clip;
} }
@@ -1,6 +1,6 @@
/* 🚥 Status: Display name */ /* 🚥 Status: Display name */
.status__display-name { .status__display-name {
align-self: start; align-self: center;
justify-self: start; justify-self: start;
color: var(--color-content-fg); color: var(--color-content-fg);
font-size: 15px; font-size: 15px;
@@ -12,6 +12,12 @@
text-overflow: clip; text-overflow: clip;
} }
.display-name__html,
.display-name__account {
display: block;
line-height: max(21px, 1.4em);
}
.display-name__html { .display-name__html {
font-weight: 700; font-weight: 700;
} }
@@ -1,14 +1,14 @@
/* 🚥 Status: Icons */ /* 🚥 Status: Icons */
.status__info__icons { .status__info__icons {
--size-icon: 18px;
position: relative; position: relative;
display: flex; display: flex;
gap: 5px; gap: var(--size-ui-gap);
align-items: start; align-items: start;
color: var(--color-secondary-fg); color: var(--color-secondary-fg);
svg.gts-icon { svg.gts-icon {
--size: 18px;
display: block; display: block;
} }
@@ -22,7 +22,7 @@
right: calc(100% + 5px); right: calc(100% + 5px);
width: 20px; width: 20px;
height: 100%; height: 100%;
content: ''; content: "";
background: linear-gradient(90deg, transparent, var(--color-status-bg)); background: linear-gradient(90deg, transparent, var(--color-status-bg));
transition: all 0.2s; transition: all 0.2s;
} }
@@ -1,7 +1,7 @@
/* 🚥 Status: Info */ /* 🚥 Status: Info */
.status__info { .status__info {
display: grid; display: grid;
gap: 5px; gap: var(--size-ui-gap);
grid-template-columns: 1fr auto; grid-template-columns: 1fr auto;
.notification__message { .notification__message {
@@ -3,7 +3,7 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
align-self: start; align-self: start;
gap: 5px; gap: var(--size-ui-gap);
padding: 5px 10px; padding: 5px 10px;
border: 1px solid var(--color-accent-lines); border: 1px solid var(--color-accent-lines);
border-radius: 50px; border-radius: 50px;
@@ -19,11 +19,9 @@
} }
.status__prepend-icon { .status__prepend-icon {
--size: 18px; --size-icon: 18px;
display: block; display: block;
width: var(--size);
height: var(--size);
} }
.status__prepend-display-name { .status__prepend-display-name {
@@ -1,8 +1,15 @@
/* 🚥 Status: Spoiler link */ /* 🚥 Status: Spoiler link */
.status__content__spoiler,
.status__content__spoiler-link { .status__content__spoiler-link {
margin-block-start: var(--size-ui-gap);
}
.status__content__spoiler-link {
--size-icon: 14px;
display: flex; display: flex;
gap: 5px; gap: var(--size-ui-gap);
margin-top: 5px;
padding: 5px 8px; padding: 5px 8px;
border: 1px solid var(--color-accent-lines); border: 1px solid var(--color-accent-lines);
border-radius: 8px; border-radius: 8px;
@@ -12,10 +19,6 @@
background: var(--color-accent-bg); background: var(--color-accent-bg);
transition: all 0.3s; transition: all 0.3s;
.gts-icon {
--size: 14px;
}
&:hover { &:hover {
border-color: var(--color-lines); border-color: var(--color-lines);
color: var(--color-fg); color: var(--color-fg);
@@ -0,0 +1,43 @@
/* 🧑‍💻 UI: Header */
.ui__header {
position: sticky;
top: 0;
z-index: 3;
display: none;
align-items: center;
justify-content: space-between;
padding-inline-start: 7px;
height: var(--size-header-block);
box-sizing: border-box;
svg.gts-icon {
display: block;
}
}
.ui__header__logo {
--size-icon: 32px;
padding: 8px;
}
.ui__header__links {
display: flex;
align-items: center;
gap: 10px;
padding-inline: 10px;
overflow: hidden;
a {
display: flex;
align-items: center;
line-height: 20px;
}
.button {
flex: 0 0 auto;
}
.button-tertiary {
flex-shrink: 1;
}
}
@@ -1,28 +1,28 @@
@import 'mixins'; @import "mixins";
@import 'variables'; @import "variables";
@import 'styles/fonts/roboto'; @import "styles/fonts/roboto";
@import 'styles/fonts/roboto-mono'; @import "styles/fonts/roboto-mono";
@import 'reset'; @import "reset";
@import 'basics'; @import "basics";
@import 'branding'; @import "branding";
@import 'containers'; @import "containers";
@import 'lists'; @import "lists";
@import 'modal'; @import "modal";
@import 'widgets'; @import "widgets";
@import 'forms'; @import "forms";
@import 'accounts'; @import "accounts";
@import 'statuses'; @import "statuses";
@import 'components/index'; @import "components/index";
@import 'polls'; @import "polls";
@import 'about'; @import "about";
@import 'tables'; @import "tables";
@import 'admin'; @import "admin";
@import 'accessibility'; @import "accessibility";
@import 'rtl'; @import "rtl";
@import 'dashboard'; @import "dashboard";
@import 'rich_text'; @import "rich_text";
@import 'gts'; @import "gts";
@import 'gts/config'; @import "gts/config";
@import 'tangerine/config'; @import "tangerine/config";
@@ -1,5 +1,5 @@
@import 'styles/fonts/roboto'; @import "styles/fonts/roboto";
@import 'reset'; @import "reset";
:root { :root {
--color-bg: #191b22; --color-bg: #191b22;
@@ -91,7 +91,7 @@ button {
} }
} }
input[type='text'] { input[type="text"] {
display: block; display: block;
margin: 0; margin: 0;
padding: 15px; padding: 15px;
@@ -1,4 +1,4 @@
@import 'mastodon-light/variables'; @import "mastodon-light/variables";
@import 'index'; @import "index";
@import 'mastodon-light/diff'; @import "mastodon-light/diff";
@import 'mastodon-light/colors'; @import "mastodon-light/colors";
@@ -6,6 +6,7 @@
--color-fg: #000; --color-fg: #000;
--color-bg: #eff3f5; --color-bg: #eff3f5;
--color-lines: #c0cdd9; --color-lines: #c0cdd9;
--color-logo: #df8958;
/* Accent */ /* Accent */
--color-accent: #4d4eff; --color-accent: #4d4eff;
@@ -40,4 +41,5 @@
/* Status */ /* Status */
--color-status-fg: var(--color-fg); --color-status-fg: var(--color-fg);
--color-status-bg: #fff; --color-status-bg: #fff;
--color-status-bg--focus: hsl(0deg, 0%, 96%);
} }
@@ -141,7 +141,7 @@ html {
} }
.compose-form__autosuggest-wrapper, .compose-form__autosuggest-wrapper,
.poll__option input[type='text'], .poll__option input[type="text"],
.compose-form .spoiler-input__input, .compose-form .spoiler-input__input,
.compose-form__poll-wrapper select, .compose-form__poll-wrapper select,
.search__input, .search__input,
@@ -495,10 +495,10 @@ html {
} }
.simple_form { .simple_form {
input[type='text'], input[type="text"],
input[type='number'], input[type="number"],
input[type='email'], input[type="email"],
input[type='password'], input[type="password"],
textarea { textarea {
&:hover { &:hover {
border-color: lighten($ui-base-color, 12%); border-color: lighten($ui-base-color, 12%);
@@ -54,4 +54,4 @@ $account-background-color: $white !default;
@return hsl(hue($color), saturation($color), lightness($color) - $amount); @return hsl(hue($color), saturation($color), lightness($color) - $amount);
} }
$emojis-requiring-inversion: 'chains'; $emojis-requiring-inversion: "chains";
@@ -76,8 +76,8 @@
max-width: calc(100% - 45px - 25px); max-width: calc(100% - 45px - 25px);
} }
input[type='radio'], input[type="radio"],
input[type='checkbox'] { input[type="checkbox"] {
display: none; display: none;
} }
@@ -85,7 +85,7 @@
flex: 1 1 auto; flex: 1 1 auto;
} }
input[type='text'] { input[type="text"] {
display: block; display: block;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
@@ -189,7 +189,8 @@
&__footer { &__footer {
display: flex; display: flex;
gap: 5px; align-items: center;
gap: min(0.22em, 4px);
padding-top: 6px; padding-top: 6px;
padding-bottom: 5px; padding-bottom: 5px;
color: $dark-text-color; color: $dark-text-color;
@@ -217,8 +218,8 @@
.button { .button {
height: 36px; height: 36px;
margin-inline-end: min(0.22em, 4px);
padding: 0 16px; padding: 0 16px;
margin-inline-end: 10px;
font-size: 14px; font-size: 14px;
} }
} }
@@ -240,10 +241,10 @@
} }
.poll__footer { .poll__footer {
border-top: 1px solid darken($simple-background-color, 8%);
padding: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
border-top: 1px solid darken($simple-background-color, 8%);
padding: 10px;
button, button,
select { select {
@@ -303,10 +304,6 @@
padding: 6px 10px; padding: 6px 10px;
padding-inline-end: 30px; padding-inline-end: 30px;
} }
.icon-button.disabled {
color: darken($simple-background-color, 14%);
}
} }
.muted .poll { .muted .poll {
@@ -107,11 +107,11 @@ body.rtl {
} }
.fa-chevron-left::before { .fa-chevron-left::before {
content: '\F054'; content: "\F054";
} }
.fa-chevron-right::before { .fa-chevron-right::before {
content: '\F053'; content: "\F053";
} }
.dismissable-banner, .dismissable-banner,
@@ -86,7 +86,7 @@
} }
.embed { .embed {
.status__content[data-spoiler='folded'] { .status__content[data-spoiler="folded"] {
.e-content { .e-content {
display: none; display: none;
} }
@@ -4,7 +4,7 @@
*/ */
/* 🛠️ Config */ /* 🛠️ Config */
@import 'keyframes'; @import "keyframes";
/* 🧩 Components */ /* 🧩 Components */
@import 'status-bar'; @import "status-bar";
@@ -83,9 +83,9 @@ $media-modal-media-max-height: 80%;
$no-gap-breakpoint: 1175px; $no-gap-breakpoint: 1175px;
$font-sans-serif: 'mastodon-font-sans-serif' !default; $font-sans-serif: "mastodon-font-sans-serif" !default;
$font-display: 'mastodon-font-display' !default; $font-display: "mastodon-font-display" !default;
$font-monospace: 'mastodon-font-monospace' !default; $font-monospace: "mastodon-font-monospace" !default;
// Avatar border size (8% default, 100% for rounded avatars) // Avatar border size (8% default, 100% for rounded avatars)
$ui-avatar-border-size: 8%; $ui-avatar-border-size: 8%;
@@ -1,4 +1,4 @@
@use 'sass:math'; @use "sass:math";
.hero-widget { .hero-widget {
margin-bottom: 10px; margin-bottom: 10px;
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 339 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.5 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.5 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.4 MiB

Some files were not shown because too many files have changed in this diff Show More