@usertour/helpers 0.0.35 → 0.0.37

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,10 +1,37 @@
1
- import { RulesCondition } from '@usertour/types';
1
+ import { TimeConditionDataV2, TimeConditionDataLegacy, TimeConditionData, RulesCondition } from '@usertour/types';
2
2
 
3
+ /**
4
+ * Type guard to check if data is in new format (TimeConditionDataV2)
5
+ * @param data - The data to check
6
+ * @returns true if data has startTime or endTime fields
7
+ */
8
+ declare function isTimeConditionDataV2(data: any): data is TimeConditionDataV2;
9
+ /**
10
+ * Type guard to check if data is in legacy format (TimeConditionDataLegacy)
11
+ * @param data - The data to check
12
+ * @returns true if data has startDate or startDateHour fields
13
+ */
14
+ declare function isTimeConditionDataLegacy(data: any): data is TimeConditionDataLegacy;
15
+ /**
16
+ * Convert legacy format to new format (ISO 8601)
17
+ * @param legacyData - Legacy time condition data
18
+ * @returns New format time condition data, or null if conversion fails
19
+ */
20
+ declare function convertTimeConditionLegacyToV2(legacyData: TimeConditionDataLegacy): TimeConditionDataV2 | null;
21
+ /**
22
+ * Normalize time condition data to new format
23
+ * If data is already in new format, returns it as-is
24
+ * If data is in legacy format, converts it to new format
25
+ * @param data - Time condition data (either format)
26
+ * @returns New format time condition data, or null if conversion fails
27
+ */
28
+ declare function normalizeTimeConditionData(data: TimeConditionData | null | undefined): TimeConditionDataV2 | null;
3
29
  /**
4
30
  * Evaluate time condition based on start and end time rules
31
+ * Supports both new ISO 8601 format and legacy format for backward compatibility
5
32
  * @param rules - Time condition rules
6
33
  * @returns boolean indicating if current time matches the condition
7
34
  */
8
35
  declare const evaluateTimeCondition: (rules: RulesCondition) => boolean;
9
36
 
10
- export { evaluateTimeCondition };
37
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData };
@@ -1,10 +1,37 @@
1
- import { RulesCondition } from '@usertour/types';
1
+ import { TimeConditionDataV2, TimeConditionDataLegacy, TimeConditionData, RulesCondition } from '@usertour/types';
2
2
 
3
+ /**
4
+ * Type guard to check if data is in new format (TimeConditionDataV2)
5
+ * @param data - The data to check
6
+ * @returns true if data has startTime or endTime fields
7
+ */
8
+ declare function isTimeConditionDataV2(data: any): data is TimeConditionDataV2;
9
+ /**
10
+ * Type guard to check if data is in legacy format (TimeConditionDataLegacy)
11
+ * @param data - The data to check
12
+ * @returns true if data has startDate or startDateHour fields
13
+ */
14
+ declare function isTimeConditionDataLegacy(data: any): data is TimeConditionDataLegacy;
15
+ /**
16
+ * Convert legacy format to new format (ISO 8601)
17
+ * @param legacyData - Legacy time condition data
18
+ * @returns New format time condition data, or null if conversion fails
19
+ */
20
+ declare function convertTimeConditionLegacyToV2(legacyData: TimeConditionDataLegacy): TimeConditionDataV2 | null;
21
+ /**
22
+ * Normalize time condition data to new format
23
+ * If data is already in new format, returns it as-is
24
+ * If data is in legacy format, converts it to new format
25
+ * @param data - Time condition data (either format)
26
+ * @returns New format time condition data, or null if conversion fails
27
+ */
28
+ declare function normalizeTimeConditionData(data: TimeConditionData | null | undefined): TimeConditionDataV2 | null;
3
29
  /**
4
30
  * Evaluate time condition based on start and end time rules
31
+ * Supports both new ISO 8601 format and legacy format for backward compatibility
5
32
  * @param rules - Time condition rules
6
33
  * @returns boolean indicating if current time matches the condition
7
34
  */
