From 69f11c7f313c14124090bf74293a3d3e4c71cb4f Mon Sep 17 00:00:00 2001 From: trevor-signal <131492920+trevor-signal@users.noreply.github.com> Date: Tue, 27 Jan 2026 12:12:36 -0500 Subject: [PATCH] Update copy highlighting nonprofit status --- _locales/en/messages.json | 12 +++ .../components/PreferencesDonations.scss | 24 ------ ts/components/About.dom.tsx | 4 + ts/components/ChatsTab.dom.tsx | 4 + ...ionPrivacyInformationModal.dom.stories.tsx | 22 +++++ .../DonationPrivacyInformationModal.dom.tsx | 81 +++++++++++-------- ts/components/PreferencesDonations.dom.tsx | 4 +- 7 files changed, 91 insertions(+), 60 deletions(-) create mode 100644 ts/components/DonationPrivacyInformationModal.dom.stories.tsx diff --git a/_locales/en/messages.json b/_locales/en/messages.json index f167ef0884..b5749ab67b 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1086,6 +1086,10 @@ "messageformat": "See {whatsNew} in this update", "description": "Shown in the main window" }, + "icu:signalNonProfit": { + "messageformat": "Signal is a 501c3 nonprofit", + "description": "Shown at the bottom of the main window when a chat is not selected" + }, "icu:viewReleaseNotes": { "messageformat": "what's new", "description": "Clickable link that displays the latest release notes" @@ -9698,10 +9702,18 @@ "messageformat": "Privacy over Profit", "description": "Title shown at the top of the donations preferences page" }, + "icu:PreferencesDonations__title-v2": { + "messageformat": "Proudly nonprofit", + "description": "Title shown at the top of the donations preferences page" + }, "icu:PreferencesDonations__description": { "messageformat": "Private messaging, funded by you. No ads, no tracking, no compromise. Donate now to support Signal. Read more", "description": "Description text explaining Signal's donation model with learn more link" }, + "icu:PreferencesDonations__description-v2": { + "messageformat": "Donate to support private messaging. Keep Signal independent and ad-free. Read more", + "description": "Description text explaining Signal's donation model with learn more link" + }, "icu:PreferencesDonations__donate-button": { "messageformat": "Donate", "description": "Button text to make a donation" diff --git a/stylesheets/components/PreferencesDonations.scss b/stylesheets/components/PreferencesDonations.scss index 5a2daf6940..a973e831a9 100644 --- a/stylesheets/components/PreferencesDonations.scss +++ b/stylesheets/components/PreferencesDonations.scss @@ -438,30 +438,6 @@ } } -.DonationPrivacyInformationModal { - @include donations-modal; - - &__footer { - display: flex; - justify-content: space-between; - align-items: center; - gap: 16px; - } - - &__faqs-link { - @include mixins.button-reset; - - & { - color: variables.$color-ultramarine; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - } -} - .PreferencesDonations__badge-list { width: 100%; margin-block: 4px 8px; diff --git a/ts/components/About.dom.tsx b/ts/components/About.dom.tsx index 33e0f0f09b..14eff03d0f 100644 --- a/ts/components/About.dom.tsx +++ b/ts/components/About.dom.tsx @@ -5,6 +5,7 @@ import React from 'react'; import type { LocalizerType } from '../types/Util.std.js'; import { useEscapeHandling } from '../hooks/useEscapeHandling.dom.js'; +import { tw } from '../axo/tw.dom.js'; export type AboutProps = Readonly<{ closeAbout: () => unknown; @@ -63,6 +64,9 @@ export function About({ {i18n('icu:privacyPolicy')} +
+ {i18n('icu:signalNonProfit')} +
); diff --git a/ts/components/ChatsTab.dom.tsx b/ts/components/ChatsTab.dom.tsx index 806e3af8f5..636acc4826 100644 --- a/ts/components/ChatsTab.dom.tsx +++ b/ts/components/ChatsTab.dom.tsx @@ -7,6 +7,7 @@ import type { NavTabPanelProps } from './NavTabs.dom.js'; import { WhatsNewLink } from './WhatsNewLink.dom.js'; import type { UnreadStats } from '../util/countUnreadStats.std.js'; import type { SmartConversationViewProps } from '../state/smart/ConversationView.preload.js'; +import { tw } from '../axo/tw.dom.js'; export type ChatsTabProps = Readonly<{ otherTabsUnreadStats: UnreadStats; @@ -74,6 +75,9 @@ export function ChatsTab({

+
+ {i18n('icu:signalNonProfit')} +
)} diff --git a/ts/components/DonationPrivacyInformationModal.dom.stories.tsx b/ts/components/DonationPrivacyInformationModal.dom.stories.tsx new file mode 100644 index 0000000000..122299e947 --- /dev/null +++ b/ts/components/DonationPrivacyInformationModal.dom.stories.tsx @@ -0,0 +1,22 @@ +// Copyright 2025 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import React from 'react'; + +import { action } from '@storybook/addon-actions'; + +import type { Meta } from '@storybook/react'; +import { DonationPrivacyInformationModal } from './DonationPrivacyInformationModal.dom.js'; +import type { LocalizerType } from '../types/I18N.std.js'; + +const { i18n } = window.SignalContext; + +export default { + title: 'Components/DonationPrivacyInformationModal', +} satisfies Meta<{ i18n: LocalizerType; onClose: VoidFunction }>; + +export function Default(): React.JSX.Element { + return ( + + ); +} diff --git a/ts/components/DonationPrivacyInformationModal.dom.tsx b/ts/components/DonationPrivacyInformationModal.dom.tsx index ee4165945c..2b1b1f723e 100644 --- a/ts/components/DonationPrivacyInformationModal.dom.tsx +++ b/ts/components/DonationPrivacyInformationModal.dom.tsx @@ -2,11 +2,11 @@ // SPDX-License-Identifier: AGPL-3.0-only import React, { useCallback } from 'react'; -import { Modal } from './Modal.dom.js'; -import { Button, ButtonSize } from './Button.dom.js'; -import { I18n } from './I18n.dom.js'; import type { LocalizerType } from '../types/Util.std.js'; import { openLinkInWebBrowser } from '../util/openLinkInWebBrowser.dom.js'; +import { AxoDialog } from '../axo/AxoDialog.dom.js'; +import { I18n } from './I18n.dom.js'; +import { tw } from '../axo/tw.dom.js'; export type DonationPrivacyInformationModalProps = { i18n: LocalizerType; @@ -23,43 +23,56 @@ export function DonationPrivacyInformationModal({ ); }; - const modalFooter = ( -
- - -
- ); - const paragraphComponent = useCallback( (parts: Array) =>

{parts}

, [] ); return ( - { + if (!open) { + onClose(); + } + }} > - - + + + + {i18n('icu:PreferencesDonations__privacy-modal-title')} + + + + +
+ +
+
+ + + + {i18n('icu:PreferencesDonations__faqs')} + + + {i18n('icu:PreferencesDonations__privacy-modal-ok')} + + + +
+ ); } diff --git a/ts/components/PreferencesDonations.dom.tsx b/ts/components/PreferencesDonations.dom.tsx index d1118bf8c1..a4fb991296 100644 --- a/ts/components/PreferencesDonations.dom.tsx +++ b/ts/components/PreferencesDonations.dom.tsx @@ -189,7 +189,7 @@ function DonationHero({ />
- {i18n('icu:PreferencesDonations__title')} + {i18n('icu:PreferencesDonations__title-v2')}