@timardex/cluemart-shared 1.5.586 → 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.
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/sharing/index.ts
21
+ var sharing_exports = {};
22
+ __export(sharing_exports, {
23
+ DEFAULT_SHARE_OG_IMAGE: () => DEFAULT_SHARE_OG_IMAGE,
24
+ POST_SHARE_RESOURCE_TYPES: () => POST_SHARE_RESOURCE_TYPES,
25
+ PUBLIC_SHARE_PATH_TYPES: () => PUBLIC_SHARE_PATH_TYPES,
26
+ RELATION_SHARE_APPLICATION: () => RELATION_SHARE_APPLICATION,
27
+ RELATION_SHARE_INVITATION: () => RELATION_SHARE_INVITATION,
28
+ RELATION_SHARE_RESOURCE_TYPES: () => RELATION_SHARE_RESOURCE_TYPES,
29
+ RESOURCE_SHARE_TYPES: () => RESOURCE_SHARE_TYPES,
30
+ RESOURCE_SHARE_TYPES_FOR_URL: () => RESOURCE_SHARE_TYPES_FOR_URL,
31
+ SHARE_COMPACT_SECTION_SEPARATOR: () => SHARE_COMPACT_SECTION_SEPARATOR,
32
+ SHARE_DESCRIPTION_SECTION_SEPARATOR: () => SHARE_DESCRIPTION_SECTION_SEPARATOR,
33
+ SHARE_RESOURCE_LABEL: () => SHARE_RESOURCE_LABEL,
34
+ SHARE_SITE_URL: () => SHARE_SITE_URL,
35
+ SHARE_TYPE_PATH_REGEX: () => SHARE_TYPE_PATH_REGEX,
36
+ buildApplicationShareDescription: () => buildApplicationShareDescription,
37
+ buildFacebookShareQuote: () => buildFacebookShareQuote,
38
+ buildInvitationShareDescription: () => buildInvitationShareDescription,
39
+ buildSharePagePath: () => buildSharePagePath,
40
+ buildShareUrl: () => buildShareUrl,
41
+ formatCategoryLabel: () => formatCategoryLabel,
42
+ formatShareSectionsForCompactDisplay: () => formatShareSectionsForCompactDisplay,
43
+ isPostShareResourceType: () => isPostShareResourceType,
44
+ isRelationShareResourceType: () => isRelationShareResourceType,
45
+ joinShareDescriptionSections: () => joinShareDescriptionSections,
46
+ normalizeShareOgDescription: () => normalizeShareOgDescription,
47
+ normalizeShareRouteId: () => normalizeShareRouteId
48
+ });
49
+ module.exports = __toCommonJS(sharing_exports);
50
+
51
+ // src/sharing/formatCategoryLabel.ts
52
+ function formatCategoryLabel(category) {
53
+ const subcategoryNames = category.subcategories.map((subcategory) => subcategory.name).filter(Boolean);
54
+ if (subcategoryNames.length === 0) {
55
+ return category.name;
56
+ }
57
+ return `${category.name} (${subcategoryNames.join(", ")})`;
58
+ }
59
+
60
+ // src/sharing/joinShareDescriptionSections.ts
61
+ var SHARE_DESCRIPTION_SECTION_SEPARATOR = " \xB7 ";
62
+ var SHARE_COMPACT_SECTION_SEPARATOR = SHARE_DESCRIPTION_SECTION_SEPARATOR;
63
+ function joinShareDescriptionSections(sections) {
64
+ return sections.filter((section) => Boolean(section)).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
65
+ }
66
+
67
+ // src/sharing/buildRelationShareDescription.ts
68
+ function formatShareDate(isoDate) {
69
+ try {
70
+ return new Intl.DateTimeFormat("en-NZ", {
71
+ day: "numeric",
72
+ month: "short",
73
+ year: "numeric"
74
+ }).format(new Date(isoDate));
75
+ } catch {
76
+ return isoDate;
77
+ }
78
+ }
79
+ function buildInvitationShareDescription(event, eventInfo) {
80
+ const stallTypes = eventInfo?.dateTime?.flatMap((date) => date.stallTypes) ?? [];
81
+ if (!eventInfo || stallTypes.length === 0) {
82
+ return event.description?.trim() || "";
83
+ }
84
+ const requirementLabels = (eventInfo.requirements ?? []).filter((item) => item.value).map((item) => item.label);
85
+ const sections = [
86
+ event.location.fullAddress,
87
+ ...event.dateTime.map((date) => {
88
+ const start = formatShareDate(date.startDate);
89
+ const end = date.endDate ? ` \u2013 ${formatShareDate(date.endDate)}` : "";
90
+ return `Market date: ${start}${end}`;
91
+ }),
92
+ `Application deadline: vendors must apply at least ${eventInfo.applicationDeadlineHours} hours before each market date.`,
93
+ ...stallTypes.map(
94
+ (stall) => `Stall: ${stall.label} \u2014 $${stall.price} (${stall.stallCapacity} spaces)`
95
+ ),
96
+ requirementLabels.length > 0 && `Requirements: ${requirementLabels.join(", ")}`
97
+ ];
98
+ return joinShareDescriptionSections(sections);
99
+ }
100
+ function buildApplicationShareDescription(vendor, vendorInfo) {
101
+ const categoryLabels = vendor.categories.map(
102
+ (category) => formatCategoryLabel(category)
103
+ );
104
+ if (!vendorInfo) {
105
+ return vendor.description?.trim() || "";
106
+ }
107
+ const compliance = vendorInfo.compliance;
108
+ const complianceLabels = [
109
+ compliance?.liabilityInsurance && "Liability insurance",
110
+ compliance?.foodBeverageLicense && "Food & beverage licence"
111
+ ].filter(Boolean);
112
+ const profileDescription = vendor.description?.trim();
113
+ const sections = [
114
+ categoryLabels.length > 0 && `Categories: ${categoryLabels.join(", ")}`,
115
+ `Stall size: ${vendorInfo.stallInfo.size.width}m \xD7 ${vendorInfo.stallInfo.size.depth}m`,
116
+ `Compliance: ${complianceLabels.length > 0 ? complianceLabels.join(", ") : "Not specified"}`,
117
+ `Price range: $${vendorInfo.product.priceRange.min} \u2013 $${vendorInfo.product.priceRange.max}`,
118
+ profileDescription
119
+ ];
120
+ return joinShareDescriptionSections(sections);
121
+ }
122
+
123
+ // src/sharing/relationShareTypes.ts
124
+ var RELATION_SHARE_INVITATION = "invitation";
125
+ var RELATION_SHARE_APPLICATION = "application";
126
+ var RELATION_SHARE_RESOURCE_TYPES = [
127
+ RELATION_SHARE_INVITATION,
128
+ RELATION_SHARE_APPLICATION
129
+ ];
130
+ function isRelationShareResourceType(resourceType) {
131
+ return RELATION_SHARE_RESOURCE_TYPES.includes(
132
+ resourceType
133
+ );
134
+ }
135
+
136
+ // src/sharing/constants.ts
137
+ var SHARE_SITE_URL = "https://cluemart.co.nz";
138
+ var DEFAULT_SHARE_OG_IMAGE = `${SHARE_SITE_URL}/assets/logo.webp`;
139
+ var RESOURCE_SHARE_TYPES = [
140
+ "market",
141
+ "stallholder",
142
+ "partner"
143
+ ];
144
+ var POST_SHARE_RESOURCE_TYPES = [
145
+ "daily_meets",
146
+ "daily_tips",
147
+ "daily_games"
148
+ ];
149
+ var SHARE_RESOURCE_LABEL = {
150
+ [RELATION_SHARE_APPLICATION]: "Application",
151
+ [RELATION_SHARE_INVITATION]: "Invitation",
152
+ daily_games: "Daily Game",
153
+ daily_meets: "Daily Meet",
154
+ daily_tips: "Daily Tip",
155
+ market: "Market",
156
+ partner: "Partner",
157
+ stallholder: "Stallholder"
158
+ };
159
+ function isPostShareResourceType(resourceType) {
160
+ return POST_SHARE_RESOURCE_TYPES.includes(
161
+ resourceType
162
+ );
163
+ }
164
+
165
+ // src/sharing/buildShareUrl.ts
166
+ var PUBLIC_SHARE_PATH_TYPES = [
167
+ ...RESOURCE_SHARE_TYPES,
168
+ ...POST_SHARE_RESOURCE_TYPES
169
+ ];
170
+ var RESOURCE_SHARE_TYPES_FOR_URL = PUBLIC_SHARE_PATH_TYPES;
171
+ var SHARE_TYPE_PATH_REGEX = [
172
+ ...PUBLIC_SHARE_PATH_TYPES,
173
+ RELATION_SHARE_APPLICATION,
174
+ RELATION_SHARE_INVITATION
175
+ ].join("|");
176
+ function buildShareUrl(type, id) {
177
+ return `${SHARE_SITE_URL}/share/${type}/${encodeURIComponent(id)}`;
178
+ }
179
+
180
+ // src/sharing/normalizeShareDescription.ts
181
+ function normalizeShareSection(value) {
182
+ if (value == null) {
183
+ return "";
184
+ }
185
+ return value.trim().split("\n").map((line) => line.trim().replace(/[ \t]+/g, " ")).join("\n").replace(/\n{3,}/g, "\n\n");
186
+ }
187
+ function normalizeShareOgDescription(value) {
188
+ const trimmed = value.trim();
189
+ if (!trimmed) {
190
+ return "";
191
+ }
192
+ if (/\n\n/.test(trimmed)) {
193
+ return trimmed.split(/\n\n+/).map((section) => section.replace(/\s+/g, " ").trim()).filter(Boolean).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
194
+ }
195
+ return trimmed.replace(/\s+/g, " ").trim();
196
+ }
197
+ function formatShareSectionsForCompactDisplay(value) {
198
+ const trimmed = value.trim();
199
+ if (!trimmed) {
200
+ return "";
201
+ }
202
+ if (!/\n\n/.test(trimmed)) {
203
+ return normalizeShareSection(trimmed);
204
+ }
205
+ return trimmed.split(/\n\n+/).map((section) => normalizeShareSection(section)).filter((section) => section.length > 0).join(SHARE_DESCRIPTION_SECTION_SEPARATOR);
206
+ }
207
+ function buildFacebookShareQuote(title, description) {
208
+ const titlePart = normalizeShareSection(title);
209
+ const descriptionPart = normalizeShareSection(description);
210
+ const bodyPart = descriptionPart ? formatShareSectionsForCompactDisplay(descriptionPart) : "";
211
+ const parts = [titlePart, bodyPart].filter((part) => part.length > 0);
212
+ return parts.length > 0 ? parts.join(SHARE_DESCRIPTION_SECTION_SEPARATOR) : void 0;
213
+ }
214
+
215
+ // src/sharing/normalizeShareRouteId.ts
216
+ function normalizeShareRouteId(id) {
217
+ try {
218
+ return decodeURIComponent(id);
219
+ } catch {
220
+ return id;
221
+ }
222
+ }
223
+ function buildSharePagePath(resourceType, rawId) {
224
+ return `/share/${resourceType}/${encodeURIComponent(normalizeShareRouteId(rawId))}`;
225
+ }
226
+ // Annotate the CommonJS export names for ESM import in node:
227
+ 0 && (module.exports = {
228
+ DEFAULT_SHARE_OG_IMAGE,
229
+ POST_SHARE_RESOURCE_TYPES,
230
+ PUBLIC_SHARE_PATH_TYPES,
231
+ RELATION_SHARE_APPLICATION,
232
+ RELATION_SHARE_INVITATION,
233
+ RELATION_SHARE_RESOURCE_TYPES,
234
+ RESOURCE_SHARE_TYPES,
235
+ RESOURCE_SHARE_TYPES_FOR_URL,
236
+ SHARE_COMPACT_SECTION_SEPARATOR,
237
+ SHARE_DESCRIPTION_SECTION_SEPARATOR,
238
+ SHARE_RESOURCE_LABEL,
239
+ SHARE_SITE_URL,
240
+ SHARE_TYPE_PATH_REGEX,
241
+ buildApplicationShareDescription,
242
+ buildFacebookShareQuote,
243
+ buildInvitationShareDescription,
244
+ buildSharePagePath,
245
+ buildShareUrl,
246
+ formatCategoryLabel,
247
+ formatShareSectionsForCompactDisplay,
248
+ isPostShareResourceType,
249
+ isRelationShareResourceType,
250
+ joinShareDescriptionSections,
251
+ normalizeShareOgDescription,
252
+ normalizeShareRouteId
253
+ });
254
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/sharing/index.ts","../../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":["export * from \"./buildRelationShareDescription\";\nexport * from \"./shareRelationTypes\";\nexport * from \"./buildShareUrl\";\nexport * from \"./constants\";\nexport * from \"./formatCategoryLabel\";\nexport * from \"./joinShareDescriptionSections\";\nexport * from \"./normalizeShareDescription\";\nexport * from \"./normalizeShareRouteId\";\nexport * from \"./relationShareTypes\";\n","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":"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","names":[]}
@@ -0,0 +1,117 @@
1
+ type ShareEventDateTime = {
2
+ startDate: string;
3
+ endDate?: string | null;
4
+ };
5
+ /** Minimal event fields used by invitation share copy (GraphQL share queries). */
6
+ type ShareEventForInvitation = {
7
+ dateTime: ShareEventDateTime[];
8
+ description: string | null;
9
+ location: {
10
+ fullAddress: string;
11
+ };
12
+ };
13
+ type ShareVendorCategory = {
14
+ name: string;
15
+ subcategories: Array<{
16
+ name: string;
17
+ }>;
18
+ };
19
+ /** Minimal vendor fields used by application share copy (GraphQL share queries). */
20
+ type ShareVendorForApplication = {
21
+ categories: ShareVendorCategory[];
22
+ description: string | null;
23
+ };
24
+ type ShareStallType = {
25
+ label: string;
26
+ price: number;
27
+ stallCapacity: number;
28
+ };
29
+ /** Minimal event info fields for invitation share copy (GraphQL share queries). */
30
+ type ShareEventInfoForInvitation = {
31
+ applicationDeadlineHours: number;
32
+ dateTime: Array<{
33
+ stallTypes: ShareStallType[];
34
+ }>;
35
+ requirements?: Array<{
36
+ label: string;
37
+ value: boolean;
38
+ }> | null;
39
+ };
40
+ /** Minimal vendor info fields for application share copy (GraphQL share queries). */
41
+ type ShareVendorInfoForApplication = {
42
+ compliance: {
43
+ liabilityInsurance: boolean;
44
+ foodBeverageLicense: boolean;
45
+ } | null;
46
+ product: {
47
+ priceRange: {
48
+ min: string;
49
+ max: string;
50
+ };
51
+ };
52
+ stallInfo: {
53
+ size: {
54
+ width: string;
55
+ depth: string;
56
+ };
57
+ };
58
+ };
59
+
60
+ declare function buildInvitationShareDescription(event: ShareEventForInvitation, eventInfo: ShareEventInfoForInvitation | null | undefined): string;
61
+ declare function buildApplicationShareDescription(vendor: ShareVendorForApplication, vendorInfo: ShareVendorInfoForApplication | null | undefined): string;
62
+
63
+ /** Path segments for relation share URLs — must match mobile `RelationTitle` values. */
64
+ declare const RELATION_SHARE_INVITATION: "invitation";
65
+ declare const RELATION_SHARE_APPLICATION: "application";
66
+ declare const RELATION_SHARE_RESOURCE_TYPES: readonly ["invitation", "application"];
67
+ type RelationShareResourceType = (typeof RELATION_SHARE_RESOURCE_TYPES)[number];
68
+ declare function isRelationShareResourceType(resourceType: string): resourceType is RelationShareResourceType;
69
+
70
+ /** Path segments for public resource share URLs (markets, posts, etc.). */
71
+ declare const PUBLIC_SHARE_PATH_TYPES: readonly ["market", "stallholder", "partner", "daily_meets", "daily_tips", "daily_games"];
72
+ type PublicSharePathType = (typeof PUBLIC_SHARE_PATH_TYPES)[number];
73
+ /** @deprecated Use {@link PUBLIC_SHARE_PATH_TYPES} — kept for mobile deep-link helpers. */
74
+ declare const RESOURCE_SHARE_TYPES_FOR_URL: readonly ["market", "stallholder", "partner", "daily_meets", "daily_tips", "daily_games"];
75
+ type RelationSharePathType = typeof RELATION_SHARE_INVITATION | typeof RELATION_SHARE_APPLICATION;
76
+ type ShareType = PublicSharePathType | RelationSharePathType;
77
+ /** Alternation for deep-link regexes — keep in sync with {@link ShareType}. */
78
+ declare const SHARE_TYPE_PATH_REGEX: string;
79
+ declare function buildShareUrl(type: ShareType, id: string): string;
80
+
81
+ declare const SHARE_SITE_URL = "https://cluemart.co.nz";
82
+ declare const DEFAULT_SHARE_OG_IMAGE = "https://cluemart.co.nz/assets/logo.webp";
83
+ declare const RESOURCE_SHARE_TYPES: readonly ["market", "stallholder", "partner"];
84
+ type ResourceShareType = (typeof RESOURCE_SHARE_TYPES)[number];
85
+ declare const POST_SHARE_RESOURCE_TYPES: readonly ["daily_meets", "daily_tips", "daily_games"];
86
+ type PostShareResourceType = (typeof POST_SHARE_RESOURCE_TYPES)[number];
87
+ type ShareResourceType = ResourceShareType | PostShareResourceType | RelationShareResourceType;
88
+ declare const SHARE_RESOURCE_LABEL: Record<ShareResourceType, string>;
89
+ declare function isPostShareResourceType(resourceType: ShareResourceType): resourceType is PostShareResourceType;
90
+
91
+ declare function formatCategoryLabel(category: ShareVendorCategory): string;
92
+
93
+ /** Visible separator for multi-block share text (OG, Facebook quote, crawlers collapse newlines). */
94
+ declare const SHARE_DESCRIPTION_SECTION_SEPARATOR = " \u00B7 ";
95
+ /** @deprecated Use {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}. */
96
+ declare const SHARE_COMPACT_SECTION_SEPARATOR = " \u00B7 ";
97
+ declare function joinShareDescriptionSections(sections: ReadonlyArray<string | false | null | undefined>): string;
98
+
99
+ /**
100
+ * Formats share descriptions for Open Graph / Twitter meta tags.
101
+ * Legacy `\n\n` sections are joined with {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}
102
+ * because Facebook and others collapse line breaks into spaces.
103
+ */
104
+ declare function normalizeShareOgDescription(value: string): string;
105
+ /**
106
+ * Formats multiline share copy for UIs that strip line breaks (Facebook SDK quote).
107
+ */
108
+ declare function formatShareSectionsForCompactDisplay(value: string): string;
109
+ /**
110
+ * Quote text for Facebook ShareDialog — avoids `\n\n` which Meta renders as a single space.
111
+ */
112
+ declare function buildFacebookShareQuote(title: string, description: string): string | undefined;
113
+
114
+ declare function normalizeShareRouteId(id: string): string;
115
+ declare function buildSharePagePath(resourceType: ShareResourceType, rawId: string): string;
116
+
117
+ export { DEFAULT_SHARE_OG_IMAGE, POST_SHARE_RESOURCE_TYPES, PUBLIC_SHARE_PATH_TYPES, type PostShareResourceType, type PublicSharePathType, RELATION_SHARE_APPLICATION, RELATION_SHARE_INVITATION, RELATION_SHARE_RESOURCE_TYPES, RESOURCE_SHARE_TYPES, RESOURCE_SHARE_TYPES_FOR_URL, type RelationSharePathType, type RelationShareResourceType, type ResourceShareType, SHARE_COMPACT_SECTION_SEPARATOR, SHARE_DESCRIPTION_SECTION_SEPARATOR, SHARE_RESOURCE_LABEL, SHARE_SITE_URL, SHARE_TYPE_PATH_REGEX, type ShareEventDateTime, type ShareEventForInvitation, type ShareEventInfoForInvitation, type ShareResourceType, type ShareStallType, type ShareType, type ShareVendorCategory, type ShareVendorForApplication, type ShareVendorInfoForApplication, buildApplicationShareDescription, buildFacebookShareQuote, buildInvitationShareDescription, buildSharePagePath, buildShareUrl, formatCategoryLabel, formatShareSectionsForCompactDisplay, isPostShareResourceType, isRelationShareResourceType, joinShareDescriptionSections, normalizeShareOgDescription, normalizeShareRouteId };
@@ -0,0 +1,117 @@
1
+ type ShareEventDateTime = {
2
+ startDate: string;
3
+ endDate?: string | null;
4
+ };
5
+ /** Minimal event fields used by invitation share copy (GraphQL share queries). */
6
+ type ShareEventForInvitation = {
7
+ dateTime: ShareEventDateTime[];
8
+ description: string | null;
9
+ location: {
10
+ fullAddress: string;
11
+ };
12
+ };
13
+ type ShareVendorCategory = {
14
+ name: string;
15
+ subcategories: Array<{
16
+ name: string;
17
+ }>;
18
+ };
19
+ /** Minimal vendor fields used by application share copy (GraphQL share queries). */
20
+ type ShareVendorForApplication = {
21
+ categories: ShareVendorCategory[];
22
+ description: string | null;
23
+ };
24
+ type ShareStallType = {
25
+ label: string;
26
+ price: number;
27
+ stallCapacity: number;
28
+ };
29
+ /** Minimal event info fields for invitation share copy (GraphQL share queries). */
30
+ type ShareEventInfoForInvitation = {
31
+ applicationDeadlineHours: number;
32
+ dateTime: Array<{
33
+ stallTypes: ShareStallType[];
34
+ }>;
35
+ requirements?: Array<{
36
+ label: string;
37
+ value: boolean;
38
+ }> | null;
39
+ };
40
+ /** Minimal vendor info fields for application share copy (GraphQL share queries). */
41
+ type ShareVendorInfoForApplication = {
42
+ compliance: {
43
+ liabilityInsurance: boolean;
44
+ foodBeverageLicense: boolean;
45
+ } | null;
46
+ product: {
47
+ priceRange: {
48
+ min: string;
49
+ max: string;
50
+ };
51
+ };
52
+ stallInfo: {
53
+ size: {
54
+ width: string;
55
+ depth: string;
56
+ };
57
+ };
58
+ };
59
+
60
+ declare function buildInvitationShareDescription(event: ShareEventForInvitation, eventInfo: ShareEventInfoForInvitation | null | undefined): string;
61
+ declare function buildApplicationShareDescription(vendor: ShareVendorForApplication, vendorInfo: ShareVendorInfoForApplication | null | undefined): string;
62
+
63
+ /** Path segments for relation share URLs — must match mobile `RelationTitle` values. */
64
+ declare const RELATION_SHARE_INVITATION: "invitation";
65
+ declare const RELATION_SHARE_APPLICATION: "application";
66
+ declare const RELATION_SHARE_RESOURCE_TYPES: readonly ["invitation", "application"];
67
+ type RelationShareResourceType = (typeof RELATION_SHARE_RESOURCE_TYPES)[number];
68
+ declare function isRelationShareResourceType(resourceType: string): resourceType is RelationShareResourceType;
69
+
70
+ /** Path segments for public resource share URLs (markets, posts, etc.). */
71
+ declare const PUBLIC_SHARE_PATH_TYPES: readonly ["market", "stallholder", "partner", "daily_meets", "daily_tips", "daily_games"];
72
+ type PublicSharePathType = (typeof PUBLIC_SHARE_PATH_TYPES)[number];
73
+ /** @deprecated Use {@link PUBLIC_SHARE_PATH_TYPES} — kept for mobile deep-link helpers. */
74
+ declare const RESOURCE_SHARE_TYPES_FOR_URL: readonly ["market", "stallholder", "partner", "daily_meets", "daily_tips", "daily_games"];
75
+ type RelationSharePathType = typeof RELATION_SHARE_INVITATION | typeof RELATION_SHARE_APPLICATION;
76
+ type ShareType = PublicSharePathType | RelationSharePathType;
77
+ /** Alternation for deep-link regexes — keep in sync with {@link ShareType}. */
78
+ declare const SHARE_TYPE_PATH_REGEX: string;
79
+ declare function buildShareUrl(type: ShareType, id: string): string;
80
+
81
+ declare const SHARE_SITE_URL = "https://cluemart.co.nz";
82
+ declare const DEFAULT_SHARE_OG_IMAGE = "https://cluemart.co.nz/assets/logo.webp";
83
+ declare const RESOURCE_SHARE_TYPES: readonly ["market", "stallholder", "partner"];
84
+ type ResourceShareType = (typeof RESOURCE_SHARE_TYPES)[number];
85
+ declare const POST_SHARE_RESOURCE_TYPES: readonly ["daily_meets", "daily_tips", "daily_games"];
86
+ type PostShareResourceType = (typeof POST_SHARE_RESOURCE_TYPES)[number];
87
+ type ShareResourceType = ResourceShareType | PostShareResourceType | RelationShareResourceType;
88
+ declare const SHARE_RESOURCE_LABEL: Record<ShareResourceType, string>;
89
+ declare function isPostShareResourceType(resourceType: ShareResourceType): resourceType is PostShareResourceType;
90
+
91
+ declare function formatCategoryLabel(category: ShareVendorCategory): string;
92
+
93
+ /** Visible separator for multi-block share text (OG, Facebook quote, crawlers collapse newlines). */
94
+ declare const SHARE_DESCRIPTION_SECTION_SEPARATOR = " \u00B7 ";
95
+ /** @deprecated Use {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}. */
96
+ declare const SHARE_COMPACT_SECTION_SEPARATOR = " \u00B7 ";
97
+ declare function joinShareDescriptionSections(sections: ReadonlyArray<string | false | null | undefined>): string;
98
+
99
+ /**
100
+ * Formats share descriptions for Open Graph / Twitter meta tags.
101
+ * Legacy `\n\n` sections are joined with {@link SHARE_DESCRIPTION_SECTION_SEPARATOR}
102
+ * because Facebook and others collapse line breaks into spaces.
103
+ */
104
+ declare function normalizeShareOgDescription(value: string): string;
105
+ /**
106
+ * Formats multiline share copy for UIs that strip line breaks (Facebook SDK quote).
107
+ */
108
+ declare function formatShareSectionsForCompactDisplay(value: string): string;
109
+ /**
110
+ * Quote text for Facebook ShareDialog — avoids `\n\n` which Meta renders as a single space.
111
+ */
112
+ declare function buildFacebookShareQuote(title: string, description: string): string | undefined;
113
+
114
+ declare function normalizeShareRouteId(id: string): string;
115
+ declare function buildSharePagePath(resourceType: ShareResourceType, rawId: string): string;
116
+
117
+ export { DEFAULT_SHARE_OG_IMAGE, POST_SHARE_RESOURCE_TYPES, PUBLIC_SHARE_PATH_TYPES, type PostShareResourceType, type PublicSharePathType, RELATION_SHARE_APPLICATION, RELATION_SHARE_INVITATION, RELATION_SHARE_RESOURCE_TYPES, RESOURCE_SHARE_TYPES, RESOURCE_SHARE_TYPES_FOR_URL, type RelationSharePathType, type RelationShareResourceType, type ResourceShareType, SHARE_COMPACT_SECTION_SEPARATOR, SHARE_DESCRIPTION_SECTION_SEPARATOR, SHARE_RESOURCE_LABEL, SHARE_SITE_URL, SHARE_TYPE_PATH_REGEX, type ShareEventDateTime, type ShareEventForInvitation, type ShareEventInfoForInvitation, type ShareResourceType, type ShareStallType, type ShareType, type ShareVendorCategory, type ShareVendorForApplication, type ShareVendorInfoForApplication, buildApplicationShareDescription, buildFacebookShareQuote, buildInvitationShareDescription, buildSharePagePath, buildShareUrl, formatCategoryLabel, formatShareSectionsForCompactDisplay, isPostShareResourceType, isRelationShareResourceType, joinShareDescriptionSections, normalizeShareOgDescription, normalizeShareRouteId };
@@ -0,0 +1,55 @@
1
+ import {
2
+ DEFAULT_SHARE_OG_IMAGE,
3
+ POST_SHARE_RESOURCE_TYPES,
4
+ PUBLIC_SHARE_PATH_TYPES,
5
+ RELATION_SHARE_APPLICATION,
6
+ RELATION_SHARE_INVITATION,
7
+ RELATION_SHARE_RESOURCE_TYPES,
8
+ RESOURCE_SHARE_TYPES,
9
+ RESOURCE_SHARE_TYPES_FOR_URL,
10
+ SHARE_COMPACT_SECTION_SEPARATOR,
11
+ SHARE_DESCRIPTION_SECTION_SEPARATOR,
12
+ SHARE_RESOURCE_LABEL,
13
+ SHARE_SITE_URL,
14
+ SHARE_TYPE_PATH_REGEX,
15
+ buildApplicationShareDescription,
16
+ buildFacebookShareQuote,
17
+ buildInvitationShareDescription,
18
+ buildSharePagePath,
19
+ buildShareUrl,
20
+ formatCategoryLabel,
21
+ formatShareSectionsForCompactDisplay,
22
+ isPostShareResourceType,
23
+ isRelationShareResourceType,
24
+ joinShareDescriptionSections,
25
+ normalizeShareOgDescription,
26
+ normalizeShareRouteId
27
+ } from "../chunk-36TVNR7V.mjs";
28
+ export {
29
+ DEFAULT_SHARE_OG_IMAGE,
30
+ POST_SHARE_RESOURCE_TYPES,
31
+ PUBLIC_SHARE_PATH_TYPES,
32
+ RELATION_SHARE_APPLICATION,
33
+ RELATION_SHARE_INVITATION,
34
+ RELATION_SHARE_RESOURCE_TYPES,
35
+ RESOURCE_SHARE_TYPES,
36
+ RESOURCE_SHARE_TYPES_FOR_URL,
37
+ SHARE_COMPACT_SECTION_SEPARATOR,
38
+ SHARE_DESCRIPTION_SECTION_SEPARATOR,
39
+ SHARE_RESOURCE_LABEL,
40
+ SHARE_SITE_URL,
41
+ SHARE_TYPE_PATH_REGEX,
42
+ buildApplicationShareDescription,
43
+ buildFacebookShareQuote,
44
+ buildInvitationShareDescription,
45
+ buildSharePagePath,
46
+ buildShareUrl,
47
+ formatCategoryLabel,
48
+ formatShareSectionsForCompactDisplay,
49
+ isPostShareResourceType,
50
+ isRelationShareResourceType,
51
+ joinShareDescriptionSections,
52
+ normalizeShareOgDescription,
53
+ normalizeShareRouteId
54
+ };
55
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -26,9 +26,9 @@ import {
26
26
  timeFormat,
27
27
  toNZTime,
28
28
  truncateText
29
- } from "../chunk-L74HNX7U.mjs";
30
- import "../chunk-ZR4TGWTS.mjs";
29
+ } from "../chunk-YV2JDG4R.mjs";
31
30
  import "../chunk-SBY5HTAP.mjs";
31
+ import "../chunk-ZR4TGWTS.mjs";
32
32
  export {
33
33
  ANDROID_URL,
34
34
  IOS_URL,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timardex/cluemart-shared",
3
- "version": "1.5.586",
3
+ "version": "1.5.589",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -28,6 +28,11 @@
28
28
  "import": "./dist/utils/index.mjs",
29
29
  "require": "./dist/utils/index.cjs"
30
30
  },
31
+ "./sharing": {
32
+ "types": "./dist/sharing/index.d.ts",
33
+ "import": "./dist/sharing/index.mjs",
34
+ "require": "./dist/sharing/index.cjs"
35
+ },
31
36
  "./hooks": {
32
37
  "types": "./dist/hooks/index.d.ts",
33
38
  "import": "./dist/hooks/index.mjs",