8
35
  declare const evaluateTimeCondition: (rules: RulesCondition) => boolean;
9
36
 
10
- export { evaluateTimeCondition };
37
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData };
@@ -1,7 +1,16 @@
1
1
  import {
2
- evaluateTimeCondition
3
- } from "../chunk-CEK3SCQO.js";
2
+ convertTimeConditionLegacyToV2,
3
+ evaluateTimeCondition,
4
+ isTimeConditionDataLegacy,
5
+ isTimeConditionDataV2,
6
+ normalizeTimeConditionData
7
+ } from "../chunk-JQWKLXW6.js";
8
+ import "../chunk-GFH3VWOC.js";
4
9
  import "../chunk-XEO3YXBM.js";
5
10
  export {
6
- evaluateTimeCondition
11
+ convertTimeConditionLegacyToV2,
12
+ evaluateTimeCondition,
13
+ isTimeConditionDataLegacy,
14
+ isTimeConditionDataV2,
15
+ normalizeTimeConditionData
7
16
  };
@@ -2,9 +2,9 @@ import {
2
2
  convertSettings,
3
3
  convertToCssVars,
4
4
  mergeThemeDefaultSettings
5
- } from "./chunk-USHOKNHQ.js";
6
- import "./chunk-GFH3VWOC.js";
5
+ } from "./chunk-F7ZHCELE.js";
7
6
  import "./chunk-VT24VOAZ.js";
7
+ import "./chunk-GFH3VWOC.js";
8
8
  import "./chunk-XEO3YXBM.js";
