@timardex/cluemart-shared 1.5.502 → 1.5.504

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-PZZKQ3IV.mjs";
3
+ } from "./chunk-XNMKWMNF.mjs";
4
4
  import {
5
5
  EnumFoodFlavor
6
6
  } from "./chunk-534WN2SR.mjs";
@@ -1952,4 +1952,4 @@ export {
1952
1952
  contactUsFields,
1953
1953
  partnerBasicInfoFields
1954
1954
  };
1955
- //# sourceMappingURL=chunk-6JRXEOO3.mjs.map
1955
+ //# sourceMappingURL=chunk-A3BCQJII.mjs.map
@@ -7,10 +7,76 @@ import {
7
7
  gameScreenIdentifierList
8
8
  } from "./chunk-7GWVTPXL.mjs";
9
9
 
10
- // src/utils/dailyClueGame.ts
10
+ // src/utils/date.ts
11
11
  import dayjs from "dayjs";
12
- import utc from "dayjs/plugin/utc";
12
+ import customParseFormat from "dayjs/plugin/customParseFormat.js";
13
+ import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
14
+ import timezone from "dayjs/plugin/timezone.js";
15
+ import utc from "dayjs/plugin/utc.js";
16
+ var dateFormat = "DD-MM-YYYY";
17
+ var timeFormat = "HH:mm";
18
+ dayjs.extend(customParseFormat);
13
19
  dayjs.extend(utc);
