navigation.removeItem(item.id)} />}
baseUrl={baseUrl}
clearError={key => navigation.clearError(item.id, key)}
item={item}
@@ -27,7 +27,7 @@ const NavigationEditForm: React.FC<{
}
+ action={ }
baseUrl={baseUrl}
className="mt-1"
clearError={key => navigation.clearError(navigation.newItem.id, key)}
diff --git a/apps/admin-x-settings/src/components/settings/site/theme/ThemePreview.tsx b/apps/admin-x-settings/src/components/settings/site/theme/ThemePreview.tsx
index 2ee8d94298..4691380f52 100644
--- a/apps/admin-x-settings/src/components/settings/site/theme/ThemePreview.tsx
+++ b/apps/admin-x-settings/src/components/settings/site/theme/ThemePreview.tsx
@@ -126,6 +126,7 @@ const ThemePreview: React.FC<{
fullWidth={false}
options={variantOptions}
selectedOption={selectedVariant}
+ clearBg
onSelect={(option) => {
setSelectedVariant(option || undefined);
}}
diff --git a/apps/admin-x-settings/src/styles/index.css b/apps/admin-x-settings/src/styles/index.css
index ea7a4b2844..e3a5aaa36e 100644
--- a/apps/admin-x-settings/src/styles/index.css
+++ b/apps/admin-x-settings/src/styles/index.css
@@ -17,7 +17,7 @@
@apply font-sans text-black text-base leading-normal;
}
- h1, h2, h3, h4, h5, h6 {
+ h1, h2, h3, h4, h5 {
@apply font-bold tracking-tight leading-tighter;
}
@@ -57,6 +57,17 @@
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
letter-spacing: unset;
+
+ height: 100vh;
+ width: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+@media (max-width: 860px) {
+ .admin-x-base {
+ height: calc(100vh - 55px);
+ }
}
.admin-x-base.dark {
diff --git a/apps/admin-x-settings/src/utils/helpers.ts b/apps/admin-x-settings/src/utils/helpers.ts
index e4708e2793..2622e5c031 100644
--- a/apps/admin-x-settings/src/utils/helpers.ts
+++ b/apps/admin-x-settings/src/utils/helpers.ts
@@ -25,7 +25,8 @@ export function resolveAsset(assetPath: string, relativeTo: string) {
export function getLocalTime(timeZone: string) {
const date = new Date();
const options = {timeZone: timeZone};
- const localTime = date.toLocaleString('en-US', options);
+ const userLocale = navigator.language.startsWith('en') ? navigator.language : 'en-US';
+ const localTime = date.toLocaleString(userLocale, options);
return localTime;
}
diff --git a/apps/admin-x-settings/tailwind.config.cjs b/apps/admin-x-settings/tailwind.config.cjs
index 86f6bcea13..b2a527a5ef 100644
--- a/apps/admin-x-settings/tailwind.config.cjs
+++ b/apps/admin-x-settings/tailwind.config.cjs
@@ -24,6 +24,7 @@ module.exports = {
50: '#FAFAFB',
75: '#F9FAFB',
100: '#F4F5F6',
+ 150: '#F1F3F4',
200: '#EBEEF0',
300: '#DDE1E5',
400: '#CED4D9',
@@ -32,6 +33,7 @@ module.exports = {
700: '#7C8B9A',
800: '#626D79',
900: '#394047',
+ 925: '#2E3338',
950: '#222427'
},
green: {
@@ -265,10 +267,10 @@ module.exports = {
},
fontSize: {
'2xs': '1.0rem',
- base: '1.5rem',
+ base: '1.45rem',
xs: '1.2rem',
sm: '1.35rem',
- md: '1.5rem',
+ md: '1.45rem',
lg: '1.75rem',
xl: '2rem',
'2xl': '2.4rem',
diff --git a/apps/admin-x-settings/test/utils/acceptance.ts b/apps/admin-x-settings/test/utils/acceptance.ts
index fe70da9d17..42041a2059 100644
--- a/apps/admin-x-settings/test/utils/acceptance.ts
+++ b/apps/admin-x-settings/test/utils/acceptance.ts
@@ -51,14 +51,12 @@ export const responseFixtures = {
};
let defaultLabFlags = {
- recommendations: false,
audienceFeedback: false,
collections: false,
themeErrorsNotification: false,
outboundLinkTagging: false,
announcementBar: false,
signupForm: false,
- lexicalEditor: false,
members: false
};
@@ -241,6 +239,6 @@ export async function testUrlValidation(input: Locator, textToEnter: string, exp
expect(input).toHaveValue(expectedResult);
if (expectedError) {
- await expect(input.locator('xpath=..')).toContainText(expectedError);
+ await expect(input.locator('xpath=../..')).toContainText(expectedError);
}
};
diff --git a/apps/announcement-bar/package.json b/apps/announcement-bar/package.json
index a4b9d01966..417d292974 100644
--- a/apps/announcement-bar/package.json
+++ b/apps/announcement-bar/package.json
@@ -1,6 +1,6 @@
{
"name": "@tryghost/announcement-bar",
- "version": "1.1.7",
+ "version": "1.1.8",
"license": "MIT",
"repository": {
"type": "git",
@@ -36,28 +36,28 @@
},
"eslintConfig": {
"env": {
- "browser": true,
- "jest": true
- },
- "parserOptions": {
- "sourceType": "module",
- "ecmaVersion": 2022
- },
- "extends": [
- "plugin:ghost/browser",
- "plugin:react/recommended"
- ],
- "plugins": [
- "ghost"
- ],
- "rules": {
- "react/prop-types": "off"
- },
- "settings": {
- "react": {
- "version": "detect"
- }
+ "browser": true,
+ "jest": true
+ },
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaVersion": 2022
+ },
+ "extends": [
+ "plugin:ghost/browser",
+ "plugin:react/recommended"
+ ],
+ "plugins": [
+ "ghost"
+ ],
+ "rules": {
+ "react/prop-types": "off"
+ },
+ "settings": {
+ "react": {
+ "version": "detect"
}
+ }
},
"browserslist": {
"production": [
@@ -80,7 +80,7 @@
},
"devDependencies": {
"@vitejs/plugin-react": "4.1.0",
- "vite": "4.4.11",
+ "vite": "4.5.0",
"vite-plugin-svgr": "3.3.0",
"vitest": "0.34.3"
}
diff --git a/apps/comments-ui/package.json b/apps/comments-ui/package.json
index a489419475..32776d6e03 100644
--- a/apps/comments-ui/package.json
+++ b/apps/comments-ui/package.json
@@ -75,8 +75,8 @@
"eslint-plugin-tailwindcss": "3.13.0",
"jsdom": "22.1.0",
"postcss": "8.4.31",
- "tailwindcss": "3.3.3",
- "vite": "4.4.11",
+ "tailwindcss": "3.3.5",
+ "vite": "4.5.0",
"vite-plugin-css-injected-by-js": "3.3.0",
"vite-plugin-svgr": "3.3.0",
"vitest": "0.34.3"
diff --git a/apps/portal/package.json b/apps/portal/package.json
index fc9f44bc80..993441c1bc 100644
--- a/apps/portal/package.json
+++ b/apps/portal/package.json
@@ -94,7 +94,7 @@
"jsdom": "22.1.0",
"react": "17.0.2",
"react-dom": "17.0.2",
- "vite": "4.4.11",
+ "vite": "4.5.0",
"vite-plugin-css-injected-by-js": "3.3.0",
"vite-plugin-svgr": "3.3.0",
"vitest": "0.34.3"
diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json
index 05ae892cf3..e7626c7cfd 100644
--- a/apps/signup-form/package.json
+++ b/apps/signup-form/package.json
@@ -63,8 +63,8 @@
"rollup-plugin-node-builtins": "2.1.2",
"storybook": "7.4.0",
"stylelint": "15.10.3",
- "tailwindcss": "3.3.3",
- "vite": "4.4.11",
+ "tailwindcss": "3.3.5",
+ "vite": "4.5.0",
"vite-plugin-commonjs": "0.10.0",
"vite-plugin-svgr": "3.3.0",
"vitest": "0.34.3",
diff --git a/apps/sodo-search/package.json b/apps/sodo-search/package.json
index aab713a201..6a91e1ae20 100644
--- a/apps/sodo-search/package.json
+++ b/apps/sodo-search/package.json
@@ -86,7 +86,7 @@
"@testing-library/react": "12.1.5",
"@vitejs/plugin-react": "4.1.0",
"nock": "13.3.3",
- "vite": "4.4.11",
+ "vite": "4.5.0",
"vite-plugin-svgr": "3.3.0",
"vitest": "0.34.3"
}
diff --git a/ghost/admin/app/components/koenig-lexical-editor-input.js b/ghost/admin/app/components/koenig-lexical-editor-input.js
index 14ac79b7d8..f33d6985af 100644
--- a/ghost/admin/app/components/koenig-lexical-editor-input.js
+++ b/ghost/admin/app/components/koenig-lexical-editor-input.js
@@ -84,7 +84,7 @@ export default class KoenigLexicalEditorInput extends Component {
onFocus={props.onFocus}
isSnippetsEnabled={false}
singleParagraph={true}
- className="koenig-lexical-editor-input"
+ className={`koenig-lexical-editor-input ${this.feature.nightShift ? 'dark' : ''}`}
placeholderText={props.placeholderText}
placeholderClassName="koenig-lexical-editor-input-placeholder"
>
diff --git a/ghost/admin/app/components/koenig-lexical-editor.js b/ghost/admin/app/components/koenig-lexical-editor.js
index c49c22d31e..b429dbd161 100644
--- a/ghost/admin/app/components/koenig-lexical-editor.js
+++ b/ghost/admin/app/components/koenig-lexical-editor.js
@@ -292,7 +292,8 @@ export default class KoenigLexicalEditor extends Component {
fetchLabels,
feature: {
collectionsCard: this.feature.get('collectionsCard'),
- collections: this.feature.get('collections')
+ collections: this.feature.get('collections'),
+ emojiPicker: this.feature.get('editorEmojiPicker')
},
depreciated: {
headerV1: true // if false, shows header v1 in the menu
diff --git a/ghost/admin/app/routes/application.js b/ghost/admin/app/routes/application.js
index 9e8899d91d..7f1a86aa7d 100644
--- a/ghost/admin/app/routes/application.js
+++ b/ghost/admin/app/routes/application.js
@@ -3,9 +3,11 @@ import React from 'react';
import ReactDOM from 'react-dom';
import Route from '@ember/routing/route';
import ShortcutsRoute from 'ghost-admin/mixins/shortcuts-route';
+import appConfig from 'ghost-admin/config/environment';
import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
import windowProxy from 'ghost-admin/utils/window-proxy';
import {InitSentryForEmber} from '@sentry/ember';
+import {RewriteFrames} from '@sentry/integrations';
import {importSettings} from '../components/admin-x/settings';
import {inject} from 'ghost-admin/decorators/inject';
import {
@@ -179,6 +181,18 @@ export default Route.extend(ShortcutsRoute, {
event.tags.grammarly = !!document.querySelector('[data-gr-ext-installed]');
return event;
},
+ integrations: [
+ new RewriteFrames({
+ iteratee: (frame) => {
+ // Remove duplicate `assets/` from CDN file paths (unsure why this occurs though)
+ if (frame.filename?.startsWith(appConfig.cdnUrl) && frame.filename?.includes('assets/assets/')) {
+ frame.filename = frame.filename.replace('assets/assets/', 'assets/');
+ }
+
+ return frame;
+ }
+ })
+ ],
// TransitionAborted errors surface from normal application behaviour
// - https://github.com/emberjs/ember.js/issues/12505
ignoreErrors: [/^TransitionAborted$/]
diff --git a/ghost/admin/app/services/feature.js b/ghost/admin/app/services/feature.js
index bf254f90d8..64fab9b9ad 100644
--- a/ghost/admin/app/services/feature.js
+++ b/ghost/admin/app/services/feature.js
@@ -77,6 +77,7 @@ export default class FeatureService extends Service {
@feature('tipsAndDonations') tipsAndDonations;
@feature('recommendations') recommendations;
@feature('lexicalIndicators') lexicalIndicators;
+ @feature('editorEmojiPicker') editorEmojiPicker;
_user = null;
diff --git a/ghost/admin/app/services/session.js b/ghost/admin/app/services/session.js
index 453c990c35..53b387717b 100644
--- a/ghost/admin/app/services/session.js
+++ b/ghost/admin/app/services/session.js
@@ -60,7 +60,9 @@ export default class SessionService extends ESASessionService {
resolve({
...event,
release: `ghost@${this.config.version}`,
- 'user.role': this.user.role.name
+ user: {
+ role: this.user.role.name
+ }
});
});
});
diff --git a/ghost/admin/app/templates/settings/labs.hbs b/ghost/admin/app/templates/settings/labs.hbs
index ae43c6a89b..46dbf086fc 100644
--- a/ghost/admin/app/templates/settings/labs.hbs
+++ b/ghost/admin/app/templates/settings/labs.hbs
@@ -351,20 +351,6 @@