Merge branch 'develop' into hooks-migration

This commit is contained in:
marcin mikołajczak 2024-10-12 12:49:04 +02:00
commit 2eab0b68b7
5 changed files with 99 additions and 872 deletions

View file

@ -0,0 +1,87 @@
# Changelog
## Unreleased
Changes made since the project forked from Soapbox in April 2024.
### Major changes
- Switched to a separate library [`pl-api`](https://github.com/mkljczk/pl-fe/tree/develop/packages/pl-api) for Mastodon API integration. It is mostly written from scratch, inheriting minor code parts from Soapbox/Mastodon. This also comes with improved compatibility with various Mastodon API extensions and abstracts out the implementation details.
### Added
**Behavior:**
- Notifications of the same type and reposts of the same post are grouped client-side.
- Date is displayed for notifications that are not about new posts.
- Replies to your posts are displayed differently to other mentions in notification list.
**Settings:**
- You can add image description to your avatar/backend, if supported by backend.
- GoToSocial users can manage post interaction policies.
**Composing posts:**
- WYSIWYG text formatting, available if Markdown is supported.
- When writing posts, links to statuses are added as quotes, when supported by backend.
- You can select post language manually, when composing.
- You can write posts with multiple language versions, when supported by backend.
- Language detection is done client-side for composed posts, utilizing `fasttext.wasm.js`.
- Draft posts. They are stored locally only and work with any backend.
**Features:**
- The most recent scrobble is displayed on user profile/card.
- Users can generate *interaction circles* for their profiles.
- You can bite users, if supported by backend.
- You can browse Bubble timeline, if supported by backend.
- Mastodon displays trending articles on Search page.
- Postsa can be addressed to lists of users, on Pleroma.
### Changed
**Behavior:**
- Separated favourites from reaction emojis. Limit for one reaction per post is removed. Facebook-like emoji reaction bar is removed.
- Simplified sensitive text/media logic.
- Reposting user is mentioned, when replying to a reposted status.
- Notification types filtering options are reasonably merged.
- Search results are never cleared by just leaving the page.
- Status spoilers are displayed with a collapse/expand button, not in an overlay.
- Mentions and hashtags in bio no longer link to external pages.
- Quotes are counted with reblogs for non-detailed statuses.
- Reactions/favourites/reblogs list modal is displayed on long press.
**Settings:**
- Moved missing description confirmation option back to Settings page.
- Profile fields can be reordered on the Edit profile page.
**UI changes:**
- Removed header. Search bar and profile dropdown are moved to the sidebar. Mobile sidebar button is moved to the thumb navigation.
- Floating action button for creating new posts is moved to the thumb navigation.
- Mobile sidebar UI is changed to look like a popover.
- Added some animations, improved consistency of the existing ones.
- Max width of the layout is increased.
- Updated Lists UI, to match the overall style.
- RSS button is displayed in account header for local users, when unauthenticated.
- Conversations page is always displayed, even when Chats are supported.
- Emojis are zoomed on hover.
**Internal:**
- Migrated some local stores from Redux to Zustand.
**Dependencies:**
- `@tanstack/react-virtual` is used for list virtualization, instead of `react-virtuoso`.
- Replaced `react-popper` and `react-overlays` with `@floating-ui/react`.
- `uuid` package is replaced by the `randomUUID()` method.
### Removed
- Removed Truth Social-specific features.
- Removed Nostr-specific stuff.
- Removed option that disabled name editing for verified users.
- Removed Call to Action banner.
### Fixed
- When initializing FaviconService, canvas export permission is checked.
- Improved regex for mentions in post composer.
- Post tombstones don't interrupt status navigation with hotkeys.
- Emojis are supported in poll options.

View file

@ -1,15 +1,4 @@
`pl-fe` is a social networking client app forked from [Soapbox](https://gitlab.com/soapbox-pub/soapbox/). It works with any Mastodon API-compatible software, but it's focused on supporting alternative backends, like Pleroma or GoToSocial. `pl-fe` is a social networking client app. It works with any Mastodon API-compatible software, but it's focused on supporting alternative backends, like Pleroma or GoToSocial.
## Differences compared to Soapbox
- **Broader compatibility**: The compatibility matrix has been updated to support more features on various backends. Support for features specific to Mitra, Toki, GoToSocial and Akkoma has been added, more are coming soon.
- **WYSIWYG status composer**: You can use the WYSIWYG editor for advanced text formatting on any backend with Markdown support.
- **Language detection**: When you write a post, the language gets detected automatically with great accuracy. You can always select it manually.
- **Drafts**: You can save a post you are working on and finish it later. Drafts are only stored locally and work with any backend.
- **Quote anywhere**: If your backend supports quote posts, you can now quote a post by simply putting the link in your post, so you can now quote other posts in a reply.
- **Interaction circles**: A fun feature you might know from third-party tools for Twitter. You can generate a picture that represents the accounts you interact the most with.
There is more to mention. `pl-fe` includes various minor improvements and visual changes.
## Try it out ## Try it out
@ -33,7 +22,7 @@ Code contributions are welcome. [Weblate](https://hosted.weblate.org/projects/pl
## License ## License
`pl-fe` is a fork of Soapbox, which was forked from [Gab Social](https://github.com/GabOpenSource/gab-social), which is a fork of [Mastodon](https://github.com/mastodon/mastodon/). `pl-fe` is a fork of [Soapbox](https://gitlab.com/soapbox-pub/soapbox/), which was forked from [Gab Social](https://github.com/GabOpenSource/gab-social), which is a fork of [Mastodon](https://github.com/mastodon/mastodon/).
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by it under the terms of the GNU Affero General Public License as published by

View file

@ -128,7 +128,6 @@
"react-sticky-box": "^2.0.5", "react-sticky-box": "^2.0.5",
"react-swipeable-views": "^0.14.0", "react-swipeable-views": "^0.14.0",
"redux": "^5.0.1", "redux": "^5.0.1",
"redux-immutable": "^4.0.0",
"redux-thunk": "^3.1.0", "redux-thunk": "^3.1.0",
"reselect": "^5.1.1", "reselect": "^5.1.1",
"resize-observer-polyfill": "^1.5.1", "resize-observer-polyfill": "^1.5.1",
@ -193,7 +192,6 @@
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.12.0",
"stylelint": "^16.9.0", "stylelint": "^16.9.0",
"stylelint-config-standard-scss": "^12.0.0", "stylelint-config-standard-scss": "^12.0.0",
"tailwind": "^4.0.0",
"tailwindcss": "^3.4.13", "tailwindcss": "^3.4.13",
"vite-plugin-checker": "^0.8.0", "vite-plugin-checker": "^0.8.0",
"vite-plugin-pwa": "^0.20.5", "vite-plugin-pwa": "^0.20.5",

View file

@ -1,17 +0,0 @@
// Type definitions for redux-immutable v4.0.0
// Project: https://github.com/gajus/redux-immutable
// Definitions by: Sebastian Sebald <https://github.com/sebald>
// Gavin Gregory <https://github.com/gavingregory>
// Kanitkorn Sujautra <https://github.com/lukyth>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
declare module 'redux-immutable' {
import { Collection, Record } from 'immutable';
import { ReducersMapObject, Reducer, Action } from 'redux';
export function combineReducers<S, A extends Action, T>(reducers: ReducersMapObject<S, A>, getDefaultState?: () => Collection.Keyed<T, S>): Reducer<S, A>;
export function combineReducers<S, A extends Action>(reducers: ReducersMapObject<S, A>, getDefaultState?: () => Collection.Indexed<S>): Reducer<S, A>;
export function combineReducers<S>(reducers: ReducersMapObject<S, any>, getDefaultState?: () => Collection.Indexed<S>): Reducer<S>;
export function combineReducers<S extends object, T extends object>(reducers: ReducersMapObject<S, any>, getDefaultState?: Record.Factory<T>): Reducer<ReturnType<Record.Factory<S>>>;
}

File diff suppressed because it is too large Load diff