@moshevents/copy 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/lib/copy.d.ts +439 -0
  2. package/lib/copy.js +389 -0
  3. package/package.json +1 -1
package/lib/copy.d.ts CHANGED
@@ -21,5 +21,444 @@ export declare const copy: {
21
21
  name: string | number;
22
22
  }) => string;
23
23
  };
24
+ readonly auth: {
25
+ readonly signUp: {
26
+ readonly title: "Sign up";
27
+ readonly subtitle: "Connect with friends, customize your profile and more.";
28
+ readonly submitButton: "Sign Up";
29
+ readonly nameTitle: "What's your name?";
30
+ readonly nameSubtitle: "This will be displayed on your profile";
31
+ readonly usernameTitle: "Enter username";
32
+ readonly usernamePlaceholder: "username";
33
+ readonly usernameHint: "Use only: letters, numbers, period, underscore";
34
+ readonly usernameAvailable: "Username available";
35
+ readonly usernameTaken: "Username is already taken";
36
+ readonly usernameInvalid: "Invalid characters in username";
37
+ readonly passwordTitle: "Create a password";
38
+ readonly birthdayTitle: "Enter your birthday";
39
+ readonly birthdaySubtitle: "Your birthday is used to deliver an age-appropriate experience.";
40
+ readonly birthdayPlaceholder: "Birthday";
41
+ readonly smsConsent: "By signing up, you agree to receive account and event-related texts from Mosh. Msg & data rates may apply.";
42
+ readonly smsRates: "Standard message & data rates may apply.";
43
+ readonly phoneExists: "An account with this phone number already exists. Try logging in instead.";
44
+ readonly emailExists: "An account with this email already exists. Try logging in instead.";
45
+ };
46
+ readonly login: {
47
+ readonly title: "Log in";
48
+ readonly subtitle: "RSVP to events, manage your account, and view photos from events you've attended.";
49
+ readonly emailOrUsername: "Email/Username";
50
+ readonly forgotPassword: "Forgot password?";
51
+ readonly noAccount: "No account found. Please sign up first.";
52
+ };
53
+ readonly gateway: {
54
+ readonly or: "or";
55
+ readonly haveAccount: "Already have an account?";
56
+ readonly noAccount: "Don't have an account?";
57
+ };
58
+ readonly legal: {
59
+ readonly continueAgreement: "By continuing, you confirm that you have read and agreed to the Mosh ";
60
+ readonly termsOfUse: "Terms of Use";
61
+ readonly and: " and ";
62
+ readonly privacyPolicy: "Privacy Policy";
63
+ };
64
+ readonly common: {
65
+ readonly next: "Next";
66
+ readonly confirm: "Confirm";
67
+ readonly continueButton: "Continue";
68
+ readonly phone: "Phone";
69
+ readonly email: "Email";
70
+ readonly phoneNumberPlaceholder: "Phone number";
71
+ readonly sendCode: "Send Code";
72
+ readonly resendCode: "Resend code";
73
+ readonly sending: "Sending...";
74
+ };
75
+ readonly verify: {
76
+ readonly phoneTitle: "Verify Phone";
77
+ readonly codeTitle: "Enter 6-digit code";
78
+ readonly sentTo: (p: {
79
+ contact: string | number;
80
+ }) => string;
81
+ readonly invalidCode: "Invalid or expired code. Tap to retry.";
82
+ readonly resendFailed: "Failed to resend code";
83
+ };
84
+ readonly errors: {
85
+ readonly missingFields: "Missing required fields";
86
+ readonly missingCredentials: "Missing authentication credentials";
87
+ readonly missingMethod: "Missing authentication method";
88
+ };
89
+ readonly forgot: {
90
+ readonly title: "Forgot your password?";
91
+ readonly subtitle: (p: {
92
+ method: string | number;
93
+ }) => string;
94
+ readonly resetTitle: "Reset password";
95
+ readonly passwordUpdated: "Password updated. You can now log in.";
96
+ readonly enterCodeTitle: "Enter the code";
97
+ readonly codeSentTo: (p: {
98
+ destination: string | number;
99
+ }) => string;
100
+ readonly newPasswordTitle: "Create a new password";
101
+ readonly newPasswordSubtitle: "Choose a password you haven't used before.";
102
+ };
103
+ readonly comingSoon: {
104
+ readonly title: "Coming soon";
105
+ readonly ok: "OK";
106
+ readonly body: (p: {
107
+ provider: string | number;
108
+ }) => string;
109
+ };
110
+ readonly contactDiscovery: {
111
+ readonly body: "Friends who have your number can find you on Mosh. Manage anytime in ";
112
+ readonly settingsLink: "Settings → Privacy";
113
+ };
114
+ };
115
+ readonly common: {
116
+ readonly save: "Save";
117
+ readonly cancel: "Cancel";
118
+ readonly ok: "OK";
119
+ readonly delete: "Delete";
120
+ readonly follow: "Follow";
121
+ readonly following: "Following";
122
+ readonly block: "Block";
123
+ readonly unblock: "Unblock";
124
+ };
125
+ readonly settings: {
126
+ readonly title: "Settings";
127
+ readonly sections: {
128
+ readonly general: "General";
129
+ readonly support: "Support";
130
+ readonly legal: "Legal";
131
+ readonly developer: "Developer";
132
+ };
133
+ readonly rows: {
134
+ readonly account: "Account";
135
+ readonly privacySecurity: "Privacy & security";
136
+ readonly notifications: "Notifications";
137
+ readonly findFriends: "Find friends";
138
+ readonly reportBug: "Report a bug";
139
+ readonly contactHelpCenter: "Contact help center";
140
+ readonly termsOfUse: "Terms of Use";
141
+ readonly communityGuidelines: "Community Guidelines";
142
+ readonly privacyPolicy: "Privacy Policy";
143
+ readonly copyrightPolicy: "Copyright Policy";
144
+ readonly environment: "Environment";
145
+ readonly logOut: "Log out";
146
+ };
147
+ readonly footer: {
148
+ readonly version: (p: {
149
+ version: string | number;
150
+ }) => string;
151
+ };
152
+ readonly logout: {
153
+ readonly confirmTitle: (p: {
154
+ username: string | number;
155
+ }) => string;
156
+ readonly confirmAction: "Log out";
157
+ };
158
+ readonly environment: {
159
+ readonly confirmTitle: (p: {
160
+ environment: string | number;
161
+ }) => string;
162
+ readonly confirmAction: "Switch";
163
+ readonly confirmMessage: (p: {
164
+ environment: string | number;
165
+ }) => string;
166
+ };
167
+ readonly notifications: {
168
+ readonly title: "Notifications";
169
+ readonly pushRowTitle: "Push notifications";
170
+ readonly statusOn: "On";
171
+ readonly statusOff: "Off";
172
+ };
173
+ readonly accountType: {
174
+ readonly pickerTitle: "Choose account type";
175
+ readonly personalName: "Personal";
176
+ readonly djName: "DJ";
177
+ readonly performerName: "Performer";
178
+ readonly venueName: "Venue";
179
+ readonly personalDesc: "Standard personal account";
180
+ readonly djDesc: "For DJs and music artists";
181
+ readonly performerDesc: "For performers and entertainers";
182
+ readonly venueDesc: "For venues and event spaces";
183
+ };
184
+ readonly accountInfo: {
185
+ readonly title: "Account information";
186
+ readonly privacyNote: "This information is only visible to you.";
187
+ readonly emailRow: "Email";
188
+ readonly notSet: "Not set";
189
+ readonly phoneRow: "Phone number";
190
+ readonly emailPlaceholder: "Email";
191
+ readonly phonePlaceholder: "Phone number";
192
+ readonly updateButton: "Update";
193
+ };
194
+ readonly account: {
195
+ readonly title: "Account";
196
+ readonly infoRow: "Account information";
197
+ readonly passwordRow: "Password";
198
+ readonly typeRow: "Account type";
199
+ readonly deactivateDeleteRow: "Deactivate or delete account";
200
+ readonly deactivateConfirmTitle: "Deactivate your account?";
201
+ readonly deactivateConfirmMessage: "Your profile, events, and content will be hidden until you log back in to reactivate.";
202
+ readonly deactivateConfirmAction: "Deactivate";
203
+ readonly deleteConfirmTitle: "Delete your account?";
204
+ readonly deleteConfirmMessage: "Your account and content will be scheduled for permanent deletion. Reactivate within 30 days to cancel — after that, it can't be recovered.";
205
+ readonly deactivateSuccessToast: "Account deactivated";
206
+ readonly deactivateErrorTitle: "Couldn't deactivate account";
207
+ readonly deleteSuccessToast: "Account deleted";
208
+ readonly deleteErrorTitle: "Couldn't delete account";
209
+ };
210
+ readonly syncedContacts: {
211
+ readonly title: "Synced contacts";
212
+ readonly body: "Mosh keeps these so we can connect you with friends as they join. Clearing them stops suggestions from your contacts and turns off auto-connect when they sign up.";
213
+ readonly clearButton: "Clear synced contacts";
214
+ readonly countSubtitle: (p: {
215
+ lastUpdated: string | number;
216
+ }) => string;
217
+ readonly emptySubtitle: "Contacts you've synced from your phone.";
218
+ readonly clearConfirmTitle: "Clear synced contacts?";
219
+ readonly clearConfirmMessage: "This stops suggestions from your contacts and turns off auto-connect when they join.";
220
+ readonly clearConfirmAction: "Clear";
221
+ readonly clearSuccess: "Synced contacts cleared.";
222
+ readonly clearErrorTitle: "Couldn't clear contacts";
223
+ };
224
+ readonly password: {
225
+ readonly changeTitle: "Change password";
226
+ readonly createTitle: "Create password";
227
+ readonly changeSubtitle: "Enter your current password, then choose a new one.";
228
+ readonly createSubtitle: "You signed up without a password. Create one to also sign in with your email or username.";
229
+ readonly changeButton: "Change password";
230
+ readonly createButton: "Create password";
231
+ readonly currentPlaceholder: "Current password";
232
+ readonly newPlaceholder: "New password";
233
+ readonly confirmPlaceholder: "Confirm new password";
234
+ readonly requirementsPrefix: "Must include: ";
235
+ readonly successTitle: "Success";
236
+ readonly changeSuccessMessage: "Your password has been updated.";
237
+ readonly createSuccessMessage: "Your password has been created.";
238
+ readonly errorTitle: "Unable to update password";
239
+ };
240
+ readonly privacy: {
241
+ readonly title: "Privacy & security";
242
+ readonly privateTitle: "Private account";
243
+ readonly privateSubtitle: "When your account is private, only people you approve can see your photos, event activity, and who you follow. Your existing followers won't be affected.";
244
+ readonly findableTitle: "Findable by contacts";
245
+ readonly findableSubtitle: "Friends who have your number can find you on Mosh and get notified when you join. Turn this off to stay hidden from contacts.";
246
+ readonly syncedContactsTitle: "Synced contacts";
247
+ readonly syncedContactsSubtitle: "Review or clear the contacts Mosh has synced from your phone.";
248
+ readonly blockedTitle: "Blocked accounts";
249
+ readonly blockedSubtitle: "See the accounts you've blocked and unblock them anytime.";
250
+ readonly publicConfirmTitle: "Switch to public account?";
251
+ readonly publicConfirmMessage: "Anyone who has requested to follow you will start following you, and anyone will be able to see your events and event content.";
252
+ readonly publicConfirmAction: "Switch";
253
+ };
254
+ readonly blocked: {
255
+ readonly title: "Blocked accounts";
256
+ readonly emptyState: "You haven't blocked anyone.";
257
+ readonly blockedToast: "Blocked";
258
+ readonly unblockedToast: "Unblocked";
259
+ readonly errorToast: "Something went wrong. Try again.";
260
+ readonly usernameHandle: (p: {
261
+ username: string | number;
262
+ }) => string;
263
+ readonly unblockButton: "Unblock";
264
+ readonly blockButton: "Block";
265
+ };
266
+ };
267
+ readonly profile: {
268
+ readonly menu: {
269
+ readonly drafts: "Drafts";
270
+ readonly analytics: "Analytics";
271
+ readonly settings: "Settings";
272
+ readonly help: "Help & feedback";
273
+ readonly venueManage: "Manage";
274
+ readonly venueSwitch: "Switch";
275
+ };
276
+ readonly contextSwitcher: {
277
+ readonly title: "Switch profile";
278
+ readonly personal: "Personal";
279
+ readonly current: "Current";
280
+ };
281
+ readonly venueMode: {
282
+ readonly eventsTitle: "Events";
283
+ readonly eventsEmptyTitle: "No upcoming events";
284
+ readonly eventsEmptySubtitle: "Create an event to get started.";
285
+ readonly actionShare: "Share";
286
+ readonly actionAddGuest: "Add guest";
287
+ readonly actionEdit: "Edit";
288
+ readonly tonight: "Tonight";
289
+ readonly upcomingHeader: "Upcoming";
290
+ readonly notificationsTitle: "Notifications";
291
+ readonly notificationsEmptyTitle: "Nothing yet";
292
+ readonly notificationsEmptySubtitle: "Venue activity will show up here.";
293
+ };
294
+ readonly button: {
295
+ readonly editProfile: "Edit profile";
296
+ readonly requested: "Requested";
297
+ readonly followBack: "Follow back";
298
+ };
299
+ readonly header: {
300
+ readonly shareProfile: "Share profile";
301
+ readonly userNotFound: "User not found";
302
+ readonly points: "points";
303
+ readonly followers: "followers";
304
+ readonly following: "following";
305
+ readonly liveNow: "Now: ";
306
+ readonly liveTonight: "Tonight: ";
307
+ readonly accountTypeDj: "DJ";
308
+ readonly accountTypePerformer: "Performer";
309
+ };
310
+ readonly followRequest: {
311
+ readonly confirm: "Confirm";
312
+ };
313
+ readonly block: {
314
+ readonly confirmTitle: (p: {
315
+ username: string | number;
316
+ }) => string;
317
+ readonly confirmMessage: "They won't be able to message you, see your posts, or find your profile. They won't be notified that you blocked them.";
318
+ readonly toastSuccess: "Blocked";
319
+ readonly toastError: "Couldn't block. Try again.";
320
+ };
321
+ readonly unblock: {
322
+ readonly confirmTitle: "Unblock this account?";
323
+ readonly confirmMessage: "They'll be able to find your profile, see your posts, and message you again.";
324
+ readonly toastSuccess: "Unblocked";
325
+ readonly toastError: "Couldn't unblock. Try again.";
326
+ };
327
+ readonly placeholder: {
328
+ readonly blockedTitle: (p: {
329
+ handle: string | number;
330
+ }) => string;
331
+ readonly blockedSubtitle: "You can't see each other's events or event content while blocked.";
332
+ readonly privateTitle: "This account is private";
333
+ readonly privateSubtitle: "Follow this profile to see their events and event content";
334
+ };
335
+ readonly alert: {
336
+ readonly userNotFoundTitle: "User Not Found";
337
+ readonly userNotFoundMessage: "This user doesn't exist.";
338
+ };
339
+ readonly followers: {
340
+ readonly searchFollowingPlaceholder: "Search following";
341
+ readonly searchFollowersPlaceholder: "Search followers";
342
+ readonly suggestedEmpty: "Suggestions coming soon";
343
+ readonly navFallbackTitle: "Followers";
344
+ readonly tabFollowers: "Followers";
345
+ readonly tabFollowing: "Following";
346
+ readonly tabSuggested: "Suggested";
347
+ };
348
+ readonly imagePicker: {
349
+ readonly uploadingMessage: "Uploading...";
350
+ readonly uploadFailedTitle: "Upload Failed";
351
+ };
352
+ readonly edit: {
353
+ readonly navTitle: "Edit profile";
354
+ readonly changePhotoButton: "Change photo";
355
+ readonly nameLabel: "Name";
356
+ readonly usernameLabel: "Username";
357
+ readonly bioLabel: "Bio";
358
+ readonly username: {
359
+ readonly navTitle: "Edit username";
360
+ readonly invalidFormatError: "Invalid username format";
361
+ };
362
+ readonly bio: {
363
+ readonly navTitle: "Edit bio";
364
+ readonly placeholder: "Write a bio...";
365
+ readonly charCount: (p: {
366
+ count: string | number;
367
+ max: string | number;
368
+ }) => string;
369
+ };
370
+ readonly name: {
371
+ readonly navTitle: "Edit name";
372
+ };
373
+ };
374
+ readonly events: {
375
+ readonly role: {
376
+ readonly hostingSelf: "Hosting";
377
+ readonly hostingOther: (p: {
378
+ firstName: string | number;
379
+ }) => string;
380
+ readonly performingSelf: "Performing";
381
+ readonly performingOther: (p: {
382
+ firstName: string | number;
383
+ }) => string;
384
+ readonly photographerSelf: "Photographer";
385
+ readonly photographerOther: (p: {
386
+ firstName: string | number;
387
+ }) => string;
388
+ readonly doorSelf: "Door";
389
+ readonly doorOther: (p: {
390
+ firstName: string | number;
391
+ }) => string;
392
+ readonly vip: "VIP";
393
+ readonly creatorSelf: "Your event";
394
+ readonly creatorOther: (p: {
395
+ firstName: string | number;
396
+ }) => string;
397
+ readonly goingSelf: "Going";
398
+ readonly goingOther: (p: {
399
+ firstName: string | number;
400
+ }) => string;
401
+ };
402
+ readonly chip: {
403
+ readonly lineup: "LINEUP";
404
+ readonly host: "HOST";
405
+ };
406
+ readonly error: {
407
+ readonly title: "Couldn't load events";
408
+ readonly subtitle: "Check your connection and tap to retry";
409
+ };
410
+ readonly empty: {
411
+ readonly upcomingSubtitleSelf: "Events you create or RSVP to will appear here";
412
+ readonly upcomingSubtitleOther: "Events this user creates or RSVPs to will appear here";
413
+ readonly pastTitle: "No past events";
414
+ readonly pastSubtitleSelf: "Past events will appear here";
415
+ readonly pastSubtitleOther: "Past events this user hosts or attends will show up here";
416
+ };
417
+ };
418
+ readonly gigs: {
419
+ readonly emptyTitle: "No gigs yet";
420
+ readonly emptySubtitle: "Events you're working will show up here";
421
+ readonly nowBadge: "NOW";
422
+ readonly privacyHeader: "Your gigs · only you can see this";
423
+ readonly disabledLine: (p: {
424
+ disabledTitle: string | number;
425
+ countdown: string | number;
426
+ }) => string;
427
+ readonly actionDoorTitle: "Scan check-ins";
428
+ readonly actionDoorDisabled: "Scan opens in";
429
+ readonly actionHostTitle: "Invite guests";
430
+ readonly actionHostDisabled: "Invites open in";
431
+ readonly actionPhotographerTitle: "Upload photos";
432
+ readonly actionPhotographerDisabled: "Uploads open in";
433
+ readonly roleDoor: "Door";
434
+ readonly roleHost: "Host";
435
+ readonly dateTonight: (p: {
436
+ time: string | number;
437
+ }) => string;
438
+ readonly countdownSoon: "soon";
439
+ readonly countdownMinutes: (p: {
440
+ minutes: string | number;
441
+ }) => string;
442
+ readonly countdownHours: (p: {
443
+ hours: string | number;
444
+ }) => string;
445
+ readonly countdownDays: (p: {
446
+ days: string | number;
447
+ }) => string;
448
+ };
449
+ readonly gallery: {
450
+ readonly lockedTitle: "Gallery Locked";
451
+ readonly lockedSubtitleUpcoming: "Content upload opens when the event starts";
452
+ readonly lockedSubtitleCheckIn: "Content upload opens when you check in";
453
+ readonly restrictedTitle: "This gallery is only visible to attendees";
454
+ readonly emptyTitle: "No posts yet";
455
+ readonly emptySubtitleSelf: "Event posts that you share or are tagged in will appear here";
456
+ readonly emptySubtitleOther: "Event posts that this user shares or is tagged in will appear here";
457
+ readonly eventEmptyTitle: "No uploads yet";
458
+ };
459
+ readonly qr: {
460
+ readonly subtitle: "Show this at the door";
461
+ };
462
+ };
24
463
  };
