@timardex/cluemart-shared 1.5.587 → 1.5.589

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  mapArrayToOptions
3
- } from "./chunk-L74HNX7U.mjs";
3
+ } from "./chunk-YV2JDG4R.mjs";
4
4
  import {
5
5
  EnumFoodFlavor
6
6
  } from "./chunk-ZR4TGWTS.mjs";
@@ -1952,4 +1952,4 @@ export {
1952
1952
  contactUsFields,
1953
1953
  partnerBasicInfoFields
1954
1954
  };
1955
- //# sourceMappingURL=chunk-IMTMBZI7.mjs.map
1955
+ //# sourceMappingURL=chunk-2NQUR2AV.mjs.map
@@ -0,0 +1,204 @@
1
+ // src/sharing/formatCategoryLabel.ts
2
+ function formatCategoryLabel(category) {
3
+ const subcategoryNames = category.subcategories.map((subcategory) => subcategory.name).filter(Boolean);
4
+ if (subcategoryNames.length === 0) {
5
+ return category.name;
6
+ }
7
+ return `${category.name} (${subcategoryNames.join(", ")})`;
8
+ }
9
+
10
+ // src/sharing/joinShareDescriptionSections.ts
11
+ var SHARE_DESCRIPTION_SECTION_SEPARATOR = " \xB7 ";
12
+ var SHARE_COMPACT_SECTION_SEPARATOR = SHARE_DESCRIPTION_SECTION_SEPARATOR;
13
+ function joinShareDescriptionSections(sections) {
14
+ return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
15
+ }
16
+
17
+ // src/sharing/buildRelationShareDescription.ts
18
+ function formatShareDate(isoDate) {
19
+ try {
20
+ return new Intl.DateTimeFormat("en-NZ", {
21
+ day: "numeric",
22
+ month: "short",
23
+ year: "numeric"
24
+ }).format(new Date(isoDate));
25
+ } catch {
26
+ return isoDate;
27
+ }
28
+ }
29
+ function buildInvitationShareDescription(event, eventInfo) {
30
+ const stallTypes = eventInfo?.dateTime?.flatMap((date) => date.stallTypes) ?? [];
31
+ if (!eventInfo || stallTypes.length === 0) {
32
+ return event.description?.trim() || "";
33
+ }
34
+ const requirementLabels = (eventInfo.requirements ?? []).filter((item) => item.value).map((item) => item.label);
35
+ const sections = [
36
+ event.location.fullAddress,
37
+ ...event.dateTime.map((date) => {
38
+ const start = formatShareDate(date.startDate);
39
+ const end = date.endDate ? ` \u2013 ${formatShareDate(date.endDate)}` : "";
40
+ return `Market date: ${start}${end}`;
41
+ }),
42
+ `Application deadline: vendors must apply at least ${eventInfo.applicationDeadlineHours} hours before each market date.`,
43
+ ...stallTypes.map(
44
+ (stall) => `Stall: ${stall.label} \u2014 $${stall.price} (${stall.stallCapacity} spaces)`
45
+ ),
46
+ requirementLabels.length > 0 && `Requirements: ${requirementLabels.join(", ")}`
47
+ ];
48
+ return joinShareDescriptionSections(sections);
49
+ }
50
+ function buildApplicationShareDescription(vendor, vendorInfo) {
51
+ const categoryLabels = vendor.categories.map(
52
+ (category) => formatCategoryLabel(category)
53
+ );
54
+ if (!vendorInfo) {
55
+ return vendor.description?.trim() || "";
56
+ }
57
+ const compliance = vendorInfo.compliance;
58
+ const complianceLabels = [
59
+ compliance?.liabilityInsurance && "Liability insurance",
60
+ compliance?.foodBeverageLicense && "Food & beverage licence"
61
+ ].filter(Boolean);
62
+ const profileDescription = vendor.description?.trim();
63
+ const sections = [
64
+ categoryLabels.length > 0 && `Categories: ${categoryLabels.join(", ")}`,
65
+ `Stall size: ${vendorInfo.stallInfo.size.width}m \xD7 ${vendorInfo.stallInfo.size.depth}m`,
66
+ `Compliance: ${complianceLabels.length > 0 ? complianceLabels.join(", ") : "Not specified"}`,
67
+ `Price range: $${vendorInfo.product.priceRange.min} \u2013 $${vendorInfo.product.priceRange.max}`,
68
+ profileDescription
69
+ ];
70
+ return joinShareDescriptionSections(sections);
71
+ }
72
+
73
+ // src/sharing/relationShareTypes.ts
74
+ var RELATION_SHARE_INVITATION = "invitation";
75
+ var RELATION_SHARE_APPLICATION = "application";
76
+ var RELATION_SHARE_RESOURCE_TYPES = [
77
+ RELATION_SHARE_INVITATION,
78
+ RELATION_SHARE_APPLICATION
79
+ ];
80
+ function isRelationShareResourceType(resourceType) {
81
+ return RELATION_SHARE_RESOURCE_TYPES.includes(
82
+ resourceType
83
+ );
84
+ }
85
+
86
+ // src/sharing/constants.ts
87
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
88
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
89
+ var RESOURCE_SHARE_TYPES = [
90
+ "market",
91
+ "stallholder",
92
+ "partner"
93
+ ];
94
+ var POST_SHARE_RESOURCE_TYPES = [
95
+ "daily_meets",
96
+ "daily_tips",
97
+ "daily_games"
98
+ ];
99
+ var SHARE_RESOURCE_LABEL = {
100
+ [RELATION_SHARE_APPLICATION]: "Application",
101
+ [RELATION_SHARE_INVITATION]: "Invitation",
102
+ daily_games: "Daily Game",
103
+ daily_meets: "Daily Meet",
104
+ daily_tips: "Daily Tip",
105
+ market: "Market",
106
+ partner: "Partner",
107
+ stallholder: "Stallholder"
108
+ };
109
+ function isPostShareResourceType(resourceType) {
110
+ return POST_SHARE_RESOURCE_TYPES.includes(
111
+ resourceType
112
+ );
113
+ }
114
+
115
+ // src/sharing/buildShareUrl.ts
116
+ var PUBLIC_SHARE_PATH_TYPES = [
117
+ ...RESOURCE_SHARE_TYPES,
118
+ ...POST_SHARE_RESOURCE_TYPES
119
+ ];
120
+ var RESOURCE_SHARE_TYPES_FOR_URL = PUBLIC_SHARE_PATH_TYPES;
121
+ var SHARE_TYPE_PATH_REGEX = [
122
+ ...PUBLIC_SHARE_PATH_TYPES,
123
+ RELATION_SHARE_APPLICATION,
124
+ RELATION_SHARE_INVITATION
125
+ ].join("|");
126
+ function buildShareUrl(type, id) {
127
+ return `${SHARE_SITE_URL}/share/${type}/${encodeURIComponent(id)}`;
128
+ }
129
+
130
+ // src/sharing/normalizeShareDescription.ts
131
+ function normalizeShareSection(value) {
132
+ if (value == null) {
133
+ return "";
134
+ }
135
+ return value.trim().split("\n").map((line) => line.trim().replace(/[ \t]+/g, " ")).join("\n").replace(/\n{3,}/g, "\n\n");
136
+ }
137
+ function normalizeShareOgDescription(value) {
138
+ const trimmed = value.trim();
139
+ if (!trimmed) {
140
+ return "";
141
+ }
142
+ if (/\n\n/.test(trimmed)) {
143
+ return trimmed.split(/\n\n+/).map((section) => section.replace(/\s+/g, " ").trim()).filter(Boolean).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
144
+ }
145
+ return trimmed.replace(/\s+/g, " ").trim();
146
+ }
147
+ function formatShareSectionsForCompactDisplay(value) {
148
+ const trimmed = value.trim();
149
+ if (!trimmed) {
150
+ return "";
151
+ }
152
+ if (!/\n\n/.test(trimmed)) {
153
+ return normalizeShareSection(trimmed);
154
+ }
155
+ return trimmed.split(/\n\n+/).map((section) => normalizeShareSection(section)).filter((section) => section.length > 0).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
156
+ }
157
+ function buildFacebookShareQuote(title, description) {
158
+ const titlePart = normalizeShareSection(title);
159
+ const descriptionPart = normalizeShareSection(description);
160
+ const bodyPart = descriptionPart ? formatShareSectionsForCompactDisplay(descriptionPart) : "";
161
+ const parts = [titlePart, bodyPart].filter((part) => part.length > 0);
162
+ return parts.length > 0 ? parts.join(SHARE_DESCRIPTION_SECTION_SEPARATOR) : void 0;
163
+ }
164
+
165
+ // src/sharing/normalizeShareRouteId.ts
166
+ function normalizeShareRouteId(id) {
167
+ try {
168
+ return decodeURIComponent(id);
169
+ } catch {
170
+ return id;
171
+ }
172
+ }
173
+ function buildSharePagePath(resourceType, rawId) {
174
+ return `/share/${resourceType}/${encodeURIComponent(normalizeShareRouteId(rawId))}`;
175
+ }
176
+
177
+ export {
178
+ formatCategoryLabel,
179
+ SHARE_DESCRIPTION_SECTION_SEPARATOR,
180
+ SHARE_COMPACT_SECTION_SEPARATOR,
181
+ joinShareDescriptionSections,
182
+ buildInvitationShareDescription,
183
+ buildApplicationShareDescription,
184
+ RELATION_SHARE_INVITATION,
185
+ RELATION_SHARE_APPLICATION,
186
+ RELATION_SHARE_RESOURCE_TYPES,
187
+ isRelationShareResourceType,
188
+ SHARE_SITE_URL,
189
+ DEFAULT_SHARE_OG_IMAGE,
190
+ RESOURCE_SHARE_TYPES,
191
+ POST_SHARE_RESOURCE_TYPES,
192
+ SHARE_RESOURCE_LABEL,
193
+ isPostShareResourceType,
194
+ PUBLIC_SHARE_PATH_TYPES,
195
+ RESOURCE_SHARE_TYPES_FOR_URL,
196
+ SHARE_TYPE_PATH_REGEX,
197
+ buildShareUrl,
198
+ normalizeShareOgDescription,
199
+ formatShareSectionsForCompactDisplay,
200
+ buildFacebookShareQuote,
201
+ normalizeShareRouteId,
202
+ buildSharePagePath
203
+ };
204
+ //# sourceMappingURL=chunk-36TVNR7V.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sharing/formatCategoryLabel.ts","../src/sharing/joinShareDescriptionSections.ts","../src/sharing/buildRelationShareDescription.ts","../src/sharing/relationShareTypes.ts","../src/sharing/constants.ts","../src/sharing/buildShareUrl.ts","../src/sharing/normalizeShareDescription.ts","../src/sharing/normalizeShareRouteId.ts"],"sourcesContent":["import type { ShareVendorCategory } from \"./shareRelationTypes\";\n\nexport function formatCategoryLabel(category: ShareVendorCategory): string {\n const subcategoryNames = category.subcategories\n .map((subcategory) => subcategory.name)\n .filter(Boolean);\n\n if (subcategoryNames.length === 0) {\n return category.name;\n }\n\n return `${category.name} (${subcategoryNames.join(\", \")})`;\n}\n","/** Visible separator for multi-block share text (OG, Facebook quote, crawlers collapse newlines). */\nexport const SHARE_DESCRIPTION_SECTION_SEPARATOR = \" · \";\n\n/** @deprecated Use {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}. */\nexport const SHARE_COMPACT_SECTION_SEPARATOR =\n SHARE_DESCRIPTION_SECTION_SEPARATOR;\n\nexport function joinShareDescriptionSections(\n sections: ReadonlyArray<string | false | null | undefined>,\n): string {\n return sections\n .filter((section): section is string => Boolean(section))\n .join(SHARE_DESCRIPTION_SECTION_SEPARATOR);\n}\n","import { formatCategoryLabel } from \"./formatCategoryLabel\";\nimport { joinShareDescriptionSections } from \"./joinShareDescriptionSections\";\nimport type {\n ShareEventForInvitation,\n ShareEventInfoForInvitation,\n ShareVendorForApplication,\n ShareVendorInfoForApplication,\n} from \"./shareRelationTypes\";\n\nexport type {\n ShareEventDateTime,\n ShareEventForInvitation,\n ShareEventInfoForInvitation,\n ShareStallType,\n ShareVendorCategory,\n ShareVendorForApplication,\n ShareVendorInfoForApplication,\n} from \"./shareRelationTypes\";\n\nfunction formatShareDate(isoDate: string): string {\n try {\n return new Intl.DateTimeFormat(\"en-NZ\", {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n }).format(new Date(isoDate));\n } catch {\n return isoDate;\n }\n}\n\nexport function buildInvitationShareDescription(\n event: ShareEventForInvitation,\n eventInfo: ShareEventInfoForInvitation | null | undefined,\n): string {\n const stallTypes =\n eventInfo?.dateTime?.flatMap((date) => date.stallTypes) ?? [];\n\n if (!eventInfo || stallTypes.length === 0) {\n return event.description?.trim() || \"\";\n }\n\n const requirementLabels = (eventInfo.requirements ?? [])\n .filter((item) => item.value)\n .map((item) => item.label);\n\n const sections = [\n event.location.fullAddress,\n ...event.dateTime.map((date) => {\n const start = formatShareDate(date.startDate);\n const end = date.endDate ? ` – ${formatShareDate(date.endDate)}` : \"\";\n return `Market date: ${start}${end}`;\n }),\n `Application deadline: vendors must apply at least ${eventInfo.applicationDeadlineHours} hours before each market date.`,\n ...stallTypes.map(\n (stall) =>\n `Stall: ${stall.label} — $${stall.price} (${stall.stallCapacity} spaces)`,\n ),\n requirementLabels.length > 0 &&\n `Requirements: ${requirementLabels.join(\", \")}`,\n ];\n\n return joinShareDescriptionSections(sections);\n}\n\nexport function buildApplicationShareDescription(\n vendor: ShareVendorForApplication,\n vendorInfo: ShareVendorInfoForApplication | null | undefined,\n): string {\n const categoryLabels = vendor.categories.map((category) =>\n formatCategoryLabel(category),\n );\n\n if (!vendorInfo) {\n return vendor.description?.trim() || \"\";\n }\n\n const compliance = vendorInfo.compliance;\n const complianceLabels = [\n compliance?.liabilityInsurance && \"Liability insurance\",\n compliance?.foodBeverageLicense && \"Food & beverage licence\",\n ].filter(Boolean);\n\n const profileDescription = vendor.description?.trim();\n\n const sections = [\n categoryLabels.length > 0 && `Categories: ${categoryLabels.join(\", \")}`,\n `Stall size: ${vendorInfo.stallInfo.size.width}m × ${vendorInfo.stallInfo.size.depth}m`,\n `Compliance: ${complianceLabels.length > 0 ? complianceLabels.join(\", \") : \"Not specified\"}`,\n `Price range: $${vendorInfo.product.priceRange.min} – $${vendorInfo.product.priceRange.max}`,\n profileDescription,\n ];\n\n return joinShareDescriptionSections(sections);\n}\n","/** Path segments for relation share URLs — must match mobile `RelationTitle` values. */\nexport const RELATION_SHARE_INVITATION = \"invitation\" as const;\nexport const RELATION_SHARE_APPLICATION = \"application\" as const;\n\nexport const RELATION_SHARE_RESOURCE_TYPES = [\n RELATION_SHARE_INVITATION,\n RELATION_SHARE_APPLICATION,\n] as const;\n\nexport type RelationShareResourceType =\n (typeof RELATION_SHARE_RESOURCE_TYPES)[number];\n\nexport function isRelationShareResourceType(\n resourceType: string,\n): resourceType is RelationShareResourceType {\n return (RELATION_SHARE_RESOURCE_TYPES as readonly string[]).includes(\n resourceType,\n );\n}\n","import {\n RELATION_SHARE_APPLICATION,\n RELATION_SHARE_INVITATION,\n type RelationShareResourceType,\n} from \"./relationShareTypes\";\n\nexport {\n RELATION_SHARE_APPLICATION,\n RELATION_SHARE_INVITATION,\n RELATION_SHARE_RESOURCE_TYPES,\n isRelationShareResourceType,\n type RelationShareResourceType,\n} from \"./relationShareTypes\";\n\nexport const SHARE_SITE_URL = \"https://cluemart.co.nz\";\n\nexport const DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;\n\nexport const RESOURCE_SHARE_TYPES = [\n \"market\",\n \"stallholder\",\n \"partner\",\n] as const;\n\nexport type ResourceShareType = (typeof RESOURCE_SHARE_TYPES)[number];\n\nexport const POST_SHARE_RESOURCE_TYPES = [\n \"daily_meets\",\n \"daily_tips\",\n \"daily_games\",\n] as const;\n\nexport type PostShareResourceType = (typeof POST_SHARE_RESOURCE_TYPES)[number];\n\nexport type ShareResourceType =\n | ResourceShareType\n | PostShareResourceType\n | RelationShareResourceType;\n\nexport const SHARE_RESOURCE_LABEL: Record<ShareResourceType, string> = {\n [RELATION_SHARE_APPLICATION]: \"Application\",\n [RELATION_SHARE_INVITATION]: \"Invitation\",\n daily_games: \"Daily Game\",\n daily_meets: \"Daily Meet\",\n daily_tips: \"Daily Tip\",\n market: \"Market\",\n partner: \"Partner\",\n stallholder: \"Stallholder\",\n};\n\nexport function isPostShareResourceType(\n resourceType: ShareResourceType,\n): resourceType is PostShareResourceType {\n return (POST_SHARE_RESOURCE_TYPES as readonly string[]).includes(\n resourceType,\n );\n}\n","import {\n POST_SHARE_RESOURCE_TYPES,\n RESOURCE_SHARE_TYPES,\n SHARE_SITE_URL,\n} from \"./constants\";\nimport {\n RELATION_SHARE_APPLICATION,\n RELATION_SHARE_INVITATION,\n} from \"./relationShareTypes\";\n\n/** Path segments for public resource share URLs (markets, posts, etc.). */\nexport const PUBLIC_SHARE_PATH_TYPES = [\n ...RESOURCE_SHARE_TYPES,\n ...POST_SHARE_RESOURCE_TYPES,\n] as const;\n\nexport type PublicSharePathType = (typeof PUBLIC_SHARE_PATH_TYPES)[number];\n\n/** @deprecated Use {@link PUBLIC_SHARE_PATH_TYPES} — kept for mobile deep-link helpers. */\nexport const RESOURCE_SHARE_TYPES_FOR_URL = PUBLIC_SHARE_PATH_TYPES;\n\nexport type RelationSharePathType =\n | typeof RELATION_SHARE_INVITATION\n | typeof RELATION_SHARE_APPLICATION;\n\nexport type ShareType = PublicSharePathType | RelationSharePathType;\n\n/** Alternation for deep-link regexes — keep in sync with {@link ShareType}. */\nexport const SHARE_TYPE_PATH_REGEX = [\n ...PUBLIC_SHARE_PATH_TYPES,\n RELATION_SHARE_APPLICATION,\n RELATION_SHARE_INVITATION,\n].join(\"|\");\n\nexport function buildShareUrl(type: ShareType, id: string): string {\n return `${SHARE_SITE_URL}/share/${type}/${encodeURIComponent(id)}`;\n}\n","import { SHARE_DESCRIPTION_SECTION_SEPARATOR } from \"./joinShareDescriptionSections\";\n\n/** Trims a share section and collapses spaces per line; preserves line breaks. */\nfunction normalizeShareSection(value: string | null | undefined): string {\n if (value == null) {\n return \"\";\n }\n return value\n .trim()\n .split(\"\\n\")\n .map((line) => line.trim().replace(/[ \\t]+/g, \" \"))\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\");\n}\n\n/**\n * Formats share descriptions for Open Graph / Twitter meta tags.\n * Legacy `\\n\\n` sections are joined with {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}\n * because Facebook and others collapse line breaks into spaces.\n */\nexport function normalizeShareOgDescription(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n\n if (/\\n\\n/.test(trimmed)) {\n return trimmed\n .split(/\\n\\n+/)\n .map((section) => section.replace(/\\s+/g, \" \").trim())\n .filter(Boolean)\n .join(SHARE_DESCRIPTION_SECTION_SEPARATOR);\n }\n\n return trimmed.replace(/\\s+/g, \" \").trim();\n}\n\n/**\n * Formats multiline share copy for UIs that strip line breaks (Facebook SDK quote).\n */\nexport function formatShareSectionsForCompactDisplay(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n\n if (!/\\n\\n/.test(trimmed)) {\n return normalizeShareSection(trimmed);\n }\n\n return trimmed\n .split(/\\n\\n+/)\n .map((section) => normalizeShareSection(section))\n .filter((section) => section.length > 0)\n .join(SHARE_DESCRIPTION_SECTION_SEPARATOR);\n}\n\n/**\n * Quote text for Facebook ShareDialog — avoids `\\n\\n` which Meta renders as a single space.\n */\nexport function buildFacebookShareQuote(\n title: string,\n description: string,\n): string | undefined {\n const titlePart = normalizeShareSection(title);\n const descriptionPart = normalizeShareSection(description);\n const bodyPart = descriptionPart\n ? formatShareSectionsForCompactDisplay(descriptionPart)\n : \"\";\n\n const parts = [titlePart, bodyPart].filter((part) => part.length > 0);\n return parts.length > 0\n ? parts.join(SHARE_DESCRIPTION_SECTION_SEPARATOR)\n : undefined;\n}\n","import type { ShareResourceType } from \"./constants\";\n\nexport function normalizeShareRouteId(id: string): string {\n try {\n return decodeURIComponent(id);\n } catch {\n return id;\n }\n}\n\nexport function buildSharePagePath(\n resourceType: ShareResourceType,\n rawId: string,\n): string {\n return `/share/${resourceType}/${encodeURIComponent(normalizeShareRouteId(rawId))}`;\n}\n"],"mappings":";AAEO,SAAS,oBAAoB,UAAuC;AACzE,QAAM,mBAAmB,SAAS,cAC/B,IAAI,CAAC,gBAAgB,YAAY,IAAI,EACrC,OAAO,OAAO;AAEjB,MAAI,iBAAiB,WAAW,GAAG;AACjC,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,GAAG,SAAS,IAAI,KAAK,iBAAiB,KAAK,IAAI,CAAC;AACzD;;;ACXO,IAAM,sCAAsC;AAG5C,IAAM,kCACX;AAEK,SAAS,6BACd,UACQ;AACR,SAAO,SACJ,OAAO,CAAC,YAA+B,QAAQ,OAAO,CAAC,EACvD,KAAK,mCAAmC;AAC7C;;;ACMA,SAAS,gBAAgB,SAAyB;AAChD,MAAI;AACF,WAAO,IAAI,KAAK,eAAe,SAAS;AAAA,MACtC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,IACR,CAAC,EAAE,OAAO,IAAI,KAAK,OAAO,CAAC;AAAA,EAC7B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gCACd,OACA,WACQ;AACR,QAAM,aACJ,WAAW,UAAU,QAAQ,CAAC,SAAS,KAAK,UAAU,KAAK,CAAC;AAE9D,MAAI,CAAC,aAAa,WAAW,WAAW,GAAG;AACzC,WAAO,MAAM,aAAa,KAAK,KAAK;AAAA,EACtC;AAEA,QAAM,qBAAqB,UAAU,gBAAgB,CAAC,GACnD,OAAO,CAAC,SAAS,KAAK,KAAK,EAC3B,IAAI,CAAC,SAAS,KAAK,KAAK;AAE3B,QAAM,WAAW;AAAA,IACf,MAAM,SAAS;AAAA,IACf,GAAG,MAAM,SAAS,IAAI,CAAC,SAAS;AAC9B,YAAM,QAAQ,gBAAgB,KAAK,SAAS;AAC5C,YAAM,MAAM,KAAK,UAAU,WAAM,gBAAgB,KAAK,OAAO,CAAC,KAAK;AACnE,aAAO,gBAAgB,KAAK,GAAG,GAAG;AAAA,IACpC,CAAC;AAAA,IACD,qDAAqD,UAAU,wBAAwB;AAAA,IACvF,GAAG,WAAW;AAAA,MACZ,CAAC,UACC,UAAU,MAAM,KAAK,YAAO,MAAM,KAAK,KAAK,MAAM,aAAa;AAAA,IACnE;AAAA,IACA,kBAAkB,SAAS,KACzB,iBAAiB,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACjD;AAEA,SAAO,6BAA6B,QAAQ;AAC9C;AAEO,SAAS,iCACd,QACA,YACQ;AACR,QAAM,iBAAiB,OAAO,WAAW;AAAA,IAAI,CAAC,aAC5C,oBAAoB,QAAQ;AAAA,EAC9B;AAEA,MAAI,CAAC,YAAY;AACf,WAAO,OAAO,aAAa,KAAK,KAAK;AAAA,EACvC;AAEA,QAAM,aAAa,WAAW;AAC9B,QAAM,mBAAmB;AAAA,IACvB,YAAY,sBAAsB;AAAA,IAClC,YAAY,uBAAuB;AAAA,EACrC,EAAE,OAAO,OAAO;AAEhB,QAAM,qBAAqB,OAAO,aAAa,KAAK;AAEpD,QAAM,WAAW;AAAA,IACf,eAAe,SAAS,KAAK,eAAe,eAAe,KAAK,IAAI,CAAC;AAAA,IACrE,eAAe,WAAW,UAAU,KAAK,KAAK,UAAO,WAAW,UAAU,KAAK,KAAK;AAAA,IACpF,eAAe,iBAAiB,SAAS,IAAI,iBAAiB,KAAK,IAAI,IAAI,eAAe;AAAA,IAC1F,iBAAiB,WAAW,QAAQ,WAAW,GAAG,YAAO,WAAW,QAAQ,WAAW,GAAG;AAAA,IAC1F;AAAA,EACF;AAEA,SAAO,6BAA6B,QAAQ;AAC9C;;;AC7FO,IAAM,4BAA4B;AAClC,IAAM,6BAA6B;AAEnC,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AACF;AAKO,SAAS,4BACd,cAC2C;AAC3C,SAAQ,8BAAoD;AAAA,IAC1D;AAAA,EACF;AACF;;;ACJO,IAAM,iBAAiB;AAEvB,IAAM,yBAAyB,GAAG,cAAc;AAEhD,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF;AASO,IAAM,uBAA0D;AAAA,EACrE,CAAC,0BAA0B,GAAG;AAAA,EAC9B,CAAC,yBAAyB,GAAG;AAAA,EAC7B,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AACf;AAEO,SAAS,wBACd,cACuC;AACvC,SAAQ,0BAAgD;AAAA,IACtD;AAAA,EACF;AACF;;;AC7CO,IAAM,0BAA0B;AAAA,EACrC,GAAG;AAAA,EACH,GAAG;AACL;AAKO,IAAM,+BAA+B;AASrC,IAAM,wBAAwB;AAAA,EACnC,GAAG;AAAA,EACH;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEH,SAAS,cAAc,MAAiB,IAAoB;AACjE,SAAO,GAAG,cAAc,UAAU,IAAI,IAAI,mBAAmB,EAAE,CAAC;AAClE;;;ACjCA,SAAS,sBAAsB,OAA0C;AACvE,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AACA,SAAO,MACJ,KAAK,EACL,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,EACjD,KAAK,IAAI,EACT,QAAQ,WAAW,MAAM;AAC9B;AAOO,SAAS,4BAA4B,OAAuB;AACjE,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,KAAK,OAAO,GAAG;AACxB,WAAO,QACJ,MAAM,OAAO,EACb,IAAI,CAAC,YAAY,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK,CAAC,EACpD,OAAO,OAAO,EACd,KAAK,mCAAmC;AAAA,EAC7C;AAEA,SAAO,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAC3C;AAKO,SAAS,qCAAqC,OAAuB;AAC1E,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,OAAO,KAAK,OAAO,GAAG;AACzB,WAAO,sBAAsB,OAAO;AAAA,EACtC;AAEA,SAAO,QACJ,MAAM,OAAO,EACb,IAAI,CAAC,YAAY,sBAAsB,OAAO,CAAC,EAC/C,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC,EACtC,KAAK,mCAAmC;AAC7C;AAKO,SAAS,wBACd,OACA,aACoB;AACpB,QAAM,YAAY,sBAAsB,KAAK;AAC7C,QAAM,kBAAkB,sBAAsB,WAAW;AACzD,QAAM,WAAW,kBACb,qCAAqC,eAAe,IACpD;AAEJ,QAAM,QAAQ,CAAC,WAAW,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACpE,SAAO,MAAM,SAAS,IAClB,MAAM,KAAK,mCAAmC,IAC9C;AACN;;;ACxEO,SAAS,sBAAsB,IAAoB;AACxD,MAAI;AACF,WAAO,mBAAmB,EAAE;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,mBACd,cACA,OACQ;AACR,SAAO,UAAU,YAAY,IAAI,mBAAmB,sBAAsB,KAAK,CAAC,CAAC;AACnF;","names":[]}
@@ -1,11 +1,11 @@
1
+ import {
2
+ gameScreenIdentifierList
3
+ } from "./chunk-SBY5HTAP.mjs";
1
4
  import {
2
5
  EnumInviteStatus,
3
6
  EnumPaymentMethod,
4
7
  EnumRegions
5
8
  } from "./chunk-ZR4TGWTS.mjs";
