@react-querybuilder/core 8.17.0 → 8.19.0

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.
Files changed (98) hide show
  1. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +57 -16
  2. package/dist/cjs/react-querybuilder_core.cjs.development.js +212 -206
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  4. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +57 -16
  5. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  7. package/dist/{convertQuery-BoMPXL7_.js → convertQuery-BJKNgecE.js} +2 -2
  8. package/dist/{convertQuery-BoMPXL7_.js.map → convertQuery-BJKNgecE.js.map} +1 -1
  9. package/dist/{convertQuery-CQwOrjQr.mjs → convertQuery-J1CaoDxe.mjs} +2 -2
  10. package/dist/{convertQuery-CQwOrjQr.mjs.map → convertQuery-J1CaoDxe.mjs.map} +1 -1
  11. package/dist/formatQuery.d.mts +5 -3
  12. package/dist/formatQuery.d.ts +5 -3
  13. package/dist/formatQuery.js +203 -203
  14. package/dist/formatQuery.js.map +1 -1
  15. package/dist/formatQuery.mjs +203 -203
  16. package/dist/formatQuery.mjs.map +1 -1
  17. package/dist/{import-CSHMjlid.d.ts → import-Qs1-kgv5.d.ts} +2 -2
  18. package/dist/{import-BQ5xaW6i.d.mts → import-ShTj5IdB.d.mts} +2 -2
  19. package/dist/{index-CREDWM32.d.ts → index-DlVg-QXo.d.mts} +32 -3
  20. package/dist/{index-CREDWM32.d.mts → index-DlVg-QXo.d.ts} +32 -3
  21. package/dist/{objectUtils-DxVaGCdg.js → objectUtils-DBJI82bl.js} +2 -2
  22. package/dist/objectUtils-DBJI82bl.js.map +1 -0
  23. package/dist/{objectUtils-D-w8MzpZ.mjs → objectUtils-ZvPkF6u6.mjs} +2 -2
  24. package/dist/objectUtils-ZvPkF6u6.mjs.map +1 -0
  25. package/dist/parseCEL.d.mts +7 -7
  26. package/dist/parseCEL.d.ts +7 -7
  27. package/dist/parseCEL.js +6 -6
  28. package/dist/parseCEL.js.map +1 -1
  29. package/dist/parseCEL.mjs +6 -6
  30. package/dist/parseCEL.mjs.map +1 -1
  31. package/dist/parseCypher.d.mts +1 -1
  32. package/dist/parseCypher.d.ts +1 -1
  33. package/dist/parseCypher.js.map +1 -1
  34. package/dist/parseCypher.mjs.map +1 -1
  35. package/dist/parseGremlin.d.mts +1 -1
  36. package/dist/parseGremlin.d.ts +1 -1
  37. package/dist/parseGremlin.js.map +1 -1
  38. package/dist/parseGremlin.mjs.map +1 -1
  39. package/dist/parseJSONata.d.mts +2 -2
  40. package/dist/parseJSONata.d.ts +2 -2
  41. package/dist/parseJSONata.js +2 -2
  42. package/dist/parseJSONata.js.map +1 -1
  43. package/dist/parseJSONata.mjs +2 -2
  44. package/dist/parseJSONata.mjs.map +1 -1
  45. package/dist/parseJsonLogic.d.mts +2 -2
  46. package/dist/parseJsonLogic.d.ts +2 -2
  47. package/dist/parseJsonLogic.js +11 -11
  48. package/dist/parseJsonLogic.js.map +1 -1
  49. package/dist/parseJsonLogic.mjs +11 -11
  50. package/dist/parseJsonLogic.mjs.map +1 -1
  51. package/dist/parseMongoDB.d.mts +2 -2
  52. package/dist/parseMongoDB.d.ts +2 -2
  53. package/dist/parseMongoDB.js +4 -4
  54. package/dist/parseMongoDB.js.map +1 -1
  55. package/dist/parseMongoDB.mjs +4 -4
  56. package/dist/parseMongoDB.mjs.map +1 -1
  57. package/dist/parseSPARQL.d.mts +1 -1
  58. package/dist/parseSPARQL.d.ts +1 -1
  59. package/dist/parseSPARQL.js.map +1 -1
  60. package/dist/parseSPARQL.mjs.map +1 -1
  61. package/dist/parseSQL.d.mts +2 -2
  62. package/dist/parseSQL.d.ts +2 -2
  63. package/dist/parseSQL.js +3 -3
  64. package/dist/parseSQL.js.map +1 -1
  65. package/dist/parseSQL.mjs +3 -3
  66. package/dist/parseSQL.mjs.map +1 -1
  67. package/dist/parseSpEL.d.mts +2 -2
  68. package/dist/parseSpEL.d.ts +2 -2
  69. package/dist/parseSpEL.js +3 -3
  70. package/dist/parseSpEL.js.map +1 -1
  71. package/dist/parseSpEL.mjs +3 -3
  72. package/dist/parseSpEL.mjs.map +1 -1
  73. package/dist/{prepareQueryObjects-BXf5aV-A.mjs → prepareQueryObjects-Cd_tt4oy.mjs} +3 -3
  74. package/dist/{prepareQueryObjects-BXf5aV-A.mjs.map → prepareQueryObjects-Cd_tt4oy.mjs.map} +1 -1
  75. package/dist/{prepareQueryObjects-gRQqiBPR.js → prepareQueryObjects-DaAXX792.js} +3 -3
  76. package/dist/{prepareQueryObjects-gRQqiBPR.js.map → prepareQueryObjects-DaAXX792.js.map} +1 -1
  77. package/dist/react-querybuilder_core.d.mts +57 -16
  78. package/dist/react-querybuilder_core.legacy-esm.d.ts +57 -16
  79. package/dist/react-querybuilder_core.legacy-esm.js +210 -204
  80. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  81. package/dist/react-querybuilder_core.mjs +212 -206
  82. package/dist/react-querybuilder_core.mjs.map +1 -1
  83. package/dist/react-querybuilder_core.production.d.mts +57 -16
  84. package/dist/react-querybuilder_core.production.mjs +1 -1
  85. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  86. package/dist/transformQuery.d.mts +1 -1
  87. package/dist/transformQuery.d.ts +1 -1
  88. package/dist/transformQuery.js +1 -1
  89. package/dist/transformQuery.mjs +1 -1
  90. package/dist/{utils-ZlKseh1X.js → utils-BpaOtylk.js} +3 -3
  91. package/dist/utils-BpaOtylk.js.map +1 -0
  92. package/dist/{utils-01WaTGBL.mjs → utils-CJRGiPb-.mjs} +3 -3
  93. package/dist/utils-CJRGiPb-.mjs.map +1 -0
  94. package/package.json +12 -12
  95. package/dist/objectUtils-D-w8MzpZ.mjs.map +0 -1
  96. package/dist/objectUtils-DxVaGCdg.js.map +0 -1
  97. package/dist/utils-01WaTGBL.mjs.map +0 -1
  98. package/dist/utils-ZlKseh1X.js.map +0 -1