25
464
  export type Copy = typeof copy;
package/lib/copy.js CHANGED
@@ -26,4 +26,393 @@ export const copy = {
26
26
  invite: {
27
27
  greeting: (p) => `Hey ${p.name}, you're invited`,
28
28
  },
29
+ auth: {
30
+ signUp: {
31
+ title: "Sign up",
32
+ subtitle: "Connect with friends, customize your profile and more.",
33
+ submitButton: "Sign Up",
34
+ nameTitle: "What's your name?",
35
+ nameSubtitle: "This will be displayed on your profile",
36
+ usernameTitle: "Enter username",
37
+ usernamePlaceholder: "username",
38
+ usernameHint: "Use only: letters, numbers, period, underscore",
39
+ usernameAvailable: "Username available",
40
+ usernameTaken: "Username is already taken",
41
+ usernameInvalid: "Invalid characters in username",
42
+ passwordTitle: "Create a password",
43
+ birthdayTitle: "Enter your birthday",
44
+ birthdaySubtitle: "Your birthday is used to deliver an age-appropriate experience.",
45
+ birthdayPlaceholder: "Birthday",
46
+ smsConsent: "By signing up, you agree to receive account and event-related texts from Mosh. Msg & data rates may apply.",
47
+ smsRates: "Standard message & data rates may apply.",
48
+ phoneExists: "An account with this phone number already exists. Try logging in instead.",
49
+ emailExists: "An account with this email already exists. Try logging in instead.",
50
+ },
51
+ login: {
52
+ title: "Log in",
53
+ subtitle: "RSVP to events, manage your account, and view photos from events you've attended.",
54
+ emailOrUsername: "Email/Username",
55
+ forgotPassword: "Forgot password?",
56
+ noAccount: "No account found. Please sign up first.",
57
+ },
58
+ gateway: {
59
+ or: "or",
60
+ haveAccount: "Already have an account?",
61
+ noAccount: "Don't have an account?",
62
+ },
63
+ legal: {
64
+ continueAgreement: "By continuing, you confirm that you have read and agreed to the Mosh ",
65
+ termsOfUse: "Terms of Use",
66
+ and: " and ",
67
+ privacyPolicy: "Privacy Policy",
68
+ },
69
+ common: {
70
+ next: "Next",
71
+ confirm: "Confirm",
72
+ continueButton: "Continue",
73
+ phone: "Phone",
74
+ email: "Email",
75
+ phoneNumberPlaceholder: "Phone number",
76
+ sendCode: "Send Code",
77
+ resendCode: "Resend code",
78
+ sending: "Sending...",
79
+ },
80
+ verify: {
81
+ phoneTitle: "Verify Phone",
82
+ codeTitle: "Enter 6-digit code",
83
+ sentTo: (p) => `Your code was sent to ${p.contact}`,
84
+ invalidCode: "Invalid or expired code. Tap to retry.",
85
+ resendFailed: "Failed to resend code",
86
+ },
87
+ errors: {
88
+ missingFields: "Missing required fields",
89
+ missingCredentials: "Missing authentication credentials",
90
+ missingMethod: "Missing authentication method",
91
+ },
92
+ forgot: {
93
+ title: "Forgot your password?",
94
+ subtitle: (p) => `Enter your ${p.method} and we'll send you a code to reset it.`,
95
+ resetTitle: "Reset password",
96
+ passwordUpdated: "Password updated. You can now log in.",
97
+ enterCodeTitle: "Enter the code",
98
+ codeSentTo: (p) => `We sent a 6-digit code to ${p.destination}.`,
99
+ newPasswordTitle: "Create a new password",
100
+ newPasswordSubtitle: "Choose a password you haven't used before.",
101
+ },
102
+ comingSoon: {
103
+ title: "Coming soon",
104
+ ok: "OK",
105
+ body: (p) => `${p.provider} sign-in isn't available yet.`,
106
+ },
107
+ contactDiscovery: {
108
+ body: "Friends who have your number can find you on Mosh. Manage anytime in ",
109
+ settingsLink: "Settings → Privacy",
110
+ },
111
+ },
112
+ common: {
113
+ save: "Save",
114
+ cancel: "Cancel",
115
+ ok: "OK",
116
+ delete: "Delete",
117
+ follow: "Follow",
118
+ following: "Following",
119
+ block: "Block",
120
+ unblock: "Unblock",
121
+ },
122
+ settings: {
123
+ title: "Settings",
124
+ sections: {
125
+ general: "General",
126
+ support: "Support",
127
+ legal: "Legal",
128
+ developer: "Developer",
129
+ },
130
+ rows: {
131
+ account: "Account",
132
+ privacySecurity: "Privacy & security",
133
+ notifications: "Notifications",
134
+ findFriends: "Find friends",
135
+ reportBug: "Report a bug",
136
+ contactHelpCenter: "Contact help center",
137
+ termsOfUse: "Terms of Use",
138
+ communityGuidelines: "Community Guidelines",
139
+ privacyPolicy: "Privacy Policy",
140
+ copyrightPolicy: "Copyright Policy",
141
+ environment: "Environment",
142
+ logOut: "Log out",
143
+ },
144
+ footer: {
145
+ version: (p) => `v${p.version}.0.0`,
146
+ },
147
+ logout: {
148
+ confirmTitle: (p) => `Log out @${p.username}?`,
149
+ confirmAction: "Log out",
150
+ },
151
+ environment: {
152
+ confirmTitle: (p) => `Switch to ${p.environment}?`,
153
+ confirmAction: "Switch",
154
+ confirmMessage: (p) => `You will be signed out and need to sign in again on the ${p.environment} environment.`,
155
+ },
156
+ notifications: {
157
+ title: "Notifications",
158
+ pushRowTitle: "Push notifications",
159
+ statusOn: "On",
160
+ statusOff: "Off",
161
+ },
162
+ accountType: {
163
+ pickerTitle: "Choose account type",
164
+ personalName: "Personal",
165
+ djName: "DJ",
166
+ performerName: "Performer",
167
+ venueName: "Venue",
168
+ personalDesc: "Standard personal account",
169
+ djDesc: "For DJs and music artists",
170
+ performerDesc: "For performers and entertainers",
171
+ venueDesc: "For venues and event spaces",
172
+ },
173
+ accountInfo: {
174
+ title: "Account information",
175
+ privacyNote: "This information is only visible to you.",
176
+ emailRow: "Email",
177
+ notSet: "Not set",
178
+ phoneRow: "Phone number",
179
+ emailPlaceholder: "Email",
180
+ phonePlaceholder: "Phone number",
181
+ updateButton: "Update",
182
+ },
183
+ account: {
184
+ title: "Account",
185
+ infoRow: "Account information",
186
+ passwordRow: "Password",
187
+ typeRow: "Account type",
188
+ deactivateDeleteRow: "Deactivate or delete account",
189
+ deactivateConfirmTitle: "Deactivate your account?",
190
+ deactivateConfirmMessage: "Your profile, events, and content will be hidden until you log back in to reactivate.",
191
+ deactivateConfirmAction: "Deactivate",
192
+ deleteConfirmTitle: "Delete your account?",
193
+ deleteConfirmMessage: "Your account and content will be scheduled for permanent deletion. Reactivate within 30 days to cancel — after that, it can't be recovered.",
194
+ deactivateSuccessToast: "Account deactivated",
195
+ deactivateErrorTitle: "Couldn't deactivate account",
196
+ deleteSuccessToast: "Account deleted",
197
+ deleteErrorTitle: "Couldn't delete account",
198
+ },
199
+ syncedContacts: {
200
+ title: "Synced contacts",
201
+ body: "Mosh keeps these so we can connect you with friends as they join. Clearing them stops suggestions from your contacts and turns off auto-connect when they sign up.",
202
+ clearButton: "Clear synced contacts",
203
+ countSubtitle: (p) => `contacts synced · ${p.lastUpdated}`,
204
+ emptySubtitle: "Contacts you've synced from your phone.",
205
+ clearConfirmTitle: "Clear synced contacts?",
206
+ clearConfirmMessage: "This stops suggestions from your contacts and turns off auto-connect when they join.",
207
+ clearConfirmAction: "Clear",
208
+ clearSuccess: "Synced contacts cleared.",
209
+ clearErrorTitle: "Couldn't clear contacts",
210
+ },
211
+ password: {
212
+ changeTitle: "Change password",
213
+ createTitle: "Create password",
214
+ changeSubtitle: "Enter your current password, then choose a new one.",
215
+ createSubtitle: "You signed up without a password. Create one to also sign in with your email or username.",
216
+ changeButton: "Change password",
217
+ createButton: "Create password",
218
+ currentPlaceholder: "Current password",
219
+ newPlaceholder: "New password",
220
+ confirmPlaceholder: "Confirm new password",
221
+ requirementsPrefix: "Must include: ",
222
+ successTitle: "Success",
223
+ changeSuccessMessage: "Your password has been updated.",
224
+ createSuccessMessage: "Your password has been created.",
225
+ errorTitle: "Unable to update password",
226
+ },
227
+ privacy: {
228
+ title: "Privacy & security",
229
+ privateTitle: "Private account",
230
+ privateSubtitle: "When your account is private, only people you approve can see your photos, event activity, and who you follow. Your existing followers won't be affected.",
231
+ findableTitle: "Findable by contacts",
232
+ findableSubtitle: "Friends who have your number can find you on Mosh and get notified when you join. Turn this off to stay hidden from contacts.",
233
+ syncedContactsTitle: "Synced contacts",
234
+ syncedContactsSubtitle: "Review or clear the contacts Mosh has synced from your phone.",
235
+ blockedTitle: "Blocked accounts",
236
+ blockedSubtitle: "See the accounts you've blocked and unblock them anytime.",
237
+ publicConfirmTitle: "Switch to public account?",
238
+ publicConfirmMessage: "Anyone who has requested to follow you will start following you, and anyone will be able to see your events and event content.",
239
+ publicConfirmAction: "Switch",
240
+ },
241
+ blocked: {
242
+ title: "Blocked accounts",
243
+ emptyState: "You haven't blocked anyone.",
244
+ blockedToast: "Blocked",
245
+ unblockedToast: "Unblocked",
246
+ errorToast: "Something went wrong. Try again.",
247
+ usernameHandle: (p) => `@${p.username}`,
248
+ unblockButton: "Unblock",
249
+ blockButton: "Block",
250
+ },
251
+ },
252
+ profile: {
253
+ menu: {
254
+ drafts: "Drafts",
255
+ analytics: "Analytics",
256
+ settings: "Settings",
257
+ help: "Help & feedback",
258
+ venueManage: "Manage",
259
+ venueSwitch: "Switch",
260
+ },
261
+ contextSwitcher: {
262
+ title: "Switch profile",
263
+ personal: "Personal",
264
+ current: "Current",
265
+ },
266
+ venueMode: {
267
+ eventsTitle: "Events",
268
+ eventsEmptyTitle: "No upcoming events",
269
+ eventsEmptySubtitle: "Create an event to get started.",
270
+ actionShare: "Share",
271
+ actionAddGuest: "Add guest",
272
+ actionEdit: "Edit",
273
+ tonight: "Tonight",
274
+ upcomingHeader: "Upcoming",
275
+ notificationsTitle: "Notifications",
276
+ notificationsEmptyTitle: "Nothing yet",
277
+ notificationsEmptySubtitle: "Venue activity will show up here.",
278
+ },
279
+ button: {
280
+ editProfile: "Edit profile",
281
+ requested: "Requested",
282
+ followBack: "Follow back",
283
+ },
284
+ header: {
285
+ shareProfile: "Share profile",
286
+ userNotFound: "User not found",
287
+ points: "points",
288
+ followers: "followers",
289
+ following: "following",
290
+ liveNow: "Now: ",
291
+ liveTonight: "Tonight: ",
292
+ accountTypeDj: "DJ",
293
+ accountTypePerformer: "Performer",
294
+ },
295
+ followRequest: {
296
+ confirm: "Confirm",
297
+ },
298
+ block: {
299
+ confirmTitle: (p) => `Block @${p.username}?`,
300
+ confirmMessage: "They won't be able to message you, see your posts, or find your profile. They won't be notified that you blocked them.",
301
+ toastSuccess: "Blocked",
302
+ toastError: "Couldn't block. Try again.",
303
+ },
304
+ unblock: {
305
+ confirmTitle: "Unblock this account?",
306
+ confirmMessage: "They'll be able to find your profile, see your posts, and message you again.",
307
+ toastSuccess: "Unblocked",
308
+ toastError: "Couldn't unblock. Try again.",
309
+ },
310
+ placeholder: {
311
+ blockedTitle: (p) => `You blocked ${p.handle}`,
312
+ blockedSubtitle: "You can't see each other's events or event content while blocked.",
313
+ privateTitle: "This account is private",
314
+ privateSubtitle: "Follow this profile to see their events and event content",
315
+ },
316
+ alert: {
317
+ userNotFoundTitle: "User Not Found",
318
+ userNotFoundMessage: "This user doesn't exist.",
319
+ },
320
+ followers: {
321
+ searchFollowingPlaceholder: "Search following",
322
+ searchFollowersPlaceholder: "Search followers",
323
+ suggestedEmpty: "Suggestions coming soon",
324
+ navFallbackTitle: "Followers",
325
+ tabFollowers: "Followers",
326
+ tabFollowing: "Following",
327
+ tabSuggested: "Suggested",
328
+ },
329
+ imagePicker: {
330
+ uploadingMessage: "Uploading...",
331
+ uploadFailedTitle: "Upload Failed",
332
+ },
333
+ edit: {
334
+ navTitle: "Edit profile",
335
+ changePhotoButton: "Change photo",
336
+ nameLabel: "Name",
337
+ usernameLabel: "Username",
338
+ bioLabel: "Bio",
339
+ username: {
340
+ navTitle: "Edit username",
341
+ invalidFormatError: "Invalid username format",
342
+ },
343
+ bio: {
344
+ navTitle: "Edit bio",
345
+ placeholder: "Write a bio...",
346
+ charCount: (p) => `${p.count}/${p.max}`,
347
+ },
348
+ name: {
349
+ navTitle: "Edit name",
350
+ },
351
+ },
352
+ events: {
353
+ role: {
354
+ hostingSelf: "Hosting",
355
+ hostingOther: (p) => `${p.firstName}'s hosting`,
356
+ performingSelf: "Performing",
357
+ performingOther: (p) => `${p.firstName}'s performing`,
358
+ photographerSelf: "Photographer",
359
+ photographerOther: (p) => `${p.firstName}'s shooting`,
360
+ doorSelf: "Door",
361
+ doorOther: (p) => `${p.firstName}'s on door`,
362
+ vip: "VIP",
363
+ creatorSelf: "Your event",
364
+ creatorOther: (p) => `${p.firstName}'s event`,
365
+ goingSelf: "Going",
366
+ goingOther: (p) => `${p.firstName}'s going`,
367
+ },
368
+ chip: {
369
+ lineup: "LINEUP",
370
+ host: "HOST",
371
+ },
372
+ error: {
373
+ title: "Couldn't load events",
374
+ subtitle: "Check your connection and tap to retry",
375
+ },
376
+ empty: {
377
+ upcomingSubtitleSelf: "Events you create or RSVP to will appear here",
378
+ upcomingSubtitleOther: "Events this user creates or RSVPs to will appear here",
379
+ pastTitle: "No past events",
380
+ pastSubtitleSelf: "Past events will appear here",
381
+ pastSubtitleOther: "Past events this user hosts or attends will show up here",
382
+ },
383
+ },
384
+ gigs: {
385
+ emptyTitle: "No gigs yet",
386
+ emptySubtitle: "Events you're working will show up here",
387
+ nowBadge: "NOW",
388
+ privacyHeader: "Your gigs · only you can see this",
389
+ disabledLine: (p) => `${p.disabledTitle} ${p.countdown}`,
390
+ actionDoorTitle: "Scan check-ins",
391
+ actionDoorDisabled: "Scan opens in",
392
+ actionHostTitle: "Invite guests",
393
+ actionHostDisabled: "Invites open in",
394
+ actionPhotographerTitle: "Upload photos",
395
+ actionPhotographerDisabled: "Uploads open in",
396
+ roleDoor: "Door",
397
+ roleHost: "Host",
398
+ dateTonight: (p) => `Tonight · ${p.time}`,
399
+ countdownSoon: "soon",
400
+ countdownMinutes: (p) => `${p.minutes}m`,
401
+ countdownHours: (p) => `${p.hours}HR`,
402
+ countdownDays: (p) => `${p.days}d`,
403
+ },
404
+ gallery: {
405
+ lockedTitle: "Gallery Locked",
406
+ lockedSubtitleUpcoming: "Content upload opens when the event starts",
407
+ lockedSubtitleCheckIn: "Content upload opens when you check in",
408
+ restrictedTitle: "This gallery is only visible to attendees",
409
+ emptyTitle: "No posts yet",
410
+ emptySubtitleSelf: "Event posts that you share or are tagged in will appear here",
411
+ emptySubtitleOther: "Event posts that this user shares or is tagged in will appear here",
412
+ eventEmptyTitle: "No uploads yet",
413
+ },
414
+ qr: {
415
+ subtitle: "Show this at the door",
416
+ },
417
+ },
29
418
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moshevents/copy",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Mosh — single source of truth for user-facing copy. Typed `copy` for web/admin; iOS consumes the SwiftPM target.",
5
5
  "type": "module",
6
6
  "files": [