@moshevents/copy 0.7.2 → 0.8.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.
package/lib/copy.d.ts CHANGED
@@ -9,6 +9,10 @@ export declare const copy: {
9
9
  readonly attendeeCount: (p: {
10
10
  count: number;
11
11
  }) => string;
12
+ readonly manage: {
13
+ readonly back: "Back";
14
+ readonly header: "Manage event";
15
+ };
12
16
  };
13
17
  readonly tickets: {
14
18
  readonly sectionTitle: "Tickets";
@@ -233,6 +237,103 @@ export declare const copy: {
233
237
  readonly empty: "No sales yet — payout details will appear here.";
234
238
  };
235
239
  };
240
+ readonly promosManage: {
241
+ readonly templatesHeader: "Start from a template";
242
+ readonly listHeader: "Promotions";
243
+ readonly empty: "No promotions yet — pick a template to spin one up in seconds.";
244
+ readonly loadFailed: "Couldn't load promotions. Try again.";
245
+ readonly saveFailed: "Couldn't save the promotion. Try again.";
246
+ readonly newHeader: "New promotion";
247
+ readonly editHeader: "Edit promotion";
248
+ readonly templates: {
249
+ readonly rsvpFreeName: "First __ RSVPs get in free";
250
+ readonly rsvpFreeHint: "Held when guests RSVP";
251
+ readonly doorFreeName: "First __ at the door get in free";
252
+ readonly doorFreeHint: "Claimed when guests arrive";
253
+ readonly beforeTimeName: "Free entry before __:__";
254
+ readonly beforeTimeHint: "Time-window offer, no cap";
255
+ readonly customName: "Custom";
256
+ readonly customHint: "Start from a blank form";
257
+ readonly rsvpFreeTitle: (p: {
258
+ n: string | number;
259
+ }) => string;
260
+ readonly doorFreeTitle: (p: {
261
+ n: string | number;
262
+ }) => string;
263
+ readonly beforeTimeTitle: (p: {
264
+ time: string | number;
265
+ }) => string;
266
+ };
267
+ readonly form: {
268
+ readonly titleLabel: "Title";
269
+ readonly triggerLabel: "Trigger";
270
+ readonly triggerRsvp: "First-N RSVPs";
271
+ readonly triggerDoor: "At the door";
272
+ readonly doorHint: "Claimed when guests arrive — nothing is held in advance.";
273
+ readonly benefitLabel: "Benefit";
274
+ readonly benefitFree: "Free entry";
275
+ readonly benefitDiscounted: "Discounted entry";
276
+ readonly benefitCustom: "Custom perk";
277
+ readonly valueLabel: "Door price (USD)";
278
+ readonly valueHint: "What the guest pays at the door.";
279
+ readonly perkLabel: "Perk";
280
+ readonly perkPlaceholder: "e.g. Free shot at the bar";
281
+ readonly benefitLockedHint: "The benefit is locked while claims are outstanding — void and recreate to change it.";
282
+ readonly capLabel: "Claim cap (optional)";
283
+ readonly capPlaceholder: "Uncapped";
284
+ readonly untilLabel: "Valid at the door until (optional)";
285
+ readonly advancedToggle: "Advanced — claim window, live countdown threshold";
286
+ readonly claimOpensLabel: "Claims open (optional)";
287
+ readonly claimClosesLabel: "Claims close (optional)";
288
+ readonly countdownBefore: "Show live countdown when";
289
+ readonly countdownAfter: "or fewer remain";
290
+ readonly termsPlaceholder: "Terms — fine print (optional)";
291
+ readonly saveGoLive: "Save & go live";
292
+ readonly saveDraft: "Save draft";
293
+ readonly saveChanges: "Save changes";
294
+ };
295
+ readonly row: {
296
+ readonly freeEntry: "Free entry";
297
+ readonly discountedEntry: (p: {
298
+ price: string | number;
299
+ }) => string;
300
+ readonly customPerk: "Custom perk";
301
+ readonly triggerRsvp: "First-N RSVPs";
302
+ readonly triggerDoor: "At the door";
303
+ readonly claimedOfCap: (p: {
304
+ claimed: string | number;
305
+ cap: string | number;
306
+ }) => string;
307
+ readonly claimedOpen: (p: {
308
+ claimed: string | number;
309
+ }) => string;
310
+ };
311
+ readonly status: {
312
+ readonly draft: "Draft";
313
+ readonly scheduled: "Scheduled";
314
+ readonly live: "Live";
315
+ readonly paused: "Paused";
316
+ readonly exhausted: "Exhausted";
317
+ readonly expired: "Expired";
318
+ readonly ended: "Ended";
319
+ readonly voided: "Voided";
320
+ };
321
+ readonly actions: {
322
+ readonly edit: "Edit";
323
+ readonly goLive: "Go live";
324
+ readonly pause: "Pause";
325
+ readonly resume: "Resume";
326
+ readonly void: "Void";
327
+ };
328
+ readonly voidDialog: {
329
+ readonly title: "Void this promotion?";
330
+ readonly warning: "Voiding cancels all outstanding claims — guests who already claimed lose the benefit.";
331
+ readonly ownerNote: "Guests have already claimed this promotion, so only the venue owner can void it.";
332
+ readonly reasonLabel: "Reason";
333
+ readonly reasonPlaceholder: "Why are you voiding this?";
334
+ readonly confirm: "Void promotion";
335
+ };
336
+ };
236
337
  readonly account: {
237
338
  readonly deactivate: {
238
339
  readonly title: "Deactivate or delete?";
package/lib/copy.js CHANGED
@@ -16,6 +16,10 @@ export const copy = {
16
16
  return `${p.count} person going`;
17
17
  return `${p.count} going`;
18
18
  },
19
+ manage: {
20
+ back: "Back",
21
+ header: "Manage event",
22
+ },
19
23
  },
20
24
  tickets: {
21
25
  sectionTitle: "Tickets",
@@ -219,6 +223,90 @@ export const copy = {
219
223
  empty: "No sales yet — payout details will appear here.",
220
224
  },
221
225
  },
226
+ promosManage: {
227
+ templatesHeader: "Start from a template",
228
+ listHeader: "Promotions",
229
+ empty: "No promotions yet — pick a template to spin one up in seconds.",
230
+ loadFailed: "Couldn't load promotions. Try again.",
231
+ saveFailed: "Couldn't save the promotion. Try again.",
232
+ newHeader: "New promotion",
233
+ editHeader: "Edit promotion",
234
+ templates: {
235
+ rsvpFreeName: "First __ RSVPs get in free",
236
+ rsvpFreeHint: "Held when guests RSVP",
237
+ doorFreeName: "First __ at the door get in free",
238
+ doorFreeHint: "Claimed when guests arrive",
239
+ beforeTimeName: "Free entry before __:__",
240
+ beforeTimeHint: "Time-window offer, no cap",
241
+ customName: "Custom",
242
+ customHint: "Start from a blank form",
243
+ rsvpFreeTitle: (p) => `Free entry for the first ${p.n} RSVPs`,
244
+ doorFreeTitle: (p) => `First ${p.n} at the door get in free`,
245
+ beforeTimeTitle: (p) => `Free entry before ${p.time}`,
246
+ },
247
+ form: {
248
+ titleLabel: "Title",
249
+ triggerLabel: "Trigger",
250
+ triggerRsvp: "First-N RSVPs",
251
+ triggerDoor: "At the door",
252
+ doorHint: "Claimed when guests arrive — nothing is held in advance.",
253
+ benefitLabel: "Benefit",
254
+ benefitFree: "Free entry",
255
+ benefitDiscounted: "Discounted entry",
256
+ benefitCustom: "Custom perk",
257
+ valueLabel: "Door price (USD)",
258
+ valueHint: "What the guest pays at the door.",
259
+ perkLabel: "Perk",
260
+ perkPlaceholder: "e.g. Free shot at the bar",
261
+ benefitLockedHint: "The benefit is locked while claims are outstanding — void and recreate to change it.",
262
+ capLabel: "Claim cap (optional)",
263
+ capPlaceholder: "Uncapped",
264
+ untilLabel: "Valid at the door until (optional)",
265
+ advancedToggle: "Advanced — claim window, live countdown threshold",
266
+ claimOpensLabel: "Claims open (optional)",
267
+ claimClosesLabel: "Claims close (optional)",
268
+ countdownBefore: "Show live countdown when",
269
+ countdownAfter: "or fewer remain",
270
+ termsPlaceholder: "Terms — fine print (optional)",
271
+ saveGoLive: "Save & go live",
272
+ saveDraft: "Save draft",
273
+ saveChanges: "Save changes",
274
+ },
275
+ row: {
276
+ freeEntry: "Free entry",
277
+ discountedEntry: (p) => `${p.price} entry`,
278
+ customPerk: "Custom perk",
279
+ triggerRsvp: "First-N RSVPs",
280
+ triggerDoor: "At the door",
281
+ claimedOfCap: (p) => `${p.claimed}/${p.cap} claimed`,
282
+ claimedOpen: (p) => `${p.claimed} claimed`,
283
+ },
284
+ status: {
285
+ draft: "Draft",
286
+ scheduled: "Scheduled",
287
+ live: "Live",
288
+ paused: "Paused",
289
+ exhausted: "Exhausted",
290
+ expired: "Expired",
291
+ ended: "Ended",
292
+ voided: "Voided",
293
+ },
294
+ actions: {
295
+ edit: "Edit",
296
+ goLive: "Go live",
297
+ pause: "Pause",
298
+ resume: "Resume",
299
+ void: "Void",
300
+ },
301
+ voidDialog: {
302
+ title: "Void this promotion?",
303
+ warning: "Voiding cancels all outstanding claims — guests who already claimed lose the benefit.",
304
+ ownerNote: "Guests have already claimed this promotion, so only the venue owner can void it.",
305
+ reasonLabel: "Reason",
306
+ reasonPlaceholder: "Why are you voiding this?",
307
+ confirm: "Void promotion",
308
+ },
309
+ },
222
310
  account: {
223
311
  deactivate: {
224
312
  title: "Deactivate or delete?",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moshevents/copy",
3
- "version": "0.7.2",
3
+ "version": "0.8.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": [