@@ -88,7 +88,10 @@ const defaultTranslations = {
88
88
  placeholderGroupLabel: defaultPlaceholderValueGroupLabel
89
89
  },
90
90
  matchMode: { title: "Match mode" },
91
- matchThreshold: { title: "Match threshold" },
91
+ matchThreshold: {
92
+ title: "Match threshold",
93
+ placeholderName: "#"
94
+ },
92
95
  value: { title: "Value" },
93
96
  removeRule: {
94
97
  label: "⨯",
@@ -426,7 +429,8 @@ const standardClassnames = {
426
429
  branches: "queryBuilder-branches",
427
430
  justified: "queryBuilder-justified",
428
431
  hasSubQuery: "rule-hasSubQuery",
429
- loading: "queryBuilder-loading"
432
+ loading: "queryBuilder-loading",
433
+ valueDateTimeRelative: "rule-value-dateTimeRelative"
430
434
  };
431
435
  /**
432
436
  * Default classnames for each component.
@@ -476,7 +480,8 @@ const defaultControlClassnames = {
476
480
  valueListItem: "",
477
481
  branches: "",
478
482
  hasSubQuery: "",
479
- loading: ""
483
+ loading: "",
484
+ valueDateTimeRelative: ""
480
485
  };
481
486
  /**
482
487
  * Default reason codes for a group being invalid.
@@ -609,7 +614,7 @@ const trimIfString = (val) => typeof val === "string" ? val.trim() : val;
609
614
  * Splits a string by comma then trims each element. Arrays are returned as is except
610
615
  * any string elements are trimmed.
611
616
  */
612
- const toArray = (a, { retainEmptyStrings } = {}) => Array.isArray(a) ? a.map((v) => trimIfString(v)) : typeof a === "string" ? splitBy(a, ",").filter(retainEmptyStrings ? () => true : (s) => !/^\s*$/.test(s)).map((s) => s.trim()) : typeof a === "number" ? [a] : [];
617
+ const toArray = (a, { retainEmptyStrings } = {}) => Array.isArray(a) ? a.map(trimIfString) : typeof a === "string" ? splitBy(a, ",").filter(retainEmptyStrings ? () => true : (s) => !/^\s*$/.test(s)).map((s) => s.trim()) : typeof a === "number" ? [a] : [];
613
618
  /**
614
619
  * Determines if an array is free of `null`/`undefined`.
615
620
  */
@@ -670,7 +675,7 @@ const numericRegex = new RegExp(numericRegex$1.source.replace(/^\^/, String.raw`
670
675
  /**
671
676
  * Determines if a variable is a plain old JavaScript object, aka POJO.
672
677
  */
673
- const isPojo = (obj) => obj === null || typeof obj !== "object" ? false : Object.getPrototypeOf(obj) === Object.prototype;
678
+ const isPojo = (obj) => obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype;
674
679
  /**
675
680
  * Simple helper to determine whether a value is null, undefined, or an empty string.
676
681
  */
@@ -694,7 +699,7 @@ const isRuleGroupType = (rg) => isRuleGroup(rg) && typeof rg.combinator === "str
694
699
  */
695
700
  const isRuleGroupTypeIC = (rg) => isRuleGroup(rg) && rg.combinator === void 0;
696
701
  //#endregion
697
- //#region \0@oxc-project+runtime@0.132.0/helpers/typeof.js
702
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/typeof.js
698
703
  function _typeof(o) {
699
704
  "@babel/helpers - typeof";
700
705
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -704,7 +709,7 @@ function _typeof(o) {
704
709
  }, _typeof(o);
705
710
  }
706
711
  //#endregion
707
- //#region \0@oxc-project+runtime@0.132.0/helpers/toPrimitive.js
712
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPrimitive.js
708
713
  function toPrimitive(t, r) {
709
714
  if ("object" != _typeof(t) || !t) return t;
710
715
  var e = t[Symbol.toPrimitive];
@@ -716,13 +721,13 @@ function toPrimitive(t, r) {
716
721
  return ("string" === r ? String : Number)(t);
717
722
  }
718
723
  //#endregion
719
- //#region \0@oxc-project+runtime@0.132.0/helpers/toPropertyKey.js
724
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPropertyKey.js
720
725
  function toPropertyKey(t) {
721
726
  var i = toPrimitive(t, "string");
722
727
  return "symbol" == _typeof(i) ? i : i + "";
723
728
  }
724
729
  //#endregion
725
- //#region \0@oxc-project+runtime@0.132.0/helpers/defineProperty.js
730
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/defineProperty.js
726
731
  function _defineProperty(e, r, t) {
727
732
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
728
733
  value: t,
@@ -732,7 +737,7 @@ function _defineProperty(e, r, t) {
732
737
  }) : e[r] = t, e;
733
738
  }
734
739
  //#endregion
735
- //#region \0@oxc-project+runtime@0.132.0/helpers/objectSpread2.js
740
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectSpread2.js
736
741
  function ownKeys(e, r) {
737
742
  var t = Object.keys(e);
738
743
  if (Object.getOwnPropertySymbols) {
@@ -755,7 +760,7 @@ function _objectSpread2(e) {
755
760
  return e;
756
761
  }
757
762
  //#endregion
758
- //#region \0@oxc-project+runtime@0.132.0/helpers/objectWithoutPropertiesLoose.js
763
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutPropertiesLoose.js
759
764
  function _objectWithoutPropertiesLoose(r, e) {
760
765
  if (null == r) return {};
761
766
  var t = {};
@@ -766,7 +771,7 @@ function _objectWithoutPropertiesLoose(r, e) {
766
771
  return t;
767
772
  }
768
773
  //#endregion
769
- //#region \0@oxc-project+runtime@0.132.0/helpers/objectWithoutProperties.js
774
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutProperties.js
770
775
  function _objectWithoutProperties(e, t) {
771
776
  if (null == e) return {};
772
777
  var o, r, i = _objectWithoutPropertiesLoose(e, t);
@@ -1586,7 +1591,7 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
1586
1591
  const totalCount = `double(${field}.size())`;
1587
1592
  const filteredCount = `${field}.filter(${arrayElementAlias}, ${nestedArrayFilter}).size()`;
1588
1593
  const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "==";
1589
- if (threshold > 0 && threshold < 1) return `${filteredCount} ${op} (${totalCount} * ${threshold})`;
1594
+ if (threshold > 0 && threshold < 1) return `double(${filteredCount}) ${op} (${totalCount} * ${threshold})`;
1590
1595
  return `${filteredCount} ${op} ${threshold}`;
1591
1596
  }
1592
1597
  }
@@ -2061,97 +2066,6 @@ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
2061
2066
  return processRuleGroup(ruleGroup, true);
2062
2067
  };
2063
2068
  //#endregion
2064
- //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
2065
- /**
2066
- * Default rule processor used by {@link formatQuery} for the "drizzle" format.
2067
- *
2068
- * @group Export
2069
- */
2070
- const defaultRuleProcessorDrizzle = (rule, _options) => {
2071
- const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
2072
- // v8 ignore next
2073
- const { parseNumbers, preserveValueOrder, context = {} } = opts;
2074
- const { columns, drizzleOperators, useRawFields } = context;
2075
- if (!columns || !drizzleOperators) return void 0;
2076
- const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
2077
- const { field, operator, value, valueSource } = rule;
2078
- const column = useRawFields && /[a-z][a-z0-9]*/i.test(field) ? sql.raw(field) : columns[field];
2079
- const operatorLC = lc(operator);
2080
- const valueIsField = valueSource === "field";
2081
- const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
2082
- const maybeParseNumber = (v) => {
2083
- if (valueIsField || !parseNumbers) return asFieldOrValue(v);
2084
- return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
2085
- };
2086
- if (!column) return void 0;
2087
- const matchEval = processMatchMode(rule);
2088
- if (matchEval === false) return;
2089
- else if (matchEval) {
2090
- if (opts.preset !== "postgresql") return void 0;
2091
- const { mode, threshold } = matchEval;
2092
- const arrayElementAlias = "elem_alias";
2093
- const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
2094
- switch (mode) {
2095
- case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
2096
- case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
2097
- case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
2098
- case "atleast":
2099
- case "atmost":
2100
- case "exactly": {
2101
- const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
2102
- return threshold > 0 && threshold < 1 ? sql`(select count(*) / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
2103
- }
2104
- }
2105
- }
2106
- switch (operatorLC) {
2107
- case "=": return eq(column, maybeParseNumber(value));
2108
- case "!=": return ne(column, maybeParseNumber(value));
2109
- case ">": return gt(column, maybeParseNumber(value));
2110
- case "<": return lt(column, maybeParseNumber(value));
2111
- case ">=": return gte(column, maybeParseNumber(value));
2112
- case "<=": return lte(column, maybeParseNumber(value));
2113
- case "beginswith":
2114
- case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
2115
- case "contains":
2116
- case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
2117
- case "endswith":
2118
- case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
2119
- case "null": return isNull(column);
2120
- case "notnull": return isNotNull(column);
2121
- case "in":
2122
- case "notin": {
2123
- const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
2124
- return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
2125
- }
2126
- case "between":
2127
- case "notbetween": {
2128
- const valueAsArray = toArray(value);
2129
- if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
2130
- let [first, second] = valueAsArray;
2131
- const shouldParseNumbers = !(parseNumbers === false);
2132
- if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
2133
- const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
2134
- const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
2135
- if (!preserveValueOrder && secondNum < firstNum) {
2136
- const tempNum = secondNum;
2137
- second = firstNum;
2138
- first = tempNum;
2139
- } else {
2140
- first = firstNum;
2141
- second = secondNum;
2142
- }
2143
- } else if (valueIsField) {
2144
- first = asFieldOrValue(first);
2145
- second = asFieldOrValue(second);
2146
- }
2147
- return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
2148
- }
2149
- return;
2150
- }
2151
- default: return;
2152
- }
2153
- };
2154
- //#endregion
2155
2069
  //#region src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts
2156
2070
  /**
2157
2071
  * Default rule group processor used by {@link formatQuery} for the "drizzle" format. The returned
@@ -2166,10 +2080,9 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
2166
2080
  * @group Export
2167
2081
  */
2168
2082
  const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
2169
- const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
2083
+ const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, ruleProcessor } = options;
2170
2084
  if (!columns || !drizzleOperators) return void 0;
2171
2085
  const { and, not, or } = drizzleOperators;
2172
- const ruleProcessor = defaultRuleProcessorDrizzle;
2173
2086
  const processRuleGroup = (rg, _outermost) => {
2174
2087
  var _rg$id;
2175
2088
  if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
@@ -2451,7 +2364,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
2451
2364
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, translations, validateRule, validationMap } = options;
2452
2365
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2453
2366
  var _rg$id, _rg2$combinator2, _translations$ruleSep2, _translations2;
2454
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2367
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2455
2368
  const rg2 = isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && lc(r) === "xor") ? convertFromIC(rg) : rg;
2456
2369
  const processedRules = [];
2457
2370
  let precedingCombinator = "";
@@ -2553,7 +2466,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
2553
2466
  };
2554
2467
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2555
2468
  var _rg$id;
2556
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2469
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2557
2470
  const processedRules = [];
2558
2471
  let precedingCombinator = "";
