@servicetitan/design-system 14.5.11 → 14.5.12

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.
@@ -22,6 +22,6 @@ export declare const toDateObj: ({ date, tz, isValid, invalidReason, ...rest }:
22
22
  export declare const toDateTime: (value: Date | DateTime | string | undefined, tz?: string) => DateTime | null;
23
23
  export declare const toFormat: (date: any, format?: string) => any;
24
24
  export declare const toTimeZone: (date: Date, tz?: string, opts?: any) => Date;
25
- export declare const fromTimeZone: (date: Date, tz: string) => Date;
25
+ export declare const fromTimeZone: (date: Date, tz?: string) => Date;
26
26
  export declare const compareObj: (value?: Date | string) => string | number;
27
27
  export {};
@@ -22,7 +22,7 @@ export const isValidDate = (date) => {
22
22
  return !isInvalidDate(date);
23
23
  return false;
24
24
  };
25
- const defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
25
+ const defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || undefined;
26
26
  const isBoolean = (value) => typeof value === 'boolean';
27
27
  export const toDateObj = (_a) => {
28
28
  var { date, tz = defaultTimezone, isValid, invalidReason } = _a, rest = __rest(_a, ["date", "tz", "isValid", "invalidReason"]);
@@ -50,15 +50,16 @@ export const toDateObj = (_a) => {
50
50
  return result;
51
51
  };
52
52
  export const toDateTime = (value, tz) => {
53
- var _a, _b;
54
53
  if (!value)
55
54
  return undefined;
55
+ // Undefined zone names fall through to Luxon's system zone.
56
56
  if (value instanceof DateTime)
57
57
  return value.setZone(tz);
58
58
  const timezone = tz || defaultTimezone;
59
- return value instanceof Date
60
- ? (_a = DateTime.fromJSDate(value)) === null || _a === void 0 ? void 0 : _a.setZone(timezone) // Parse Date
61
- : (_b = DateTime.fromISO(value)) === null || _b === void 0 ? void 0 : _b.setZone(timezone); // Parse String
59
+ const dateTime = value instanceof Date
60
+ ? DateTime.fromJSDate(value) // System zone
61
+ : DateTime.fromISO(value); // System zone
62
+ return timezone ? dateTime === null || dateTime === void 0 ? void 0 : dateTime.setZone(timezone) : dateTime;
62
63
  };
63
64
  export const toFormat = (date, format = 'LL/dd/yyyy') => {
64
65
  if (date instanceof Date)
@@ -81,9 +82,11 @@ export const toTimeZone = (date, tz, opts) => {
81
82
  };
82
83
  // Inverse function for toTimeZone
83
84
  export const fromTimeZone = (date, tz) => {
84
- var _a, _b;
85
+ var _a, _b, _c;
85
86
  const unzoned = (_a = DateTime.fromJSDate(date)) === null || _a === void 0 ? void 0 : _a.toISO({ includeOffset: false });
86
- return (_b = DateTime.fromISO(unzoned, { zone: tz })) === null || _b === void 0 ? void 0 : _b.toJSDate();
87
+ if (!tz)
88
+ return (_b = DateTime.fromISO(unzoned)) === null || _b === void 0 ? void 0 : _b.toJSDate();
89
+ return (_c = DateTime.fromISO(unzoned, { zone: tz })) === null || _c === void 0 ? void 0 : _c.toJSDate();
87
90
  };
88
91
  export const compareObj = (value) => {
89
92
  if (value instanceof Date) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/DatePicker/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from 'luxon';\n\n// Generate Date object with value Invalid Date\nexport const invalidDate = new Date('');\n\nexport const isInvalidDate = (d: Date | undefined): boolean => {\n\tif (typeof d === 'undefined') return false;\n\treturn d instanceof Date && isNaN(d as any);\n};\n\nexport const isValidDate = (date: Date) => {\n\tif (date instanceof Date) return !isInvalidDate(date);\n\treturn false;\n};\n\nexport interface DateObj {\n\tdateTime: DateTime | undefined;\n\ttimezone: string;\n\tisValid: boolean;\n\tinvalidReason?: string;\n\ttoISO?: () => string;\n\ttoJSDate?: () => Date;\n\tisEqualDate?: (obj: DateObj) => boolean;\n\tisEqual?: (obj: DateObj) => boolean;\n}\n\ninterface ToDateObj {\n\tdate: Date | DateTime | string | undefined;\n\ttz?: string;\n\tisValid?: boolean;\n\tinvalidReason?: string;\n}\n\nconst defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\nconst isBoolean = (value: any) => typeof value === 'boolean';\n\nexport const toDateObj = ({\n\tdate,\n\ttz = defaultTimezone,\n\tisValid,\n\tinvalidReason,\n\t...rest\n}: ToDateObj): DateObj => {\n\tconst dateTime = toDateTime(date, tz);\n\tconst valid = isBoolean(isValid) ? isValid : dateTime?.isValid;\n\tconst reason = invalidReason;\n\n\tconst result: DateObj = {\n\t\tdateTime,\n\t\ttimezone: tz,\n\t\tisValid: valid,\n\t\tinvalidReason: reason,\n\t\t...rest,\n\t};\n\n\tresult.toISO = (): string =>\n\t\tresult.dateTime ? result.dateTime.toISO() : undefined;\n\tresult.toJSDate = (): Date =>\n\t\tresult.dateTime ? result.dateTime.toJSDate() : undefined;\n\tresult.isEqualDate = (other: DateObj): boolean => {\n\t\tconst dt1 = result.dateTime;\n\t\tconst dt2 = other.dateTime;\n\t\tif ((!dt1 && !!dt2) || (!!dt1 && !dt2)) return false; // One is valid, other not\n\t\tif (typeof dt1 === 'undefined' && typeof dt2 === 'undefined')\n\t\t\treturn true; // Both undefined\n\t\tif (!dt1.isValid && !dt2.isValid) return true; // Both invalid\n\t\treturn +dt1 === +dt2; // Compare millis\n\t};\n\tresult.isEqual = (other: DateObj): boolean =>\n\t\tresult.isValid === other.isValid &&\n\t\tresult.timezone === other.timezone &&\n\t\tresult.invalidReason === other.invalidReason &&\n\t\tresult.isEqualDate(other); // Equal dates\n\n\treturn result;\n};\n\nexport const toDateTime = (\n\tvalue: Date | DateTime | string | undefined,\n\ttz?: string\n): DateTime | null => {\n\tif (!value) return undefined;\n\tif (value instanceof DateTime) return value.setZone(tz);\n\n\tconst timezone = tz || defaultTimezone;\n\n\treturn value instanceof Date\n\t\t? DateTime.fromJSDate(value)?.setZone(timezone) // Parse Date\n\t\t: DateTime.fromISO(value)?.setZone(timezone); // Parse String\n};\n\nexport const toFormat = (date: any, format = 'LL/dd/yyyy') => {\n\tif (date instanceof Date) return DateTime.fromJSDate(date).toFormat(format);\n\tif (date instanceof DateTime) return date.toFormat(format);\n\treturn date;\n};\n\n/*\n * Shifts date to timezone, so that date.toString()\n * to have same digits as corresponding date in timezone.\n */\nexport const toTimeZone = (date: Date, tz?: string, opts?: any) => {\n\tconst dateTime = opts?.startOfDay\n\t\t? toDateTime(date, tz).startOf('day')\n\t\t: toDateTime(date, tz);\n\treturn dateTime?.isValid\n\t\t? new Date(dateTime.toISO({ includeOffset: false })) // Main routine\n\t\t: undefined;\n};\n\n// Inverse function for toTimeZone\nexport const fromTimeZone = (date: Date, tz: string) => {\n\tconst unzoned = DateTime.fromJSDate(date)?.toISO({ includeOffset: false });\n\treturn DateTime.fromISO(unzoned, { zone: tz })?.toJSDate();\n};\n\nexport const compareObj = (value?: Date | string) => {\n\tif (value instanceof Date) {\n\t\tif (isInvalidDate(value)) return 'Invalid Date';\n\t\treturn value.getTime();\n\t}\n\tif (typeof value === 'undefined') return 'undefined';\n\treturn value;\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/DatePicker/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from 'luxon';\n\n// Generate Date object with value Invalid Date\nexport const invalidDate = new Date('');\n\nexport const isInvalidDate = (d: Date | undefined): boolean => {\n\tif (typeof d === 'undefined') return false;\n\treturn d instanceof Date && isNaN(d as any);\n};\n\nexport const isValidDate = (date: Date) => {\n\tif (date instanceof Date) return !isInvalidDate(date);\n\treturn false;\n};\n\nexport interface DateObj {\n\tdateTime: DateTime | undefined;\n\ttimezone: string;\n\tisValid: boolean;\n\tinvalidReason?: string;\n\ttoISO?: () => string;\n\ttoJSDate?: () => Date;\n\tisEqualDate?: (obj: DateObj) => boolean;\n\tisEqual?: (obj: DateObj) => boolean;\n}\n\ninterface ToDateObj {\n\tdate: Date | DateTime | string | undefined;\n\ttz?: string;\n\tisValid?: boolean;\n\tinvalidReason?: string;\n}\n\nconst defaultTimezone =\n\tIntl.DateTimeFormat().resolvedOptions().timeZone || undefined;\nconst isBoolean = (value: any) => typeof value === 'boolean';\n\nexport const toDateObj = ({\n\tdate,\n\ttz = defaultTimezone,\n\tisValid,\n\tinvalidReason,\n\t...rest\n}: ToDateObj): DateObj => {\n\tconst dateTime = toDateTime(date, tz);\n\tconst valid = isBoolean(isValid) ? isValid : dateTime?.isValid;\n\tconst reason = invalidReason;\n\n\tconst result: DateObj = {\n\t\tdateTime,\n\t\ttimezone: tz,\n\t\tisValid: valid,\n\t\tinvalidReason: reason,\n\t\t...rest,\n\t};\n\n\tresult.toISO = (): string =>\n\t\tresult.dateTime ? result.dateTime.toISO() : undefined;\n\tresult.toJSDate = (): Date =>\n\t\tresult.dateTime ? result.dateTime.toJSDate() : undefined;\n\tresult.isEqualDate = (other: DateObj): boolean => {\n\t\tconst dt1 = result.dateTime;\n\t\tconst dt2 = other.dateTime;\n\t\tif ((!dt1 && !!dt2) || (!!dt1 && !dt2)) return false; // One is valid, other not\n\t\tif (typeof dt1 === 'undefined' && typeof dt2 === 'undefined')\n\t\t\treturn true; // Both undefined\n\t\tif (!dt1.isValid && !dt2.isValid) return true; // Both invalid\n\t\treturn +dt1 === +dt2; // Compare millis\n\t};\n\tresult.isEqual = (other: DateObj): boolean =>\n\t\tresult.isValid === other.isValid &&\n\t\tresult.timezone === other.timezone &&\n\t\tresult.invalidReason === other.invalidReason &&\n\t\tresult.isEqualDate(other); // Equal dates\n\n\treturn result;\n};\n\nexport const toDateTime = (\n\tvalue: Date | DateTime | string | undefined,\n\ttz?: string\n): DateTime | null => {\n\tif (!value) return undefined;\n\t// Undefined zone names fall through to Luxon's system zone.\n\tif (value instanceof DateTime) return value.setZone(tz);\n\n\tconst timezone = tz || defaultTimezone;\n\tconst dateTime =\n\t\tvalue instanceof Date\n\t\t\t? DateTime.fromJSDate(value) // System zone\n\t\t\t: DateTime.fromISO(value); // System zone\n\n\treturn timezone ? dateTime?.setZone(timezone) : dateTime;\n};\n\nexport const toFormat = (date: any, format = 'LL/dd/yyyy') => {\n\tif (date instanceof Date) return DateTime.fromJSDate(date).toFormat(format);\n\tif (date instanceof DateTime) return date.toFormat(format);\n\treturn date;\n};\n\n/*\n * Shifts date to timezone, so that date.toString()\n * to have same digits as corresponding date in timezone.\n */\nexport const toTimeZone = (date: Date, tz?: string, opts?: any) => {\n\tconst dateTime = opts?.startOfDay\n\t\t? toDateTime(date, tz).startOf('day')\n\t\t: toDateTime(date, tz);\n\treturn dateTime?.isValid\n\t\t? new Date(dateTime.toISO({ includeOffset: false })) // Main routine\n\t\t: undefined;\n};\n\n// Inverse function for toTimeZone\nexport const fromTimeZone = (date: Date, tz?: string) => {\n\tconst unzoned = DateTime.fromJSDate(date)?.toISO({ includeOffset: false });\n\tif (!tz) return DateTime.fromISO(unzoned)?.toJSDate();\n\treturn DateTime.fromISO(unzoned, { zone: tz })?.toJSDate();\n};\n\nexport const compareObj = (value?: Date | string) => {\n\tif (value instanceof Date) {\n\t\tif (isInvalidDate(value)) return 'Invalid Date';\n\t\treturn value.getTime();\n\t}\n\tif (typeof value === 'undefined') return 'undefined';\n\treturn value;\n};\n"]}
@@ -0,0 +1,35 @@
1
+ import { DateTime } from 'luxon';
2
+ const OriginalDateTimeFormat = Intl.DateTimeFormat;
3
+ describe('DatePicker utils when resolvedOptions().timeZone is undefined', () => {
4
+ beforeEach(() => {
5
+ jest.spyOn(Intl, 'DateTimeFormat').mockImplementation(((locales, options) => {
6
+ const formatter = new OriginalDateTimeFormat(locales, options);
7
+ if (!(options === null || options === void 0 ? void 0 : options.timeZone)) {
8
+ const resolved = formatter.resolvedOptions.bind(formatter);
9
+ formatter.resolvedOptions = () => (Object.assign(Object.assign({}, resolved()), { timeZone: undefined }));
10
+ }
11
+ return formatter;
12
+ }));
13
+ });
14
+ afterEach(() => {
15
+ jest.restoreAllMocks();
16
+ });
17
+ const loadUtils = () => {
18
+ let utils;
19
+ jest.isolateModules(() => {
20
+ utils = require('./utils');
21
+ });
22
+ return utils;
23
+ };
24
+ it('falls back to the system zone instead of calling setZone with a missing name', () => {
25
+ const { toDateTime, fromTimeZone } = loadUtils();
26
+ const date = new Date('2023-01-01T00:00:00Z');
27
+ const dateTime = toDateTime(date, undefined);
28
+ expect(dateTime.isValid).toBe(true);
29
+ expect(dateTime.toUTC().toISO()).toBe(DateTime.fromJSDate(date).toUTC().toISO());
30
+ expect(toDateTime(date, 'UTC').toFormat('HH:mm')).toBe('00:00');
31
+ const roundTrip = fromTimeZone(date, undefined);
32
+ expect(roundTrip.toISOString()).toBe(date.toISOString());
33
+ });
34
+ });
35
+ //# sourceMappingURL=utils.missingTimeZone.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.missingTimeZone.test.js","sourceRoot":"","sources":["../../../../src/components/DatePicker/utils/utils.missingTimeZone.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC;AAEnD,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC9E,UAAU,CAAC,GAAG,EAAE;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,kBAAkB,CAAC,CAAC,CACtD,OAA2B,EAC3B,OAAoC,EACnC,EAAE;YACH,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAA,EAAE;gBACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE1D,SACA,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,iCACtB,QAAQ,EAAE,KACb,QAAQ,EAAE,SAAS,IAClB,CAAC;aACH;YACD,OAAO,SAAS,CAAC;QAClB,CAAC,CAA+B,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,IAAI,KAA+B,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACxB,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEF,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACvF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CACpC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CACzC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { DateTime } from 'luxon';\n\nconst OriginalDateTimeFormat = Intl.DateTimeFormat;\n\ndescribe('DatePicker utils when resolvedOptions().timeZone is undefined', () => {\n\tbeforeEach(() => {\n\t\tjest.spyOn(Intl, 'DateTimeFormat').mockImplementation(((\n\t\t\tlocales?: string | string[],\n\t\t\toptions?: Intl.DateTimeFormatOptions\n\t\t) => {\n\t\t\tconst formatter = new OriginalDateTimeFormat(locales, options);\n\t\t\tif (!options?.timeZone) {\n\t\t\t\tconst resolved = formatter.resolvedOptions.bind(formatter);\n\t\t\t\t(\n\t\t\t\t\tformatter as { resolvedOptions: () => unknown }\n\t\t\t\t).resolvedOptions = () => ({\n\t\t\t\t\t...resolved(),\n\t\t\t\t\ttimeZone: undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn formatter;\n\t\t}) as typeof Intl.DateTimeFormat);\n\t});\n\n\tafterEach(() => {\n\t\tjest.restoreAllMocks();\n\t});\n\n\tconst loadUtils = () => {\n\t\tlet utils: typeof import('./utils');\n\t\tjest.isolateModules(() => {\n\t\t\tutils = require('./utils');\n\t\t});\n\t\treturn utils;\n\t};\n\n\tit('falls back to the system zone instead of calling setZone with a missing name', () => {\n\t\tconst { toDateTime, fromTimeZone } = loadUtils();\n\t\tconst date = new Date('2023-01-01T00:00:00Z');\n\n\t\tconst dateTime = toDateTime(date, undefined);\n\t\texpect(dateTime.isValid).toBe(true);\n\t\texpect(dateTime.toUTC().toISO()).toBe(\n\t\t\tDateTime.fromJSDate(date).toUTC().toISO()\n\t\t);\n\t\texpect(toDateTime(date, 'UTC').toFormat('HH:mm')).toBe('00:00');\n\n\t\tconst roundTrip = fromTimeZone(date, undefined);\n\t\texpect(roundTrip.toISOString()).toBe(date.toISOString());\n\t});\n});\n"]}
@@ -53,6 +53,15 @@ describe('TimePickerUtils', () => {
53
53
  [minT, maxT] = ['12:00 AM', '12:00 PM'];
54
54
  expect(consumeMinMax(minT, maxT).min).toEqual('00:00');
55
55
  expect(consumeMinMax(minT, maxT).max).toEqual('12:00');
56
+ /*
57
+ * String bounds are clock times. A tenant zone does not shift them.
58
+ */
59
+ expect(consumeMinMax('01:00', '02:00', 'Asia/Tokyo')).toEqual({
60
+ min: '01:00',
61
+ max: '02:00',
62
+ });
63
+ // Empty timezone stays on the system zone, so same-day Date bounds keep their clock times.
64
+ expect(consumeMinMax(new Date(2023, 0, 1, 9, 0), new Date(2023, 0, 1, 17, 0), '')).toEqual({ min: '09:00', max: '17:00' });
56
65
  // undefined, null, wrong entry
57
66
  [minT, maxT] = [undefined, undefined];
58
67
  expect(consumeMinMax(minT, maxT).min).toEqual('00:00');
@@ -301,4 +310,68 @@ describe('timezone utils', () => {
301
310
  expect(date.toISOString()).toBe('2022-12-31T15:00:00.000Z'); // 15:00 UTC = 00:00 seoul
302
311
  });
303
312
  });
313
+ const OriginalDateTimeFormat = Intl.DateTimeFormat;
314
+ const mockMissingBrowserTimeZone = () => {
315
+ jest.spyOn(Intl, 'DateTimeFormat').mockImplementation(((locales, options) => {
316
+ const formatter = new OriginalDateTimeFormat(locales, options);
317
+ if (!(options === null || options === void 0 ? void 0 : options.timeZone)) {
318
+ const resolved = formatter.resolvedOptions.bind(formatter);
319
+ formatter.resolvedOptions =
320
+ () => (Object.assign(Object.assign({}, resolved()), { timeZone: undefined }));
321
+ }
322
+ return formatter;
323
+ }));
324
+ };
325
+ describe('when resolvedOptions().timeZone is undefined', () => {
326
+ beforeEach(() => {
327
+ mockMissingBrowserTimeZone();
328
+ jest.spyOn(console, 'warn').mockImplementation(() => undefined);
329
+ });
330
+ afterEach(() => {
331
+ jest.restoreAllMocks();
332
+ });
333
+ const loadTimezoneUtils = () => {
334
+ let utils;
335
+ jest.isolateModules(() => {
336
+ utils = require('./timezoneUtils');
337
+ });
338
+ return utils;
339
+ };
340
+ it('normalizes the browser zone to undefined and formats in the system zone', () => {
341
+ const { dateToTime, localTimezone, timeToDate } = loadTimezoneUtils();
342
+ const localMidnight = new Date(2023, 0, 1, 0, 0);
343
+ expect(localTimezone).toBeUndefined();
344
+ expect(() => dateToTime(localMidnight)).not.toThrow();
345
+ expect(dateToTime(localMidnight, undefined, 'hh:mm')).toBe('00:00');
346
+ const date = timeToDate('10:30', undefined);
347
+ expect(date.getHours()).toBe(10);
348
+ expect(date.getMinutes()).toBe(30);
349
+ expect(dateToTime(date, undefined)).toBe('10:30 AM');
350
+ });
351
+ it('still converts a valid tenant timezone', () => {
352
+ const { dateToTime, timeToDate } = loadTimezoneUtils();
353
+ const utc0 = new Date('2023-01-01T00:00:00Z');
354
+ expect(dateToTime(utc0, tz.la, 'hh:mm')).toBe('16:00');
355
+ const date = timeToDate('01:23 AM', tz.la, utc0);
356
+ expect(dateToTime(date, tz.la, 'hh:mm')).toBe('01:23');
357
+ expect(date.toISOString()).toBe('2022-12-31T09:23:00.000Z');
358
+ });
359
+ it('keeps string min and max as clock times', () => {
360
+ const { consumeMinMax } = loadTimezoneUtils();
361
+ expect(consumeMinMax('01:00', '02:00', 'Asia/Tokyo')).toEqual({
362
+ min: '01:00',
363
+ max: '02:00',
364
+ });
365
+ expect(consumeMinMax('08:00', undefined, undefined)).toEqual({
366
+ min: '08:00',
367
+ max: '23:59',
368
+ });
369
+ });
370
+ it('does not throw when the timezone name is invalid', () => {
371
+ const { dateToTime, timeToDate } = loadTimezoneUtils();
372
+ const utc0 = new Date('2023-01-01T00:00:00Z');
373
+ expect(dateToTime(utc0, 'Not/AZone')).toBeUndefined();
374
+ expect(timeToDate('10:30', 'Not/AZone')).toBeUndefined();
375
+ });
376
+ });
304
377
  //# sourceMappingURL=TimePickerUtils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimePickerUtils.test.js","sourceRoot":"","sources":["../../../../src/components/TimePicker/utils/TimePickerUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tconsumeMinMax,\n\tcheckMinMax,\n\tfillDateRange,\n\ttoTimeFormat,\n\tparseUserInput,\n\tgetClosestIndexes,\n\tstringToDate,\n\tdateToTime,\n\ttimeToDate,\n\tgetReturnDate,\n\t/*\n\t * getClosestOption,\n\t * filteredOptions,\n\t */\n} from './';\n\n// Timezones\nconst tz = {\n\tutc: 'UTC',\n\takl: 'Pacific/Auckland', // UTC+13\n\tseoul: 'Asia/Seoul', // UTC+9\n\tyrv: 'Asia/Yerevan', // UTC+4\n\tla: 'America/Los_Angeles', // UTC-8\n};\n\ndescribe('TimePickerUtils', () => {\n\tconst [f1, f2] = ['hh:mm xm', 'hh:mm'];\n\n\tdescribe('consumeMinMax', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT;\n\n\t\t\t[minT, maxT] = ['01:00', '23:55'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('01:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:55');\n\n\t\t\t[minT, maxT] = ['01:01 PM', '11:56 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('13:01');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:56');\n\n\t\t\t[minT, maxT] = ['12:00 AM', '12:00 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('12:00');\n\n\t\t\tminT = new Date('2023-01-01T00:00:00Z');\n\t\t\tmaxT = new Date('2023-01-01T23:59:59Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:59');\n\n\t\t\t// min > max\n\t\t\tminT = '13:00';\n\t\t\tmaxT = new Date('2023-01-01T12:00:00Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('12:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('13:00');\n\n\t\t\t// min > max\n\t\t\tminT = new Date('2023-01-01T12:00:00Z');\n\t\t\tmaxT = '11:00';\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('11:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('12:00');\n\n\t\t\t// not same day\n\t\t\tminT = new Date('2023-02-01T08:00:00Z');\n\t\t\tmaxT = new Date('2023-01-01T07:00:00Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:59');\n\n\t\t\t// no timezone set\n\t\t\tminT = new Date('2023-01-01T00:00:00');\n\t\t\tmaxT = new Date('2023-01-01T23:59:59');\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\n\t\t\t[minT, maxT] = ['12:00 AM', '12:00 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('12:00');\n\n\t\t\t// undefined, null, wrong entry\n\t\t\t[minT, maxT] = [undefined, undefined];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\t[minT, maxT] = ['08:00', undefined];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\t[minT, maxT] = [undefined, '08:00'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('08:00');\n\t\t\tminT = new Date('2023-01-01T17:00:00');\n\t\t\tmaxT = null;\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('17:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\tminT = null;\n\t\t\tmaxT = new Date('2023-01-01T17:00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('17:00');\n\t\t\t[minT, maxT] = ['test', '08:00'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('08:00');\n\t\t\t[minT, maxT] = ['08:00', ''];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t});\n\t});\n\n\tdescribe('checkMinMax', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT;\n\n\t\t\t[minT, maxT] = ['01:00', '23:55'];\n\t\t\texpect(checkMinMax(minT, maxT, '23:54')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '23:55')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '23:56')).toEqual(false);\n\n\t\t\texpect(checkMinMax(maxT, minT, '23:54')).toEqual(true); // Reversed min-max test\n\n\t\t\t[minT, maxT] = ['01:00 am', '1:59 am'];\n\t\t\texpect(checkMinMax(minT, maxT, '23:58')).toEqual(false);\n\n\t\t\t[minT, maxT] = ['01:00 am', '1:59 am'];\n\t\t\texpect(checkMinMax(minT, maxT, '01:00')).toEqual(true);\n\n\t\t\t[minT, maxT] = ['22:22', '22:23'];\n\t\t\texpect(checkMinMax(minT, maxT, '10:21 pm')).toEqual(false);\n\t\t\texpect(checkMinMax(minT, maxT, '10:22 pm')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '10:23 pm')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '10:24 pm')).toEqual(false);\n\t\t});\n\t});\n\n\tdescribe('fillDateRange, toTimeFormat', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT, increment, range;\n\n\t\t\t[minT, maxT, increment] = ['00:00', '23:59', 1];\n\t\t\trange = fillDateRange(minT, maxT, increment);\n\t\t\texpect(range.length).toEqual(1440);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('12:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[1439])).toEqual('11:59 PM');\n\t\t\texpect(toTimeFormat(range[0], f1)).toEqual('12:00 AM');\n\t\t\texpect(toTimeFormat(range[1439], f1)).toEqual('11:59 PM');\n\t\t\t// Test 24-hour values\n\t\t\texpect(toTimeFormat.hhmm(range[0])).toEqual('00:00');\n\t\t\texpect(toTimeFormat.hhmm(range[1439])).toEqual('23:59');\n\t\t\texpect(toTimeFormat(range[0], f2)).toEqual('00:00');\n\t\t\texpect(toTimeFormat(range[1439], f2)).toEqual('23:59');\n\n\t\t\t[minT, maxT, increment] = ['08:00 AM', '10:00 AM', 5];\n\t\t\trange = fillDateRange(minT, maxT, increment);\n\t\t\texpect(range.length).toEqual(25);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('08:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[24])).toEqual('10:00 AM');\n\n\t\t\trange = fillDateRange(minT, maxT, increment); // Reversed min-max\n\t\t\texpect(range.length).toEqual(25);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('08:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[24])).toEqual('10:00 AM');\n\n\t\t\t// Test string conversion to time\n\t\t\texpect(toTimeFormat.hhmmxm('1:23')).toEqual('01:23 AM');\n\t\t\texpect(toTimeFormat.hhmmxm('23:45')).toEqual('11:45 PM');\n\t\t\texpect(toTimeFormat.hhmmxm('8:088')).toEqual('08:08 AM');\n\t\t\texpect(toTimeFormat.hhmmxm('88:88')).toBeNull(); // Reject\n\t\t\t// Test 24-hour values\n\t\t\texpect(toTimeFormat.hhmm('1:23')).toEqual('01:23');\n\t\t\texpect(toTimeFormat.hhmm('23:45')).toEqual('23:45');\n\t\t\texpect(toTimeFormat.hhmm('8:088')).toEqual('08:08');\n\t\t\texpect(toTimeFormat.hhmm('88:88')).toBeNull(); // Reject\n\t\t});\n\t});\n\n\tdescribe('parseUserInput', () => {\n\t\tit('empty string', () => {\n\t\t\texpect(parseUserInput('')).toBeNull();\n\t\t});\n\n\t\tit('core logic 1 (no colon)', () => {\n\t\t\texpect(parseUserInput('2').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('23').join()).toEqual('11,00,PM');\n\t\t\texpect(parseUserInput('24').join()).toEqual('12,00,AM');\n\t\t\texpect(parseUserInput('25')).toBeNull(); // Reject hour value from range 25-99\n\t\t\texpect(parseUserInput('99')).toBeNull();\n\t\t\texpect(parseUserInput('234').join()).toEqual('02,34,');\n\t\t\texpect(parseUserInput('2341').join()).toEqual('11,41,PM');\n\n\t\t\texpect(parseUserInput('2341a').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123p').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341am').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123pm').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341aa').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123pp').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('2341ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('core logic 2 (with leading zero)', () => {\n\t\t\texpect(parseUserInput('0').join()).toEqual('12,00,');\n\t\t\texpect(parseUserInput('02').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('023').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('0234').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('0234a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('0234p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('0234am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('0234pm').join()).toEqual('02,34,PM');\n\t\t});\n\n\t\tit('core logic 3 (with colon)', () => {\n\t\t\texpect(parseUserInput('2').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('2:3').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('2:34').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('2:34a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('2:34p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('2:34am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('2:34pm').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('2:4am').join()).toEqual('02,40,AM');\n\t\t\texpect(parseUserInput('2:4pm').join()).toEqual('02,40,PM');\n\n\t\t\texpect(parseUserInput('2:4aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('2:4ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('core logic 4 (with colon and zero)', () => {\n\t\t\texpect(parseUserInput('02:').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('02:3').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('02:34').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('02:34a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('02:34p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('02:34am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('02:34pm').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('02:34aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('02:34ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases, 122 vs 1220', () => {\n\t\t\texpect(parseUserInput('122').join()).toEqual('01,22,');\n\t\t\texpect(parseUserInput('122a').join()).toEqual('01,22,AM');\n\t\t\texpect(parseUserInput('122aaa')).toBeNull(); // Reject\n\n\t\t\texpect(parseUserInput('1220').join()).toEqual('12,20,');\n\t\t\texpect(parseUserInput('1220aaa')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases, 028 vs 0280', () => {\n\t\t\texpect(parseUserInput('028').join()).toEqual('00,28,');\n\t\t\texpect(parseUserInput('028a').join()).toEqual('00,28,AM');\n\t\t\texpect(parseUserInput('028aaa')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases', () => {\n\t\t\texpect(parseUserInput('2341T').join()).toEqual('11,41,PM');\n\t\t\texpect(parseUserInput('2341A').join()).toEqual('11,41,PM');\n\t\t\texpect(parseUserInput('99')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('A')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('$')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('0823AB').join()).toEqual('08,23,AM');\n\t\t\texpect(parseUserInput('0823QQQ')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('input rejection', () => {\n\t\t\texpect(parseUserInput('0823abcd')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('12345').join()).toEqual('12,34,');\n\t\t\texpect(parseUserInput('123456')).toBeNull(); // Reject\n\t\t});\n\t});\n});\n\ndescribe('toTimeFormat, stringToDate', () => {\n\tit('should return correct values', () => {\n\t\tlet time, date;\n\n\t\ttime = '00:00';\n\t\tdate = stringToDate(time);\n\t\texpect(toTimeFormat.hhmmxm(date)).toEqual('12:00 AM');\n\t\texpect(toTimeFormat.hhmm(date)).toEqual('00:00');\n\n\t\ttime = '11:11 PM';\n\t\tdate = stringToDate(time);\n\t\texpect(toTimeFormat.hhmmxm(date)).toEqual('11:11 PM');\n\t\texpect(toTimeFormat.hhmm(date)).toEqual('23:11');\n\t});\n});\n\ndescribe('getClosest', () => {\n\tit('should return correct values', () => {\n\t\tconst [maxTime, minTime, increment] = ['01:00', '02:00', 30];\n\t\tconst opts = fillDateRange(maxTime, minTime, increment).map((date) => ({\n\t\t\tvalue: date,\n\t\t\ttext: toTimeFormat.hhmmxm(date),\n\t\t}));\n\t\tlet time;\n\n\t\ttime = stringToDate('00:55');\n\t\texpect(getClosestIndexes(opts, time)).toBeNull();\n\n\t\ttime = stringToDate('01:00');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0]);\n\n\t\ttime = stringToDate('01:01');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0, 1]);\n\n\t\ttime = stringToDate('01:15');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0, 1]);\n\n\t\ttime = stringToDate('01:16');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([1, 0]);\n\n\t\ttime = stringToDate('02:01');\n\t\texpect(getClosestIndexes(opts, time)).toBeNull();\n\t});\n});\n\ndescribe('timezone utils', () => {\n\tit('dateToTime should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z'); // 00:00 UTC, XX:00 local\n\n\t\texpect(dateToTime(utc0, tz.utc, 'hh:mm')).toBe('00:00');\n\t\texpect(dateToTime(utc0, tz.akl, 'hh:mm')).toBe('13:00');\n\t\texpect(dateToTime(utc0, tz.seoul, 'hh:mm')).toBe('09:00');\n\t\texpect(dateToTime(utc0, tz.yrv, 'hh:mm')).toBe('04:00');\n\t\texpect(dateToTime(utc0, tz.la, 'hh:mm')).toBe('16:00');\n\t});\n\n\tit('timeToDate should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z');\n\n\t\tlet date;\n\n\t\tdate = timeToDate('10:30'); // Today, timezone is local\n\t\texpect(dateToTime(date)).toBe('10:30 AM');\n\n\t\tdate = timeToDate('10:30', tz.utc); // Today, timezone is UTC\n\t\texpect(dateToTime(date, tz.utc)).toBe('10:30 AM');\n\n\t\tdate = timeToDate('10:30 PM', tz.yrv); // Today, timezone is yrv\n\t\texpect(dateToTime(date, tz.yrv, 'hh:mm')).toBe('22:30');\n\n\t\tdate = timeToDate('10:30', tz.utc, utc0); // Date is 01/01/2023, timezone is UTC\n\t\texpect(dateToTime(date, tz.utc)).toBe('10:30 AM');\n\t\texpect(date.toISOString()).toBe('2023-01-01T10:30:00.000Z');\n\n\t\tdate = timeToDate('01:23 AM', tz.la, utc0); // Date is 01/01/2023 00:00 UTC, timezone is la (12/31/2022 16:00)\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('01:23');\n\t\texpect(date.toISOString()).toBe('2022-12-31T09:23:00.000Z'); // 09:23 UTC = 01:23 in la, e.g. prev day is correctly used\n\t});\n\n\tit('getReturnDate should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z'); // 00:00 UTC, XX:00 local\n\t\tconst d1 = timeToDate('10:30', tz.utc);\n\t\tconst d2 = timeToDate('22:30', tz.utc);\n\n\t\tlet date;\n\n\t\t// Test default values\n\t\tdate = getReturnDate('12:00 AM', '23:59 PM', undefined, tz.utc);\n\t\texpect(dateToTime(date, tz.utc)).toBe('12:00 AM');\n\n\t\t// Test min\n\t\tdate = getReturnDate(utc0, '05:30', undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la)).toBe('12:00 AM');\n\t\texpect(date.toISOString()).toBe('2022-12-31T08:00:00.000Z'); // 08:00 UTC = 00:00 la\n\n\t\t// Test max\n\t\tdate = getReturnDate('12:00 AM', d1, undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('00:00');\n\n\t\t// Test min > max\n\t\tdate = getReturnDate(d2, d1, undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('00:00');\n\n\t\t// Test value\n\t\tdate = getReturnDate('12:00 AM', '23:59 PM', utc0, tz.seoul);\n\t\texpect(dateToTime(date, tz.seoul, 'hh:mm')).toBe('00:00');\n\t\texpect(date.toISOString()).toBe('2022-12-31T15:00:00.000Z'); // 15:00 UTC = 00:00 seoul\n\t});\n});\n"]}
1
+ {"version":3,"file":"TimePickerUtils.test.js","sourceRoot":"","sources":["../../../../src/components/TimePicker/utils/TimePickerUtils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tconsumeMinMax,\n\tcheckMinMax,\n\tfillDateRange,\n\ttoTimeFormat,\n\tparseUserInput,\n\tgetClosestIndexes,\n\tstringToDate,\n\tdateToTime,\n\ttimeToDate,\n\tgetReturnDate,\n\t/*\n\t * getClosestOption,\n\t * filteredOptions,\n\t */\n} from './';\n\n// Timezones\nconst tz = {\n\tutc: 'UTC',\n\takl: 'Pacific/Auckland', // UTC+13\n\tseoul: 'Asia/Seoul', // UTC+9\n\tyrv: 'Asia/Yerevan', // UTC+4\n\tla: 'America/Los_Angeles', // UTC-8\n};\n\ndescribe('TimePickerUtils', () => {\n\tconst [f1, f2] = ['hh:mm xm', 'hh:mm'];\n\n\tdescribe('consumeMinMax', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT;\n\n\t\t\t[minT, maxT] = ['01:00', '23:55'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('01:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:55');\n\n\t\t\t[minT, maxT] = ['01:01 PM', '11:56 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('13:01');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:56');\n\n\t\t\t[minT, maxT] = ['12:00 AM', '12:00 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('12:00');\n\n\t\t\tminT = new Date('2023-01-01T00:00:00Z');\n\t\t\tmaxT = new Date('2023-01-01T23:59:59Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:59');\n\n\t\t\t// min > max\n\t\t\tminT = '13:00';\n\t\t\tmaxT = new Date('2023-01-01T12:00:00Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('12:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('13:00');\n\n\t\t\t// min > max\n\t\t\tminT = new Date('2023-01-01T12:00:00Z');\n\t\t\tmaxT = '11:00';\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('11:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('12:00');\n\n\t\t\t// not same day\n\t\t\tminT = new Date('2023-02-01T08:00:00Z');\n\t\t\tmaxT = new Date('2023-01-01T07:00:00Z');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT, tz.utc).max).toEqual('23:59');\n\n\t\t\t// no timezone set\n\t\t\tminT = new Date('2023-01-01T00:00:00');\n\t\t\tmaxT = new Date('2023-01-01T23:59:59');\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\n\t\t\t[minT, maxT] = ['12:00 AM', '12:00 PM'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('12:00');\n\n\t\t\t/*\n\t\t\t * String bounds are clock times. A tenant zone does not shift them.\n\t\t\t */\n\t\t\texpect(consumeMinMax('01:00', '02:00', 'Asia/Tokyo')).toEqual({\n\t\t\t\tmin: '01:00',\n\t\t\t\tmax: '02:00',\n\t\t\t});\n\n\t\t\t// Empty timezone stays on the system zone, so same-day Date bounds keep their clock times.\n\t\t\texpect(\n\t\t\t\tconsumeMinMax(\n\t\t\t\t\tnew Date(2023, 0, 1, 9, 0),\n\t\t\t\t\tnew Date(2023, 0, 1, 17, 0),\n\t\t\t\t\t''\n\t\t\t\t)\n\t\t\t).toEqual({ min: '09:00', max: '17:00' });\n\n\t\t\t// undefined, null, wrong entry\n\t\t\t[minT, maxT] = [undefined, undefined];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\t[minT, maxT] = ['08:00', undefined];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\t[minT, maxT] = [undefined, '08:00'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('08:00');\n\t\t\tminT = new Date('2023-01-01T17:00:00');\n\t\t\tmaxT = null;\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('17:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t\tminT = null;\n\t\t\tmaxT = new Date('2023-01-01T17:00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('17:00');\n\t\t\t[minT, maxT] = ['test', '08:00'];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('00:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('08:00');\n\t\t\t[minT, maxT] = ['08:00', ''];\n\t\t\texpect(consumeMinMax(minT, maxT).min).toEqual('08:00');\n\t\t\texpect(consumeMinMax(minT, maxT).max).toEqual('23:59');\n\t\t});\n\t});\n\n\tdescribe('checkMinMax', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT;\n\n\t\t\t[minT, maxT] = ['01:00', '23:55'];\n\t\t\texpect(checkMinMax(minT, maxT, '23:54')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '23:55')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '23:56')).toEqual(false);\n\n\t\t\texpect(checkMinMax(maxT, minT, '23:54')).toEqual(true); // Reversed min-max test\n\n\t\t\t[minT, maxT] = ['01:00 am', '1:59 am'];\n\t\t\texpect(checkMinMax(minT, maxT, '23:58')).toEqual(false);\n\n\t\t\t[minT, maxT] = ['01:00 am', '1:59 am'];\n\t\t\texpect(checkMinMax(minT, maxT, '01:00')).toEqual(true);\n\n\t\t\t[minT, maxT] = ['22:22', '22:23'];\n\t\t\texpect(checkMinMax(minT, maxT, '10:21 pm')).toEqual(false);\n\t\t\texpect(checkMinMax(minT, maxT, '10:22 pm')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '10:23 pm')).toEqual(true);\n\t\t\texpect(checkMinMax(minT, maxT, '10:24 pm')).toEqual(false);\n\t\t});\n\t});\n\n\tdescribe('fillDateRange, toTimeFormat', () => {\n\t\tit('should return correct values', () => {\n\t\t\tlet minT, maxT, increment, range;\n\n\t\t\t[minT, maxT, increment] = ['00:00', '23:59', 1];\n\t\t\trange = fillDateRange(minT, maxT, increment);\n\t\t\texpect(range.length).toEqual(1440);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('12:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[1439])).toEqual('11:59 PM');\n\t\t\texpect(toTimeFormat(range[0], f1)).toEqual('12:00 AM');\n\t\t\texpect(toTimeFormat(range[1439], f1)).toEqual('11:59 PM');\n\t\t\t// Test 24-hour values\n\t\t\texpect(toTimeFormat.hhmm(range[0])).toEqual('00:00');\n\t\t\texpect(toTimeFormat.hhmm(range[1439])).toEqual('23:59');\n\t\t\texpect(toTimeFormat(range[0], f2)).toEqual('00:00');\n\t\t\texpect(toTimeFormat(range[1439], f2)).toEqual('23:59');\n\n\t\t\t[minT, maxT, increment] = ['08:00 AM', '10:00 AM', 5];\n\t\t\trange = fillDateRange(minT, maxT, increment);\n\t\t\texpect(range.length).toEqual(25);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('08:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[24])).toEqual('10:00 AM');\n\n\t\t\trange = fillDateRange(minT, maxT, increment); // Reversed min-max\n\t\t\texpect(range.length).toEqual(25);\n\t\t\texpect(toTimeFormat.hhmmxm(range[0])).toEqual('08:00 AM');\n\t\t\texpect(toTimeFormat.hhmmxm(range[24])).toEqual('10:00 AM');\n\n\t\t\t// Test string conversion to time\n\t\t\texpect(toTimeFormat.hhmmxm('1:23')).toEqual('01:23 AM');\n\t\t\texpect(toTimeFormat.hhmmxm('23:45')).toEqual('11:45 PM');\n\t\t\texpect(toTimeFormat.hhmmxm('8:088')).toEqual('08:08 AM');\n\t\t\texpect(toTimeFormat.hhmmxm('88:88')).toBeNull(); // Reject\n\t\t\t// Test 24-hour values\n\t\t\texpect(toTimeFormat.hhmm('1:23')).toEqual('01:23');\n\t\t\texpect(toTimeFormat.hhmm('23:45')).toEqual('23:45');\n\t\t\texpect(toTimeFormat.hhmm('8:088')).toEqual('08:08');\n\t\t\texpect(toTimeFormat.hhmm('88:88')).toBeNull(); // Reject\n\t\t});\n\t});\n\n\tdescribe('parseUserInput', () => {\n\t\tit('empty string', () => {\n\t\t\texpect(parseUserInput('')).toBeNull();\n\t\t});\n\n\t\tit('core logic 1 (no colon)', () => {\n\t\t\texpect(parseUserInput('2').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('23').join()).toEqual('11,00,PM');\n\t\t\texpect(parseUserInput('24').join()).toEqual('12,00,AM');\n\t\t\texpect(parseUserInput('25')).toBeNull(); // Reject hour value from range 25-99\n\t\t\texpect(parseUserInput('99')).toBeNull();\n\t\t\texpect(parseUserInput('234').join()).toEqual('02,34,');\n\t\t\texpect(parseUserInput('2341').join()).toEqual('11,41,PM');\n\n\t\t\texpect(parseUserInput('2341a').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123p').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341am').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123pm').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341aa').join()).toEqual('11,41,PM'); // Hours are stronger\n\t\t\texpect(parseUserInput('0123pp').join()).toEqual('01,23,PM');\n\n\t\t\texpect(parseUserInput('2341aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('2341ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('core logic 2 (with leading zero)', () => {\n\t\t\texpect(parseUserInput('0').join()).toEqual('12,00,');\n\t\t\texpect(parseUserInput('02').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('023').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('0234').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('0234a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('0234p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('0234am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('0234pm').join()).toEqual('02,34,PM');\n\t\t});\n\n\t\tit('core logic 3 (with colon)', () => {\n\t\t\texpect(parseUserInput('2').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('2:3').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('2:34').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('2:34a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('2:34p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('2:34am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('2:34pm').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('2:4am').join()).toEqual('02,40,AM');\n\t\t\texpect(parseUserInput('2:4pm').join()).toEqual('02,40,PM');\n\n\t\t\texpect(parseUserInput('2:4aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('2:4ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('core logic 4 (with colon and zero)', () => {\n\t\t\texpect(parseUserInput('02:').join()).toEqual('02,00,');\n\t\t\texpect(parseUserInput('02:3').join()).toEqual('02,30,');\n\t\t\texpect(parseUserInput('02:34').join()).toEqual('02,34,');\n\n\t\t\texpect(parseUserInput('02:34a').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('02:34p').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('02:34am').join()).toEqual('02,34,AM');\n\t\t\texpect(parseUserInput('02:34pm').join()).toEqual('02,34,PM');\n\n\t\t\texpect(parseUserInput('02:34aaa')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('02:34ppp')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases, 122 vs 1220', () => {\n\t\t\texpect(parseUserInput('122').join()).toEqual('01,22,');\n\t\t\texpect(parseUserInput('122a').join()).toEqual('01,22,AM');\n\t\t\texpect(parseUserInput('122aaa')).toBeNull(); // Reject\n\n\t\t\texpect(parseUserInput('1220').join()).toEqual('12,20,');\n\t\t\texpect(parseUserInput('1220aaa')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases, 028 vs 0280', () => {\n\t\t\texpect(parseUserInput('028').join()).toEqual('00,28,');\n\t\t\texpect(parseUserInput('028a').join()).toEqual('00,28,AM');\n\t\t\texpect(parseUserInput('028aaa')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('edge cases', () => {\n\t\t\texpect(parseUserInput('2341T').join()).toEqual('11,41,PM');\n\t\t\texpect(parseUserInput('2341A').join()).toEqual('11,41,PM');\n\t\t\texpect(parseUserInput('99')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('A')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('$')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('0823AB').join()).toEqual('08,23,AM');\n\t\t\texpect(parseUserInput('0823QQQ')).toBeNull(); // Reject\n\t\t});\n\n\t\tit('input rejection', () => {\n\t\t\texpect(parseUserInput('0823abcd')).toBeNull(); // Reject\n\t\t\texpect(parseUserInput('12345').join()).toEqual('12,34,');\n\t\t\texpect(parseUserInput('123456')).toBeNull(); // Reject\n\t\t});\n\t});\n});\n\ndescribe('toTimeFormat, stringToDate', () => {\n\tit('should return correct values', () => {\n\t\tlet time, date;\n\n\t\ttime = '00:00';\n\t\tdate = stringToDate(time);\n\t\texpect(toTimeFormat.hhmmxm(date)).toEqual('12:00 AM');\n\t\texpect(toTimeFormat.hhmm(date)).toEqual('00:00');\n\n\t\ttime = '11:11 PM';\n\t\tdate = stringToDate(time);\n\t\texpect(toTimeFormat.hhmmxm(date)).toEqual('11:11 PM');\n\t\texpect(toTimeFormat.hhmm(date)).toEqual('23:11');\n\t});\n});\n\ndescribe('getClosest', () => {\n\tit('should return correct values', () => {\n\t\tconst [maxTime, minTime, increment] = ['01:00', '02:00', 30];\n\t\tconst opts = fillDateRange(maxTime, minTime, increment).map((date) => ({\n\t\t\tvalue: date,\n\t\t\ttext: toTimeFormat.hhmmxm(date),\n\t\t}));\n\t\tlet time;\n\n\t\ttime = stringToDate('00:55');\n\t\texpect(getClosestIndexes(opts, time)).toBeNull();\n\n\t\ttime = stringToDate('01:00');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0]);\n\n\t\ttime = stringToDate('01:01');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0, 1]);\n\n\t\ttime = stringToDate('01:15');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([0, 1]);\n\n\t\ttime = stringToDate('01:16');\n\t\texpect(getClosestIndexes(opts, time)).toEqual([1, 0]);\n\n\t\ttime = stringToDate('02:01');\n\t\texpect(getClosestIndexes(opts, time)).toBeNull();\n\t});\n});\n\ndescribe('timezone utils', () => {\n\tit('dateToTime should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z'); // 00:00 UTC, XX:00 local\n\n\t\texpect(dateToTime(utc0, tz.utc, 'hh:mm')).toBe('00:00');\n\t\texpect(dateToTime(utc0, tz.akl, 'hh:mm')).toBe('13:00');\n\t\texpect(dateToTime(utc0, tz.seoul, 'hh:mm')).toBe('09:00');\n\t\texpect(dateToTime(utc0, tz.yrv, 'hh:mm')).toBe('04:00');\n\t\texpect(dateToTime(utc0, tz.la, 'hh:mm')).toBe('16:00');\n\t});\n\n\tit('timeToDate should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z');\n\n\t\tlet date;\n\n\t\tdate = timeToDate('10:30'); // Today, timezone is local\n\t\texpect(dateToTime(date)).toBe('10:30 AM');\n\n\t\tdate = timeToDate('10:30', tz.utc); // Today, timezone is UTC\n\t\texpect(dateToTime(date, tz.utc)).toBe('10:30 AM');\n\n\t\tdate = timeToDate('10:30 PM', tz.yrv); // Today, timezone is yrv\n\t\texpect(dateToTime(date, tz.yrv, 'hh:mm')).toBe('22:30');\n\n\t\tdate = timeToDate('10:30', tz.utc, utc0); // Date is 01/01/2023, timezone is UTC\n\t\texpect(dateToTime(date, tz.utc)).toBe('10:30 AM');\n\t\texpect(date.toISOString()).toBe('2023-01-01T10:30:00.000Z');\n\n\t\tdate = timeToDate('01:23 AM', tz.la, utc0); // Date is 01/01/2023 00:00 UTC, timezone is la (12/31/2022 16:00)\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('01:23');\n\t\texpect(date.toISOString()).toBe('2022-12-31T09:23:00.000Z'); // 09:23 UTC = 01:23 in la, e.g. prev day is correctly used\n\t});\n\n\tit('getReturnDate should return correct values', () => {\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z'); // 00:00 UTC, XX:00 local\n\t\tconst d1 = timeToDate('10:30', tz.utc);\n\t\tconst d2 = timeToDate('22:30', tz.utc);\n\n\t\tlet date;\n\n\t\t// Test default values\n\t\tdate = getReturnDate('12:00 AM', '23:59 PM', undefined, tz.utc);\n\t\texpect(dateToTime(date, tz.utc)).toBe('12:00 AM');\n\n\t\t// Test min\n\t\tdate = getReturnDate(utc0, '05:30', undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la)).toBe('12:00 AM');\n\t\texpect(date.toISOString()).toBe('2022-12-31T08:00:00.000Z'); // 08:00 UTC = 00:00 la\n\n\t\t// Test max\n\t\tdate = getReturnDate('12:00 AM', d1, undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('00:00');\n\n\t\t// Test min > max\n\t\tdate = getReturnDate(d2, d1, undefined, tz.la);\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('00:00');\n\n\t\t// Test value\n\t\tdate = getReturnDate('12:00 AM', '23:59 PM', utc0, tz.seoul);\n\t\texpect(dateToTime(date, tz.seoul, 'hh:mm')).toBe('00:00');\n\t\texpect(date.toISOString()).toBe('2022-12-31T15:00:00.000Z'); // 15:00 UTC = 00:00 seoul\n\t});\n});\n\nconst OriginalDateTimeFormat = Intl.DateTimeFormat;\n\nconst mockMissingBrowserTimeZone = () => {\n\tjest.spyOn(Intl, 'DateTimeFormat').mockImplementation(((\n\t\tlocales?: string | string[],\n\t\toptions?: Intl.DateTimeFormatOptions\n\t) => {\n\t\tconst formatter = new OriginalDateTimeFormat(locales, options);\n\t\tif (!options?.timeZone) {\n\t\t\tconst resolved = formatter.resolvedOptions.bind(formatter);\n\t\t\t(formatter as { resolvedOptions: () => unknown }).resolvedOptions =\n\t\t\t\t() => ({\n\t\t\t\t\t...resolved(),\n\t\t\t\t\ttimeZone: undefined,\n\t\t\t\t});\n\t\t}\n\t\treturn formatter;\n\t}) as typeof Intl.DateTimeFormat);\n};\n\ndescribe('when resolvedOptions().timeZone is undefined', () => {\n\tbeforeEach(() => {\n\t\tmockMissingBrowserTimeZone();\n\t\tjest.spyOn(console, 'warn').mockImplementation(() => undefined);\n\t});\n\n\tafterEach(() => {\n\t\tjest.restoreAllMocks();\n\t});\n\n\tconst loadTimezoneUtils = () => {\n\t\tlet utils: typeof import('./timezoneUtils');\n\t\tjest.isolateModules(() => {\n\t\t\tutils = require('./timezoneUtils');\n\t\t});\n\t\treturn utils;\n\t};\n\n\tit('normalizes the browser zone to undefined and formats in the system zone', () => {\n\t\tconst { dateToTime, localTimezone, timeToDate } = loadTimezoneUtils();\n\t\tconst localMidnight = new Date(2023, 0, 1, 0, 0);\n\n\t\texpect(localTimezone).toBeUndefined();\n\t\texpect(() => dateToTime(localMidnight)).not.toThrow();\n\t\texpect(dateToTime(localMidnight, undefined, 'hh:mm')).toBe('00:00');\n\n\t\tconst date = timeToDate('10:30', undefined);\n\t\texpect(date.getHours()).toBe(10);\n\t\texpect(date.getMinutes()).toBe(30);\n\t\texpect(dateToTime(date, undefined)).toBe('10:30 AM');\n\t});\n\n\tit('still converts a valid tenant timezone', () => {\n\t\tconst { dateToTime, timeToDate } = loadTimezoneUtils();\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z');\n\n\t\texpect(dateToTime(utc0, tz.la, 'hh:mm')).toBe('16:00');\n\n\t\tconst date = timeToDate('01:23 AM', tz.la, utc0);\n\t\texpect(dateToTime(date, tz.la, 'hh:mm')).toBe('01:23');\n\t\texpect(date.toISOString()).toBe('2022-12-31T09:23:00.000Z');\n\t});\n\n\tit('keeps string min and max as clock times', () => {\n\t\tconst { consumeMinMax } = loadTimezoneUtils();\n\n\t\texpect(consumeMinMax('01:00', '02:00', 'Asia/Tokyo')).toEqual({\n\t\t\tmin: '01:00',\n\t\t\tmax: '02:00',\n\t\t});\n\t\texpect(consumeMinMax('08:00', undefined, undefined)).toEqual({\n\t\t\tmin: '08:00',\n\t\t\tmax: '23:59',\n\t\t});\n\t});\n\n\tit('does not throw when the timezone name is invalid', () => {\n\t\tconst { dateToTime, timeToDate } = loadTimezoneUtils();\n\t\tconst utc0 = new Date('2023-01-01T00:00:00Z');\n\n\t\texpect(dateToTime(utc0, 'Not/AZone')).toBeUndefined();\n\t\texpect(timeToDate('10:30', 'Not/AZone')).toBeUndefined();\n\t});\n});\n"]}
@@ -1,3 +1,4 @@
1
+ /** Browser IANA zone, or undefined when the environment does not report one. */
1
2
  export declare const localTimezone: string;
2
3
  export declare const timeToDate: (time: string, tz?: string, baseDate?: Date) => Date;
3
4
  export declare const dateToTime: (d: Date, tz?: string, format?: string) => string;
@@ -1,19 +1,27 @@
1
1
  import { DateTime } from 'luxon';
2
2
  import moment from 'moment';
3
3
  import { isValidDate } from './utils';
4
- export const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4
+ /** Browser IANA zone, or undefined when the environment does not report one. */
5
+ export const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || undefined;
5
6
  const isValidTimeZone = (tz) => {
6
- if (!Intl || !Intl.DateTimeFormat().resolvedOptions().timeZone) {
7
- throw new Error('Time zones are not available in this environment');
8
- }
7
+ if (!tz)
8
+ return false;
9
9
  try {
10
- Intl.DateTimeFormat(undefined, { timeZone: tz });
11
- return true;
10
+ const formatter = new Intl.DateTimeFormat(undefined, { timeZone: tz });
11
+ return Boolean(formatter);
12
12
  }
13
13
  catch (ex) {
14
14
  return false;
15
15
  }
16
16
  };
17
+ /**
18
+ * Interpret a JS Date in the system zone, then move it only when `tz` is a
19
+ * real IANA zone. A missing browser zone stays on the system offset.
20
+ */
21
+ const dateTimeFromJSDate = (date, tz) => {
22
+ const dateTime = DateTime.fromJSDate(date);
23
+ return tz && isValidTimeZone(tz) ? dateTime.setZone(tz) : dateTime;
24
+ };
17
25
  const parseTimeString = (str) => {
18
26
  if (typeof str === 'string') {
19
27
  const date = moment(str, ['h:m a', 'H:m']).toDate();
@@ -28,10 +36,9 @@ export const timeToDate = (time, tz = localTimezone, baseDate) => {
28
36
  console.warn(`@servicetitan/design-system: Invalid timezone "${tz}"`);
29
37
  return undefined;
30
38
  }
31
- // Date to return time within, now or based on `date` provided
32
- const d = !baseDate
33
- ? DateTime.now().setZone(tz)
34
- : DateTime.fromJSDate(baseDate).setZone(tz);
39
+ // Instant in the system zone, moved only when `tz` is a valid IANA zone.
40
+ const base = DateTime.fromJSDate(baseDate !== null && baseDate !== void 0 ? baseDate : new Date());
41
+ const d = tz && isValidTimeZone(tz) ? base.setZone(tz) : base;
35
42
  const t = parseTimeString(time); // '11:22 AM' → Date
36
43
  if (!t)
37
44
  return undefined;
@@ -48,9 +55,7 @@ export const dateToTime = (d, tz = localTimezone, format = 'hh:mm xm') => {
48
55
  }
49
56
  if (format !== 'hh:mm xm' && format !== 'hh:mm')
50
57
  console.warn(`@servicetitan/design-system: dateToTime() invalid format "${format}", usind "hh:mm"`);
51
- let dateTime;
52
- if (tz && isValidTimeZone(tz))
53
- dateTime = DateTime.fromJSDate(d).setZone(tz);
58
+ const dateTime = dateTimeFromJSDate(d, tz);
54
59
  return dateTime.setLocale('en-US').toLocaleString({
55
60
  hour: '2-digit',
56
61
  minute: '2-digit',
@@ -108,8 +113,13 @@ export const consumeMinMax = (min, max, tz = localTimezone) => {
108
113
  };
109
114
  const sameDay = (d1, d2, tz) => {
110
115
  var _a, _b;
111
- const date1 = (_a = DateTime.fromJSDate(d1)) === null || _a === void 0 ? void 0 : _a.setZone(tz);
112
- const date2 = (_b = DateTime.fromJSDate(d2)) === null || _b === void 0 ? void 0 : _b.setZone(tz);
116
+ /*
117
+ * "" is not a zone. Treat it like a missing name so both dates stay
118
+ * in the system zone. An invalid name still produces an invalid DateTime.
119
+ */
120
+ const zone = tz || undefined;
121
+ const date1 = (_a = DateTime.fromJSDate(d1)) === null || _a === void 0 ? void 0 : _a.setZone(zone);
122
+ const date2 = (_b = DateTime.fromJSDate(d2)) === null || _b === void 0 ? void 0 : _b.setZone(zone);
113
123
  return date1 && date2 && date1.hasSame(date2, 'day');
114
124
  };
115
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"timezoneUtils.js","sourceRoot":"","sources":["../../../../src/components/TimePicker/utils/timezoneUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from 'luxon';\nimport moment from 'moment';\nimport { isValidDate } from './utils';\n\nexport const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nconst isValidTimeZone = (tz: string) => {\n\tif (!Intl || !Intl.DateTimeFormat().resolvedOptions().timeZone) {\n\t\tthrow new Error('Time zones are not available in this environment');\n\t}\n\n\ttry {\n\t\tIntl.DateTimeFormat(undefined, { timeZone: tz });\n\t\treturn true;\n\t} catch (ex) {\n\t\treturn false;\n\t}\n};\n\nconst parseTimeString = (str: string): Date => {\n\tif (typeof str === 'string') {\n\t\tconst date = moment(str, ['h:m a', 'H:m']).toDate();\n\t\tif (isValidDate(date)) return new Date(date);\n\t}\n\tconsole.warn(\n\t\t`@servicetitan/design-system: parseTimeString(val) invalid val:`,\n\t\tstr\n\t);\n\treturn null;\n};\n\nexport const timeToDate = (\n\ttime: string,\n\ttz = localTimezone,\n\tbaseDate?: Date\n): Date => {\n\tif (tz && !isValidTimeZone(tz)) {\n\t\tconsole.warn(`@servicetitan/design-system: Invalid timezone \"${tz}\"`);\n\t\treturn undefined;\n\t}\n\n\t// Date to return time within, now or based on `date` provided\n\tconst d = !baseDate\n\t\t? DateTime.now().setZone(tz)\n\t\t: DateTime.fromJSDate(baseDate).setZone(tz);\n\n\tconst t = parseTimeString(time); // '11:22 AM' → Date\n\tif (!t) return undefined;\n\n\tconst [h, m] = [t.getHours(), t.getMinutes()];\n\tconst result = d.set({ hour: h, minute: m, second: 0, millisecond: 0 }); // Rounding\n\n\treturn result.toJSDate();\n};\n\nexport const dateToTime = (\n\td: Date,\n\ttz = localTimezone,\n\tformat = 'hh:mm xm'\n): string => {\n\tif (!d || !isValidDate(d)) return undefined;\n\n\tif (tz && !isValidTimeZone(tz)) {\n\t\tconsole.warn(\n\t\t\t`@servicetitan/design-system: dateToTime() has invalid timezone: ${tz}`\n\t\t);\n\t\treturn undefined;\n\t}\n\n\tif (format !== 'hh:mm xm' && format !== 'hh:mm')\n\t\tconsole.warn(\n\t\t\t`@servicetitan/design-system: dateToTime() invalid format \"${format}\", usind \"hh:mm\"`\n\t\t);\n\n\tlet dateTime;\n\n\tif (tz && isValidTimeZone(tz))\n\t\tdateTime = DateTime.fromJSDate(d).setZone(tz);\n\n\treturn dateTime.setLocale('en-US').toLocaleString({\n\t\thour: '2-digit',\n\t\tminute: '2-digit',\n\t\thourCycle: format !== 'hh:mm xm' ? 'h23' : 'h12',\n\t});\n};\n\n// Returns {min, max} as 24-hour strings within timezone provided\nexport const consumeMinMax = (\n\tmin: Date | string,\n\tmax: Date | string,\n\ttz = localTimezone\n): { min: string; max: string } => {\n\tlet minStr, maxStr;\n\n\t// both min & max are instances of Date\n\tif (isValidDate(min as Date) && isValidDate(max as Date)) {\n\t\tif (sameDay(min, max, tz)) {\n\t\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t\tmaxStr = dateToTime(max as Date, tz, 'hh:mm');\n\t\t} else {\n\t\t\t// min and max are valid and not same day → use min\n\t\t\tconsole.warn(\n\t\t\t\t`@servicetitan/design-system: TimePicker's min (${min}) & max (${max}) are not in the same day, using max=23:59`\n\t\t\t);\n\t\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t\tmaxStr = '23:59';\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// min is Date, max is string\n\tif (isValidDate(min as Date) && !(max instanceof Date)) {\n\t\tconst realMax = parseTimeString(max) ? max : '23:59';\n\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\tmaxStr = realMax;\n\n\t\tif (min > timeToDate(realMax, tz, min as Date)) {\n\t\t\t// Reversing min & max\n\t\t\tminStr = realMax;\n\t\t\tmaxStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// min is string, max is Date\n\tif (!(min instanceof Date) && isValidDate(max as Date)) {\n\t\tconst realMin = parseTimeString(min) ? min : '00:00';\n\t\tminStr = realMin;\n\t\tmaxStr = dateToTime(max as Date, tz, 'hh:mm');\n\n\t\tif (max < timeToDate(realMin, tz, max as Date)) {\n\t\t\t// Reversing min & max\n\t\t\tminStr = dateToTime(max as Date, tz, 'hh:mm');\n\t\t\tmaxStr = realMin;\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// both min & max are strings\n\tconst minDate = parseTimeString(min as string) || parseTimeString('00:00');\n\tconst maxDate = parseTimeString(max as string) || parseTimeString('23:59');\n\tconst dates = [minDate, maxDate]\n\t\t.sort()\n\t\t.map((d) => dateToTime(d, localTimezone, 'hh:mm'));\n\n\treturn { min: dates[0], max: dates[1] };\n};\n\nconst sameDay = (d1: any, d2: any, tz: string): boolean => {\n\tconst date1 = DateTime.fromJSDate(d1)?.setZone(tz);\n\tconst date2 = DateTime.fromJSDate(d2)?.setZone(tz);\n\n\treturn date1 && date2 && date1.hasSame(date2, 'day');\n};\n\n/**\n * Prioity:\n * 1. min, if min is Date, if not...\n * 2. max, if max is Date, if not...\n * 3. value, if defined, if not...\n * 4. today @ timezone\n */\nexport const getReturnDate = (\n\tmin: Date | string,\n\tmax: Date | string,\n\tvalue?: Date,\n\ttz = localTimezone\n): Date => {\n\tlet returnDate;\n\n\tif (isValidDate(min as Date)) {\n\t\treturnDate = min;\n\t\tif (isValidDate(max as Date)) {\n\t\t\tif (min > max) returnDate = max;\n\t\t}\n\t} else if (isValidDate(max as Date)) {\n\t\treturnDate = max;\n\t} else if (isValidDate(value)) {\n\t\treturnDate = value;\n\t} else {\n\t\treturnDate = new Date();\n\t}\n\n\tconst res = timeToDate('00:00', tz, returnDate as Date);\n\n\treturn res;\n};\n"]}
1
+ {"version":3,"file":"timezoneUtils.js","sourceRoot":"","sources":["../../../../src/components/TimePicker/utils/timezoneUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from 'luxon';\nimport moment from 'moment';\nimport { isValidDate } from './utils';\n\n/** Browser IANA zone, or undefined when the environment does not report one. */\nexport const localTimezone =\n\tIntl.DateTimeFormat().resolvedOptions().timeZone || undefined;\n\nconst isValidTimeZone = (tz?: string): boolean => {\n\tif (!tz) return false;\n\n\ttry {\n\t\tconst formatter = new Intl.DateTimeFormat(undefined, { timeZone: tz });\n\t\treturn Boolean(formatter);\n\t} catch (ex) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Interpret a JS Date in the system zone, then move it only when `tz` is a\n * real IANA zone. A missing browser zone stays on the system offset.\n */\nconst dateTimeFromJSDate = (date: Date, tz?: string): DateTime => {\n\tconst dateTime = DateTime.fromJSDate(date);\n\treturn tz && isValidTimeZone(tz) ? dateTime.setZone(tz) : dateTime;\n};\n\nconst parseTimeString = (str: string): Date => {\n\tif (typeof str === 'string') {\n\t\tconst date = moment(str, ['h:m a', 'H:m']).toDate();\n\t\tif (isValidDate(date)) return new Date(date);\n\t}\n\tconsole.warn(\n\t\t`@servicetitan/design-system: parseTimeString(val) invalid val:`,\n\t\tstr\n\t);\n\treturn null;\n};\n\nexport const timeToDate = (\n\ttime: string,\n\ttz = localTimezone,\n\tbaseDate?: Date\n): Date => {\n\tif (tz && !isValidTimeZone(tz)) {\n\t\tconsole.warn(`@servicetitan/design-system: Invalid timezone \"${tz}\"`);\n\t\treturn undefined;\n\t}\n\n\t// Instant in the system zone, moved only when `tz` is a valid IANA zone.\n\tconst base = DateTime.fromJSDate(baseDate ?? new Date());\n\tconst d = tz && isValidTimeZone(tz) ? base.setZone(tz) : base;\n\n\tconst t = parseTimeString(time); // '11:22 AM' → Date\n\tif (!t) return undefined;\n\n\tconst [h, m] = [t.getHours(), t.getMinutes()];\n\tconst result = d.set({ hour: h, minute: m, second: 0, millisecond: 0 }); // Rounding\n\n\treturn result.toJSDate();\n};\n\nexport const dateToTime = (\n\td: Date,\n\ttz = localTimezone,\n\tformat = 'hh:mm xm'\n): string => {\n\tif (!d || !isValidDate(d)) return undefined;\n\n\tif (tz && !isValidTimeZone(tz)) {\n\t\tconsole.warn(\n\t\t\t`@servicetitan/design-system: dateToTime() has invalid timezone: ${tz}`\n\t\t);\n\t\treturn undefined;\n\t}\n\n\tif (format !== 'hh:mm xm' && format !== 'hh:mm')\n\t\tconsole.warn(\n\t\t\t`@servicetitan/design-system: dateToTime() invalid format \"${format}\", usind \"hh:mm\"`\n\t\t);\n\n\tconst dateTime = dateTimeFromJSDate(d, tz);\n\n\treturn dateTime.setLocale('en-US').toLocaleString({\n\t\thour: '2-digit',\n\t\tminute: '2-digit',\n\t\thourCycle: format !== 'hh:mm xm' ? 'h23' : 'h12',\n\t});\n};\n\n// Returns {min, max} as 24-hour strings within timezone provided\nexport const consumeMinMax = (\n\tmin: Date | string,\n\tmax: Date | string,\n\ttz = localTimezone\n): { min: string; max: string } => {\n\tlet minStr, maxStr;\n\n\t// both min & max are instances of Date\n\tif (isValidDate(min as Date) && isValidDate(max as Date)) {\n\t\tif (sameDay(min, max, tz)) {\n\t\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t\tmaxStr = dateToTime(max as Date, tz, 'hh:mm');\n\t\t} else {\n\t\t\t// min and max are valid and not same day → use min\n\t\t\tconsole.warn(\n\t\t\t\t`@servicetitan/design-system: TimePicker's min (${min}) & max (${max}) are not in the same day, using max=23:59`\n\t\t\t);\n\t\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t\tmaxStr = '23:59';\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// min is Date, max is string\n\tif (isValidDate(min as Date) && !(max instanceof Date)) {\n\t\tconst realMax = parseTimeString(max) ? max : '23:59';\n\t\tminStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\tmaxStr = realMax;\n\n\t\tif (min > timeToDate(realMax, tz, min as Date)) {\n\t\t\t// Reversing min & max\n\t\t\tminStr = realMax;\n\t\t\tmaxStr = dateToTime(min as Date, tz, 'hh:mm');\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// min is string, max is Date\n\tif (!(min instanceof Date) && isValidDate(max as Date)) {\n\t\tconst realMin = parseTimeString(min) ? min : '00:00';\n\t\tminStr = realMin;\n\t\tmaxStr = dateToTime(max as Date, tz, 'hh:mm');\n\n\t\tif (max < timeToDate(realMin, tz, max as Date)) {\n\t\t\t// Reversing min & max\n\t\t\tminStr = dateToTime(max as Date, tz, 'hh:mm');\n\t\t\tmaxStr = realMin;\n\t\t}\n\t\treturn { min: minStr, max: maxStr };\n\t}\n\n\t// both min & max are strings\n\tconst minDate = parseTimeString(min as string) || parseTimeString('00:00');\n\tconst maxDate = parseTimeString(max as string) || parseTimeString('23:59');\n\tconst dates = [minDate, maxDate]\n\t\t.sort()\n\t\t.map((d) => dateToTime(d, localTimezone, 'hh:mm'));\n\n\treturn { min: dates[0], max: dates[1] };\n};\n\nconst sameDay = (d1: any, d2: any, tz: string): boolean => {\n\t/*\n\t * \"\" is not a zone. Treat it like a missing name so both dates stay\n\t * in the system zone. An invalid name still produces an invalid DateTime.\n\t */\n\tconst zone = tz || undefined;\n\tconst date1 = DateTime.fromJSDate(d1)?.setZone(zone);\n\tconst date2 = DateTime.fromJSDate(d2)?.setZone(zone);\n\n\treturn date1 && date2 && date1.hasSame(date2, 'day');\n};\n\n/**\n * Prioity:\n * 1. min, if min is Date, if not...\n * 2. max, if max is Date, if not...\n * 3. value, if defined, if not...\n * 4. today @ timezone\n */\nexport const getReturnDate = (\n\tmin: Date | string,\n\tmax: Date | string,\n\tvalue?: Date,\n\ttz = localTimezone\n): Date => {\n\tlet returnDate;\n\n\tif (isValidDate(min as Date)) {\n\t\treturnDate = min;\n\t\tif (isValidDate(max as Date)) {\n\t\t\tif (min > max) returnDate = max;\n\t\t}\n\t} else if (isValidDate(max as Date)) {\n\t\treturnDate = max;\n\t} else if (isValidDate(value)) {\n\t\treturnDate = value;\n\t} else {\n\t\treturnDate = new Date();\n\t}\n\n\tconst res = timeToDate('00:00', tz, returnDate as Date);\n\n\treturn res;\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  /* Hide element visually, keeping it focusable (with keyboard) and available for screen-readers */
2
2
  html {
3
- --anvil1-version: "14.5.11";
3
+ --anvil1-version: "14.5.12";
4
4
  }
5
5
 
6
6
  /*
@@ -1,5 +1,5 @@
1
1
  html {
2
- --anvil1-version: "14.5.11";
2
+ --anvil1-version: "14.5.12";
3
3
  }
4
4
 
5
5
  /*# sourceMappingURL=version.css.map */
@@ -1,6 +1,6 @@
1
1
  /* Hide element visually, keeping it focusable (with keyboard) and available for screen-readers */
2
2
  html {
3
- --anvil1-version: "14.5.11";
3
+ --anvil1-version: "14.5.12";
4
4
  }
5
5
 
6
6
  /*