@timardex/cluemart-shared 1.5.587 → 1.5.590

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
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
33
  ANDROID_URL: () => ANDROID_URL,
34
+ DEFAULT_SHARE_OG_IMAGE: () => DEFAULT_SHARE_OG_IMAGE,
34
35
  EnumActivity: () => EnumActivity,
35
36
  EnumAdShowOn: () => EnumAdShowOn,
36
37
  EnumAdStatus: () => EnumAdStatus,
@@ -65,13 +66,25 @@ __export(index_exports, {
65
66
  IMAGE_EXTENSION: () => IMAGE_EXTENSION,
66
67
  IOS_URL: () => IOS_URL,
67
68
  ImageTypeEnum: () => ImageTypeEnum,
69
+ POST_SHARE_RESOURCE_TYPES: () => POST_SHARE_RESOURCE_TYPES,
68
70
  PROMO_CODE_PREFIX: () => PROMO_CODE_PREFIX,
71
+ PUBLIC_SHARE_PATH_TYPES: () => PUBLIC_SHARE_PATH_TYPES,
72
+ RELATION_SHARE_APPLICATION: () => RELATION_SHARE_APPLICATION,
73
+ RELATION_SHARE_INVITATION: () => RELATION_SHARE_INVITATION,
74
+ RELATION_SHARE_RESOURCE_TYPES: () => RELATION_SHARE_RESOURCE_TYPES,
75
+ RESOURCE_SHARE_TYPES: () => RESOURCE_SHARE_TYPES,
76
+ RESOURCE_SHARE_TYPES_FOR_URL: () => RESOURCE_SHARE_TYPES_FOR_URL,
69
77
  SAVED_EMAIL_KEY: () => SAVED_EMAIL_KEY,
70
78
  SAVED_PASSWORD_KEY: () => SAVED_PASSWORD_KEY,
71
79
  SAVED_REFRESH_TOKEN_KEY: () => SAVED_REFRESH_TOKEN_KEY,
72
80
  SAVED_TOKEN_KEY: () => SAVED_TOKEN_KEY,
73
81
  SCHOOL_MAX_STUDENT_COUNT: () => SCHOOL_MAX_STUDENT_COUNT,
74
82
  SCHOOL_MIN_STUDENT_COUNT: () => SCHOOL_MIN_STUDENT_COUNT,
83
+ SHARE_COMPACT_SECTION_SEPARATOR: () => SHARE_COMPACT_SECTION_SEPARATOR,
84
+ SHARE_DESCRIPTION_SECTION_SEPARATOR: () => SHARE_DESCRIPTION_SECTION_SEPARATOR,
85
+ SHARE_RESOURCE_LABEL: () => SHARE_RESOURCE_LABEL,
86
+ SHARE_SITE_URL: () => SHARE_SITE_URL,
87
+ SHARE_TYPE_PATH_REGEX: () => SHARE_TYPE_PATH_REGEX,
75
88
  USER_STORAGE_KEY: () => USER_STORAGE_KEY,
76
89
  availableCategories: () => availableCategories,
77
90
  availableRegionOptions: () => availableRegionOptions,
@@ -80,6 +93,11 @@ __export(index_exports, {
80
93
  badgeFiles: () => badgeFiles,
81
94
  badgeIds: () => badgeIds,
82
95
  badges: () => badges,
96
+ buildApplicationShareDescription: () => buildApplicationShareDescription,
97
+ buildFacebookShareQuote: () => buildFacebookShareQuote,
98
+ buildInvitationShareDescription: () => buildInvitationShareDescription,
99
+ buildSharePagePath: () => buildSharePagePath,
100
+ buildShareUrl: () => buildShareUrl,
83
101
  capitalizeFirstLetter: () => capitalizeFirstLetter,
84
102
  categoryColors: () => categoryColors,
85
103
  cluemartSocialMedia: () => cluemartSocialMedia,
@@ -106,7 +124,9 @@ __export(index_exports, {
106
124
  eventStartDateFields: () => eventStartDateFields,
107
125
  fonts: () => fonts,
108
126
  foodFlavourOptions: () => foodFlavourOptions,
127
+ formatCategoryLabel: () => formatCategoryLabel,
109
128
  formatDate: () => formatDate,
129
+ formatShareSectionsForCompactDisplay: () => formatShareSectionsForCompactDisplay,
110
130
  formatTimestamp: () => formatTimestamp,
111
131
  gameScreenIdentifierList: () => gameScreenIdentifierList,
112
132
  gameTypeToDisplayName: () => gameTypeToDisplayName,
@@ -117,6 +137,9 @@ __export(index_exports, {
117
137
  icons: () => icons,
118
138
  isFutureDatesBeforeThreshold: () => isFutureDatesBeforeThreshold,
119
139
  isIsoDateString: () => isIsoDateString,
140
+ isPostShareResourceType: () => isPostShareResourceType,
141
+ isRelationShareResourceType: () => isRelationShareResourceType,
142
+ joinShareDescriptionSections: () => joinShareDescriptionSections,
120
143
  licenseNiceNames: () => licenseNiceNames,
121
144
  lightColors: () => lightColors,
122
145
  loginFields: () => loginFields,
@@ -125,6 +148,8 @@ __export(index_exports, {
125
148
  logos: () => logos,
126
149
  mapArrayToOptions: () => mapArrayToOptions,
127
150
  mapBaseResourceTypeToFormData: () => mapBaseResourceTypeToFormData,
151
+ normalizeShareOgDescription: () => normalizeShareOgDescription,
152
+ normalizeShareRouteId: () => normalizeShareRouteId,
128
153
  normalizeUrl: () => normalizeUrl,
129
154
  nzStartOfDay: () => nzStartOfDay,
130
155
  otherImages: () => otherImages,
@@ -8801,6 +8826,182 @@ var otherImages = Object.fromEntries(
8801
8826
  Object.entries(otherImagesFiles).map(([key, file]) => [key, `${PKG}/images/${file}`])
8802
8827
  );
8803
8828
 
8829
+ // src/sharing/formatCategoryLabel.ts
8830
+ function formatCategoryLabel(category) {
8831
+ const subcategoryNames = category.subcategories.map((subcategory) => subcategory.name).filter(Boolean);
8832
+ if (subcategoryNames.length === 0) {
8833
+ return category.name;
8834
+ }
8835
+ return `${category.name} (${subcategoryNames.join(", ")})`;
8836
+ }
8837
+
8838
+ // src/sharing/joinShareDescriptionSections.ts
8839
+ var SHARE_DESCRIPTION_SECTION_SEPARATOR = " \xB7 ";
8840
+ var SHARE_COMPACT_SECTION_SEPARATOR = SHARE_DESCRIPTION_SECTION_SEPARATOR;
8841
+ function joinShareDescriptionSections(sections) {
8842
+ return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
8843
+ }
8844
+
8845
+ // src/sharing/buildRelationShareDescription.ts
8846
+ function formatShareDate(isoDate) {
8847
+ try {
8848
+ return new Intl.DateTimeFormat("en-NZ", {
8849
+ day: "numeric",
8850
+ month: "short",
8851
+ year: "numeric"
8852
+ }).format(new Date(isoDate));
8853
+ } catch {
8854
+ return isoDate;
8855
+ }
8856
+ }
8857
+ function buildInvitationShareDescription(event, eventInfo2) {
8858
+ const stallTypes2 = eventInfo2?.dateTime?.flatMap((date3) => date3.stallTypes) ?? [];
8859
+ if (!eventInfo2 || stallTypes2.length === 0) {
8860
+ return event.description?.trim() || "";
8861
+ }
8862
+ const requirementLabels = (eventInfo2.requirements ?? []).filter((item) => item.value).map((item) => item.label);
8863
+ const sections = [
8864
+ event.location.fullAddress,
8865
+ ...event.dateTime.map((date3) => {
8866
+ const start = formatShareDate(date3.startDate);
8867
+ const end = date3.endDate ? ` \u2013 ${formatShareDate(date3.endDate)}` : "";
8868
+ return `Market date: ${start}${end}`;
8869
+ }),
8870
+ `Application deadline: vendors must apply at least ${eventInfo2.applicationDeadlineHours} hours before each market date.`,
8871
+ ...stallTypes2.map(
8872
+ (stall) => `Stall: ${stall.label} \u2014 $${stall.price} (${stall.stallCapacity} spaces)`
8873
+ ),
8874
+ requirementLabels.length > 0 && `Requirements: ${requirementLabels.join(", ")}`
8875
+ ];
8876
+ return joinShareDescriptionSections(sections);
8877
+ }
8878
+ function buildApplicationShareDescription(vendor, vendorInfo) {
8879
+ const categoryLabels = vendor.categories.map(
8880
+ (category) => formatCategoryLabel(category)
8881
+ );
8882
+ if (!vendorInfo) {
8883
+ return vendor.description?.trim() || "";
8884
+ }
8885
+ const compliance = vendorInfo.compliance;
8886
+ const complianceLabels = [
8887
+ compliance?.liabilityInsurance && "Liability insurance",
8888
+ compliance?.foodBeverageLicense && "Food & beverage licence"
8889
+ ].filter(Boolean);
8890
+ const profileDescription = vendor.description?.trim();
8891
+ const sections = [
8892
+ categoryLabels.length > 0 && `Categories: ${categoryLabels.join(", ")}`,
8893
+ `Stall size: ${vendorInfo.stallInfo.size.width}m \xD7 ${vendorInfo.stallInfo.size.depth}m`,
8894
+ `Compliance: ${complianceLabels.length > 0 ? complianceLabels.join(", ") : "Not specified"}`,
8895
+ `Price range: $${vendorInfo.product.priceRange.min} \u2013 $${vendorInfo.product.priceRange.max}`,
8896
+ profileDescription
8897
+ ];
8898
+ return joinShareDescriptionSections(sections);
8899
+ }
8900
+
8901
+ // src/sharing/relationShareTypes.ts
8902
+ var RELATION_SHARE_INVITATION = "invitation";
8903
+ var RELATION_SHARE_APPLICATION = "application";
8904
+ var RELATION_SHARE_RESOURCE_TYPES = [
8905
+ RELATION_SHARE_INVITATION,
8906
+ RELATION_SHARE_APPLICATION
8907
+ ];
8908
+ function isRelationShareResourceType(resourceType) {
8909
+ return RELATION_SHARE_RESOURCE_TYPES.includes(
8910
+ resourceType
8911
+ );
8912
+ }
8913
+
8914
+ // src/sharing/constants.ts
8915
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
8916
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
8917
+ var RESOURCE_SHARE_TYPES = [
8918
+ "market",
8919
+ "stallholder",
8920
+ "partner"
8921
+ ];
8922
+ var POST_SHARE_RESOURCE_TYPES = [
8923
+ "daily_meets",
8924
+ "daily_tips",
8925
+ "daily_games"
8926
+ ];
8927
+ var SHARE_RESOURCE_LABEL = {
8928
+ [RELATION_SHARE_APPLICATION]: "Application",
8929
+ [RELATION_SHARE_INVITATION]: "Invitation",
8930
+ daily_games: "Daily Game",
8931
+ daily_meets: "Daily Meet",
8932
+ daily_tips: "Daily Tip",
8933
+ market: "Market",
8934
+ partner: "Partner",
8935
+ stallholder: "Stallholder"
8936
+ };
8937
+ function isPostShareResourceType(resourceType) {
8938
+ return POST_SHARE_RESOURCE_TYPES.includes(
8939
+ resourceType
8940
+ );
8941
+ }
8942
+
8943
+ // src/sharing/buildShareUrl.ts
8944
+ var PUBLIC_SHARE_PATH_TYPES = [
8945
+ ...RESOURCE_SHARE_TYPES,
8946
+ ...POST_SHARE_RESOURCE_TYPES
8947
+ ];
8948
+ var RESOURCE_SHARE_TYPES_FOR_URL = PUBLIC_SHARE_PATH_TYPES;
8949
+ var SHARE_TYPE_PATH_REGEX = [
8950
+ ...PUBLIC_SHARE_PATH_TYPES,
8951
+ RELATION_SHARE_APPLICATION,
8952
+ RELATION_SHARE_INVITATION
8953
+ ].join("|");
8954
+ function buildShareUrl(type, id) {
8955
+ return `${SHARE_SITE_URL}/share/${type}/${encodeURIComponent(id)}`;
8956
+ }
8957
+
8958
+ // src/sharing/normalizeShareDescription.ts
8959
+ function normalizeShareSection(value) {
8960
+ if (value == null) {
8961
+ return "";
8962
+ }
8963
+ return value.trim().split("\n").map((line) => line.trim().replace(/[ \t]+/g, " ")).join("\n").replace(/\n{3,}/g, "\n\n");
8964
+ }
8965
+ function normalizeShareOgDescription(value) {
8966
+ const trimmed = value.trim();
8967
+ if (!trimmed) {
8968
+ return "";
8969
+ }
8970
+ if (/\n\n/.test(trimmed)) {
8971
+ return trimmed.split(/\n\n+/).map((section) => section.replace(/\s+/g, " ").trim()).filter(Boolean).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
8972
+ }
8973
+ return trimmed.replace(/\s+/g, " ").trim();
8974
+ }
8975
+ function formatShareSectionsForCompactDisplay(value) {
8976
+ const trimmed = value.trim();
8977
+ if (!trimmed) {
8978
+ return "";
8979
+ }
8980
+ if (!/\n\n/.test(trimmed)) {
8981
+ return normalizeShareSection(trimmed);
8982
+ }
8983
+ return trimmed.split(/\n\n+/).map((section) => normalizeShareSection(section)).filter((section) => section.length > 0).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
8984
+ }
8985
+ function buildFacebookShareQuote(title, description) {
8986
+ const titlePart = normalizeShareSection(title);
8987
+ const descriptionPart = normalizeShareSection(description);
8988
+ const bodyPart = descriptionPart ? formatShareSectionsForCompactDisplay(descriptionPart) : "";
8989
+ const parts = [titlePart, bodyPart].filter((part) => part.length > 0);
8990
+ return parts.length > 0 ? parts.join(SHARE_DESCRIPTION_SECTION_SEPARATOR) : void 0;
8991
+ }
8992
+
8993
+ // src/sharing/normalizeShareRouteId.ts
8994
+ function normalizeShareRouteId(id) {
8995
+ try {
8996
+ return decodeURIComponent(id);
8997
+ } catch {
8998
+ return id;
8999
+ }
9000
+ }
9001
+ function buildSharePagePath(resourceType, rawId) {
9002
+ return `/share/${resourceType}/${encodeURIComponent(normalizeShareRouteId(rawId))}`;
9003
+ }
9004
+
8804
9005
  // src/storage/index.ts
8805
9006
  var SAVED_PASSWORD_KEY = "savedPassword";
8806
9007
  var SAVED_EMAIL_KEY = "savedEmail";
@@ -8892,6 +9093,7 @@ var gameTypeToDisplayName = {
8892
9093
  // Annotate the CommonJS export names for ESM import in node:
8893
9094
  0 && (module.exports = {
8894
9095
  ANDROID_URL,
9096
+ DEFAULT_SHARE_OG_IMAGE,
8895
9097
  EnumActivity,
8896
9098
  EnumAdShowOn,
8897
9099
  EnumAdStatus,
@@ -8926,13 +9128,25 @@ var gameTypeToDisplayName = {
8926
9128
  IMAGE_EXTENSION,
8927
9129
  IOS_URL,
8928
9130
  ImageTypeEnum,
9131
+ POST_SHARE_RESOURCE_TYPES,
8929
9132
  PROMO_CODE_PREFIX,
9133
+ PUBLIC_SHARE_PATH_TYPES,
9134
+ RELATION_SHARE_APPLICATION,
9135
+ RELATION_SHARE_INVITATION,
9136
+ RELATION_SHARE_RESOURCE_TYPES,
9137
+ RESOURCE_SHARE_TYPES,
9138
+ RESOURCE_SHARE_TYPES_FOR_URL,
8930
9139
  SAVED_EMAIL_KEY,
8931
9140
  SAVED_PASSWORD_KEY,
8932
9141
  SAVED_REFRESH_TOKEN_KEY,
8933
9142
  SAVED_TOKEN_KEY,
8934
9143
  SCHOOL_MAX_STUDENT_COUNT,
8935
9144
  SCHOOL_MIN_STUDENT_COUNT,
9145
+ SHARE_COMPACT_SECTION_SEPARATOR,
9146
+ SHARE_DESCRIPTION_SECTION_SEPARATOR,
9147
+ SHARE_RESOURCE_LABEL,
9148
+ SHARE_SITE_URL,
9149
+ SHARE_TYPE_PATH_REGEX,
8936
9150
  USER_STORAGE_KEY,
8937
9151
  availableCategories,
8938
9152
  availableRegionOptions,
@@ -8941,6 +9155,11 @@ var gameTypeToDisplayName = {
8941
9155
  badgeFiles,
8942
9156
  badgeIds,
8943
9157
  badges,
9158
+ buildApplicationShareDescription,
9159
+ buildFacebookShareQuote,
9160
+ buildInvitationShareDescription,
9161
+ buildSharePagePath,
9162
+ buildShareUrl,
8944
9163
  capitalizeFirstLetter,
8945
9164
  categoryColors,
8946
9165
  cluemartSocialMedia,
@@ -8967,7 +9186,9 @@ var gameTypeToDisplayName = {
8967
9186
  eventStartDateFields,
8968
9187
  fonts,
8969
9188
  foodFlavourOptions,
9189
+ formatCategoryLabel,
8970
9190
  formatDate,
9191
+ formatShareSectionsForCompactDisplay,
8971
9192
  formatTimestamp,
8972
9193
  gameScreenIdentifierList,
8973
9194
  gameTypeToDisplayName,
@@ -8978,6 +9199,9 @@ var gameTypeToDisplayName = {
8978
9199
  icons,
8979
9200
  isFutureDatesBeforeThreshold,
8980
9201
  isIsoDateString,
9202
+ isPostShareResourceType,
9203
+ isRelationShareResourceType,
9204
+ joinShareDescriptionSections,
8981
9205
  licenseNiceNames,
8982
9206
  lightColors,
8983
9207
  loginFields,
@@ -8986,6 +9210,8 @@ var gameTypeToDisplayName = {
8986
9210
  logos,
8987
9211
  mapArrayToOptions,
8988
9212
  mapBaseResourceTypeToFormData,
9213
+ normalizeShareOgDescription,
9214
+ normalizeShareRouteId,
8989
9215
  normalizeUrl,
8990
9216
  nzStartOfDay,
8991
9217
  otherImages,