9
9
  export {
10
10
  convertSettings,
package/dist/error.cjs CHANGED
@@ -39,6 +39,25 @@ __export(error_exports, {
39
39
  });
40
40
  module.exports = __toCommonJS(error_exports);
41
41
  var import_types = require("@usertour/types");
42
+
43
+ // src/conditions/time.ts
44
+ var import_date_fns = require("date-fns");
45
+
46
+ // src/type-utils.ts
47
+ var nativeIsArray = Array.isArray;
48
+ var ObjProto = Object.prototype;
49
+ var objToString = ObjProto.toString;
50
+ var objHasOwn = ObjProto.hasOwnProperty;
51
+
52
+ // src/conditions/time.ts
53
+ function isTimeConditionDataV2(data) {
54
+ return data && ("startTime" in data || "endTime" in data);
55
+ }
56
+ function isTimeConditionDataLegacy(data) {
57
+ return data && ("startDate" in data || "startDateHour" in data);
58
+ }
59
+
60
+ // src/error.ts
42
61
  var isValidSelector = (selector) => {
43
62
  if (!selector) {
44
63
  return false;
@@ -89,7 +108,21 @@ var getUrlPatternError = (data) => {
89
108
  };
90
109
  var getCurrentTimeError = (data) => {
91
110
  const ret = { showError: false, errorInfo: "" };
92
- if (!data.startDate && !data.endDate) {
111
+ if (isTimeConditionDataV2(data)) {
112
+ if (!data.startTime && !data.endTime) {
113
+ ret.showError = true;
114
+ ret.errorInfo = "Either start or end time be filled in";
115
+ }
116
+ return ret;
117
+ }
118
+ if (isTimeConditionDataLegacy(data)) {
119
+ if (!data.startDate && !data.endDate) {
120
+ ret.showError = true;
121
+ ret.errorInfo = "Either start or end time be filled in";
122
+ }
123
+ return ret;
124
+ }
125
+ if (!data || typeof data === "object" && Object.keys(data).length === 0) {
93
126
  ret.showError = true;
94
127
  ret.errorInfo = "Either start or end time be filled in";
95
128
  }
package/dist/error.js CHANGED
@@ -15,7 +15,9 @@ import {
15
15
  hasActionError,
16
16
  hasError,
17
17
  isValidSelector
18
- } from "./chunk-G5P7KULU.js";
18
+ } from "./chunk-QWYOGIRR.js";
19
+ import "./chunk-JQWKLXW6.js";
20
+ import "./chunk-GFH3VWOC.js";
19
21
  import "./chunk-XEO3YXBM.js";
20
22
  export {
21
23
  getCodeError,
package/dist/index.cjs CHANGED
@@ -47,6 +47,7 @@ __export(src_exports, {
47
47
  cn: () => cn,
48
48
  conditionsIsSame: () => conditionsIsSame,
49
49
  convertSettings: () => convertSettings,
50
+ convertTimeConditionLegacyToV2: () => convertTimeConditionLegacyToV2,
50
51
  convertToCssVars: () => convertToCssVars,
51
52
  cuid: () => cuid,
52
53
  deepClone: () => deepClone,
@@ -105,6 +106,8 @@ __export(src_exports, {
105
106
  isPublishedAtLeastOneEnvironment: () => isPublishedAtLeastOneEnvironment,
106
107
  isPublishedInAllEnvironments: () => isPublishedInAllEnvironments,
107
108
  isString: () => isString,
109
+ isTimeConditionDataLegacy: () => isTimeConditionDataLegacy,
110
+ isTimeConditionDataV2: () => isTimeConditionDataV2,
108
111
  isUint8Array: () => isUint8Array,
109
112
  isUndefined: () => isUndefined,
110
113
  isUrl: () => isUrl,
@@ -114,6 +117,7 @@ __export(src_exports, {
114
117
  nativeForEach: () => nativeForEach,
115
118
  nativeIndexOf: () => nativeIndexOf,
116
119
  navigator: () => navigator,
120
+ normalizeTimeConditionData: () => normalizeTimeConditionData,
117
121
  parseUrlParams: () => parseUrlParams,
118
122
  regenerateConditionIds: () => regenerateConditionIds,
119
123
  removeAuthToken: () => removeAuthToken,
@@ -457,6 +461,143 @@ var convertToCssVars = (settings, type = "tooltip") => {
457
461
 
458
462
  // src/error.ts
459
463
  var import_types2 = require("@usertour/types");
464
+
465
+ // src/conditions/time.ts
466
+ var import_date_fns = require("date-fns");
467
+ function isEmpty(value) {
468
+ return isNullish(value) || isEmptyString(value);
469
+ }
470
+ function hasRequiredFields(data, type) {
471
+ if (type === "start") {
472
+ return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
473
+ }
474
+ return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
475
+ }
476
+ function parseLegacyDate(dateStr) {
477
+ const [month, day, year] = dateStr.split("/");
478
+ if (!month || !day || !year) {
479
+ return null;
480
+ }
481
+ return {
482
+ month: Number.parseInt(month),
483
+ day: Number.parseInt(day),
484
+ year: Number.parseInt(year)
485
+ };
486
+ }
487
+ function createLegacyDateTime(data, type) {
488
+ const dateStr = type === "start" ? data.startDate : data.endDate;
489
+ const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
490
+ const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
491
+ if (!dateStr || !hourStr || !minuteStr) {
492
+ return null;
493
+ }
494
+ const dateParts = parseLegacyDate(dateStr);
495
+ if (!dateParts) {
496
+ return null;
497
+ }
498
+ const dateTime = new Date(
499
+ dateParts.year,
500
+ dateParts.month - 1,
501
+ dateParts.day,
502
+ Number.parseInt(hourStr),
503
+ Number.parseInt(minuteStr),
504
+ 0
505
+ );
506
+ return (0, import_date_fns.isValid)(dateTime) ? dateTime : null;
507
+ }
508
+ function isTimeConditionDataV2(data) {
509
+ return data && ("startTime" in data || "endTime" in data);
510
+ }
511
+ function isTimeConditionDataLegacy(data) {
512
+ return data && ("startDate" in data || "startDateHour" in data);
513
+ }
514
+ function convertTimeConditionLegacyToV2(legacyData) {
515
+ try {
516
+ if (!hasRequiredFields(legacyData, "start")) {
517
+ return null;
518
+ }
519
+ const startDateTime = createLegacyDateTime(legacyData, "start");
520
+ if (!startDateTime) {
521
+ return null;
522
+ }
523
+ const result = {
524
+ startTime: startDateTime.toISOString()
525
+ };
526
+ if (hasRequiredFields(legacyData, "end")) {
527
+ const endDateTime = createLegacyDateTime(legacyData, "end");
528
+ if (endDateTime) {
529
+ result.endTime = endDateTime.toISOString();
530
+ }
531
+ }
532
+ return result;
533
+ } catch {
534
+ return null;
535
+ }
536
+ }
537
+ function normalizeTimeConditionData(data) {
538
+ if (!data) {
539
+ return null;
540
+ }
541
+ if (isTimeConditionDataV2(data)) {
542
+ return data;
543
+ }
544
+ if (isTimeConditionDataLegacy(data)) {
545
+ return convertTimeConditionLegacyToV2(data);
546
+ }
547
+ return null;
548
+ }
549
+ function evaluateTimeConditionV2(data) {
550
+ if (!data.startTime) {
551
+ return false;
552
+ }
553
+ const startTime = (0, import_date_fns.parseISO)(data.startTime);
554
+ if (!(0, import_date_fns.isValid)(startTime)) {
555
+ return false;
556
+ }
557
+ const now = /* @__PURE__ */ new Date();
558
+ if (!data.endTime) {
559
+ return (0, import_date_fns.isAfter)(now, startTime);
560
+ }
561
+ const endTime = (0, import_date_fns.parseISO)(data.endTime);
562
+ if (!(0, import_date_fns.isValid)(endTime)) {
563
+ return false;
564
+ }
565
+ return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
566
+ }
567
+ function evaluateTimeConditionLegacy(data) {
568
+ if (!hasRequiredFields(data, "start")) {
569
+ return false;
570
+ }
571
+ const startDateTime = createLegacyDateTime(data, "start");
572
+ if (!startDateTime) {
573
+ return false;
574
+ }
575
+ const now = /* @__PURE__ */ new Date();
576
+ if (!hasRequiredFields(data, "end")) {
577
+ return (0, import_date_fns.isAfter)(now, startDateTime);
578
+ }
579
+ const endDateTime = createLegacyDateTime(data, "end");
580
+ if (!endDateTime) {
581
+ return false;
582
+ }
583
+ return (0, import_date_fns.isAfter)(now, startDateTime) && (0, import_date_fns.isBefore)(now, endDateTime);
584
+ }
585
+ var evaluateTimeCondition = (rules) => {
586
+ try {
587
+ const data = rules.data || {};
588
+ if (isTimeConditionDataV2(data)) {
589
+ return evaluateTimeConditionV2(data);
590
+ }
591
+ if (isTimeConditionDataLegacy(data)) {
592
+ return evaluateTimeConditionLegacy(data);
593
+ }
594
+ return false;
595
+ } catch {
596
+ return false;
597
+ }
598
+ };
599
+
600
+ // src/error.ts
460
601
  var isValidSelector = (selector) => {
461
602
  if (!selector) {
462
603
  return false;
@@ -507,7 +648,21 @@ var getUrlPatternError = (data) => {
507
648
  };
508
649
  var getCurrentTimeError = (data) => {
509
650
  const ret = { showError: false, errorInfo: "" };
510
- if (!data.startDate && !data.endDate) {
651
+ if (isTimeConditionDataV2(data)) {
652
+ if (!data.startTime && !data.endTime) {
653
+ ret.showError = true;
654
+ ret.errorInfo = "Either start or end time be filled in";
655
+ }
656
+ return ret;
657
+ }
658
+ if (isTimeConditionDataLegacy(data)) {
659
+ if (!data.startDate && !data.endDate) {
660
+ ret.showError = true;
661
+ ret.errorInfo = "Either start or end time be filled in";
662
+ }
663
+ return ret;
664
+ }
665
+ if (!data || typeof data === "object" && Object.keys(data).length === 0) {
511
666
  ret.showError = true;
512
667
  ret.errorInfo = "Either start or end time be filled in";
513
668
  }
@@ -1101,34 +1256,6 @@ var evaluateUrlCondition = (rules, url) => {
1101
1256
  return isMatchUrlPattern(url, includes, excludes);
1102
1257
  };
1103
1258
 
1104
- // src/conditions/time.ts
1105
- var import_date_fns = require("date-fns");
1106
- var evaluateTimeCondition = (rules) => {
1107
- try {
1108
- const { endDate, endDateHour, endDateMinute, startDate, startDateHour, startDateMinute } = rules.data || {};
1109
- if (!startDate || !startDateHour || !startDateMinute) {
1110
- return false;
1111
- }
1112
- const startTimeString = `${startDate}T${startDateHour.padStart(2, "0")}:${startDateMinute.padStart(2, "0")}:00`;
1113
- const startTime = (0, import_date_fns.parseISO)(startTimeString);
1114
- if (!(0, import_date_fns.isValid)(startTime)) {
1115
- return false;
1116
- }
1117
- const now = /* @__PURE__ */ new Date();
1118
- if (!endDate || !endDateHour || !endDateMinute) {
1119
- return (0, import_date_fns.isAfter)(now, startTime);
1120
- }
1121
- const endTimeString = `${endDate}T${endDateHour.padStart(2, "0")}:${endDateMinute.padStart(2, "0")}:00`;
1122
- const endTime = (0, import_date_fns.parseISO)(endTimeString);
1123
- if (!(0, import_date_fns.isValid)(endTime)) {
1124
- return false;
1125
- }
1126
- return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
1127
- } catch {
1128
- return false;
1129
- }
1130
- };
1131
-
1132
1259
  // src/conditions/attribute.ts
1133
1260
  var import_types4 = require("@usertour/types");
1134
1261
  var import_date_fns2 = require("date-fns");
@@ -1189,8 +1316,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
1189
1316
  case "endsWith":
1190
1317
  return stringValue.endsWith(expectedValue);
1191
1318
  case "empty": {
1192
- const isEmpty = !stringValue || stringValue === "";
1193
- return isEmpty;
1319
+ const isEmpty2 = !stringValue || stringValue === "";
1320
+ return isEmpty2;
1194
1321
  }
1195
1322
  case "any":
1196
1323
  return Boolean(stringValue && stringValue !== "");
@@ -1510,6 +1637,7 @@ var filterNullAttributes = (attributes) => {
1510
1637
  cn,
1511
1638
  conditionsIsSame,
1512
1639
  convertSettings,
1640
+ convertTimeConditionLegacyToV2,
1513
1641
  convertToCssVars,
1514
1642
  cuid,
1515
1643
  deepClone,
@@ -1568,6 +1696,8 @@ var filterNullAttributes = (attributes) => {
1568
1696
  isPublishedAtLeastOneEnvironment,
1569
1697
  isPublishedInAllEnvironments,
1570
1698
  isString,
1699
+ isTimeConditionDataLegacy,
1700
+ isTimeConditionDataV2,
1571
1701
  isUint8Array,
1572
1702
  isUndefined,
1573
1703
  isUrl,
@@ -1577,6 +1707,7 @@ var filterNullAttributes = (attributes) => {
1577
1707
  nativeForEach,
1578
1708
  nativeIndexOf,
1579
1709
  navigator,
1710
+ normalizeTimeConditionData,
1580
1711
  parseUrlParams,
1581
1712
  regenerateConditionIds,
1582
1713
  removeAuthToken,
package/dist/index.d.cts CHANGED
@@ -11,7 +11,7 @@ export { generateAutoStateColors, hexToHSLString, hexToRGBStr } from './color.cj
11
11
  export { absoluteUrl, cn, cuid, evalCode, formatDate, getRandomColor, hexToRgb, isDark, uuidV4 } from './helper.cjs';
12
12
  export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './conditions/condition.cjs';
13
13
  export { evaluateUrlCondition, isMatchUrlPattern } from './conditions/url.cjs';
14
- export { evaluateTimeCondition } from './conditions/time.cjs';
14
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './conditions/time.cjs';
15
15
  export { evaluateAttributeCondition } from './conditions/attribute.cjs';
16
16
  export { capitalizeFirstLetter, filterNullAttributes, getAttributeType } from './attribute.cjs';
17
17
  export { default as isEqual } from 'fast-deep-equal';
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export { generateAutoStateColors, hexToHSLString, hexToRGBStr } from './color.js
11
11
  export { absoluteUrl, cn, cuid, evalCode, formatDate, getRandomColor, hexToRgb, isDark, uuidV4 } from './helper.js';
12
12
  export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './conditions/condition.js';
13
13
  export { evaluateUrlCondition, isMatchUrlPattern } from './conditions/url.js';
14
- export { evaluateTimeCondition } from './conditions/time.js';
14
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './conditions/time.js';
15
15
  export { evaluateAttributeCondition } from './conditions/attribute.js';
16
16
  export { capitalizeFirstLetter, filterNullAttributes, getAttributeType } from './attribute.js';
17
17
  export { default as isEqual } from 'fast-deep-equal';
package/dist/index.js CHANGED
@@ -20,15 +20,12 @@ import {
20
20
  isConditionsActived,
21
21
  isEqual,
22
22
  regenerateConditionIds
23
- } from "./chunk-NVSDWUJP.js";
23
+ } from "./chunk-E3B3AWMJ.js";
24
24
  import {
25
25
  evaluateUrlCondition,
26
26
  isMatchUrlPattern
27
27
  } from "./chunk-YYIGUZNZ.js";
28
28
  import "./chunk-PAESAL23.js";
29
- import {
30
- evaluateTimeCondition
31
- } from "./chunk-CEK3SCQO.js";
32
29
  import {
33
30
  evaluateAttributeCondition
34
31
  } from "./chunk-KYDXF7SU.js";
@@ -54,25 +51,7 @@ import {
54
51
  convertSettings,
55
52
  convertToCssVars,
56
53
  mergeThemeDefaultSettings
57
- } from "./chunk-USHOKNHQ.js";
58
- import {
59
- isArray,
60
- isBoolean,
61
- isDate,
62
- isDocument,
63
- isEmptyObject,
64
- isEmptyString,
65
- isFile,
66
- isFormData,
67
- isFunction,
68
- isNull,
69
- isNullish,
70
- isNumber,
71
- isObject,
72
- isString,
73
- isUint8Array,
74
- isUndefined
75
- } from "./chunk-GFH3VWOC.js";
54
+ } from "./chunk-F7ZHCELE.js";
76
55
  import {
77
56
  generateAutoStateColors,
78
57
  hexToHSLString,
@@ -95,7 +74,32 @@ import {
95
74
  hasActionError,
96
75
  hasError,
97
76
  isValidSelector
98
- } from "./chunk-G5P7KULU.js";
77
+ } from "./chunk-QWYOGIRR.js";
78
+ import {
79
+ convertTimeConditionLegacyToV2,
80
+ evaluateTimeCondition,
81
+ isTimeConditionDataLegacy,
82
+ isTimeConditionDataV2,
83
+ normalizeTimeConditionData
84
+ } from "./chunk-JQWKLXW6.js";
85
+ import {
86
+ isArray,
87
+ isBoolean,
88
+ isDate,
89
+ isDocument,
90
+ isEmptyObject,
91
+ isEmptyString,
92
+ isFile,
93
+ isFormData,
94
+ isFunction,
95
+ isNull,
96
+ isNullish,
97
+ isNumber,
98
+ isObject,
99
+ isString,
100
+ isUint8Array,
101
+ isUndefined
102
+ } from "./chunk-GFH3VWOC.js";
99
103
  import {
100
104
  AbortController,
101
105
  ArrayProto,
@@ -135,6 +139,7 @@ export {
135
139
  cn,
136
140
  conditionsIsSame,
137
141
  convertSettings,
142
+ convertTimeConditionLegacyToV2,
138
143
  convertToCssVars,
139
144
  cuid,
140
145
  deepClone,
@@ -193,6 +198,8 @@ export {
193
198
  isPublishedAtLeastOneEnvironment,
194
199
  isPublishedInAllEnvironments,
195
200
  isString,
201
+ isTimeConditionDataLegacy,
202
+ isTimeConditionDataV2,
196
203
  isUint8Array,
197
204
  isUndefined,
198
205
  isUrl,
@@ -202,6 +209,7 @@ export {
202
209
  nativeForEach,
203
210
  nativeIndexOf,
204
211
  navigator,
212
+ normalizeTimeConditionData,
205
213
  parseUrlParams,
206
214
  regenerateConditionIds,
207
215
  removeAuthToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usertour/helpers",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "type": "module",
5
5
  "description": "Utility functions and helpers shared across the UserTour project",
6
6
  "homepage": "https://www.usertour.io",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@paralleldrive/cuid2": "^2.2.2",
32
- "@usertour/types": "^0.0.19",
32
+ "@usertour/types": "^0.0.26",
33
33
  "chroma-js": "^3.1.2",
34
34
  "class-variance-authority": "^0.4.0",
35
35
  "clsx": "^1.2.1",
@@ -1,31 +0,0 @@
1
- // src/conditions/time.ts
2
- import { isAfter, isBefore, isValid, parseISO } from "date-fns";
3
- var evaluateTimeCondition = (rules) => {
4
- try {
5
- const { endDate, endDateHour, endDateMinute, startDate, startDateHour, startDateMinute } = rules.data || {};
6
- if (!startDate || !startDateHour || !startDateMinute) {
7
- return false;
8
- }
9
- const startTimeString = `${startDate}T${startDateHour.padStart(2, "0")}:${startDateMinute.padStart(2, "0")}:00`;
10
- const startTime = parseISO(startTimeString);
11
- if (!isValid(startTime)) {
12
- return false;
13
- }
14
- const now = /* @__PURE__ */ new Date();
15
- if (!endDate || !endDateHour || !endDateMinute) {
16
- return isAfter(now, startTime);
17
- }
18
- const endTimeString = `${endDate}T${endDateHour.padStart(2, "0")}:${endDateMinute.padStart(2, "0")}:00`;
19
- const endTime = parseISO(endTimeString);
20
- if (!isValid(endTime)) {
21
- return false;
22
- }
23
- return isAfter(now, startTime) && isBefore(now, endTime);
24
- } catch {
25
- return false;
26
- }
27
- };
28
-
29
- export {
30
- evaluateTimeCondition
31
- };
@@ -1,10 +1,10 @@
1
- import {
2
- isUndefined
3
- } from "./chunk-GFH3VWOC.js";
4
1
  import {
5
2
  hexToHSLString,
6
3
  hexToRGBStr
7
4
  } from "./chunk-VT24VOAZ.js";
5
+ import {
6
+ isUndefined
7
+ } from "./chunk-GFH3VWOC.js";
8
8
 
9
9
  // src/convert-settings.ts
10
10
  import { defaultSettings } from "@usertour/types";