diff --git a/.node-version b/.node-version
index 9be0c7058..08b7109d0 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-18.20.7
+18.20.8
diff --git a/.stylelintrc.json b/.stylelintrc.json
index d6689cc01..c91107595 100644
--- a/.stylelintrc.json
+++ b/.stylelintrc.json
@@ -1,6 +1,5 @@
{
"extends": [
- "stylelint-rscss/config",
"stylelint-config-standard",
"stylelint-config-recommended-scss",
"stylelint-config-html",
@@ -8,15 +7,6 @@
],
"rules": {
"declaration-no-important": true,
- "rscss/no-descendant-combinator": false,
- "rscss/class-format": [
- false,
- {
- "component": "pascal-case",
- "variant": "^-[a-z]\\w+",
- "element": "^[a-z]\\w+"
- }
- ],
"selector-class-pattern": null,
"import-notation": null,
"custom-property-pattern": null,
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9844319e3..c2f0e7d17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,74 @@
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+## 2.8.0
+### Changed
+- BREAKING: static/img/nsfw.2958239.png is now static/img/nsfw.DepQPhG0.png, which may affect people who specify exactly this path as the cover image
+- BREAKING: static/emoji.json is replaced with a properly hashed path under static/js in the production build, meaning server admins cannot provide their own set of unicode emojis by overriding this file (custom (image-based) emojis not affected)
+- Speed up initial boot.
+- Updated our build system to support browsers:
+ Safari >= 15
+ Firefox >= 115
+ Android > 4
+ no Opera Mini support
+ no IE support
+ no "dead" (unmaintained) browsers support
+
+This does not guarantee that browsers will or will not work.
+
+- Use /api/v1/accounts/:id/follow for account subscriptions instead of the deprecated routes
+- Modal layout for mobile has new layout to make it easy to use
+- Better display of mute reason on posts
+- Simplify the OAuth client_name to 'PleromaFE'
+- Partially migrated from vuex to pinia
+- Authenticate and subscribe to streaming after connection
+- Tabs now have indentation for better visibility of which tab is currently active
+- Upgraded Vue to version 3.5
+
+### Added
+- Support bookmark folders
+- Some new default color schemes
+- Added support for fetching /{resource}.custom.ext to allow adding instance-specific themes without altering sourcetree
+- Post actions customization
+- Support displaying time in absolute format
+- Add draft management system
+- Compress most kinds of images on upload.
+- Added option to always convert images to JPEG format instead of using WebP when compressing images.
+- Added configurable image compression option in general settings, allowing users to control whether images are compressed before upload.
+- Inform users that Smithereen public polls are public
+- Splash screen + loading indicator to make process of identifying initialization issues and load performance
+- UI for making v3 themes and palettes, support for bundling v3 themes
+- Make UserLink wrappable
+
+### Fixed
+- Fixed occasional overflows in emoji picker and made header scrollable
+- Updated shadow editor, hopefully fixed long-standing bugs, added ability to specify shadow's name.
+- Checkbox vertical alignment
+- Check for canvas extract permission when initializing favicon service
+- Fix some of the color manipulation functions
+- Fix draft saving when auto-save is off
+- Switch from class hack to normalButton attribute for emoji count popover
+- Fix emoji inconsistencies in notifications,
+- Fix some emoji not scaling with interface
+- Make sure hover style is also applied to :focus-visible
+- Improved ToS and registration
+- Fix small markup inconsistencies
+- Fixed modals buttons overflow
+- Fix whitespaces for multiple status mute reasons, display bot status reason
+- Create an OAuth app only when needed
+- Fix CSS compatibility issues in style_setter.js for older browsers like Palemoon
+- Proper sticky header for conversations on user page
+- Add text label for more actions button in post status form
+- Reply-or-quote buttons now take less space
+- Allow repeats of own posts with private scopes
+- Bookmarks visible again on mobile
+- Remove focusability on hidden popover in subject input
+- Show only month and day instead of weird "day, hour" format.
+
+### Removed
+- BREAKING: drop support for browsers that do not support `
diff --git a/src/components/button.style.js b/src/components/button.style.js
index 410d2f7e0..887ff91b5 100644
--- a/src/components/button.style.js
+++ b/src/components/button.style.js
@@ -9,9 +9,9 @@ export default {
// However, cascading still works, so resulting state will be result of merging of all relevant states/variants
// normal: '' // normal state is implicitly added, it is always included
toggled: '.toggled',
- focused: ':focus-visible',
+ focused: ':focus-within',
pressed: ':focus:active',
- hover: ':hover:not(:disabled)',
+ hover: ':is(:hover, :focus-visible):not(:disabled)',
disabled: ':disabled'
},
// Variants are mutually exclusive, each component implicitly has "normal" variant, and all other variants inherit from it.
@@ -89,6 +89,13 @@ export default {
shadow: ['--buttonDefaultHoverGlow', '--buttonPressedBevel']
}
},
+ {
+ state: ['toggled', 'focused'],
+ directives: {
+ background: '--accent,-24.2',
+ shadow: ['--buttonDefaultHoverGlow', '--buttonPressedBevel']
+ }
+ },
{
state: ['toggled', 'disabled'],
directives: {
@@ -99,7 +106,7 @@ export default {
{
state: ['disabled'],
directives: {
- background: '$blend(--accent 0.25 --parent)',
+ background: '$blend(--inheritedBackground 0.25 --parent)',
shadow: ['--buttonDefaultBevel']
}
},
diff --git a/src/components/button_unstyled.style.js b/src/components/button_unstyled.style.js
index a387ed954..9e1a2ca90 100644
--- a/src/components/button_unstyled.style.js
+++ b/src/components/button_unstyled.style.js
@@ -6,8 +6,8 @@ export default {
states: {
toggled: '.toggled',
disabled: ':disabled',
- hover: ':hover:not(:disabled)',
- focused: ':focus-within'
+ hover: ':is(:hover, :focus-visible):not(:disabled)',
+ focused: ':focus-within:not(:is(:focus-visible))'
},
validInnerComponents: [
'Text',
diff --git a/src/components/chat_list_item/chat_list_item.scss b/src/components/chat_list_item/chat_list_item.scss
index 9711b41d6..dcef6380e 100644
--- a/src/components/chat_list_item/chat_list_item.scss
+++ b/src/components/chat_list_item/chat_list_item.scss
@@ -17,7 +17,6 @@
width: 100%;
box-sizing: border-box;
overflow: hidden;
- word-wrap: break-word;
}
.heading {
diff --git a/src/components/chat_message/chat_message.scss b/src/components/chat_message/chat_message.scss
index f7254ea35..c058f8172 100644
--- a/src/components/chat_message/chat_message.scss
+++ b/src/components/chat_message/chat_message.scss
@@ -107,8 +107,7 @@
.outgoing {
display: flex;
flex-flow: row wrap;
- align-content: end;
- justify-content: flex-end;
+ place-content: end flex-end;
.chat-message-inner {
align-items: flex-end;
diff --git a/src/components/chat_title/chat_title.vue b/src/components/chat_title/chat_title.vue
index 0213b86fb..72660cca0 100644
--- a/src/components/chat_title/chat_title.vue
+++ b/src/components/chat_title/chat_title.vue
@@ -39,7 +39,6 @@
text-overflow: ellipsis;
white-space: nowrap;
display: inline;
- word-wrap: break-word;
overflow: hidden;
}
diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue
index 0cd3d95a4..c8bba4c44 100644
--- a/src/components/checkbox/checkbox.vue
+++ b/src/components/checkbox/checkbox.vue
@@ -1,7 +1,7 @@