From 4856671a104845009970671d291da09a439d3dda Mon Sep 17 00:00:00 2001 From: KJ Shanks Date: Mon, 29 Sep 2025 16:02:52 -0400 Subject: [PATCH 1/2] Update copy for edit flow --- packages/common/src/messages/edit.ts | 72 +++++++++++++------ .../RemixSettingsField/RemixSettingsField.tsx | 9 +-- .../RemixSettingsMenuFields.tsx | 25 ++----- .../edit/fields/StemsAndDownloadsField.tsx | 13 +--- .../fields/StemsAndDownloadsMenuFields.tsx | 5 +- .../DownloadAvailability.tsx | 2 +- .../PriceAndAudienceField.tsx | 17 +---- .../PriceAndAudienceMenuFields.tsx | 51 +++---------- .../CollectibleGatedRadioField.tsx | 15 ++-- .../token-gated/TokenGatedDescription.tsx | 14 ++-- .../token-gated/TokenGatedRadioField.tsx | 13 ++-- .../UsdcPurchaseGatedRadioField.tsx | 17 ++--- 12 files changed, 93 insertions(+), 160 deletions(-) diff --git a/packages/common/src/messages/edit.ts b/packages/common/src/messages/edit.ts index 9b929b0caa6..9b4d97f2d2e 100644 --- a/packages/common/src/messages/edit.ts +++ b/packages/common/src/messages/edit.ts @@ -1,15 +1,14 @@ export const visibilityMessages = { - title: 'Visibility', + title: 'Track Privacy', description: - 'Change the visibility of this release or schedule it to release in the future.', + 'Adjust your track’s visibility or schedule it for later release.', public: 'Public', - publicDescription: 'Visible to everyone on Audius.', + publicDescription: 'Available to everyone on Audius.', hidden: 'Hidden', - hiddenDescription: - 'Only you and people you share a direct link with will be able to listen.', + hiddenDescription: 'Only you and those with a direct link will have access.', scheduledRelease: 'Scheduled Release', scheduledReleaseDescription: - 'Select the date and time this will become public.', + 'Prepare your release ahead of time, then choose when it becomes public.', dateLabel: 'Release Date', timeLabel: 'Time', futureReleaseHint: (timezone: string) => @@ -18,30 +17,35 @@ export const visibilityMessages = { export const priceAndAudienceMessages = { title: 'Price & Audience', - freePremiumDescription: - 'Customize who can listen to this release. Sell your music and create gated experiences for your fans.', + freePremiumDescription: 'Control who can access your track.', specialAccessDescription: - 'Customize your music’s audience and create gated experiences for your fans.', + "Customize your music's audience and create gated experiences for your fans.", free: 'Free for Everyone', premium: 'Premium', specialAccess: 'Special Access', collectibleGated: 'Collectible Gated', coinGated: 'Coin Gated', + hidden: 'Hidden', followersOnly: 'Followers Only', supportersOnly: 'Supporters Only', markedAsRemix: 'This track is marked as a remix. To enable additional availability options, unmark within Remix Settings.', + done: 'Done', + publishDisabled: + 'Publishing is disabled for empty albums and albums containing hidden tracks.', + fromFreeHint: ( + contentType: 'album' | 'track', + gatedType: 'gated' | 'premium' + ) => `You can't make a free ${contentType} ${gatedType}.`, freeRadio: { title: 'Free for Everyone', description: (contentType: 'album' | 'track') => - `Everyone can play your ${contentType} for free.` + `Everyone can stream your ${contentType} for free.` }, premiumRadio: { title: 'Premium', - description: { - track: 'Only fans who make a purchase can play your track', - album: 'Only fans who make a purchase can play your album.' - }, + description: (contentType: 'album' | 'track') => + `Only those who purchase can stream your ${contentType}.`, waitlist: 'Start selling your music on Audius today! Limited access beta now available.', join: 'Join the Waitlist', @@ -49,7 +53,7 @@ export const priceAndAudienceMessages = { }, specialAccessRadio: { title: 'Special Access', - description: 'Only fans who meet certain criteria can listen.', + description: 'Anyone who meets your selected criteria can stream.', followersOnly: 'Followers Only', supportersOnly: 'Supporters Only' }, @@ -61,11 +65,12 @@ export const priceAndAudienceMessages = { pickACollection: 'Pick a Collection', ownersOf: 'Owners Of', noCollectibles: - 'No Collectibles found. To enable this option, link a wallet containing a collectible.' + 'No collectibles found. Link a wallet containing a digital collectible to enable this option.' }, tokenGatedRadio: { title: 'Coin Gated', yourCoin: 'your coin', + noCoins: 'No coins found. Launch a coin to enable this option.', description: (coinTicker: string) => `Anyone holding ${coinTicker} can stream.` } @@ -73,8 +78,7 @@ export const priceAndAudienceMessages = { export const advancedTrackMessages = { title: 'Advanced', - description: - 'Provide detailed metadata to help identify and manage your music.', + description: 'Share metadata to help manage your music.', isAiGenerated: 'AI-Generated', bpm: { header: 'Tempo', @@ -93,11 +97,11 @@ export const advancedTrackMessages = { apiAllowed: { header: 'Disallow Streaming via the API', description: - 'Keep your track from being streamed on third-party apps or services that utilize the Audius API.' + 'Exclude from third-party apps or services, which utilize the Audius API.' }, disableComments: { header: 'Disable Comments', - description: 'Prevent anyone from leaving a comment on this track.', + description: 'Prevent anyone from commenting on your track.', value: 'Comments Disabled' }, isrcTooltip: `ISRC is used to identify individual sound recordings and music videos. ISWC is used to identify the underlying musical composition – the music and lyrics`, @@ -152,6 +156,17 @@ export const advancedTrackMessages = { } } +export const stemsAndDownloadsMessages = { + title: 'Stems & Downloads', + description: 'Provide additional files available for download.', + values: { + allowDownload: 'Full Track Available', + followerGated: 'Followers Only' + }, + price: (price: number) => + price.toLocaleString('en-US', { style: 'currency', currency: 'USD' }) +} + export const advancedAlbumMessages = { title: 'Advanced', description: @@ -167,3 +182,20 @@ export const advancedAlbumMessages = { label: 'Release date' } } + +export const remixSettingsMessages = { + title: 'Remix Settings', + description: 'Identify your track as a remix and adjust the settings.', + remixesHidden: 'Remixes Hidden', + remixOf: 'Remix of', + hideRemixField: { + header: 'Hide Remixes of This Track', + description: "Stop other artists' remixes from showing on your track page." + }, + remixOfField: { + header: 'Identify as Remix', + description: + 'Link your remix to the original for visibility and artist credit.', + linkLabel: 'Link to original track' + } +} diff --git a/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsField.tsx b/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsField.tsx index a4e9609b49f..df69799735a 100644 --- a/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsField.tsx +++ b/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsField.tsx @@ -1,6 +1,7 @@ import { useCallback, useEffect, useMemo } from 'react' import { useTrack } from '@audius/common/api' +import { remixSettingsMessages as messages } from '@audius/common/messages' import { isContentUSDCPurchaseGated, ID, @@ -36,14 +37,6 @@ import { SHOW_REMIXES_BASE } from './types' -const messages = { - title: 'Remix Settings', - description: - 'Mark your music as a remix, tag the original track, and customize remix settings.', - remixOf: 'Remix of', - remixesHidden: 'Remixes Hidden' -} - export type RemixOfField = Nullable<{ tracks: { parent_track_id: ID }[] }> type RemixSettingsFieldProps = { diff --git a/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsMenuFields.tsx b/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsMenuFields.tsx index 77cf4602153..fe0a2a16c2c 100644 --- a/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsMenuFields.tsx +++ b/packages/web/src/components/edit/fields/RemixSettingsField/RemixSettingsMenuFields.tsx @@ -2,6 +2,7 @@ import { useEffect } from 'react' import { useTrackByPermalink } from '@audius/common/api' import { useGatedContentAccess } from '@audius/common/hooks' +import { remixSettingsMessages as messages } from '@audius/common/messages' import { getPathFromTrackUrl } from '@audius/common/utils' import { useField } from 'formik' import { pick } from 'lodash' @@ -16,20 +17,6 @@ import styles from './RemixSettingsField.module.css' import { TrackInfo } from './TrackInfo' import { CAN_REMIX_PARENT, IS_REMIX, REMIX_LINK, SHOW_REMIXES } from './types' -const messages = { - hideRemix: { - header: 'Hide Remixes of This Track', - description: - 'Prevent remixes of your track by other artists from appearing on your track page. ' - }, - remixOf: { - header: 'Identify as Remix', - description: - 'Link your remix to the original track to increase visibility and credit the original artist.', - linkLabel: 'Link to original track' - } -} - export const RemixSettingsMenuFields = () => { const [{ value: trackUrl }] = useField(REMIX_LINK) const [, , { setValue: setCanRemixParent }] = useField(CAN_REMIX_PARENT) @@ -63,10 +50,10 @@ export const RemixSettingsMenuFields = () => {
- + {track_id ? : null} @@ -74,8 +61,8 @@ export const RemixSettingsMenuFields = () => {
diff --git a/packages/web/src/components/edit/fields/StemsAndDownloadsField.tsx b/packages/web/src/components/edit/fields/StemsAndDownloadsField.tsx index b441c1c24ee..6b0f055eff6 100644 --- a/packages/web/src/components/edit/fields/StemsAndDownloadsField.tsx +++ b/packages/web/src/components/edit/fields/StemsAndDownloadsField.tsx @@ -2,6 +2,7 @@ import { useCallback, useMemo } from 'react' import { useCurrentUserId } from '@audius/common/api' import { useUSDCPurchaseConfig } from '@audius/common/hooks' +import { stemsAndDownloadsMessages as messages } from '@audius/common/messages' import { AccessConditions, DownloadTrackAvailabilityType, @@ -46,18 +47,6 @@ import { STREAM_CONDITIONS } from './types' -const messages = { - title: 'Stems & Downloads', - description: - "Upload your track's source files and customize how fans download your files.", - values: { - allowDownload: 'Full Track Available', - followerGated: 'Followers Only' - }, - price: (price: number) => - price.toLocaleString('en-US', { style: 'currency', currency: 'USD' }) -} - type StemsAndDownloadsFieldProps = { isUpload: boolean closeMenuCallback?: (data?: any) => void diff --git a/packages/web/src/components/edit/fields/StemsAndDownloadsMenuFields.tsx b/packages/web/src/components/edit/fields/StemsAndDownloadsMenuFields.tsx index 25bb25223f0..655e08a8d2b 100644 --- a/packages/web/src/components/edit/fields/StemsAndDownloadsMenuFields.tsx +++ b/packages/web/src/components/edit/fields/StemsAndDownloadsMenuFields.tsx @@ -39,9 +39,8 @@ const messages = { description: 'Upload your stems and source files to allow fans to remix your track. This does not affect users ability to listen offline.', [IS_DOWNLOADABLE]: { - header: 'Allow Full Track Download', - description: - 'Allow your fans to download a lossless copy of your full track.' + header: 'Full Track Download', + description: 'Provide a full lossless copy of your track for download.' }, priceTooLow: (minPrice: number) => `Price must be at least $${USDC(minPrice / 100).toLocaleString()}.`, diff --git a/packages/web/src/components/edit/fields/download-availability/DownloadAvailability.tsx b/packages/web/src/components/edit/fields/download-availability/DownloadAvailability.tsx index a81e3ad919e..0e935120e54 100644 --- a/packages/web/src/components/edit/fields/download-availability/DownloadAvailability.tsx +++ b/packages/web/src/components/edit/fields/download-availability/DownloadAvailability.tsx @@ -34,7 +34,7 @@ import { DownloadPriceField } from './DownloadPriceField' const getMessages = (props: DownloadAvailabilityProps) => ({ downloadAvailability: 'Download Availability', - customize: 'Specify who has access to download your files.', + customize: 'Decide who can download your files.', public: 'Public', followers: 'Followers', premium: 'Premium', diff --git a/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceField.tsx b/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceField.tsx index 75765cf47a5..cc72c98d0fa 100644 --- a/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceField.tsx +++ b/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceField.tsx @@ -2,6 +2,7 @@ import { useCallback, useMemo, useState } from 'react' import { useArtistCoin, useCurrentUserId } from '@audius/common/api' import { useUSDCPurchaseConfig } from '@audius/common/hooks' +import { priceAndAudienceMessages } from '@audius/common/messages' import { isContentCollectibleGated, isContentFollowGated, @@ -76,17 +77,7 @@ import { PriceAndAudienceMenuFields } from './PriceAndAudienceMenuFields' import { priceAndAudienceSchema } from './priceAndAudienceSchema' const messages = { - title: 'Price & Audience', - freePremiumDescription: - 'Customize who can listen to this release. Sell your music and create gated experiences for your fans.', - specialAccessDescription: - 'Customize your music’s audience and create gated experiences for your fans.', - public: 'Free for Everyone', - premium: 'Premium', - specialAccess: 'Special Access', - collectibleGated: 'Collectible Gated', - coinGated: 'Coin Gated', - hidden: 'Hidden', + ...priceAndAudienceMessages, fieldVisibility: { genre: 'Show Genre', mood: 'Show Mood', @@ -95,8 +86,6 @@ const messages = { play_count: 'Show Play Count', remixes: 'Show Remixes' }, - followersOnly: 'Followers Only', - supportersOnly: 'Supporters Only', ownersOf: 'Owners Of', price: (price: number) => price.toLocaleString('en-US', { style: 'currency', currency: 'USD' }), @@ -509,7 +498,7 @@ export const PriceAndAudienceField = (props: PriceAndAudienceFieldProps) => { } ] } else { - selectedValues = [{ label: messages.public }] + selectedValues = [{ label: messages.free }] } return ( diff --git a/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceMenuFields.tsx b/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceMenuFields.tsx index 9f087ce38c6..07c659e3025 100644 --- a/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceMenuFields.tsx +++ b/packages/web/src/components/edit/fields/price-and-audience/PriceAndAudienceMenuFields.tsx @@ -1,11 +1,10 @@ import { useFeatureFlag, useAccessAndRemixSettings } from '@audius/common/hooks' +import { priceAndAudienceMessages as messages } from '@audius/common/messages' import { StreamTrackAvailabilityType } from '@audius/common/models' import { FeatureFlags } from '@audius/common/services' -import { pluralize } from '@audius/common/utils' import { RadioGroup, IconSparkles, - Text, IconQuestionCircle, Hint } from '@audius/harmony' @@ -22,37 +21,6 @@ import { TokenGatedRadioField } from '../stream-availability/token-gated/TokenGa import { UsdcPurchaseGatedRadioField } from '../stream-availability/usdc-purchase-gated/UsdcPurchaseGatedRadioField' import { STREAM_AVAILABILITY_TYPE, STREAM_CONDITIONS } from '../types' -const messages = { - title: 'Price & Audience', - modalDescription: '', - free: 'Free for Everyone', - freeSubtitle: (contentType: 'album' | 'track') => - `Everyone can play your ${contentType} for free.`, - specialAccessSubtitle: 'Only fans who meet certain criteria can listen.', - isRemix: - 'This track is marked as a remix. To enable additional availability options, unmark within Remix Settings.', - done: 'Done', - public: 'Public (Free to Stream)', - publicSubtitle: (contentType: 'album' | 'track') => - `Public ${pluralize( - contentType, - 2 - )} are visible to all users and appear throughout Audius.`, - specialAccess: 'Special Access', - hidden: 'Hidden', - hiddenSubtitleTracks: - "Hidden tracks won't be visible to your followers. Only you will see them on your profile. Anyone who has the link will be able to listen.", - hiddenSubtitleAlbums: - 'Hidden albums remain invisible to your followers, visible only to you on your profile. They can be shared and listened to via direct link.', - hiddenHint: 'Scheduled tracks are hidden by default until release.', - publishDisabled: - 'Publishing is disabled for empty albums and albums containing hidden tracks.', - fromFreeHint: ( - contentType: 'album' | 'track', - gatedType: 'gated' | 'premium' - ) => `You can't make a free ${contentType} ${gatedType}.` -} - type PriceAndAudienceMenuFieldsProps = { streamConditions: SingleTrackEditValues[typeof STREAM_CONDITIONS] isRemix: boolean @@ -97,18 +65,15 @@ export const PriceAndAudienceMenuFields = ( return (
{isRemix ? ( - {messages.isRemix} + {messages.markedAsRemix} ) : null} - {messages.modalDescription ? ( - {messages.modalDescription} - ) : ( -
- )} {isPublishDisabled ? {messages.publishDisabled} : null} @@ -125,8 +90,8 @@ export const PriceAndAudienceMenuFields = ( {!isAlbum ? ( } - label={messages.specialAccess} - description={messages.specialAccessSubtitle} + label={messages.specialAccessRadio.title} + description={messages.specialAccessRadio.description} value={StreamTrackAvailabilityType.SPECIAL_ACCESS} disabled={disableSpecialAccessGate} checkedContent={ diff --git a/packages/web/src/components/edit/fields/stream-availability/collectible-gated/CollectibleGatedRadioField.tsx b/packages/web/src/components/edit/fields/stream-availability/collectible-gated/CollectibleGatedRadioField.tsx index 6bc8f85f69c..75aea5b169a 100644 --- a/packages/web/src/components/edit/fields/stream-availability/collectible-gated/CollectibleGatedRadioField.tsx +++ b/packages/web/src/components/edit/fields/stream-availability/collectible-gated/CollectibleGatedRadioField.tsx @@ -2,6 +2,7 @@ import { useAccessAndRemixSettings, useHasNoCollectibles } from '@audius/common/hooks' +import { priceAndAudienceMessages as messages } from '@audius/common/messages' import { StreamTrackAvailabilityType } from '@audius/common/models' import { IconCollectible } from '@audius/harmony' @@ -10,14 +11,6 @@ import { ModalRadioItem } from 'components/modal-radio/ModalRadioItem' import { CollectibleGatedDescription } from './CollectibleGatedDescription' import { CollectibleGatedFields } from './CollectibleGatedFields' -const messages = { - collectibleGated: 'Collectible Gated', - noCollectibles: - 'No collectibles found. Link a wallet containing a digital collectible to enable this option.', - fromFreeHint: (contentType: 'album' | 'track') => - `You can't make a free ${contentType} premium.` -} - type CollectibleGatedRadioFieldProps = { isRemix: boolean isUpload?: boolean @@ -43,7 +36,7 @@ export const CollectibleGatedRadioField = ( return ( } - label={messages.collectibleGated} + label={messages.collectibleGatedRadio.title} value={StreamTrackAvailabilityType.COLLECTIBLE_GATED} disabled={disabled} description={ @@ -55,9 +48,9 @@ export const CollectibleGatedRadioField = ( checkedContent={} tooltipText={ hasNoCollectibles - ? messages.noCollectibles + ? messages.collectibleGatedRadio.noCollectibles : disabled - ? messages.fromFreeHint(isAlbum ? 'album' : 'track') + ? messages.fromFreeHint(isAlbum ? 'album' : 'track', 'premium') : undefined } /> diff --git a/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedDescription.tsx b/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedDescription.tsx index bd1bf738f1f..8a516918f52 100644 --- a/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedDescription.tsx +++ b/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedDescription.tsx @@ -1,12 +1,6 @@ +import { priceAndAudienceMessages as messages } from '@audius/common/messages' import { Flex, IconQuestionCircle, Hint, Text } from '@audius/harmony' -const messages = { - tokenGatedSubtitle: (tokenName: string) => - `Anyone holding ${tokenName} can stream.`, - noTokens: 'No Tokens found. To enable this option, launch a token.', - learnMore: 'Learn More' -} - type TokenGatedDescriptionProps = { tokenName: string hasTokens: boolean @@ -16,11 +10,13 @@ type TokenGatedDescriptionProps = { export const TokenGatedDescription = (props: TokenGatedDescriptionProps) => { const { hasTokens, isUpload, tokenName } = props - const helpContent = !hasTokens ? messages.noTokens : null + const helpContent = !hasTokens ? messages.tokenGatedRadio.noCoins : null return ( - {messages.tokenGatedSubtitle(tokenName)} + + {messages.tokenGatedRadio.description(tokenName)} + {!hasTokens && isUpload ? ( {helpContent} ) : null} diff --git a/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedRadioField.tsx b/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedRadioField.tsx index fb625687e87..21366165870 100644 --- a/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedRadioField.tsx +++ b/packages/web/src/components/edit/fields/stream-availability/token-gated/TokenGatedRadioField.tsx @@ -2,6 +2,7 @@ import { useCallback } from 'react' import { useArtistOwnedCoin, useCurrentUserId } from '@audius/common/api' import { useAccessAndRemixSettings, useHasNoTokens } from '@audius/common/hooks' +import { priceAndAudienceMessages as messages } from '@audius/common/messages' import { StreamTrackAvailabilityType } from '@audius/common/models' import { useField } from 'formik' import { IconArtistCoin } from '~harmony/icons' @@ -13,12 +14,6 @@ import { AccessAndSaleFormValues, STREAM_CONDITIONS } from '../../types' import { TokenGatedDescription } from './TokenGatedDescription' -const messages = { - tokenGated: 'Coin Gated', - noCoins: 'No coins found. Launch a coin to enable this option.', - fromFreeHint: (contentType: 'album' | 'track') => - `You can't make a free ${contentType} premium.` -} type TokenGatedRadioFieldProps = { isRemix: boolean isUpload?: boolean @@ -66,7 +61,7 @@ export const TokenGatedRadioField = (props: TokenGatedRadioFieldProps) => { ) } - label={messages.tokenGated} + label={messages.tokenGatedRadio.title} value={StreamTrackAvailabilityType.TOKEN_GATED} disabled={disabled} onChange={handleSelect} @@ -79,9 +74,9 @@ export const TokenGatedRadioField = (props: TokenGatedRadioFieldProps) => { } tooltipText={ hasNoTokens - ? messages.noCoins + ? messages.tokenGatedRadio.noCoins : disabled - ? messages.fromFreeHint(isAlbum ? 'album' : 'track') + ? messages.fromFreeHint(isAlbum ? 'album' : 'track', 'premium') : undefined } /> diff --git a/packages/web/src/components/edit/fields/stream-availability/usdc-purchase-gated/UsdcPurchaseGatedRadioField.tsx b/packages/web/src/components/edit/fields/stream-availability/usdc-purchase-gated/UsdcPurchaseGatedRadioField.tsx index 21b1d6d35cf..ee89f0a0a03 100644 --- a/packages/web/src/components/edit/fields/stream-availability/usdc-purchase-gated/UsdcPurchaseGatedRadioField.tsx +++ b/packages/web/src/components/edit/fields/stream-availability/usdc-purchase-gated/UsdcPurchaseGatedRadioField.tsx @@ -1,4 +1,5 @@ import { useAccessAndRemixSettings } from '@audius/common/hooks' +import { priceAndAudienceMessages as messages } from '@audius/common/messages' import { StreamTrackAvailabilityType } from '@audius/common/models' import { IconCart } from '@audius/harmony' @@ -6,14 +7,6 @@ import { ModalRadioItem } from 'components/modal-radio/ModalRadioItem' import { UsdcPurchaseFields } from './UsdcPurchaseFields' -const messages = { - usdcPurchase: 'Premium', - usdcPurchaseSubtitle: (contentType: 'album' | 'track') => - `Only fans who make a purchase can play your ${contentType}.`, - fromFreeHint: (contentType: 'album' | 'track') => - `You can't make a free ${contentType} premium.` -} - type UsdcPurchaseGatedRadioFieldProps = { isRemix: boolean isUpload?: boolean @@ -39,8 +32,10 @@ export const UsdcPurchaseGatedRadioField = ( return ( } - label={messages.usdcPurchase} - description={messages.usdcPurchaseSubtitle(isAlbum ? 'album' : 'track')} + label={messages.premiumRadio.title} + description={messages.premiumRadio.description( + isAlbum ? 'album' : 'track' + )} value={StreamTrackAvailabilityType.USDC_PURCHASE} disabled={disableUsdcGate} checkedContent={ @@ -52,7 +47,7 @@ export const UsdcPurchaseGatedRadioField = ( } tooltipText={ disableUsdcGate - ? messages.fromFreeHint(isAlbum ? 'album' : 'track') + ? messages.fromFreeHint(isAlbum ? 'album' : 'track', 'premium') : undefined } /> From e7e5b323bf14129d16e0a2555384fa35185822f3 Mon Sep 17 00:00:00 2001 From: KJ Shanks Date: Mon, 29 Sep 2025 16:08:58 -0400 Subject: [PATCH 2/2] Update description color --- packages/web/src/components/data-entry/ContextualMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/components/data-entry/ContextualMenu.tsx b/packages/web/src/components/data-entry/ContextualMenu.tsx index a9d9882df85..0b662413b00 100644 --- a/packages/web/src/components/data-entry/ContextualMenu.tsx +++ b/packages/web/src/components/data-entry/ContextualMenu.tsx @@ -207,7 +207,7 @@ export const ContextualMenu = (
- + {description}