2559
2472
  let firstRule = true;
@@ -2748,7 +2661,7 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
2748
2661
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2749
2662
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2750
2663
  var _rg$id;
2751
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2664
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2752
2665
  const processedRules = [];
2753
2666
  let precedingCombinator = "";
2754
2667
  let firstRule = true;
@@ -2795,96 +2708,6 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
2795
2708
  return processRuleGroup(ruleGroup, true);
2796
2709
  };
2797
2710
  //#endregion
2798
- //#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
2799
- /**
2800
- * Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
2801
- *
2802
- * @group Export
2803
- */
2804
- const defaultRuleProcessorTanStackDB = (rule, _options) => {
2805
- const { parseNumbers, preserveValueOrder, context = {} } = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
2806
- const ops = context.tanStackDbOperators;
2807
- const refs = context._tanstackDbRefs;
2808
- const primaryRef = context._tanstackDbPrimaryRef;
2809
- if (!ops || !refs || !primaryRef) return void 0;
2810
- const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
2811
- const resolveField = (fieldName) => {
2812
- const dotIdx = fieldName.indexOf(".");
2813
- if (dotIdx > 0) {
2814
- const prefix = fieldName.slice(0, dotIdx);
2815
- const rest = fieldName.slice(dotIdx + 1);
2816
- if (refs[prefix]) return refs[prefix][rest];
2817
- }
2818
- return refs[primaryRef][fieldName];
2819
- };
2820
- const { field, operator, value, valueSource } = rule;
2821
- const column = resolveField(field);
2822
- const operatorLC = lc(operator);
2823
- const valueIsField = valueSource === "field";
2824
- const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
2825
- const maybeParseNumber = (v) => {
2826
- if (valueIsField || !parseNumbers) return asFieldOrValue(v);
2827
- return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
2828
- };
2829
- switch (operatorLC) {
2830
- case "=": return eq(column, maybeParseNumber(value));
2831
- case "!=": return not(eq(column, maybeParseNumber(value)));
2832
- case ">": return gt(column, maybeParseNumber(value));
2833
- case "<": return lt(column, maybeParseNumber(value));
2834
- case ">=": return gte(column, maybeParseNumber(value));
2835
- case "<=": return lte(column, maybeParseNumber(value));
2836
- case "beginswith":
2837
- case "doesnotbeginwith": {
2838
- const expr = like(column, valueIsField ? void 0 : `${value}%`);
2839
- return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
2840
- }
2841
- case "contains":
2842
- case "doesnotcontain": {
2843
- const expr = like(column, valueIsField ? void 0 : `%${value}%`);
2844
- return operatorLC === "doesnotcontain" ? not(expr) : expr;
2845
- }
2846
- case "endswith":
2847
- case "doesnotendwith": {
2848
- const expr = like(column, valueIsField ? void 0 : `%${value}`);
2849
- return operatorLC === "doesnotendwith" ? not(expr) : expr;
2850
- }
2851
- case "null": return isNull(column);
2852
- case "notnull": return not(isNull(column));
2853
- case "in":
2854
- case "notin": {
2855
- const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
2856
- return operatorLC === "notin" ? not(expr) : expr;
2857
- }
2858
- case "between":
2859
- case "notbetween": {
2860
- const valueAsArray = toArray(value);
2861
- if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
2862
- let [first, second] = valueAsArray;
2863
- const shouldParseNumbers = !(parseNumbers === false);
2864
- if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
2865
- const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
2866
- const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
2867
- if (!preserveValueOrder && secondNum < firstNum) {
2868
- const tempNum = secondNum;
2869
- second = firstNum;
2870
- first = tempNum;
2871
- } else {
2872
- first = firstNum;
2873
- second = secondNum;
2874
- }
2875
- } else if (valueIsField) {
2876
- first = asFieldOrValue(first);
2877
- second = asFieldOrValue(second);
2878
- }
2879
- const expr = and(gte(column, first), lte(column, second));
2880
- return operatorLC === "notbetween" ? not(expr) : expr;
2881
- }
2882
- return;
2883
- }
2884
- default: return;
2885
- }
2886
- };
2887
- //#endregion
2888
2711
  //#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
