diff --git a/build/dev-server.js b/build/dev-server.js
index 9fb6318ef..8e3b3a12c 100644
--- a/build/dev-server.js
+++ b/build/dev-server.js
@@ -53,7 +53,8 @@ Object.keys(proxyTable).forEach(function (context) {
if (typeof options === 'string') {
options = { target: options }
}
- app.use(proxyMiddleware.createProxyMiddleware(context, options))
+ options.pathFilter = context
+ app.use(proxyMiddleware.createProxyMiddleware(options))
})
// handle fallback for HTML5 history API
diff --git a/changelog.d/roundup4.skip b/changelog.d/roundup4.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/package.json b/package.json
index 6857dea54..fa85eaf47 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,6 @@
"hash-sum": "^2.0.0",
"js-cookie": "3.0.5",
"localforage": "1.10.0",
- "pako": "^2.1.0",
"parse-link-header": "2.0.0",
"phoenix": "1.7.19",
"pinia": "^2.0.33",
diff --git a/src/App.scss b/src/App.scss
index c0f2e3fec..fa02ad929 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -1,6 +1,6 @@
// stylelint-disable rscss/class-format
/* stylelint-disable no-descending-specificity */
-@import "./panel";
+@use "panel";
:root {
--status-margin: 0.75em;
@@ -762,12 +762,6 @@ option {
margin-left: 0.7em;
margin-top: -1em;
}
-
- &.-neutral {
- background-color: var(--badgeNeutral);
- color: white;
- color: var(--badgeNeutralText, white);
- }
}
.alert {
@@ -1100,3 +1094,8 @@ option {
}
}
}
+
+@property --shadow {
+ syntax: "*";
+ inherits: false;
+}
diff --git a/src/components/attachment/attachment.style.js b/src/components/attachment/attachment.style.js
index fde8a50a6..45baa5546 100644
--- a/src/components/attachment/attachment.style.js
+++ b/src/components/attachment/attachment.style.js
@@ -4,7 +4,7 @@ export default {
notEditable: true,
validInnerComponents: [
'Border',
- 'ButtonUnstyled',
+ 'Button',
'Input'
],
defaultRules: [
@@ -14,7 +14,7 @@ export default {
}
},
{
- component: 'ButtonUnstyled',
+ component: 'Button',
parent: { component: 'Attachment' },
directives: {
background: '#FFFFFF',
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index 3ab7040ef..0701a393e 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -1,7 +1,7 @@
-
+
diff --git a/src/components/chat_list_item/chat_list_item.vue b/src/components/chat_list_item/chat_list_item.vue
index 0f9d5c5fa..236562df0 100644
--- a/src/components/chat_list_item/chat_list_item.vue
+++ b/src/components/chat_list_item/chat_list_item.vue
@@ -47,6 +47,4 @@
-
+
diff --git a/src/components/chat_message/chat_message.vue b/src/components/chat_message/chat_message.vue
index 0efdf7977..22e2e8eb8 100644
--- a/src/components/chat_message/chat_message.vue
+++ b/src/components/chat_message/chat_message.vue
@@ -98,7 +98,5 @@
-
+
diff --git a/src/components/chat_new/chat_new.vue b/src/components/chat_new/chat_new.vue
index 673ba56b6..14b26efd6 100644
--- a/src/components/chat_new/chat_new.vue
+++ b/src/components/chat_new/chat_new.vue
@@ -47,6 +47,5 @@
-
+
+
diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue
index e447595f2..0cd3d95a4 100644
--- a/src/components/checkbox/checkbox.vue
+++ b/src/components/checkbox/checkbox.vue
@@ -63,8 +63,6 @@ export default {
+
diff --git a/src/components/mention_link/mention_link.js b/src/components/mention_link/mention_link.js
index d4d8e0f96..ca5c24618 100644
--- a/src/components/mention_link/mention_link.js
+++ b/src/components/mention_link/mention_link.js
@@ -117,9 +117,6 @@ const MentionLink = {
this.highlightType
]
},
- useAtIcon () {
- return this.mergedConfig.useAtIcon
- },
isRemote () {
return this.userName !== this.userNameFull
},
diff --git a/src/components/mention_link/mention_link.vue b/src/components/mention_link/mention_link.vue
index 5db837a25..0452cad58 100644
--- a/src/components/mention_link/mention_link.vue
+++ b/src/components/mention_link/mention_link.vue
@@ -34,12 +34,7 @@
:user="user"
/>{{ !useAtIcon ? '@' : '' }}@
-
+
diff --git a/src/components/popover/popover.scss b/src/components/popover/popover.scss
index 57a5250a7..de1eda866 100644
--- a/src/components/popover/popover.scss
+++ b/src/components/popover/popover.scss
@@ -7,7 +7,8 @@
position: fixed;
min-width: 0;
max-width: calc(100vw - 20px);
- box-shadow: var(--shadow);
+
+ --_shadow: var(--shadow);
}
.popover-default {
@@ -19,7 +20,7 @@
left: -1px;
right: -1px;
z-index: -1px;
- box-shadow: var(--shadow);
+ box-shadow: var(--_shadow);
pointer-events: none;
}
@@ -54,6 +55,7 @@
grid-template-columns: 1fr;
grid-auto-flow: column;
grid-auto-columns: auto;
+ grid-gap: 0.5em;
.popover-wrapper {
box-sizing: border-box;
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index 944c43153..f9eb1bdcd 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -363,6 +363,12 @@ const PostStatusForm = {
}
},
safeToSaveDraft () {
+ console.log('safe', (
+ this.newStatus.status ||
+ this.newStatus.spoilerText ||
+ this.newStatus.files?.length ||
+ this.newStatus.hasPoll
+ ) && this.saveable)
return (
this.newStatus.status ||
this.newStatus.spoilerText ||
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index e5eaa3af8..260a89cb7 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -334,22 +334,26 @@
class="dropdown-menu"
role="menu"
>
-
+
+
+ {{ $t('post_status.save_to_drafts_and_close_button') }}
+
+
+ {{ $t('post_status.save_to_drafts_button') }}
+
+
+
diff --git a/src/components/post_status_modal/post_status_modal.js b/src/components/post_status_modal/post_status_modal.js
index 5e7c1f515..ee6cd6444 100644
--- a/src/components/post_status_modal/post_status_modal.js
+++ b/src/components/post_status_modal/post_status_modal.js
@@ -1,7 +1,7 @@
import PostStatusForm from '../post_status_form/post_status_form.vue'
import Modal from '../modal/modal.vue'
import get from 'lodash/get'
-import { usePostStatusStore } from 'src/stores/postStatus'
+import { usePostStatusStore } from 'src/stores/post_status'
const PostStatusModal = {
components: {
diff --git a/src/components/rich_content/rich_content.style.js b/src/components/rich_content/rich_content.style.js
index d9cd17aee..eaba9c4b1 100644
--- a/src/components/rich_content/rich_content.style.js
+++ b/src/components/rich_content/rich_content.style.js
@@ -2,6 +2,7 @@ export default {
name: 'RichContent',
selector: '.RichContent',
notEditable: true,
+ transparent: true,
validInnerComponents: [
'Text',
'FunText',
diff --git a/src/components/root.style.js b/src/components/root.style.js
index 9ad614c78..5075e33c8 100644
--- a/src/components/root.style.js
+++ b/src/components/root.style.js
@@ -2,27 +2,6 @@ export default {
name: 'Root',
selector: ':root',
notEditable: true,
- validInnerComponents: [
- // These are purely for --parent--text et such to work
- 'Text',
- 'Link',
- 'Border',
-
- 'Underlay',
- 'Modals',
- 'Popover',
- 'TopBar',
- 'Scrollbar',
- 'ScrollbarElement',
- 'MobileDrawer',
- 'Alert',
- 'Button' // mobile post button
- ],
- validInnerComponentsLite: [
- 'Underlay',
- 'Scrollbar',
- 'ScrollbarElement'
- ],
defaultRules: [
{
directives: {
diff --git a/src/components/settings_modal/settings_modal.js b/src/components/settings_modal/settings_modal.js
index 7c6940b25..b4677fe7f 100644
--- a/src/components/settings_modal/settings_modal.js
+++ b/src/components/settings_modal/settings_modal.js
@@ -7,7 +7,7 @@ import Checkbox from 'src/components/checkbox/checkbox.vue'
import ConfirmModal from 'src/components/confirm_modal/confirm_modal.vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import { cloneDeep, isEqual } from 'lodash'
-import { mapState as mapPiniaState } from 'pinia'
+import { mapState, mapActions } from 'pinia'
import {
newImporter,
newExporter
@@ -165,11 +165,12 @@ const SettingsModal = {
},
pushAdminDraft () {
this.$store.dispatch('pushAdminDraft')
- }
+ },
+ ...mapActions(useInterfaceStore, ['temporaryChangesRevert', 'temporaryChangesConfirm'])
},
computed: {
- ...mapPiniaState(useInterfaceStore, {
- temporaryChangesTimeoutId: store => store.layoutType === 'mobile',
+ ...mapState(useInterfaceStore, {
+ temporaryChangesTimeoutId: store => store.temporaryChangesTimeoutId,
currentSaveStateNotice: store => store.settings.currentSaveStateNotice,
modalActivated: store => store.settingsModalState !== 'hidden',
modalMode: store => store.settingsModalMode,
diff --git a/src/components/settings_modal/settings_modal.vue b/src/components/settings_modal/settings_modal.vue
index 4af9da10b..b4ccba191 100644
--- a/src/components/settings_modal/settings_modal.vue
+++ b/src/components/settings_modal/settings_modal.vue
@@ -162,8 +162,8 @@
:title="$t('settings.confirm_new_setting')"
:cancel-text="$t('settings.revert')"
:confirm-text="$t('settings.confirm')"
- @cancelled="$store.state.interface.temporaryChangesRevert"
- @accepted="$store.state.interface.temporaryChangesConfirm"
+ @cancelled="temporaryChangesRevert"
+ @accepted="temporaryChangesConfirm"
>
{{ $t('settings.confirm_new_question') }}
diff --git a/src/components/settings_modal/tabs/general_tab.vue b/src/components/settings_modal/tabs/general_tab.vue
index 9d23630a9..02396114f 100644
--- a/src/components/settings_modal/tabs/general_tab.vue
+++ b/src/components/settings_modal/tabs/general_tab.vue
@@ -269,14 +269,17 @@
{{ $t('settings.image_compression') }}
-
-
- {{ $t('settings.always_use_jpeg') }}
-
-
+
+ -
+
+ {{ $t('settings.always_use_jpeg') }}
+
+
+
-
-
- {{ $t('settings.use_at_icon') }}
-
-
{{ $t('settings.mention_link_show_avatar') }}
diff --git a/src/components/status_action_buttons/action_button.js b/src/components/status_action_buttons/action_button.js
index 32e3bd6e1..87c5bb1e5 100644
--- a/src/components/status_action_buttons/action_button.js
+++ b/src/components/status_action_buttons/action_button.js
@@ -65,7 +65,7 @@ export default {
'getClass',
'getComponent',
'doAction',
- 'close'
+ 'outerClose'
],
components: {
StatusBookmarkFolderMenu,
diff --git a/src/components/status_action_buttons/action_button.scss b/src/components/status_action_buttons/action_button.scss
index bbd3f7af4..c0a9824df 100644
--- a/src/components/status_action_buttons/action_button.scss
+++ b/src/components/status_action_buttons/action_button.scss
@@ -1,4 +1,4 @@
-@import "../../mixins";
+@use "../../mixins";
/* stylelint-disable declaration-no-important */
.quick-action {
@@ -52,7 +52,7 @@
grid-auto-columns: max-content;
align-items: center;
- @include unfocused-style {
+ @include mixins.unfocused-style {
.focus-marker {
visibility: hidden;
}
@@ -62,7 +62,7 @@
}
}
- @include focused-style {
+ @include mixins.focused-style {
.focus-marker {
visibility: visible;
}
diff --git a/src/components/status_action_buttons/action_button.vue b/src/components/status_action_buttons/action_button.vue
index 105af5caf..9e25764c0 100644
--- a/src/components/status_action_buttons/action_button.vue
+++ b/src/components/status_action_buttons/action_button.vue
@@ -14,7 +14,7 @@
:tabindex="0"
:disabled="buttonClass.disabled"
:href="getComponent(button) == 'a' ? button.link?.(funcArg) || remoteInteractionLink : undefined"
- @click="doActionWrap(button, close)"
+ @click="doActionWrap(button, outerClose)"
>
-
+
diff --git a/src/components/status_action_buttons/buttons_definitions.js b/src/components/status_action_buttons/buttons_definitions.js
index 64a95ab85..ff7944268 100644
--- a/src/components/status_action_buttons/buttons_definitions.js
+++ b/src/components/status_action_buttons/buttons_definitions.js
@@ -1,3 +1,4 @@
+import { useEditStatusStore } from 'src/stores/editStatus.js'
const PRIVATE_SCOPES = new Set(['private', 'direct'])
const PUBLIC_SCOPES = new Set(['public', 'unlisted'])
export const BUTTONS = [{
@@ -111,9 +112,9 @@ export const BUTTONS = [{
},
action ({ status, dispatch }) {
if (status.pinned) {
- return dispatch('unpinStatus', { id: status.id })
+ return dispatch('unpinStatus', status.id)
} else {
- return dispatch('pinStatus', { id: status.id })
+ return dispatch('pinStatus', status.id)
}
}
}, {
@@ -151,7 +152,7 @@ export const BUTTONS = [{
},
action ({ dispatch, status }) {
return dispatch('fetchStatusSource', { id: status.id })
- .then(data => dispatch('openEditStatusModal', {
+ .then(data => useEditStatusStore().openEditStatusModal({
statusId: status.id,
subject: data.spoiler_text,
statusText: data.text,
diff --git a/src/components/status_action_buttons/status_action_buttons.scss b/src/components/status_action_buttons/status_action_buttons.scss
index 018ff34d9..78fd7c33d 100644
--- a/src/components/status_action_buttons/status_action_buttons.scss
+++ b/src/components/status_action_buttons/status_action_buttons.scss
@@ -1,4 +1,4 @@
-@import "../../mixins";
+@use "../../mixins";
.StatusActionButtons {
.quick-action-buttons {
diff --git a/src/components/status_action_buttons/status_action_buttons.vue b/src/components/status_action_buttons/status_action_buttons.vue
index bcd16b11b..6d5cd190c 100644
--- a/src/components/status_action_buttons/status_action_buttons.vue
+++ b/src/components/status_action_buttons/status_action_buttons.vue
@@ -86,7 +86,7 @@
:func-arg="funcArg"
:get-class="getClass"
:get-component="getComponent"
- :close="close"
+ :outerClose="close"
:do-action="doAction"
/>
-