@timardex/cluemart-shared 1.5.599 → 1.5.601

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.cjs CHANGED
@@ -66,6 +66,7 @@ __export(index_exports, {
66
66
  IMAGE_EXTENSION: () => IMAGE_EXTENSION,
67
67
  IOS_URL: () => IOS_URL,
68
68
  ImageTypeEnum: () => ImageTypeEnum,
69
+ OG_DESCRIPTION_LINE_BREAK: () => OG_DESCRIPTION_LINE_BREAK,
69
70
  POST_SHARE_RESOURCE_TYPES: () => POST_SHARE_RESOURCE_TYPES,
70
71
  PROMO_CODE_PREFIX: () => PROMO_CODE_PREFIX,
71
72
  PUBLIC_SHARE_PATH_TYPES: () => PUBLIC_SHARE_PATH_TYPES,
@@ -80,8 +81,14 @@ __export(index_exports, {
80
81
  SAVED_TOKEN_KEY: () => SAVED_TOKEN_KEY,
81
82
  SCHOOL_MAX_STUDENT_COUNT: () => SCHOOL_MAX_STUDENT_COUNT,
82
83
  SCHOOL_MIN_STUDENT_COUNT: () => SCHOOL_MIN_STUDENT_COUNT,
84
+ SHARE_CALENDAR_ICON: () => SHARE_CALENDAR_ICON,
85
+ SHARE_CATEGORIES_SECTION_HEADING: () => SHARE_CATEGORIES_SECTION_HEADING,
86
+ SHARE_CATEGORY_ICON: () => SHARE_CATEGORY_ICON,
87
+ SHARE_CHECKMARK_ICON: () => SHARE_CHECKMARK_ICON,
83
88
  SHARE_DESCRIPTION_SECTION_BREAK: () => SHARE_DESCRIPTION_SECTION_BREAK,
84
89
  SHARE_DESCRIPTION_SECTION_SEPARATOR: () => SHARE_DESCRIPTION_SECTION_SEPARATOR,
90
+ SHARE_MARKET_DATES_SECTION_HEADING: () => SHARE_MARKET_DATES_SECTION_HEADING,
91
+ SHARE_REQUIREMENTS_SECTION_HEADING: () => SHARE_REQUIREMENTS_SECTION_HEADING,
85
92
  SHARE_RESOURCE_LABEL: () => SHARE_RESOURCE_LABEL,
86
93
  SHARE_SITE_URL: () => SHARE_SITE_URL,
87
94
  SHARE_TYPE_PATH_REGEX: () => SHARE_TYPE_PATH_REGEX,
@@ -97,6 +104,7 @@ __export(index_exports, {
97
104
  buildFacebookShareQuote: () => buildFacebookShareQuote,
98
105
  buildInvitationShareDescription: () => buildInvitationShareDescription,
99
106
  buildShareOgDescription: () => buildShareOgDescription,
107
+ buildShareOgDescriptionFromSections: () => buildShareOgDescriptionFromSections,
100
108
  buildSharePagePath: () => buildSharePagePath,
101
109
  buildShareUrl: () => buildShareUrl,
102
110
  capitalizeFirstLetter: () => capitalizeFirstLetter,
@@ -127,6 +135,10 @@ __export(index_exports, {
127
135
  foodFlavourOptions: () => foodFlavourOptions,
128
136
  formatCategoryLabel: () => formatCategoryLabel,
129
137
  formatDate: () => formatDate,
138
+ formatShareApplicationCategoriesSection: () => formatShareApplicationCategoriesSection,
139
+ formatShareInvitationMarketDatesSection: () => formatShareInvitationMarketDatesSection,
140
+ formatShareInvitationRequirementsSection: () => formatShareInvitationRequirementsSection,
141
+ formatShareMarketDate: () => formatShareMarketDate,
130
142
  formatShareSectionsForCompactDisplay: () => formatShareSectionsForCompactDisplay,
131
143
  formatShareSectionsForMultilineDisplay: () => formatShareSectionsForMultilineDisplay,
132
144
  formatStallCapacityLabel: () => formatStallCapacityLabel,
@@ -143,6 +155,7 @@ __export(index_exports, {
143
155
  isPostShareResourceType: () => isPostShareResourceType,
144
156
  isRelationShareResourceType: () => isRelationShareResourceType,
145
157
  joinShareDescriptionSections: () => joinShareDescriptionSections,
158
+ joinShareOgDescriptionSections: () => joinShareOgDescriptionSections,
146
159
  licenseNiceNames: () => licenseNiceNames,
147
160
  lightColors: () => lightColors,
148
161
  loginFields: () => loginFields,
@@ -177,6 +190,7 @@ __export(index_exports, {
177
190
  seededShuffle: () => seededShuffle,
178
191
  socialMediaFields: () => socialMediaFields,
179
192
  sortDatesChronologically: () => sortDatesChronologically,
193
+ splitShareDescriptionSections: () => splitShareDescriptionSections,
180
194
  stallTypeOptions: () => stallTypeOptions,
181
195
  statusOptions: () => statusOptions,
182
196
  tagOptions: () => tagOptions,
@@ -8829,6 +8843,54 @@ var otherImages = Object.fromEntries(
8829
8843
  Object.entries(otherImagesFiles).map(([key, file]) => [key, `${PKG}/images/${file}`])
8830
8844
  );
8831
8845
 
8846
+ // src/sharing/relationShareTypes.ts
8847
+ var RELATION_SHARE_INVITATION = "invitation";
8848
+ var RELATION_SHARE_APPLICATION = "application";
8849
+ var RELATION_SHARE_RESOURCE_TYPES = [
8850
+ RELATION_SHARE_INVITATION,
8851
+ RELATION_SHARE_APPLICATION
8852
+ ];
8853
+ function isRelationShareResourceType(resourceType) {
8854
+ return RELATION_SHARE_RESOURCE_TYPES.includes(
8855
+ resourceType
8856
+ );
8857
+ }
8858
+
8859
+ // src/sharing/constants.ts
8860
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
8861
+ var SHARE_CALENDAR_ICON = "\u{1F4C5}";
8862
+ var SHARE_MARKET_DATES_SECTION_HEADING = `${SHARE_CALENDAR_ICON} Market dates:`;
8863
+ var SHARE_CHECKMARK_ICON = "\u2705";
8864
+ var SHARE_REQUIREMENTS_SECTION_HEADING = `${SHARE_CHECKMARK_ICON} Requirements:`;
8865
+ var SHARE_CATEGORY_ICON = "\u{1F3F7}\uFE0F";
8866
+ var SHARE_CATEGORIES_SECTION_HEADING = `${SHARE_CATEGORY_ICON} Categories:`;
8867
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
8868
+ var RESOURCE_SHARE_TYPES = [
8869
+ "market",
8870
+ "stallholder",
8871
+ "partner"
8872
+ ];
8873
+ var POST_SHARE_RESOURCE_TYPES = [
8874
+ "daily_meets",
8875
+ "daily_tips",
8876
+ "daily_games"
8877
+ ];
8878
+ var SHARE_RESOURCE_LABEL = {
8879
+ [RELATION_SHARE_APPLICATION]: "Application",
8880
+ [RELATION_SHARE_INVITATION]: "Invitation",
8881
+ daily_games: "Daily Game",
8882
+ daily_meets: "Daily Meet",
8883
+ daily_tips: "Daily Tip",
8884
+ market: "Market",
8885
+ partner: "Partner",
8886
+ stallholder: "Stallholder"
8887
+ };
8888
+ function isPostShareResourceType(resourceType) {
8889
+ return POST_SHARE_RESOURCE_TYPES.includes(
8890
+ resourceType
8891
+ );
8892
+ }
8893
+
8832
8894
  // src/sharing/formatCategoryLabel.ts
8833
8895
  function formatCategoryLabel(category) {
8834
8896
  const subcategoryNames = category.subcategories.map((subcategory) => subcategory.name).filter(Boolean);
@@ -8841,25 +8903,43 @@ function formatCategoryLabel(category) {
8841
8903
  // src/sharing/joinShareDescriptionSections.ts
8842
8904
  var SHARE_DESCRIPTION_SECTION_SEPARATOR = " \xB7 ";
8843
8905
  var SHARE_DESCRIPTION_SECTION_BREAK = "\n\n";
8906
+ var OG_DESCRIPTION_LINE_BREAK = "
";
8907
+ function joinShareOgDescriptionSections(sections) {
8908
+ return sections.map((section) => typeof section === "string" ? section.trim() : "").filter((section) => section.length > 0).join(OG_DESCRIPTION_LINE_BREAK);
8909
+ }
8844
8910
  function joinShareDescriptionSections(sections) {
8845
8911
  return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_BREAK);
8846
8912
  }
8847
8913
 
8848
8914
  // src/sharing/buildRelationShareDescription.ts
8849
- function formatShareDate(isoDate) {
8850
- try {
8851
- return new Intl.DateTimeFormat("en-NZ", {
8852
- day: "numeric",
8853
- month: "short",
8854
- year: "numeric"
8855
- }).format(new Date(isoDate));
8856
- } catch {
8857
- return isoDate;
8858
- }
8915
+ function formatShareMarketDate(dateStr) {
8916
+ return formatDate(dateStr, "date");
8859
8917
  }
8860
8918
  function formatStallCapacityLabel(stallCapacity) {
8861
8919
  return stallCapacity > 0 ? ` (${stallCapacity} spaces available)` : " - Full";
8862
8920
  }
8921
+ function formatShareStallLine(stall) {
8922
+ return ` - ${stall.label} \u2014 $${stall.price}${formatStallCapacityLabel(stall.stallCapacity)}`;
8923
+ }
8924
+ function formatShareInvitationMarketDatesSection(dateTime) {
8925
+ const dateBlocks = dateTime.map((date3) => {
8926
+ const formattedDate = formatShareMarketDate(date3.startDate);
8927
+ const stallLines = date3.stallTypes.map(formatShareStallLine);
8928
+ return [`- ${formattedDate}`, ...stallLines].join("\n");
8929
+ });
8930
+ return `${SHARE_MARKET_DATES_SECTION_HEADING}
8931
+ ${dateBlocks.join("\n")}`;
8932
+ }
8933
+ function formatShareInvitationRequirementsSection(requirementLabels) {
8934
+ const bullets = requirementLabels.map((label) => `- ${label}`);
8935
+ return `${SHARE_REQUIREMENTS_SECTION_HEADING}
8936
+ ${bullets.join("\n")}`;
8937
+ }
8938
+ function formatShareApplicationCategoriesSection(categoryLabels) {
8939
+ const bullets = categoryLabels.map((label) => `- ${label}`);
8940
+ return `${SHARE_CATEGORIES_SECTION_HEADING}
8941
+ ${bullets.join("\n")}`;
8942
+ }
8863
8943
  function buildInvitationShareDescription(event, eventInfo2) {
8864
8944
  const stallTypes2 = eventInfo2?.dateTime?.flatMap((date3) => date3.stallTypes) ?? [];
8865
8945
  if (!eventInfo2 || stallTypes2.length === 0) {
@@ -8868,15 +8948,9 @@ function buildInvitationShareDescription(event, eventInfo2) {
8868
8948
  const requirementLabels = (eventInfo2.requirements ?? []).filter((item) => item.value).map((item) => item.label);
8869
8949
  const sections = [
8870
8950
  event.location.fullAddress,
8871
- ...event.dateTime.map((date3) => {
8872
- const start = formatShareDate(date3.startDate);
8873
- return `Market date: ${start}`;
8874
- }),
8951
+ formatShareInvitationMarketDatesSection(eventInfo2.dateTime),
8875
8952
  `Application deadline: vendors must apply at least ${eventInfo2.applicationDeadlineHours} hours before each market date.`,
8876
- ...stallTypes2.map(
8877
- (stall) => `Stall: ${stall.label} \u2014 $${stall.price}${formatStallCapacityLabel(stall.stallCapacity)}`
8878
- ),
8879
- requirementLabels.length > 0 && `Requirements: ${requirementLabels.join(", ")}`
8953
+ requirementLabels.length > 0 && formatShareInvitationRequirementsSection(requirementLabels)
8880
8954
  ];
8881
8955
  return joinShareDescriptionSections(sections);
8882
8956
  }
@@ -8894,57 +8968,15 @@ function buildApplicationShareDescription(vendor, vendorInfo) {
8894
8968
  ].filter(Boolean);
8895
8969
  const profileDescription = vendor.description?.trim();
8896
8970
  const sections = [
8897
- categoryLabels.length > 0 && `Categories: ${categoryLabels.join(", ")}`,
8971
+ categoryLabels.length > 0 && formatShareApplicationCategoriesSection(categoryLabels),
8898
8972
  `Stall size: ${vendorInfo.stallInfo.size.width}m \xD7 ${vendorInfo.stallInfo.size.depth}m`,
8899
- `Compliance: ${complianceLabels.length > 0 ? complianceLabels.join(", ") : "Not specified"}`,
8973
+ complianceLabels.length > 0 && `Compliance: ${complianceLabels.join(", ")}`,
8900
8974
  `Price range: $${vendorInfo.product.priceRange.min} \u2013 $${vendorInfo.product.priceRange.max}`,
8901
8975
  profileDescription
8902
8976
  ];
8903
8977
  return joinShareDescriptionSections(sections);
8904
8978
  }
8905
8979
 
8906
- // src/sharing/relationShareTypes.ts
8907
- var RELATION_SHARE_INVITATION = "invitation";
8908
- var RELATION_SHARE_APPLICATION = "application";
8909
- var RELATION_SHARE_RESOURCE_TYPES = [
8910
- RELATION_SHARE_INVITATION,
8911
- RELATION_SHARE_APPLICATION
8912
- ];
8913
- function isRelationShareResourceType(resourceType) {
8914
- return RELATION_SHARE_RESOURCE_TYPES.includes(
8915
- resourceType
8916
- );
8917
- }
8918
-
8919
- // src/sharing/constants.ts
8920
- var SHARE_SITE_URL = "https://cluemart.co.nz";
8921
- var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
8922
- var RESOURCE_SHARE_TYPES = [
8923
- "market",
8924
- "stallholder",
8925
- "partner"
8926
- ];
8927
- var POST_SHARE_RESOURCE_TYPES = [
8928
- "daily_meets",
8929
- "daily_tips",
8930
- "daily_games"
8931
- ];
8932
- var SHARE_RESOURCE_LABEL = {
8933
- [RELATION_SHARE_APPLICATION]: "Application",
8934
- [RELATION_SHARE_INVITATION]: "Invitation",
8935
- daily_games: "Daily Game",
8936
- daily_meets: "Daily Meet",
8937
- daily_tips: "Daily Tip",
8938
- market: "Market",
8939
- partner: "Partner",
8940
- stallholder: "Stallholder"
8941
- };
8942
- function isPostShareResourceType(resourceType) {
8943
- return POST_SHARE_RESOURCE_TYPES.includes(
8944
- resourceType
8945
- );
8946
- }
8947
-
8948
8980
  // src/sharing/buildShareUrl.ts
8949
8981
  var PUBLIC_SHARE_PATH_TYPES = [
8950
8982
  ...RESOURCE_SHARE_TYPES,
@@ -8966,7 +8998,14 @@ function normalizeShareSection(value) {
8966
8998
  if (value == null) {
8967
8999
  return "";
8968
9000
  }
8969
- return value.trim().split("\n").map((line) => line.trim().replace(/[ \t]+/g, " ")).join("\n").replace(/\n{3,}/g, "\n\n");
9001
+ return value.trim().split("\n").map((line) => {
9002
+ const match = line.match(/^([ \t]*)(.*)$/);
9003
+ if (!match) {
9004
+ return line;
9005
+ }
9006
+ const [, leading, rest] = match;
9007
+ return leading + rest.trim().replace(/[ \t]{2,}/g, " ");
9008
+ }).join("\n").replace(/\n{3,}/g, "\n\n");
8970
9009
  }
8971
9010
  function stripLegacyBulletPrefix(section) {
8972
9011
  return section.startsWith(LEGACY_BULLET_PREFIX) ? section.slice(LEGACY_BULLET_PREFIX.length) : section;
@@ -9001,14 +9040,7 @@ function formatShareSectionsForCompactDisplay(value) {
9001
9040
  );
9002
9041
  }
9003
9042
  function normalizeShareOgDescription(value) {
9004
- const trimmed = value.trim();
9005
- if (!trimmed) {
9006
- return "";
9007
- }
9008
- if (/\n\n/.test(trimmed) || trimmed.includes(SHARE_DESCRIPTION_SECTION_SEPARATOR)) {
9009
- return formatShareSectionsForCompactDisplay(trimmed);
9010
- }
9011
- return trimmed.replace(/\s+/g, " ").trim();
9043
+ return joinShareOgDescriptionSections(splitShareDescriptionSections(value));
9012
9044
  }
9013
9045
  function buildFacebookShareQuote(title, description) {
9014
9046
  const titleSection = normalizeShareSection(title);
@@ -9019,8 +9051,11 @@ function buildFacebookShareQuote(title, description) {
9019
9051
  const quote = sections.join(SHARE_DESCRIPTION_SECTION_BREAK).trim();
9020
9052
  return quote.length > 0 ? quote : void 0;
9021
9053
  }
9054
+ function buildShareOgDescriptionFromSections(sections) {
9055
+ return joinShareOgDescriptionSections(sections);
9056
+ }
9022
9057
  function buildShareOgDescription(_title, description) {
9023
- return normalizeShareOgDescription(description);
9058
+ return joinShareOgDescriptionSections(splitShareDescriptionSections(description));
9024
9059
  }
9025
9060
 
9026
9061
  // src/sharing/normalizeShareRouteId.ts
@@ -9161,6 +9196,7 @@ var gameTypeToDisplayName = {
9161
9196
  IMAGE_EXTENSION,
9162
9197
  IOS_URL,
9163
9198
  ImageTypeEnum,
9199
+ OG_DESCRIPTION_LINE_BREAK,
9164
9200
  POST_SHARE_RESOURCE_TYPES,
9165
9201
  PROMO_CODE_PREFIX,
9166
9202
  PUBLIC_SHARE_PATH_TYPES,
@@ -9175,8 +9211,14 @@ var gameTypeToDisplayName = {
9175
9211
  SAVED_TOKEN_KEY,
9176
9212
  SCHOOL_MAX_STUDENT_COUNT,
9177
9213
  SCHOOL_MIN_STUDENT_COUNT,
9214
+ SHARE_CALENDAR_ICON,
9215
+ SHARE_CATEGORIES_SECTION_HEADING,
9216
+ SHARE_CATEGORY_ICON,
9217
+ SHARE_CHECKMARK_ICON,
9178
9218
  SHARE_DESCRIPTION_SECTION_BREAK,
9179
9219
  SHARE_DESCRIPTION_SECTION_SEPARATOR,
9220
+ SHARE_MARKET_DATES_SECTION_HEADING,
9221
+ SHARE_REQUIREMENTS_SECTION_HEADING,
9180
9222
  SHARE_RESOURCE_LABEL,
9181
9223
  SHARE_SITE_URL,
9182
9224
  SHARE_TYPE_PATH_REGEX,
@@ -9192,6 +9234,7 @@ var gameTypeToDisplayName = {
9192
9234
  buildFacebookShareQuote,
9193
9235
  buildInvitationShareDescription,
9194
9236
  buildShareOgDescription,
9237
+ buildShareOgDescriptionFromSections,
9195
9238
  buildSharePagePath,
9196
9239
  buildShareUrl,
9197
9240
  capitalizeFirstLetter,
@@ -9222,6 +9265,10 @@ var gameTypeToDisplayName = {
9222
9265
  foodFlavourOptions,
9223
9266
  formatCategoryLabel,
9224
9267
  formatDate,
9268
+ formatShareApplicationCategoriesSection,
9269
+ formatShareInvitationMarketDatesSection,
9270
+ formatShareInvitationRequirementsSection,
9271
+ formatShareMarketDate,
9225
9272
  formatShareSectionsForCompactDisplay,
9226
9273
  formatShareSectionsForMultilineDisplay,
9227
9274
  formatStallCapacityLabel,
@@ -9238,6 +9285,7 @@ var gameTypeToDisplayName = {
9238
9285
  isPostShareResourceType,
9239
9286
  isRelationShareResourceType,
9240
9287
  joinShareDescriptionSections,
9288
+ joinShareOgDescriptionSections,
9241
9289
  licenseNiceNames,
9242
9290
  lightColors,
9243
9291
  loginFields,
@@ -9272,6 +9320,7 @@ var gameTypeToDisplayName = {
9272
9320
  seededShuffle,
9273
9321
  socialMediaFields,
9274
9322
  sortDatesChronologically,
9323
+ splitShareDescriptionSections,
9275
9324
  stallTypeOptions,
9276
9325
  statusOptions,
9277
9326
  tagOptions,