20
+ dayjs.extend(timezone);
21
+ dayjs.extend(isSameOrAfter);
22
+ var NZ_TZ = "Pacific/Auckland";
23
+ function toNZTime(date) {
24
+ return date ? dayjs(date).tz(NZ_TZ) : dayjs().tz(NZ_TZ);
25
+ }
26
+ var formatDate = (dateStr, display = "datetime", timeStr) => {
27
+ const dateTimeStr = timeStr ? `${dateStr} ${timeStr}` : dateStr;
28
+ const dateTime = timeStr ? dayjs(dateTimeStr, `${dateFormat} ${timeFormat}`) : dayjs(dateStr, dateFormat);
29
+ const formattedDate = dateTime.format("dddd, D MMMM, YYYY");
30
+ const formattedTime = dateTime.format("h:mm a");
31
+ switch (display) {
32
+ case "date":
33
+ return formattedDate;
34
+ case "time":
35
+ return formattedTime;
36
+ case "datetime":
37
+ return `${formattedDate} at ${formattedTime}`;
38
+ default:
39
+ return formattedDate;
40
+ }
41
+ };
42
+ var getCurrentAndFutureDates = (dates) => {
43
+ const now = dayjs();
44
+ return dates.filter((dateObj) => {
45
+ const dateTime = dayjs(
46
+ `${dateObj.startDate} ${dateObj.startTime}`,
47
+ `${dateFormat} ${timeFormat}`
48
+ );
49
+ return dateTime.isSameOrAfter(now);
50
+ });
51
+ };
52
+ var isFutureDatesBeforeThreshold = (date, minHoursFromNow) => {
53
+ const threshold = minHoursFromNow ? dayjs().add(minHoursFromNow, "hour") : dayjs().startOf("day");
54
+ const dateTime = dayjs(
55
+ `${date.startDate} ${date.startTime}`,
56
+ `${dateFormat} ${timeFormat}`
57
+ );
58
+ return dateTime.isSameOrAfter(threshold);
59
+ };
60
+ var formatTimestamp = (timestamp) => {
61
+ const formattedDate = toNZTime(timestamp).format(dateFormat);
62
+ return formatDate(formattedDate, "date");
63
+ };
64
+ var isIsoDateString = (value) => {
65
+ return typeof value === "string" && !isNaN(Date.parse(value));
66
+ };
67
+ function sortDatesChronologically(dates) {
68
+ if (!dates || !dates.length) {
69
+ return [];
70
+ }
71
+ return [...dates].sort((a, b) => {
72
+ const dateTimeFormat = `${dateFormat} ${timeFormat}`;
73
+ const dateA = dayjs(`${a.startDate} ${a.startTime}`, dateTimeFormat);
74
+ const dateB = dayjs(`${b.startDate} ${b.startTime}`, dateTimeFormat);
75
+ return dateA.valueOf() - dateB.valueOf();
76
+ });
77
+ }
78
+
79
+ // src/utils/dailyClueGame.ts
14
80
  function createSeededRng(seed) {
15
81
  let t = seed >>> 0;
16
82
  return function random() {
@@ -38,15 +104,15 @@ function seededShuffle(array, seed) {
38
104
  }
39
105
  return result;
40
106
  }
41
- function getDayIndex(startDate) {
42
- return dayjs().utc().startOf("day").diff(dayjs(startDate).utc().startOf("day"), "day");
107
+ function getDayIndex(start, today) {
108
+ return today.diff(start, "day");
43
109
  }
44
110
  function computeDailyClueState(dailyClue) {
45
111
  const { startDate, endDate } = dailyClue.gameFields.gameDate;
46
112
  const { shuffled, collected } = dailyClue.letterInfo;
47
- const today = dayjs().utc().startOf("day");
48
- const start = dayjs(startDate).utc().startOf("day");
49
- const end = dayjs(endDate).utc().startOf("day");
113
+ const today = toNZTime().startOf("day");
114
+ const start = toNZTime(startDate).startOf("day");
115
+ const end = toNZTime(endDate).startOf("day");
50
116
  const shuffledPlacements = seededShuffle(
51
117
  gameScreenIdentifierList,
52
118
  start.toISOString()
@@ -54,14 +120,6 @@ function computeDailyClueState(dailyClue) {
54
120
  if (today.isBefore(start)) {
55
121
  return null;
56
122
  }
57
- if (today.isAfter(end)) {
58
- return null;
59
- }
60
- const index = getDayIndex(startDate);
61
- if (index < 0 || index >= shuffled.length) return null;
62
- if (collected?.includes(shuffled[index])) {
63
- return null;
64
- }
65
123
  if (today.isAfter(end)) {
66
124
  return {
67
125
  gameHistory: {
@@ -75,6 +133,11 @@ function computeDailyClueState(dailyClue) {
75
133
  todaysPlacement: null
76
134
  };
77
135
  }
136
+ const index = getDayIndex(start, today);
137
+ if (index < 0 || index >= shuffled.length) return null;
138
+ if (collected?.includes(shuffled[index])) {
139
+ return null;
140
+ }
78
141
  return {
79
142
  gameHistory: null,
80
143
  todaysClue: shuffledPlacements[index].clue,
@@ -83,63 +146,7 @@ function computeDailyClueState(dailyClue) {
83
146
  };
84
147
  }
85
148
 
86
- // src/utils/index.ts
87
- import dayjs2 from "dayjs";
88
- import customParseFormat from "dayjs/plugin/customParseFormat.js";
89
- import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
90
- import timezone from "dayjs/plugin/timezone.js";
91
- import utc2 from "dayjs/plugin/utc.js";
92
- var dateFormat = "DD-MM-YYYY";
93
- var timeFormat = "HH:mm";
94
- dayjs2.extend(customParseFormat);
95
- dayjs2.extend(utc2);
96
- dayjs2.extend(timezone);
97
- dayjs2.extend(isSameOrAfter);
98
- var NZ_TZ = "Pacific/Auckland";
99
- function toNZTime(date) {
100
- return dayjs2(date).tz(NZ_TZ).format();
101
- }
102
- var formatDate = (dateStr, display = "datetime", timeStr) => {
103
- const dateTimeStr = timeStr ? `${dateStr} ${timeStr}` : dateStr;
104
- const dateTime = timeStr ? dayjs2(dateTimeStr, `${dateFormat} ${timeFormat}`) : dayjs2(dateStr, dateFormat);
105
- const formattedDate = dateTime.format("dddd, D MMMM, YYYY");
106
- const formattedTime = dateTime.format("h:mm a");
107
- switch (display) {
108
- case "date":
109
- return formattedDate;
110
- case "time":
111
- return formattedTime;
112
- case "datetime":
113
- return `${formattedDate} at ${formattedTime}`;
114
- default:
115
- return formattedDate;
116
- }
117
- };
118
- var getCurrentAndFutureDates = (dates) => {
119
- const now = dayjs2();
120
- return dates.filter((dateObj) => {
121
- const dateTime = dayjs2(
122
- `${dateObj.startDate} ${dateObj.startTime}`,
123
- `${dateFormat} ${timeFormat}`
124
- );
125
- return dateTime.isSameOrAfter(now);
126
- });
127
- };
128
- var isFutureDatesBeforeThreshold = (date, minHoursFromNow) => {
129
- const threshold = minHoursFromNow ? dayjs2().add(minHoursFromNow, "hour") : dayjs2().startOf("day");
130
- const dateTime = dayjs2(
131
- `${date.startDate} ${date.startTime}`,
132
- `${dateFormat} ${timeFormat}`
133
- );
134
- return dateTime.isSameOrAfter(threshold);
135
- };
136
- var formatTimestamp = (timestamp) => {
137
- const formattedDate = dayjs2(timestamp).tz("Pacific/Auckland").format(dateFormat);
138
- return formatDate(formattedDate, "date");
139
- };
140
- var isIsoDateString = (value) => {
141
- return typeof value === "string" && !isNaN(Date.parse(value));
142
- };
149
+ // src/utils/utils.ts
143
150
  var removeTypename = (obj) => {
144
151
  if (obj instanceof Date) {
145
152
  return obj;
@@ -179,17 +186,6 @@ var statusOptions = [
179
186
  })).sort((a, b) => a.label.localeCompare(b.label))
180
187
  // Sort the options alphabetically
181
188
  ];
182
- function sortDatesChronologically(dates) {
183
- if (!dates || !dates.length) {
184
- return [];
185
- }
186
- return [...dates].sort((a, b) => {
187
- const dateTimeFormat = `${dateFormat} ${timeFormat}`;
188
- const dateA = dayjs2(`${a.startDate} ${a.startTime}`, dateTimeFormat);
189
- const dateB = dayjs2(`${b.startDate} ${b.startTime}`, dateTimeFormat);
190
- return dateA.valueOf() - dateB.valueOf();
191
- });
192
- }
193
189
  var availableRegionTypes = Object.values(EnumRegions);
194
190
  var availableRegionOptions = mapArrayToOptions(availableRegionTypes);
195
191
  var paymentMethodOptions = mapArrayToOptions(
@@ -232,8 +228,6 @@ var IOS_URL = "https://apps.apple.com/nz/app/cluemart/id6747251008";
232
228
  var ANDROID_URL = "https://play.google.com/store/apps/details?id=com.timardex.cluemart";
233
229
 
234
230
  export {
235
- seededShuffle,
236
- computeDailyClueState,
237
231
  dateFormat,
238
232
  timeFormat,
239
233
  toNZTime,
@@ -241,12 +235,15 @@ export {
241
235
  getCurrentAndFutureDates,
242
236
  isFutureDatesBeforeThreshold,
243
237
  formatTimestamp,
238
+ isIsoDateString,
239
+ sortDatesChronologically,
240
+ seededShuffle,
241
+ computeDailyClueState,
244
242
  removeTypename,
245
243
  truncateText,
246
244
  mapArrayToOptions,
247
245
  capitalizeFirstLetter,
248
246
  statusOptions,
249
- sortDatesChronologically,
250
247
  availableRegionTypes,
251
248
  availableRegionOptions,
252
249
  paymentMethodOptions,
@@ -256,4 +253,4 @@ export {
256
253
  IOS_URL,
257
254
  ANDROID_URL
258
255
  };
259
- //# sourceMappingURL=chunk-PZZKQ3IV.mjs.map
256
+ //# sourceMappingURL=chunk-XNMKWMNF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/date.ts","../src/utils/dailyClueGame.ts","../src/utils/utils.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport isSameOrAfter from \"dayjs/plugin/isSameOrAfter.js\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\n\nexport const dateFormat = \"DD-MM-YYYY\";\nexport const timeFormat = \"HH:mm\";\n\n// Enable custom format parsing\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isSameOrAfter);\n\nconst NZ_TZ = \"Pacific/Auckland\";\n\nexport function toNZTime(date?: Date | string) {\n return date ? dayjs(date).tz(NZ_TZ) : dayjs().tz(NZ_TZ);\n}\n\ntype DateFormat = \"date\" | \"time\" | \"datetime\";\n\n/**\n * Format a date string to a more readable format.\n * @param dateStr - the date string\n * @param timeStr - optional time string\n * @param display - 'date' | 'time' | 'datetime'\n * @returns formatted string based on display option\n */\nexport const formatDate = (\n dateStr: string,\n display: DateFormat = \"datetime\",\n timeStr?: string,\n) => {\n // Combine date and time into a single string if time is provided\n const dateTimeStr = timeStr ? `${dateStr} ${timeStr}` : dateStr;\n\n // Parse with formats\n const dateTime = timeStr\n ? dayjs(dateTimeStr, `${dateFormat} ${timeFormat}`)\n : dayjs(dateStr, dateFormat);\n\n // Format parts\n const formattedDate = dateTime.format(\"dddd, D MMMM, YYYY\");\n const formattedTime = dateTime.format(\"h:mm a\");\n\n // Return based on display option\n switch (display) {\n case \"date\":\n return formattedDate;\n case \"time\":\n return formattedTime;\n case \"datetime\":\n return `${formattedDate} at ${formattedTime}`;\n default:\n return formattedDate;\n }\n};\n\nexport const getCurrentAndFutureDates = <\n T extends { startDate: string; startTime: string },\n>(\n dates: T[],\n): T[] => {\n const now = dayjs(); // current date and time\n\n return dates.filter((dateObj) => {\n const dateTime = dayjs(\n `${dateObj.startDate} ${dateObj.startTime}`,\n `${dateFormat} ${timeFormat}`,\n );\n return dateTime.isSameOrAfter(now);\n });\n};\n\nexport const isFutureDatesBeforeThreshold = (\n date: {\n startDate: string;\n startTime: string;\n },\n minHoursFromNow: number,\n): boolean => {\n const threshold = minHoursFromNow\n ? dayjs().add(minHoursFromNow, \"hour\")\n : dayjs().startOf(\"day\");\n\n const dateTime = dayjs(\n `${date.startDate} ${date.startTime}`,\n `${dateFormat} ${timeFormat}`,\n );\n\n return dateTime.isSameOrAfter(threshold);\n};\n\nexport const formatTimestamp = (timestamp: string) => {\n const formattedDate = toNZTime(timestamp).format(dateFormat);\n\n return formatDate(formattedDate, \"date\");\n};\n\nexport const isIsoDateString = (value: unknown): value is string => {\n return typeof value === \"string\" && !isNaN(Date.parse(value));\n};\n\n/**\n * Sort an array of date strings by their proximity to the current date.\n * @param dates - The array of date strings to sort.\n * @returns - The sorted array of date strings.\n */\nexport function sortDatesChronologically<\n T extends { startDate: string; startTime: string },\n>(dates: T[]): T[] {\n if (!dates || !dates.length) {\n return [];\n }\n\n return [...dates].sort((a, b) => {\n const dateTimeFormat = `${dateFormat} ${timeFormat}`;\n const dateA = dayjs(`${a.startDate} ${a.startTime}`, dateTimeFormat);\n const dateB = dayjs(`${b.startDate} ${b.startTime}`, dateTimeFormat);\n return dateA.valueOf() - dateB.valueOf(); // chronological order\n });\n}\n","import dayjs from \"dayjs\";\n\nimport {\n DailyClueGameData,\n EnumGameStatus,\n GameHistory,\n GamePlacement,\n GamePlacementClue,\n gameScreenIdentifierList,\n} from \"../types/game\";\n\nimport { toNZTime } from \"./date\";\n\nfunction createSeededRng(seed: number) {\n let t = seed >>> 0;\n\n return function random() {\n t += 0x6d2b79f5;\n let x = t;\n\n x = Math.imul(x ^ (x >>> 15), x | 1);\n x ^= x + Math.imul(x ^ (x >>> 7), x | 61);\n\n return ((x ^ (x >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nfunction hashStringToNumber(seed: string): number {\n let hash = 2166136261;\n\n for (let i = 0; i < seed.length; i++) {\n hash ^= seed.codePointAt(i) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n\n return hash >>> 0;\n}\n\n/** Seeded shuffle so all players see the same letter order / placements for a game. */\nexport function seededShuffle<T>(array: readonly T[], seed: string): T[] {\n const rng = createSeededRng(hashStringToNumber(seed));\n const result = [...array];\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(rng() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n\n return result;\n}\n\nfunction getDayIndex(start: dayjs.Dayjs, today: dayjs.Dayjs): number {\n return today.diff(start, \"day\");\n}\n\nexport function computeDailyClueState(dailyClue: DailyClueGameData): {\n gameHistory: GameHistory | null;\n todaysClue: GamePlacementClue | null;\n todaysLetter: string | null;\n todaysPlacement: GamePlacement | null;\n} | null {\n const { startDate, endDate } = dailyClue.gameFields.gameDate;\n const { shuffled, collected } = dailyClue.letterInfo;\n\n const today = toNZTime().startOf(\"day\");\n const start = toNZTime(startDate).startOf(\"day\");\n const end = toNZTime(endDate).startOf(\"day\");\n\n const shuffledPlacements = seededShuffle(\n gameScreenIdentifierList,\n start.toISOString(),\n );\n\n if (today.isBefore(start)) {\n return null;\n }\n\n if (today.isAfter(end)) {\n return {\n gameHistory: {\n gameDate: dailyClue.gameFields.gameDate,\n gameStatus: EnumGameStatus.GAME_COMPLETED,\n gameType: dailyClue.gameFields.gameType,\n pointsEarned: dailyClue.points,\n },\n todaysClue: null,\n todaysLetter: null,\n todaysPlacement: null,\n };\n }\n\n const index = getDayIndex(start, today);\n\n if (index < 0 || index >= shuffled.length) return null;\n\n if (collected?.includes(shuffled[index])) {\n return null;\n }\n\n return {\n gameHistory: null,\n todaysClue: shuffledPlacements[index].clue,\n todaysLetter: shuffled[index],\n todaysPlacement: shuffledPlacements[index].id,\n };\n}\n","import {\n EnumInviteStatus,\n EnumPaymentMethod,\n EnumRegions,\n EnumSocialMedia,\n EnumUserLicence,\n} from \"src/enums\";\nimport { OptionItem, SocialMediaType } from \"src/types\";\n\nimport { isIsoDateString } from \"./date\";\n\nexport const removeTypename = (obj: any): any => {\n // Preserve Date objects\n if (obj instanceof Date) {\n return obj;\n }\n\n // Preserve File objects (for apollo-upload-client)\n if (obj instanceof File) {\n return obj;\n }\n\n // Preserve ISO date strings\n if (isIsoDateString(obj)) {\n return obj;\n }\n\n // Handle arrays\n if (Array.isArray(obj)) {\n return obj.map(removeTypename);\n }\n\n // Handle plain objects only\n if (obj !== null && typeof obj === \"object\") {\n const { __typename, ...cleanedObj } = obj;\n\n return Object.keys(cleanedObj).reduce((acc: any, key) => {\n acc[key] = removeTypename(cleanedObj[key]);\n return acc;\n }, {});\n }\n\n // Primitives\n return obj;\n};\n\n/**\n * Truncate text to a specified length and append ellipsis if necessary.\n * @param text\n * @param maxLength\n * @returns\n */\nexport const truncateText = (text: string, maxLength: number = 30): string => {\n return text.length > maxLength ? text.substring(0, maxLength) + \"...\" : text;\n};\n\n/**\n * Convert an array of strings to an array of objects with label and value properties.\n * @param items - The array of strings to convert.\n * @returns - The converted array of objects.\n */\nexport const mapArrayToOptions = (items: string[]): OptionItem[] =>\n items.map((item) => ({\n label: item,\n value: item,\n }));\n\nexport const capitalizeFirstLetter = (str: string): string => {\n return str\n .split(\" \")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\" \");\n};\n\nexport const statusOptions = [\n ...Object.values(EnumInviteStatus)\n .map((status) => ({\n label: status,\n value: status,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)), // Sort the options alphabetically\n];\n\nexport const availableRegionTypes = Object.values(EnumRegions);\nexport const availableRegionOptions: OptionItem[] =\n mapArrayToOptions(availableRegionTypes);\n\nexport const paymentMethodOptions: OptionItem[] = mapArrayToOptions(\n Object.values(EnumPaymentMethod),\n);\n\nexport function normalizeUrl(url: string): string {\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n return `https://${url}`;\n }\n return url;\n}\n\nexport const licenseNiceNames: Record<EnumUserLicence, string> = {\n [EnumUserLicence.PRO_EVENT]: \"Pro Event\",\n [EnumUserLicence.PRO_VENDOR]: \"Pro Stallholder\",\n [EnumUserLicence.STANDARD_EVENT]: \"Standard Event\",\n [EnumUserLicence.STANDARD_VENDOR]: \"Standard Stallholder\",\n [EnumUserLicence.PRO_PLUS_EVENT]: \"Pro+Ads Event\",\n [EnumUserLicence.PRO_PLUS_VENDOR]: \"Pro+Ads Stallholder\",\n [EnumUserLicence.STANDARD_PARTNER]: \"Partner\",\n};\n\nexport const cluemartSocialMedia: SocialMediaType[] = [\n {\n link: \"https://www.facebook.com/ClueMartApp\",\n name: EnumSocialMedia.FACEBOOK,\n },\n {\n link: \"https://www.instagram.com/cluemart_app\",\n name: EnumSocialMedia.INSTAGRAM,\n },\n {\n link: \"https://www.tiktok.com/@cluemart\",\n name: EnumSocialMedia.TIKTOK,\n },\n {\n link: \"https://www.youtube.com/@ClueMart-App-NZ\",\n name: EnumSocialMedia.YOUTUBE,\n },\n];\n\nexport const IOS_URL = \"https://apps.apple.com/nz/app/cluemart/id6747251008\";\nexport const ANDROID_URL =\n \"https://play.google.com/store/apps/details?id=com.timardex.cluemart\";\n"],"mappings":"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","names":[]}
@@ -324,21 +324,18 @@ var EnumRegions = /* @__PURE__ */ ((EnumRegions2) => {
324
324
  return EnumRegions2;
325
325
  })(EnumRegions || {});
326
326
 
327
- // src/utils/dailyClueGame.ts
327
+ // src/utils/date.ts
328
328
  var import_dayjs = __toESM(require("dayjs"));
329
- var import_utc = __toESM(require("dayjs/plugin/utc"));
330
- import_dayjs.default.extend(import_utc.default);
331
-
332
- // src/utils/index.ts
333
- var import_dayjs2 = __toESM(require("dayjs"));
334
329
  var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat.js"));
335
330
  var import_isSameOrAfter = __toESM(require("dayjs/plugin/isSameOrAfter.js"));
336
331
  var import_timezone = __toESM(require("dayjs/plugin/timezone.js"));
337
- var import_utc2 = __toESM(require("dayjs/plugin/utc.js"));
338
- import_dayjs2.default.extend(import_customParseFormat.default);
339
- import_dayjs2.default.extend(import_utc2.default);
340
- import_dayjs2.default.extend(import_timezone.default);
341
- import_dayjs2.default.extend(import_isSameOrAfter.default);
332
+ var import_utc = __toESM(require("dayjs/plugin/utc.js"));
333
+ import_dayjs.default.extend(import_customParseFormat.default);
334
+ import_dayjs.default.extend(import_utc.default);
335
+ import_dayjs.default.extend(import_timezone.default);
336
+ import_dayjs.default.extend(import_isSameOrAfter.default);
337
+
338
+ // src/utils/utils.ts
342
339
  var mapArrayToOptions = (items) => items.map((item) => ({
343
340
  label: item,
344
341
  value: item