2889
2712
  /**
2890
2713
  * Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
@@ -2898,7 +2721,7 @@ const defaultRuleProcessorTanStackDB = (rule, _options) => {
2898
2721
  */
2899
2722
  const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
2900
2723
  var _processRuleGroup;
2901
- const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
2724
+ const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {}, ruleProcessor } = options;
2902
2725
  const ops = context.tanStackDbOperators;
2903
2726
  if (!ops) return void 0;
2904
2727
  const { and, eq, not, or } = ops;
@@ -2906,7 +2729,6 @@ const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
2906
2729
  const refKeys = Object.keys(refs);
2907
2730
  /* v8 ignore next -- @preserve */
2908
2731
  if (refKeys.length === 0) return fallback;
2909
- const ruleProcessor = defaultRuleProcessorTanStackDB;
2910
2732
  const processRuleGroup = (rg) => {
2911
2733
  var _rg$id;
2912
2734
  if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
@@ -3302,6 +3124,97 @@ const defaultRuleProcessorCypher = (rule, opts = {}) => {
3302
3124
  }
3303
3125
  };
3304
3126
  //#endregion
3127
+ //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
3128
+ /**
3129
+ * Default rule processor used by {@link formatQuery} for the "drizzle" format.
3130
+ *
3131
+ * @group Export
3132
+ */
3133
+ const defaultRuleProcessorDrizzle = (rule, _options) => {
3134
+ const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
3135
+ // v8 ignore next
3136
+ const { parseNumbers, preserveValueOrder, context = {} } = opts;
3137
+ const { columns, drizzleOperators, useRawFields } = context;
3138
+ if (!columns || !drizzleOperators) return void 0;
3139
+ const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
3140
+ const { field, operator, value, valueSource } = rule;
3141
+ const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
3142
+ const operatorLC = lc(operator);
3143
+ const valueIsField = valueSource === "field";
3144
+ const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
3145
+ const maybeParseNumber = (v) => {
3146
+ if (valueIsField || !parseNumbers) return asFieldOrValue(v);
3147
+ return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
3148
+ };
3149
+ if (!column) return void 0;
3150
+ const matchEval = processMatchMode(rule);
3151
+ if (matchEval === false) return;
3152
+ else if (matchEval) {
3153
+ if (opts.preset !== "postgresql") return void 0;
3154
+ const { mode, threshold } = matchEval;
3155
+ const arrayElementAlias = "elem_alias";
3156
+ const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
3157
+ switch (mode) {
3158
+ case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
3159
+ case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
3160
+ case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
3161
+ case "atleast":
3162
+ case "atmost":
3163
+ case "exactly": {
3164
+ const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
3165
+ return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
3166
+ }
3167
+ }
3168
+ }
3169
+ switch (operatorLC) {
3170
+ case "=": return eq(column, maybeParseNumber(value));
3171
+ case "!=": return ne(column, maybeParseNumber(value));
3172
+ case ">": return gt(column, maybeParseNumber(value));
3173
+ case "<": return lt(column, maybeParseNumber(value));
3174
+ case ">=": return gte(column, maybeParseNumber(value));
3175
+ case "<=": return lte(column, maybeParseNumber(value));
3176
+ case "beginswith":
3177
+ case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
3178
+ case "contains":
3179
+ case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
3180
+ case "endswith":
3181
+ case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
3182
+ case "null": return isNull(column);
3183
+ case "notnull": return isNotNull(column);
3184
+ case "in":
3185
+ case "notin": {
3186
+ const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
3187
+ return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
3188
+ }
3189
+ case "between":
3190
+ case "notbetween": {
3191
+ const valueAsArray = toArray(value);
3192
+ if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
3193
+ let [first, second] = valueAsArray;
3194
+ const shouldParseNumbers = !(parseNumbers === false);
3195
+ if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
3196
+ const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
3197
+ const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
3198
+ if (!preserveValueOrder && secondNum < firstNum) {
3199
+ const tempNum = secondNum;
3200
+ second = firstNum;
3201
+ first = tempNum;
3202
+ } else {
3203
+ first = firstNum;
3204
+ second = secondNum;
3205
+ }
3206
+ } else if (valueIsField) {
3207
+ first = asFieldOrValue(first);
3208
+ second = asFieldOrValue(second);
3209
+ }
3210
+ return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
3211
+ }
3212
+ return;
3213
+ }
3214
+ default: return;
3215
+ }
3216
+ };
3217
+ //#endregion
3305
3218
  //#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