6
- import {
7
- gameScreenIdentifierList
8
- } from "./chunk-SBY5HTAP.mjs";
9
9
 
10
10
  // src/utils/date.ts
11
11
  import dayjs from "dayjs";
@@ -269,4 +269,4 @@ export {
269
269
  SCHOOL_MIN_STUDENT_COUNT,
270
270
  SCHOOL_MAX_STUDENT_COUNT
271
271
  };
272
- //# sourceMappingURL=chunk-L74HNX7U.mjs.map
272
+ //# sourceMappingURL=chunk-YV2JDG4R.mjs.map
@@ -43,10 +43,10 @@ import {
43
43
  vendorStallSize,
44
44
  vendorStartDateFields,
45
45
  vendorTable
46
- } from "../chunk-IMTMBZI7.mjs";
47
- import "../chunk-L74HNX7U.mjs";
48
- import "../chunk-ZR4TGWTS.mjs";
46
+ } from "../chunk-2NQUR2AV.mjs";
47
+ import "../chunk-YV2JDG4R.mjs";
49
48
  import "../chunk-SBY5HTAP.mjs";
49
+ import "../chunk-ZR4TGWTS.mjs";
50
50
  export {
51
51
  availableCategories,
52
52
  availableTagTypes,
@@ -4763,6 +4763,45 @@ var otherImages = Object.fromEntries(
4763
4763
  Object.entries(otherImagesFiles).map(([key, file]) => [key, `${PKG}/images/${file}`])
4764
4764
  );
4765
4765
 
4766
+ // src/sharing/relationShareTypes.ts
4767
+ var RELATION_SHARE_INVITATION = "invitation";
4768
+ var RELATION_SHARE_APPLICATION = "application";
4769
+
4770
+ // src/sharing/constants.ts
4771
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
4772
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
4773
+ var RESOURCE_SHARE_TYPES = [
4774
+ "market",
4775
+ "stallholder",
4776
+ "partner"
4777
+ ];
4778
+ var POST_SHARE_RESOURCE_TYPES = [
4779
+ "daily_meets",
4780
+ "daily_tips",
4781
+ "daily_games"
4782
+ ];
4783
+ var SHARE_RESOURCE_LABEL = {
4784
+ [RELATION_SHARE_APPLICATION]: "Application",
4785
+ [RELATION_SHARE_INVITATION]: "Invitation",
4786
+ daily_games: "Daily Game",
4787
+ daily_meets: "Daily Meet",
4788
+ daily_tips: "Daily Tip",
4789
+ market: "Market",
4790
+ partner: "Partner",
4791
+ stallholder: "Stallholder"
4792
+ };
4793
+
4794
+ // src/sharing/buildShareUrl.ts
4795
+ var PUBLIC_SHARE_PATH_TYPES = [
4796
+ ...RESOURCE_SHARE_TYPES,
4797
+ ...POST_SHARE_RESOURCE_TYPES
4798
+ ];
4799
+ var SHARE_TYPE_PATH_REGEX = [
4800
+ ...PUBLIC_SHARE_PATH_TYPES,
4801
+ RELATION_SHARE_APPLICATION,
4802
+ RELATION_SHARE_INVITATION
4803
+ ].join("|");
4804
+
4766
4805
  // src/types/post.ts
4767
4806
  var EnumPostType = /* @__PURE__ */ ((EnumPostType2) => {
4768
4807
  EnumPostType2["DAILY_MEETS"] = "daily_meets";