0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-10 23:36:14 -05:00
Commit graph

2271 commits

Author SHA1 Message Date
Chris Raible
376b9209c3
Added ability to disable Newsletter clicks toggle in settings (#22090)
ref
https://linear.app/ghost/issue/ENG-1974/create-config-option-to-forcibly-disable-email-track-clicks

- With the ability to override a setting via configuration, we also need
to disable the setting's toggle in the UI to signal to the user that it
cannot be changed.
- This commit sets `disabled: true` on the `Newsletter clicks` toggle if
`is_read_only` is set to `true` on the `email_track_clicks` setting
returned from the API, and establishes a pattern that we can use for
other settings in the future, if desired.
2025-01-30 17:06:17 -08:00
renovate[bot]
6e6d6d2230
Update dependency react-router to v7.1.4 (#22086)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [react-router](https://redirect.github.com/remix-run/react-router)
([source](https://redirect.github.com/remix-run/react-router/tree/HEAD/packages/react-router))
| [`7.1.3` ->
`7.1.4`](https://renovatebot.com/diffs/npm/react-router/7.1.3/7.1.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router/7.1.3/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/7.1.3/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>remix-run/react-router (react-router)</summary>

###
[`v7.1.4`](https://redirect.github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#714)

[Compare
Source](https://redirect.github.com/remix-run/react-router/compare/react-router@7.1.3...react-router@7.1.4)

##### Patch Changes

- Internal reorg to clean up some duplicated route module types
([#&#8203;12799](https://redirect.github.com/remix-run/react-router/pull/12799))

- Properly handle status codes that cannot have a body in single fetch
responses (204, etc.)
([#&#8203;12760](https://redirect.github.com/remix-run/react-router/pull/12760))

- Stop erroring on resource routes that return raw strings/objects and
instead serialize them as `text/plain` or `application/json` responses
([#&#8203;12848](https://redirect.github.com/remix-run/react-router/pull/12848))

- This only applies when accessed as a resource route without the
`.data` extension
- When accessed from a Single Fetch `.data` request, they will still be
encoded via `turbo-stream`

- REMOVE: limit matchRoutes optimization to client side
([#&#8203;12882](https://redirect.github.com/remix-run/react-router/pull/12882))

- Optimize Lazy Route Discovery path discovery to favor a single
`querySelectorAll` call at the `body` level instead of many calls at the
sub-tree level
([#&#8203;12731](https://redirect.github.com/remix-run/react-router/pull/12731))

- - Properly bubble headers as `errorHeaders` when throwing a `data()`
result
([#&#8203;12846](https://redirect.github.com/remix-run/react-router/pull/12846))
- Avoid duplication of `Set-Cookie` headers could be duplicated if also
returned from `headers`

- Optimize route matching by skipping redundant `matchRoutes` calls when
possible
([#&#8203;12800](https://redirect.github.com/remix-run/react-router/pull/12800))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* * * * 1-5" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 17:55:28 +00:00
Kevin Ansfield
523b9d47a0
Added support for gating access to blocks of post content (#22069)
ref https://linear.app/ghost/issue/PLG-327

- updated post output serializer's gating functions to add gating of specific content blocks
  - uses regex to look for specific strings in the HTML for speed compared to fully parsing the HTML
  - content gating blocks look like `<!--kg-gated-block:begin nonMember:true/false memberSegment:"status:free,status:-free"-->...gated content...<!--kg-gated-block:end-->`
  - parsing of params is limited to `nonMember` with a true/false value and `memberSegment` with a string value containing a limited set of supported filters
  - occurs at the API level so that content is correctly gated in Content API output and front-end website
- added `checkGatedBlockAccess()` to members-service content-gating methods to keep the underlying member checks co-located
2025-01-30 12:47:42 +00:00
Djordje Vlaisavljevic
0cdec925ae
Added “unfollow” functionality to FollowButton (#22057)
ref https://linear.app/ghost/issue/AP-590/unable-to-unfollow-accounts

- Users can now unfollow accounts they’re following, which means that account will be removed from the user’s “following” list and any of the future posts or notes published by that account won’t appear in user’s inbox or feed.
- Refactored and simplified `FollowButton` so it only has 2 variants: primary (used on profiles, where it's the primary focus of the screen) and secondary (used in lists where there will probably be lots of `FollowButton`s next to each other.)

---------

Co-authored-by: Fabien O'Carroll <fabien@allou.is>
2025-01-30 12:00:56 +00:00
Sodbileg Gansukh
28275622b9
Added accept parameter to FileUpload component (#21899)
ref DES-182

- adds `accept` parameter to the file uploads making it possible to
define a set of accepted file types
- allows only zip and json files for the universal importer
2025-01-30 11:20:29 +08:00
renovate[bot]
628550108e
Update dependency recharts to v2.15.1 (#22072)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://redirect.github.com/recharts/recharts) | [`2.15.0`
-> `2.15.1`](https://renovatebot.com/diffs/npm/recharts/2.15.0/2.15.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.15.0/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.15.0/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.15.1`](https://redirect.github.com/recharts/recharts/compare/v2.15.0...3ecaab0e88781e20284f4444d41bf14a00fddf70)

[Compare
Source](https://redirect.github.com/recharts/recharts/compare/v2.15.0...v2.15.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* * * * 1-5" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 11:33:06 +00:00
renovate[bot]
e7336585d0 Pin dependencies 2025-01-29 12:19:43 +01:00
Filip Chabik
dac97218d7 Added webhooks to admin search keywords
no issue

- Webhooks are advanced and powerful feature Ghost offers, but they are quite
  hidden in the settings
- This change adds 'webhooks' keyword to the search in the sidebar to point
  users in the right direction
2025-01-28 08:59:05 +01:00
Sanne de Vries
c21736a444
Updated spam filters icon in settings sidebar (#22062)
ref https://linear.app/ghost/issue/ENG-1973

- used the "block" icon instead of "email-block", to avoid hinting at newsletters landing in spam folders
2025-01-28 14:49:07 +07:00
Sag
f4659a67ac
Released Portal v2.49.0 (#22061)
no issue

- changelog v2.48.3 -> v2.49.0:
    - c0ccdbe280
    - 2f63fa2302
    - c586b1c034
2025-01-28 07:27:07 +00:00
Sag
c586b1c034
Enabled publishers to block additional email domains in member signups (#22047)
ref https://linear.app/ghost/issue/ENG-1973
ref https://app.incident.io/ghost/incidents/132

- following an increase in spam members signups, we have recently added
a blocklist of email domains, based on config (see
https://github.com/TryGhost/Ghost/pull/22027). With this change, we are
extending that feature with a user-facing setting in Ghost Admin
- publishers can now block additional email domains in member signups,
directly from Ghost Admin. These emails domains will be added to the
list of domains already blocked by config
2025-01-28 13:46:37 +07:00
Sam Lord
2f63fa2302
Added Captcha to data attribute forms
ref BAE-370

Enables Captcha (when labs flag and config entry set) in data-attribute
forms within Portal.
2025-01-27 16:52:52 +00:00
Djordje Vlaisavljevic
8c2e62dc23
Improved ActivityPub design (#22051)
ref https://linear.app/ghost/issue/AP-677/standardize-border-radius-used-in-avatars, https://linear.app/ghost/issue/AP-680/standardize-font-sizes-colors-and-weights, https://linear.app/ghost/issue/AP-676/improve-the-sidebar-widget

- Ensured consistent use of border-radius in avatars
- Removed onClick for large avatars, since we only use them when you're already viewing someone's profile
- Updated font colors, weights and sizes for consistency
- Updated design of the sidebar widget in (simpler design, less lines, tighter spacing=
- "Explore" button looks more like what we use in settings and dashboard
2025-01-23 17:35:05 +00:00
Peter Zimon
19d9c3e3e2
Post analytics router update (#22050)
ref https://linear.app/ghost/issue/DES-1082/router-prototype

This task is about testing, figuring out pros and cons of React Router
compared to our current (custom) router, and what effort and risks are
involved in migrating to it.
2025-01-23 16:48:29 +01:00
Sam Lord
c0ccdbe280
Portal: Added HCaptcha element to signup/signin pages
ref BAE-371

Added the HCaptcha react component & related utils to enable it /
disable it based on the Captcha labs flag. At the moment this does not
include the same functionality on forms using the data-attributes.
2025-01-23 12:02:53 +00:00
Peter Zimon
e41fc2c4d5
Shade updates (#22045)
ref
https://linear.app/ghost/issue/DES-1085/update-shade-to-be-used-in-activitypub

- Shade so far was just used in our playground (Post analytics). It
needed to be prepared so that it can be integrated in real projects like
ActivityPub. This means cleaning up everything related to it like
conventions, file structure, documentation etc.
2025-01-23 08:22:04 +01:00
Djordje Vlaisavljevic
2d0f6568fa
Fixed reading progress indicator for very short articles (#22036)
ref https://linear.app/ghost/issue/AP-653/scroll-percentage-remains-at-0percent-when-no-content-to-scroll

- When an entire article fits into the viewport height, we used to
show`0%` in the reading progress indicator. Now we check if that's the
case, and then show `100%` if it is.
2025-01-22 17:49:11 +00:00
Sag
5409ae1c68
Released Portal v2.48.3 (#22044)
no issue
- changelog v2.48.2 -> v2.48.3:
    - f07291b72c
2025-01-22 07:35:54 +00:00
Sag
f07291b72c
Added missing error message handler for the integrity token endpoint (#22043)
ref https://linear.app/ghost/issue/PRO-1349

- the integrity token endpoint can return a json response with an error
message (for example, when rate limited)
- added the standard response handler to the integrity token endpoint in
Portal, to render the error message sent by the backend
2025-01-22 14:26:49 +07:00
Kevin Ansfield
3a38aef9b2 Added contentVisibilityAlpha flag
no issue

- flag to allow internal testing of content visibility developments without unintentional early release to beta testers
2025-01-22 07:17:20 +00:00
Sag
c8e76fb498
Released Portal v2.48.2 (#22041)
no issue

- changelog v2.48.1 -> v2.48.2:
    - 3ca419bcbc
2025-01-22 04:48:58 +00:00
Sag
3ca419bcbc
Improved error message when email provider is blocked (#22040)
ref https://linear.app/ghost/issue/ONC-721
ref https://linear.app/ghost/issue/PRO-1349

- also added the rate limit error message into the translate-able
strings in Portal
2025-01-22 04:40:22 +00:00
Chris Raible
669da1cfb1
Shipped portal@2.48.1 (#22039)
Patch update including this bug fix:
713e75838a
2025-01-21 13:04:23 -08:00
Chris Raible
713e75838a
🐛 Fixed newsletters not rendering in Portal Email Preferences (#22037)
ref
https://linear.app/ghost/issue/ONC-723/support-escalation-re-fwd-email-preferences

- On sites where the Default recipients setting was set to anything
other than "Whoever has access to the post", the list of newsletters and
the toggle to subscribe/unsubscribe would not be rendered on the Portal
"Email Preferences" page.
- The bug was introduced in v5.106.0, and intended to hide the
newsletter list if Newsletter sending were disabled completely, but
there was bug in the logic
- This commit has a breaking test to prevent this in the future, and
fixes the logic to only hide the newsletter list if
`editor_default_email_recipients` is explicitly set to 'disabled'.
2025-01-21 11:22:45 -08:00
Peter Zimon
996c9d8c68
Post analytics prototype router (#22034)
ref https://linear.app/ghost/issue/DES-1082/router-prototype

- The current router from `admin-x-framework` looks super complex. This
PR is about testing React Router in the Post analytics prototype.
2025-01-21 14:54:02 +01:00
Hannah Wolfe
3211a146d4
Removed i18n toggle from labs UI (#21927) (#21975)
ref bb9a69e
ref https://linear.app/ghost/issue/ENG-1753/labs-flags-cleanup

- We promoted i18n to GA several weeks ago now, and it's going fine
- Removing the UI first to reduce confusion before cleaning up all the
other references to the flag
- Introduced a new function for setting the publication language in internationalization (i18n) test cases, for readability
2025-01-21 09:58:13 +00:00
Djordje Vlaisavljevic
cf9c0199c3 Fixed posts not opening when clicked from profile feed
no ref
2025-01-20 22:40:58 +00:00
Djordje Vlaisavljevic
6b9e6b2cd1 Updated Article design on Profiles
ref https://linear.app/ghost/issue/AP-534/profile-weird-button-hover-state-in-post-list

- While we've separated Inbox and Feed views, we're still showing both Notes and Articles together in Profiles. Articles had a confusing hover state and also felt disconnected. The new design is similar to the one used in the new publishing flow, with adjustments where it makes sense.
- Added more useful alt descriptions
- Fixed images from Thread notes not showing
2025-01-20 18:49:59 +00:00
Djordje Vlaisavljevic
c1d7a46599 Added truncation and "Show more" button for long notes
ref https://linear.app/ghost/issue/AP-618/show-only-excerpts-for-very-long-notes-in-the-feed

- Notes can be pretty long and we used to show them in their entirety, so they could take up a large chunk of the viewport. Now we're limiting the displayed text in notes to 10 lines, and we show a "Show more" button to indicate there is more content.
2025-01-20 18:49:59 +00:00
Sag
970741cf5d
🔒 Blocked spammy email domains in member signups (#22027)
ref https://linear.app/ghost/issue/ONC-721
ref https://app.incident.io/ghost/incidents/132

- added a blocklist at the email domain level for free member signups
- for example, if `blocked-domain.com` is blocked,
`thomas@blocked-domain.com` cannot sign up as free member
- the blocklist is configurable: `"spam.blocked_email_domains":
["blocked-domain.com"]`
2025-01-20 22:12:55 +07:00
Peter Zimon
e1f5ff1533
Shade updates (#22025)
ref
https://linear.app/ghost/issue/DES-1022/overview-tab-for-post-analytics

- A static version of a React-only Post analytics page needed to be
worked out to learn how Charts, Tabs, Sidebars etc. work in Shade. This
also is a basis for learning more about React patterns.
2025-01-20 12:56:21 +00:00
Michael Barrett
026bb8ffbf
Updated search results account type in admin-x-activitypub (#22021)
no refs

Updated the search results account type in the admin-x-activitypub to
match the updated API response
2025-01-16 21:02:02 +00:00
Djordje Vlaisavljevic
e5ea3a0a8c Fixed "Show all" button not appearing on profile summaries
no ref
2025-01-16 19:14:02 +00:00
Djordje Vlaisavljevic
3e806ca761 Updated copy to match terminology we're using
ref https://linear.app/ghost/issue/AP-646/update-terminology-on-search-page

- "Account" instead of "profile", "handle" instead of "username"
2025-01-16 19:14:02 +00:00
Djordje Vlaisavljevic
0f1d6167cf
Extracted TableOfContents into a separate component (#22019)
ref https://linear.app/ghost/issue/AP-634/table-of-contents-in-reader-view

- `TableOfContents` is now a separate component to keep `ArticleModal` simpler
- Switched to using constants for styling different heading levels for better performance and maintainability
2025-01-16 14:32:16 +00:00
Djordje Vlaisavljevic
7bc1102cc6 Improved how we represent unusual article heading structures
ref https://linear.app/ghost/issue/AP-634/table-of-contents-in-reader-view

- Sometimes publishers use headings in unusual ways (for example, using just `h3`s). This means we can't rely on headings always being structured in the expected way (`h1`, `h2`, `h3`...) Now after we scan the article for headings, we find the highest level heading and then calculate normalized levels for all other headings. This helps the widget look good even in these edge cases.
2025-01-16 13:30:39 +00:00
Michael Barrett
7cf0e92d3e
Changed profile modal to always remote load in admin-x-activitypub (#22012)
no refs

Changed profile modal to always remote load in `admin-x-activitypub`
instead of both accepting an object or a string. This will allow for
easier refactoring of the modal when we switch this area of the app to
use `accounts` instead of `profiles`
2025-01-15 20:59:08 +00:00
Michael Barrett
4ebf4dd1b0
Fixed missing author handle in admin-x-activitypub (#22011)
refs
[AP-647](https://linear.app/ghost/issue/AP-648/refactor-profile-tab-to-use-account-and-follows)

Fixed missing author handle in admin-x-activitypub
2025-01-15 17:53:38 +00:00
Michael Barrett
6bc164cb7c
Updated profile tab to use dedicated account endpoints in admin-x-activitypub (#22010)
refs
[AP-647](https://linear.app/ghost/issue/AP-648/refactor-profile-tab-to-use-account-and-follows)

Updated the profile tab in `admin-x-activitypub` to use dedicated
account endpoints. This is to remove coupling between the UI and the
ActivityPub endpoints in preparation for the upcoming changes around
storing `accounts` and `follows` in the database
2025-01-15 16:43:51 +00:00
Djordje Vlaisavljevic
73f8bcf0b3
Added table of contents widget to article modal (#22008)
ref https://linear.app/ghost/issue/AP-634/table-of-contents-in-reader-view

- Adds a table of contents widget to the right side of articles in
reader view that let's you navigate between headings for easier
navigation in long, complex articles
- Enhanced popover component with configurable side positioning
- Updated package version to 0.3.44
2025-01-15 14:33:08 +00:00
Sag
2cc1e28eca
Cleaned up newEmailAddresses feature flag (#22001)
ref https://linear.app/ghost/issue/ENG-1416

- "New email addresses" feature was released in [Ghost
v5.78.0](https://github.com/TryGhost/Ghost/releases/tag/v5.78.0)
(commit:
7d0be3f1a9)
- In the context of DMARC changes from February 2024, we've allowed
self-hosters to change their sender and reply-to email addresses without
verification (cf. [Investigation For
Self-hosters](https://www.notion.so/ghost/Investigation-on-FROM-addresses-3f07d724e6044179b38e2793e1d9e797)
and [DMARC Product
Changes](https://www.notion.so/ghost/Working-Document-DMARC-Product-Changes-4cf1e435d8f2452f83cd92dddeaf9d67?pvs=4))
2025-01-15 10:56:47 +07:00
Peter Zimon
6ca066c8c3
Refined hover area for closed sidebar in Admin (#22004)
ref
https://linear.app/ghost/issue/DES-797/admin-visual-design-improvements

- When the sidebar is closed in Admin, the hover area to re-open it is
too narrow. This PR updates the width of this area so it's easier to
target.
2025-01-14 14:10:44 +01:00
Ronald Langeveld
8055c3db55
Bumped Comments-UI to 1.0.6 (#22003)
closes PLG-288

- Bumped comments-ui to 1.0.6
2025-01-14 08:12:48 +00:00
Ronald Langeveld
8db228fa6e
Updated Comments likes UI changes to be instant (#21861)
ref PLG-288

- Implemented instant UI updates for comment likes/unlikes using
optimistic rendering.
- Enhanced error handling reverts state on API failure, ensuring
consistency.
- Added new test helper to mock failed API requests, needed to test
revert state handling.
2025-01-14 15:20:47 +09:00
Peter Zimon
9f13ad0716
🎨 Admin visual design updates (#21987)
ref DES-797

A lot of visual details of the Admin is outdated and inconsistent with
newer UI components such as settings. This PR improves several of these
inconsistencies and refreshes the visual design of the Admin outside
settings. In details the following components have been updated:

- Input fields and dropdowns use grey background color in Post settings
menu when not in-focus
- Got rid of the grey background for sections in Member details and Tag
details
- Updated typography details esp. as font-weights and sizes
- Updated modal corners, shadows
- Added a way to close the main navigation
- Updated main navigation styles
- Added flat background color for list items on hover
- Updated subscription cards in Member details
- Further smaller visual design changes
2025-01-13 17:23:43 +01:00
Daniël van der Winden
83d7691fe9
Fixed dark mode separator in Analytics settings (#21996)
The separator in Analytics settings wasn't showing in the right colour
in dark mode. This change fixes that.

Fixes
https://linear.app/ghost/issue/DES-1077/analytics-separators-have-wrong-colour-in-dark-mode
2025-01-13 14:47:38 +00:00
Daniël van der Winden
1c4d7b8cd7
Fixed dark mode separator in Access settings (#21995)
The separator in Access settings wasn't showing in the right colour in
dark mode. This change fixes that.

No issue.
2025-01-13 14:24:04 +00:00
Sam Lord
5b42cf2338
Portal: Refactored data-attributes file to use async / await
no issue

Will assist with later changes, like adding Captcha. Since Captcha is an
optional feature, it would complicate the promise chain considerably.
2025-01-09 17:41:37 +00:00
Sam Lord
3cf1abfc49
Added a labs flag for Captcha
refs BAE-638
Currently unused, but adding this early to prevent future commits from
enabling the feature for all users
2025-01-09 15:43:03 +00:00
Michael Barrett
20a1b64a15
Handle null values for post content & excerpt in admin-x-activitypub (#21989)
Handle null values for post content & excerpt in admin-x-activitypub

refs [TryGhost/ActivityPub#245](https://github.com/TryGhost/ActivityPub/pull/245)

In [TryGhost/ActivityPub#245](https://github.com/TryGhost/ActivityPub/pull/245) we changed the service to allow for `null` values for the `content` & `excerpt` field. This means we could potentially be passing `null` values to `stripHtml` which would cause the app to crash. This commit ensures we always pass a string to `stripHtml` as well as updating the types to reflect what the value can be
2025-01-09 15:32:06 +00:00