3306
3219
  const rangeOperatorMap = {
3307
3220
  "<": "lt",
@@ -3949,7 +3862,7 @@ const defaultRuleProcessorSQL = (rule, opts = {}) => {
3949
3862
  case "atmost":
3950
3863
  case "exactly": {
3951
3864
  const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
3952
- return `(select count(*)${threshold > 0 && threshold < 1 ? ` / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter}) ${op} ${threshold}`;
3865
+ return `(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter}) ${op} ${threshold}`;
3953
3866
  }
3954
3867
  }
3955
3868
  }
@@ -4009,7 +3922,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
4009
3922
  case "atmost":
4010
3923
  case "exactly": {
4011
3924
  const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
4012
- return finalize(`(select count(*)${threshold > 0 && threshold < 1 ? ` / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL}) ${op} ${threshold}`);
3925
+ return finalize(`(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL}) ${op} ${threshold}`);
4013
3926
  }
4014
3927
  }
4015
3928
  }
@@ -4263,6 +4176,96 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
4263
4176
  }
4264
4177
  };
4265
4178
  //#endregion
4179
+ //#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
4180
+ /**
4181
+ * Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
4182
+ *
4183
+ * @group Export
4184
+ */
4185
+ const defaultRuleProcessorTanStackDB = (rule, _options) => {
4186
+ const { parseNumbers, preserveValueOrder, context = {} } = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
4187
+ const ops = context.tanStackDbOperators;
4188
+ const refs = context._tanstackDbRefs;
4189
+ const primaryRef = context._tanstackDbPrimaryRef;
4190
+ if (!ops || !refs || !primaryRef) return void 0;
4191
+ const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
4192
+ const resolveField = (fieldName) => {
4193
+ const dotIdx = fieldName.indexOf(".");
4194
+ if (dotIdx > 0) {
4195
+ const prefix = fieldName.slice(0, dotIdx);
4196
+ const rest = fieldName.slice(dotIdx + 1);
4197
+ if (refs[prefix]) return refs[prefix][rest];
4198
+ }
4199
+ return refs[primaryRef][fieldName];
4200
+ };
4201
+ const { field, operator, value, valueSource } = rule;
4202
+ const column = resolveField(field);
4203
+ const operatorLC = lc(operator);
4204
+ const valueIsField = valueSource === "field";
4205
+ const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
4206
+ const maybeParseNumber = (v) => {
4207
+ if (valueIsField || !parseNumbers) return asFieldOrValue(v);
4208
+ return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
4209
+ };
4210
+ switch (operatorLC) {
4211
+ case "=": return eq(column, maybeParseNumber(value));
4212
+ case "!=": return not(eq(column, maybeParseNumber(value)));
4213
+ case ">": return gt(column, maybeParseNumber(value));
4214
+ case "<": return lt(column, maybeParseNumber(value));
4215
+ case ">=": return gte(column, maybeParseNumber(value));
4216
+ case "<=": return lte(column, maybeParseNumber(value));
4217
+ case "beginswith":
4218
+ case "doesnotbeginwith": {
4219
+ const expr = like(column, valueIsField ? void 0 : `${value}%`);
4220
+ return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
4221
+ }
4222
+ case "contains":
4223
+ case "doesnotcontain": {
4224
+ const expr = like(column, valueIsField ? void 0 : `%${value}%`);
4225
+ return operatorLC === "doesnotcontain" ? not(expr) : expr;
4226
+ }
4227
+ case "endswith":
4228
+ case "doesnotendwith": {
4229
+ const expr = like(column, valueIsField ? void 0 : `%${value}`);
4230
+ return operatorLC === "doesnotendwith" ? not(expr) : expr;
4231
+ }
4232
+ case "null": return isNull(column);
4233
+ case "notnull": return not(isNull(column));
4234
+ case "in":
4235
+ case "notin": {
4236
+ const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
4237
+ return operatorLC === "notin" ? not(expr) : expr;
4238
+ }
4239
+ case "between":
4240
+ case "notbetween": {
4241
+ const valueAsArray = toArray(value);
4242
+ if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
4243
+ let [first, second] = valueAsArray;
4244
+ const shouldParseNumbers = !(parseNumbers === false);
4245
+ if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
4246
+ const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
4247
+ const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
4248
+ if (!preserveValueOrder && secondNum < firstNum) {
4249
+ const tempNum = secondNum;
4250
+ second = firstNum;
4251
+ first = tempNum;
4252
+ } else {
4253
+ first = firstNum;
4254
+ second = secondNum;
4255
+ }
4256
+ } else if (valueIsField) {
4257
+ first = asFieldOrValue(first);
4258
+ second = asFieldOrValue(second);
4259
+ }
4260
+ const expr = and(gte(column, first), lte(column, second));
4261
+ return operatorLC === "notbetween" ? not(expr) : expr;
4262
+ }
4263
+ return;
4264
+ }
4265
+ default: return;
4266
+ }
4267
+ };
4268
+ //#endregion
4266
4269
  //#region src/utils/formatQuery/formatQuery.ts
4267
4270
  /**
4268
4271
  * A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
@@ -4514,6 +4517,8 @@ const generateValueProcessor = (vpbr) => (field, operator, value, valueSource) =
4514
4517
  /**
4515
4518
  * Default value processor used by {@link formatQuery} for "sql" format.
4516
4519
  *
4520
+ * @deprecated Prefer {@link defaultValueProcessorByRule}.
4521
+ *
4517
4522
  * @group Export
4518
4523
  */
4519
4524
  const defaultValueProcessor = generateValueProcessor(defaultValueProcessorByRule);
@@ -4837,7 +4842,8 @@ const mergeClassnames = (...args) => ({
4837
4842
  matchThreshold: joinClassnamesByName("matchThreshold", args),
4838
4843
  branches: joinClassnamesByName("branches", args),
4839
4844
  hasSubQuery: joinClassnamesByName("hasSubQuery", args),
4840
- loading: joinClassnamesByName("loading", args)
4845
+ loading: joinClassnamesByName("loading", args),
4846
+ valueDateTimeRelative: joinClassnamesByName("valueDateTimeRelative", args)
4841
4847
  });
4842
4848
  //#endregion
4843
4849
  //#region src/utils/preferProp.ts