@timardex/cluemart-shared 1.5.792 → 1.5.793

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/dist/index.d.mts CHANGED
@@ -2840,6 +2840,7 @@ declare function buildShareUrl(type: ShareType, slug: string, utmMedium?: string
2840
2840
  declare const SOCIAL_IMAGE_WIDTH = 1200;
2841
2841
  /** Open Graph recommended preview size (must match admin `SHARE_OG_IMAGE_*`). */
2842
2842
  declare const SOCIAL_IMAGE_HEIGHT = 630;
2843
+ /** Keep in sync with `CLUEMART_MAIN_DOMAIN_URL` in utils (avoid utils↔sharing import cycle). */
2843
2844
  declare const SHARE_SITE_URL = "https://cluemart.co.nz";
2844
2845
  /** Calendar marker for invitation market-dates share copy (U+1F4C5 📅). */
2845
2846
  declare const SHARE_CALENDAR_ICON = "\uD83D\uDCC5";
package/dist/index.d.ts CHANGED
@@ -2840,6 +2840,7 @@ declare function buildShareUrl(type: ShareType, slug: string, utmMedium?: string
2840
2840
  declare const SOCIAL_IMAGE_WIDTH = 1200;
2841
2841
  /** Open Graph recommended preview size (must match admin `SHARE_OG_IMAGE_*`). */
2842
2842
  declare const SOCIAL_IMAGE_HEIGHT = 630;
2843
+ /** Keep in sync with `CLUEMART_MAIN_DOMAIN_URL` in utils (avoid utils↔sharing import cycle). */
2843
2844
  declare const SHARE_SITE_URL = "https://cluemart.co.nz";
2844
2845
  /** Calendar marker for invitation market-dates share copy (U+1F4C5 📅). */
2845
2846
  declare const SHARE_CALENDAR_ICON = "\uD83D\uDCC5";
package/dist/index.mjs CHANGED
@@ -562,6 +562,150 @@ import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
562
562
  import timezone from "dayjs/plugin/timezone.js";
563
563
  import utc from "dayjs/plugin/utc.js";
564
564
 
565
+ // src/sharing/relationShareTypes.ts
566
+ var RELATION_SHARE_INVITATION = "invitation";
567
+ var RELATION_SHARE_APPLICATION = "application";
568
+ var RELATION_OVERLAY_LAYOUT_VERSION = 36;
569
+ var RELATION_SHARE_RESOURCE_TYPES = [
570
+ RELATION_SHARE_INVITATION,
571
+ RELATION_SHARE_APPLICATION
572
+ ];
573
+ function isRelationShareResourceType(resourceType) {
574
+ return RELATION_SHARE_RESOURCE_TYPES.includes(
575
+ resourceType
576
+ );
577
+ }
578
+
579
+ // src/sharing/constants.ts
580
+ var SOCIAL_IMAGE_WIDTH = 1200;
581
+ var SOCIAL_IMAGE_HEIGHT = 630;
582
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
583
+ var SHARE_CALENDAR_ICON = "\u{1F4C5}";
584
+ var SHARE_MARKET_DATES_SECTION_HEADING = `${SHARE_CALENDAR_ICON} Market dates:`;
585
+ var SHARE_CHECKMARK_ICON = "\u2705";
586
+ var SHARE_REQUIREMENTS_SECTION_HEADING = `${SHARE_CHECKMARK_ICON} Requirements:`;
587
+ var SHARE_INFO_ICON = "\u2139\uFE0F";
588
+ var SHARE_TAGS_SECTION_HEADING = `${SHARE_INFO_ICON} Tags:`;
589
+ var SHARE_RAIN_OR_SHINE_LINE = "Rain or Shine";
590
+ var SHARE_FOOD_TRUCK_LINE = "Food Truck";
591
+ var SHARE_COMPLIANCE_PREFIX = `${SHARE_CHECKMARK_ICON} Compliance:`;
592
+ var SHARE_CATEGORY_ICON = "\u{1F3F7}\uFE0F";
593
+ var SHARE_CATEGORIES_SECTION_HEADING = `${SHARE_CATEGORY_ICON} Categories:`;
594
+ var SHARE_RULER_ICON = "\u{1F4CF}";
595
+ var SHARE_STALL_SIZE_PREFIX = `${SHARE_RULER_ICON} Stall size:`;
596
+ var SHARE_DOLLAR_ICON = "$";
597
+ var SHARE_PRICE_RANGE_PREFIX = `${SHARE_DOLLAR_ICON} Price range:`;
598
+ var SHARE_CLOCK_ICON = "\u23F0";
599
+ var SHARE_APPLICATION_DEADLINE_PREFIX = `${SHARE_CLOCK_ICON} Application deadline:`;
600
+ var SHARE_MORE_INFO_LINE = "Shared from ClueMart";
601
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
602
+ var RESOURCE_SHARE_TYPES = [
603
+ "market",
604
+ "stallholder",
605
+ "partner",
606
+ "affiliate",
607
+ "school"
608
+ ];
609
+ var POST_SHARE_RESOURCE_TYPES = [
610
+ "market_faces",
611
+ "clue_bites",
612
+ "play_and_win"
613
+ ];
614
+ var SHARE_RESOURCE_LABEL = {
615
+ [RELATION_SHARE_APPLICATION]: "Application",
616
+ [RELATION_SHARE_INVITATION]: "Invitation",
617
+ clue_bites: "Clue Bites",
618
+ market_faces: "Market Faces",
619
+ play_and_win: "Play & Win",
620
+ market: "Market",
621
+ partner: "Partner",
622
+ stallholder: "Stallholder",
623
+ affiliate: "Affiliate",
624
+ school: "School"
625
+ };
626
+ function isPostShareResourceType(resourceType) {
627
+ return POST_SHARE_RESOURCE_TYPES.includes(
628
+ resourceType
629
+ );
630
+ }
631
+
632
+ // src/sharing/joinShareDescriptionSections.ts
633
+ var SHARE_DESCRIPTION_SECTION_BREAK = "\n\n";
634
+ var OG_DESCRIPTION_LINE_BREAK = "
";
635
+ function joinShareOgDescriptionSections(sections) {
636
+ return sections.map((section) => typeof section === "string" ? section.trim() : "").filter((section) => section.length > 0).map((section) => section.replace(/\n/g, OG_DESCRIPTION_LINE_BREAK)).join(OG_DESCRIPTION_LINE_BREAK);
637
+ }
638
+ function joinShareDescriptionSections(sections) {
639
+ return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_BREAK);
640
+ }
641
+ function appendShareMoreInfoLine(description) {
642
+ const trimmed = description.trim();
643
+ if (trimmed.startsWith(SHARE_MORE_INFO_LINE)) {
644
+ return trimmed;
645
+ }
646
+ if (trimmed.length === 0) {
647
+ return SHARE_MORE_INFO_LINE;
648
+ }
649
+ return joinShareDescriptionSections([SHARE_MORE_INFO_LINE, trimmed]);
650
+ }
651
+
652
+ // src/sharing/normalizeShareDescription.ts
653
+ var LEADING_WHITESPACE = /^[ \t]*/;
654
+ function normalizeShareText(value) {
655
+ if (value == null) {
656
+ return "";
657
+ }
658
+ return value.trim().split("\n").map((line) => {
659
+ const leading = LEADING_WHITESPACE.exec(line)?.[0] ?? "";
660
+ const rest = line.slice(leading.length).trim().replace(/[ \t]{2,}/g, " ");
661
+ return leading + rest;
662
+ }).join("\n").replace(/\n{3,}/g, "\n\n");
663
+ }
664
+ function shareMessageFooterPlacementForType(_shareType) {
665
+ return "before-body";
666
+ }
667
+ function buildShareMessageSections(input) {
668
+ const title = normalizeShareText(input.title);
669
+ const description = normalizeShareText(input.description);
670
+ return [SHARE_MORE_INFO_LINE, title, description].filter(
671
+ (section) => section.length > 0
672
+ );
673
+ }
674
+ function splitShareDescriptionSections(value) {
675
+ const trimmed = normalizeShareText(value);
676
+ if (!trimmed) {
677
+ return [];
678
+ }
679
+ if (/\n\n/.test(trimmed)) {
680
+ return trimmed.split(/\n\n+/).map((section) => normalizeShareText(section)).filter((section) => section.length > 0);
681
+ }
682
+ if (/\n/.test(trimmed)) {
683
+ return trimmed.split(/\n+/).map((section) => normalizeShareText(section)).filter((section) => section.length > 0);
684
+ }
685
+ return [trimmed];
686
+ }
687
+ function normalizeShareOgDescription(value) {
688
+ return joinShareOgDescriptionSections(splitShareDescriptionSections(value));
689
+ }
690
+ function buildFacebookShareQuote(title, description, shareType) {
691
+ const sections = buildShareMessageSections({ description, shareType, title });
692
+ const quote = sections.join(SHARE_DESCRIPTION_SECTION_BREAK).trim();
693
+ return quote.length > 0 ? quote : void 0;
694
+ }
695
+ function buildShareOgDescriptionFromSections(sections) {
696
+ return joinShareOgDescriptionSections(sections);
697
+ }
698
+ function buildShareOgDescription(_title, description) {
699
+ return joinShareOgDescriptionSections(
700
+ splitShareDescriptionSections(description)
701
+ );
702
+ }
703
+ function stripOverlaySubtitleSpecialChars(text) {
704
+ const regex = /[^\p{L}\p{M}\p{N}\s.,!?'"&\-():;/]/gu;
705
+ const result = text.replace(/\p{Extended_Pictographic}/gu, "").replace(regex, "");
706
+ return result.trim();
707
+ }
708
+
565
709
  // src/types/auth.ts
566
710
  var EnumVerificationType = /* @__PURE__ */ ((EnumVerificationType2) => {
567
711
  EnumVerificationType2["REGISTER"] = "register";
@@ -699,7 +843,8 @@ var removeTypename = (obj) => {
699
843
  return obj;
700
844
  };
701
845
  var truncateText = (text, maxLength = 30) => {
702
- return text.length > maxLength ? text.substring(0, maxLength) + "..." : text;
846
+ const result = stripOverlaySubtitleSpecialChars(text);
847
+ return result.length > maxLength ? result.substring(0, maxLength) + "..." : result;
703
848
  };
704
849
  var mapArrayToOptions = (items) => items.map((item) => ({
705
850
  label: item,
@@ -8279,73 +8424,6 @@ var otherImages = Object.fromEntries(
8279
8424
  Object.entries(otherImagesFiles).map(([key, file]) => [key, `${PKG}/images/${file}`])
8280
8425
  );
8281
8426
 
8282
- // src/sharing/relationShareTypes.ts
8283
- var RELATION_SHARE_INVITATION = "invitation";
8284
- var RELATION_SHARE_APPLICATION = "application";
8285
- var RELATION_OVERLAY_LAYOUT_VERSION = 36;
8286
- var RELATION_SHARE_RESOURCE_TYPES = [
8287
- RELATION_SHARE_INVITATION,
8288
- RELATION_SHARE_APPLICATION
8289
- ];
8290
- function isRelationShareResourceType(resourceType) {
8291
- return RELATION_SHARE_RESOURCE_TYPES.includes(
8292
- resourceType
8293
- );
8294
- }
8295
-
8296
- // src/sharing/constants.ts
8297
- var SOCIAL_IMAGE_WIDTH = 1200;
8298
- var SOCIAL_IMAGE_HEIGHT = 630;
8299
- var SHARE_SITE_URL = CLUEMART_MAIN_DOMAIN_URL;
8300
- var SHARE_CALENDAR_ICON = "\u{1F4C5}";
8301
- var SHARE_MARKET_DATES_SECTION_HEADING = `${SHARE_CALENDAR_ICON} Market dates:`;
8302
- var SHARE_CHECKMARK_ICON = "\u2705";
8303
- var SHARE_REQUIREMENTS_SECTION_HEADING = `${SHARE_CHECKMARK_ICON} Requirements:`;
8304
- var SHARE_INFO_ICON = "\u2139\uFE0F";
8305
- var SHARE_TAGS_SECTION_HEADING = `${SHARE_INFO_ICON} Tags:`;
8306
- var SHARE_RAIN_OR_SHINE_LINE = "Rain or Shine";
8307
- var SHARE_FOOD_TRUCK_LINE = "Food Truck";
8308
- var SHARE_COMPLIANCE_PREFIX = `${SHARE_CHECKMARK_ICON} Compliance:`;
8309
- var SHARE_CATEGORY_ICON = "\u{1F3F7}\uFE0F";
8310
- var SHARE_CATEGORIES_SECTION_HEADING = `${SHARE_CATEGORY_ICON} Categories:`;
8311
- var SHARE_RULER_ICON = "\u{1F4CF}";
8312
- var SHARE_STALL_SIZE_PREFIX = `${SHARE_RULER_ICON} Stall size:`;
8313
- var SHARE_DOLLAR_ICON = "$";
8314
- var SHARE_PRICE_RANGE_PREFIX = `${SHARE_DOLLAR_ICON} Price range:`;
8315
- var SHARE_CLOCK_ICON = "\u23F0";
8316
- var SHARE_APPLICATION_DEADLINE_PREFIX = `${SHARE_CLOCK_ICON} Application deadline:`;
8317
- var SHARE_MORE_INFO_LINE = "Shared from ClueMart";
8318
- var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
8319
- var RESOURCE_SHARE_TYPES = [
8320
- "market",
8321
- "stallholder",
8322
- "partner",
8323
- "affiliate",
8324
- "school"
8325
- ];
8326
- var POST_SHARE_RESOURCE_TYPES = [
8327
- "market_faces",
8328
- "clue_bites",
8329
- "play_and_win"
8330
- ];
8331
- var SHARE_RESOURCE_LABEL = {
8332
- [RELATION_SHARE_APPLICATION]: "Application",
8333
- [RELATION_SHARE_INVITATION]: "Invitation",
8334
- clue_bites: "Clue Bites",
8335
- market_faces: "Market Faces",
8336
- play_and_win: "Play & Win",
8337
- market: "Market",
8338
- partner: "Partner",
8339
- stallholder: "Stallholder",
8340
- affiliate: "Affiliate",
8341
- school: "School"
8342
- };
8343
- function isPostShareResourceType(resourceType) {
8344
- return POST_SHARE_RESOURCE_TYPES.includes(
8345
- resourceType
8346
- );
8347
- }
8348
-
8349
8427
  // src/sharing/formatCategoryLabel.ts
8350
8428
  function formatCategoryLabel(category) {
8351
8429
  const subcategoryNames = category.subcategories.map((subcategory) => subcategory.name).filter(Boolean);
@@ -8355,26 +8433,6 @@ function formatCategoryLabel(category) {
8355
8433
  return `${category.name} (${subcategoryNames.join(", ")})`;
8356
8434
  }
8357
8435
 
8358
- // src/sharing/joinShareDescriptionSections.ts
8359
- var SHARE_DESCRIPTION_SECTION_BREAK = "\n\n";
8360
- var OG_DESCRIPTION_LINE_BREAK = "
";
8361
- function joinShareOgDescriptionSections(sections) {
8362
- return sections.map((section) => typeof section === "string" ? section.trim() : "").filter((section) => section.length > 0).map((section) => section.replace(/\n/g, OG_DESCRIPTION_LINE_BREAK)).join(OG_DESCRIPTION_LINE_BREAK);
8363
- }
8364
- function joinShareDescriptionSections(sections) {
8365
- return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_BREAK);
8366
- }
8367
- function appendShareMoreInfoLine(description) {
8368
- const trimmed = description.trim();
8369
- if (trimmed.startsWith(SHARE_MORE_INFO_LINE)) {
8370
- return trimmed;
8371
- }
8372
- if (trimmed.length === 0) {
8373
- return SHARE_MORE_INFO_LINE;
8374
- }
8375
- return joinShareDescriptionSections([SHARE_MORE_INFO_LINE, trimmed]);
8376
- }
8377
-
8378
8436
  // src/sharing/buildRelationShareDescription.ts
8379
8437
  function formatShareMarketDate(dateStr) {
8380
8438
  return formatDate(dateStr, "date");
@@ -8506,61 +8564,6 @@ function buildShareUrl(type, slug, utmMedium = "app") {
8506
8564
  return `${SHARE_SITE_URL}/${type}/${encodeURIComponent(slug)}?utm_source=share&utm_medium=${utmMedium}&utm_campaign=${type}`;
8507
8565
  }
8508
8566
 
8509
- // src/sharing/normalizeShareDescription.ts
8510
- var LEADING_WHITESPACE = /^[ \t]*/;
8511
- function normalizeShareText(value) {
8512
- if (value == null) {
8513
- return "";
8514
- }
8515
- return value.trim().split("\n").map((line) => {
8516
- const leading = LEADING_WHITESPACE.exec(line)?.[0] ?? "";
8517
- const rest = line.slice(leading.length).trim().replace(/[ \t]{2,}/g, " ");
8518
- return leading + rest;
8519
- }).join("\n").replace(/\n{3,}/g, "\n\n");
8520
- }
8521
- function shareMessageFooterPlacementForType(_shareType) {
8522
- return "before-body";
8523
- }
8524
- function buildShareMessageSections(input) {
8525
- const title = normalizeShareText(input.title);
8526
- const description = normalizeShareText(input.description);
8527
- return [SHARE_MORE_INFO_LINE, title, description].filter(
8528
- (section) => section.length > 0
8529
- );
8530
- }
8531
- function splitShareDescriptionSections(value) {
8532
- const trimmed = normalizeShareText(value);
8533
- if (!trimmed) {
8534
- return [];
8535
- }
8536
- if (/\n\n/.test(trimmed)) {
8537
- return trimmed.split(/\n\n+/).map((section) => normalizeShareText(section)).filter((section) => section.length > 0);
8538
- }
8539
- if (/\n/.test(trimmed)) {
8540
- return trimmed.split(/\n+/).map((section) => normalizeShareText(section)).filter((section) => section.length > 0);
8541
- }
8542
- return [trimmed];
8543
- }
8544
- function normalizeShareOgDescription(value) {
8545
- return joinShareOgDescriptionSections(splitShareDescriptionSections(value));
8546
- }
8547
- function buildFacebookShareQuote(title, description, shareType) {
8548
- const sections = buildShareMessageSections({ description, shareType, title });
8549
- const quote = sections.join(SHARE_DESCRIPTION_SECTION_BREAK).trim();
8550
- return quote.length > 0 ? quote : void 0;
8551
- }
8552
- function buildShareOgDescriptionFromSections(sections) {
8553
- return joinShareOgDescriptionSections(sections);
8554
- }
8555
- function buildShareOgDescription(_title, description) {
8556
- return joinShareOgDescriptionSections(
8557
- splitShareDescriptionSections(description)
8558
- );
8559
- }
8560
- function stripOverlaySubtitleSpecialChars(text) {
8561
- return text.replace(/\p{Extended_Pictographic}/gu, "").replace(/[^\p{L}\p{M}\p{N}\s.,!?'"&\-():;/]/gu, "");
8562
- }
8563
-
8564
8567
  // src/sharing/normalizeShareRouteId.ts
8565
8568
  function normalizeShareRouteId(id) {
8566
8569
  try {