@react-querybuilder/datetime 8.20.1 → 8.20.2

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 (147) hide show
  1. package/README.md +9 -3
  2. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-BVNfYaIj.js +2 -0
  3. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-BVNfYaIj.js.map +1 -0
  4. package/dist/cjs/{getDatetimeRuleProcessorTanStackDB-CL79A1_x.js → getDatetimeRuleProcessorTanStackDB-cmGqMT0Q.js} +83 -216
  5. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-cmGqMT0Q.js.map +1 -0
  6. package/dist/cjs/react-querybuilder_datetime.cjs.development.d.ts +3 -123
  7. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.d.ts +2 -2
  8. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js +3 -2
  9. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js.map +1 -1
  10. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.d.ts +2 -2
  11. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js +53 -26
  12. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js.map +1 -1
  13. package/dist/cjs/react-querybuilder_datetime.cjs.development.js +10 -467
  14. package/dist/cjs/react-querybuilder_datetime.cjs.development.js.map +1 -1
  15. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.d.ts +2 -2
  16. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js +26 -144
  17. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js.map +1 -1
  18. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.d.ts +2 -2
  19. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js +3 -2
  20. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js.map +1 -1
  21. package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.d.ts +228 -0
  22. package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.js +464 -0
  23. package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.js.map +1 -0
  24. package/dist/cjs/react-querybuilder_datetime.cjs.production.d.ts +3 -123
  25. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.d.ts +2 -2
  26. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js +1 -1
  27. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js.map +1 -1
  28. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.d.ts +2 -2
  29. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js +1 -1
  30. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js.map +1 -1
  31. package/dist/cjs/react-querybuilder_datetime.cjs.production.js +1 -1
  32. package/dist/cjs/react-querybuilder_datetime.cjs.production.js.map +1 -1
  33. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.d.ts +2 -2
  34. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js +1 -1
  35. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js.map +1 -1
  36. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.d.ts +2 -2
  37. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js +1 -1
  38. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js.map +1 -1
  39. package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.d.ts +228 -0
  40. package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.js +2 -0
  41. package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.js.map +1 -0
  42. package/dist/cjs/rolldown-runtime-CMqjfN_6.js +1 -0
  43. package/dist/cjs/rolldown-runtime-D6vf50IK.js +28 -0
  44. package/dist/cjs/rqbDateTimeLibraryAPI.jsdate-BPEcMhhr.js +128 -0
  45. package/dist/cjs/rqbDateTimeLibraryAPI.jsdate-BPEcMhhr.js.map +1 -0
  46. package/dist/cjs/rqbDateTimeLibraryAPI.jsdate-ioz2B1zh.js +2 -0
  47. package/dist/cjs/rqbDateTimeLibraryAPI.jsdate-ioz2B1zh.js.map +1 -0
  48. package/dist/cjs/{types-XYMw0jFT.d.ts → types-Di8kFIXV.d.ts} +3 -103
  49. package/dist/cjs/ui.d.ts +1 -0
  50. package/dist/cjs/ui.js +6 -0
  51. package/dist/cjs/utils-DUePrC--.js +154 -0
  52. package/dist/cjs/utils-DUePrC--.js.map +1 -0
  53. package/dist/cjs/utils-jkW5R1AA.js +2 -0
  54. package/dist/cjs/utils-jkW5R1AA.js.map +1 -0
  55. package/dist/{getDatetimeRuleProcessorTanStackDB-BcOC-o2A.mjs → getDatetimeRuleProcessorTanStackDB-B93XaPdB.mjs} +4 -107
  56. package/dist/getDatetimeRuleProcessorTanStackDB-B93XaPdB.mjs.map +1 -0
  57. package/dist/{getDatetimeRuleProcessorTanStackDB-BL8mbdbl.js → getDatetimeRuleProcessorTanStackDB-BDFJlfJh.js} +4 -181
  58. package/dist/getDatetimeRuleProcessorTanStackDB-BDFJlfJh.js.map +1 -0
  59. package/dist/getDatetimeRuleProcessorTanStackDB-Czg9Fbb8.mjs +2 -0
  60. package/dist/getDatetimeRuleProcessorTanStackDB-Czg9Fbb8.mjs.map +1 -0
  61. package/dist/objectSpread2-73AKOozq.js +181 -0
  62. package/dist/objectSpread2-73AKOozq.js.map +1 -0
  63. package/dist/react-querybuilder_datetime.d.mts +3 -123
  64. package/dist/react-querybuilder_datetime.date-fns.d.mts +2 -2
  65. package/dist/react-querybuilder_datetime.date-fns.mjs +2 -1
  66. package/dist/react-querybuilder_datetime.date-fns.mjs.map +1 -1
  67. package/dist/react-querybuilder_datetime.dayjs.d.mts +2 -2
  68. package/dist/react-querybuilder_datetime.dayjs.mjs +27 -2
  69. package/dist/react-querybuilder_datetime.dayjs.mjs.map +1 -1
  70. package/dist/react-querybuilder_datetime.jsdate.d.mts +2 -2
  71. package/dist/react-querybuilder_datetime.jsdate.mjs +2 -120
  72. package/dist/react-querybuilder_datetime.jsdate.mjs.map +1 -1
  73. package/dist/react-querybuilder_datetime.legacy-esm.d.ts +3 -123
  74. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.d.ts +2 -2
  75. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js +2 -1
  76. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js.map +1 -1
  77. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.d.ts +2 -2
  78. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js +27 -2
  79. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js.map +1 -1
  80. package/dist/react-querybuilder_datetime.legacy-esm.js +4 -449
  81. package/dist/react-querybuilder_datetime.legacy-esm.js.map +1 -1
  82. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.d.ts +2 -2
  83. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js +2 -120
  84. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js.map +1 -1
  85. package/dist/react-querybuilder_datetime.legacy-esm.luxon.d.ts +2 -2
  86. package/dist/react-querybuilder_datetime.legacy-esm.luxon.js +2 -1
  87. package/dist/react-querybuilder_datetime.legacy-esm.luxon.js.map +1 -1
  88. package/dist/react-querybuilder_datetime.legacy-esm.ui.d.ts +228 -0
  89. package/dist/react-querybuilder_datetime.legacy-esm.ui.js +451 -0
  90. package/dist/react-querybuilder_datetime.legacy-esm.ui.js.map +1 -0
  91. package/dist/react-querybuilder_datetime.luxon.d.mts +2 -2
  92. package/dist/react-querybuilder_datetime.luxon.mjs +2 -1
  93. package/dist/react-querybuilder_datetime.luxon.mjs.map +1 -1
  94. package/dist/react-querybuilder_datetime.mjs +4 -446
  95. package/dist/react-querybuilder_datetime.mjs.map +1 -1
  96. package/dist/react-querybuilder_datetime.production.d.mts +3 -123
  97. package/dist/react-querybuilder_datetime.production.date-fns.d.mts +2 -2
  98. package/dist/react-querybuilder_datetime.production.date-fns.mjs +1 -1
  99. package/dist/react-querybuilder_datetime.production.date-fns.mjs.map +1 -1
  100. package/dist/react-querybuilder_datetime.production.dayjs.d.mts +2 -2
  101. package/dist/react-querybuilder_datetime.production.dayjs.mjs +1 -1
  102. package/dist/react-querybuilder_datetime.production.dayjs.mjs.map +1 -1
  103. package/dist/react-querybuilder_datetime.production.jsdate.d.mts +2 -2
  104. package/dist/react-querybuilder_datetime.production.jsdate.mjs +1 -1
  105. package/dist/react-querybuilder_datetime.production.jsdate.mjs.map +1 -1
  106. package/dist/react-querybuilder_datetime.production.luxon.d.mts +2 -2
  107. package/dist/react-querybuilder_datetime.production.luxon.mjs +1 -1
  108. package/dist/react-querybuilder_datetime.production.luxon.mjs.map +1 -1
  109. package/dist/react-querybuilder_datetime.production.mjs +1 -1
  110. package/dist/react-querybuilder_datetime.production.mjs.map +1 -1
  111. package/dist/react-querybuilder_datetime.production.ui.d.mts +228 -0
  112. package/dist/react-querybuilder_datetime.production.ui.mjs +2 -0
  113. package/dist/react-querybuilder_datetime.production.ui.mjs.map +1 -0
  114. package/dist/react-querybuilder_datetime.ui.d.mts +228 -0
  115. package/dist/react-querybuilder_datetime.ui.mjs +448 -0
  116. package/dist/react-querybuilder_datetime.ui.mjs.map +1 -0
  117. package/dist/rqbDateTimeLibraryAPI.jsdate-CDOtydFq.mjs +2 -0
  118. package/dist/rqbDateTimeLibraryAPI.jsdate-CDOtydFq.mjs.map +1 -0
  119. package/dist/rqbDateTimeLibraryAPI.jsdate-CpGoQAje.js +123 -0
  120. package/dist/rqbDateTimeLibraryAPI.jsdate-CpGoQAje.js.map +1 -0
  121. package/dist/rqbDateTimeLibraryAPI.jsdate-D66yJ1hK.mjs +123 -0
  122. package/dist/rqbDateTimeLibraryAPI.jsdate-D66yJ1hK.mjs.map +1 -0
  123. package/dist/{types-CdjHqQ0k.d.ts → types-Di8kFIXV.d.mts} +3 -103
  124. package/dist/{types-CdjHqQ0k.d.mts → types-Di8kFIXV.d.ts} +3 -103
  125. package/dist/utils-BC2SALFm.mjs +107 -0
  126. package/dist/utils-BC2SALFm.mjs.map +1 -0
  127. package/dist/utils-VKS8YY2D.mjs +2 -0
  128. package/dist/utils-VKS8YY2D.mjs.map +1 -0
  129. package/package.json +27 -8
  130. package/ui/package.json +4 -0
  131. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-CL79A1_x.js.map +0 -1
  132. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-DgUg_arY.js +0 -2
  133. package/dist/cjs/getDatetimeRuleProcessorTanStackDB-DgUg_arY.js.map +0 -1
  134. package/dist/cjs/rqbDateTimeLibraryAPI.dayjs-BfILPx88.js +0 -2
  135. package/dist/cjs/rqbDateTimeLibraryAPI.dayjs-BfILPx88.js.map +0 -1
  136. package/dist/cjs/rqbDateTimeLibraryAPI.dayjs-CzLh_zi9.js +0 -63
  137. package/dist/cjs/rqbDateTimeLibraryAPI.dayjs-CzLh_zi9.js.map +0 -1
  138. package/dist/getDatetimeRuleProcessorTanStackDB-BL8mbdbl.js.map +0 -1
  139. package/dist/getDatetimeRuleProcessorTanStackDB-BcOC-o2A.mjs.map +0 -1
  140. package/dist/getDatetimeRuleProcessorTanStackDB-Dloxv6k2.mjs +0 -2
  141. package/dist/getDatetimeRuleProcessorTanStackDB-Dloxv6k2.mjs.map +0 -1
  142. package/dist/rqbDateTimeLibraryAPI.dayjs-BW7faYFD.mjs +0 -29
  143. package/dist/rqbDateTimeLibraryAPI.dayjs-BW7faYFD.mjs.map +0 -1
  144. package/dist/rqbDateTimeLibraryAPI.dayjs-BoX90aqZ.mjs +0 -2
  145. package/dist/rqbDateTimeLibraryAPI.dayjs-BoX90aqZ.mjs.map +0 -1
  146. package/dist/rqbDateTimeLibraryAPI.dayjs-Da4VXvFM.js +0 -29
  147. package/dist/rqbDateTimeLibraryAPI.dayjs-Da4VXvFM.js.map +0 -1
@@ -1,9 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rqbDateTimeLibraryAPI_dayjs = require("./rqbDateTimeLibraryAPI.dayjs-CzLh_zi9.js");
3
- const require_getDatetimeRuleProcessorTanStackDB = require("./getDatetimeRuleProcessorTanStackDB-CL79A1_x.js");
4
- let react_querybuilder = require("react-querybuilder");
5
- let react = require("react");
6
- react = require_rqbDateTimeLibraryAPI_dayjs.__toESM(react);
2
+ const require_utils = require("./utils-DUePrC--.js");
3
+ const require_getDatetimeRuleProcessorTanStackDB = require("./getDatetimeRuleProcessorTanStackDB-cmGqMT0Q.js");
4
+ let _react_querybuilder_core = require("@react-querybuilder/core");
7
5
  //#region src/datetimeRuleProcessorJsonLogic.ts
8
6
  const dateOperationMap = {
9
7
  "!=": "dateNotOn",
@@ -27,15 +25,15 @@ const dateOperationMap = {
27
25
  */
28
26
  const datetimeRuleProcessorJsonLogic = (rule, options) => {
29
27
  const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
30
- if (!require_getDatetimeRuleProcessorTanStackDB.processIsDateField(opts.context?.isDateField, rule, opts)) return (0, react_querybuilder.defaultRuleProcessorJsonLogic)(rule, opts);
28
+ if (!require_utils.processIsDateField(opts.context?.isDateField, rule, opts)) return (0, _react_querybuilder_core.defaultRuleProcessorJsonLogic)(rule, opts);
31
29
  const { field, value, valueSource } = rule;
32
- const operator = require_getDatetimeRuleProcessorTanStackDB.resolveDatetimeOperator(rule, opts);
30
+ const operator = require_utils.resolveDatetimeOperator(rule, opts);
33
31
  const valueIsField = valueSource === "field";
34
32
  const fieldObject = { var: field };
35
- const dateOnly = require_getDatetimeRuleProcessorTanStackDB.isDateOnlyDatatype(opts?.fieldData?.datatype);
33
+ const dateOnly = require_utils.isDateOnlyDatatype(opts?.fieldData?.datatype);
36
34
  const renderValue = (v) => {
37
35
  if (valueIsField) return { var: `${v}` };
38
- if (require_getDatetimeRuleProcessorTanStackDB.isRelativeDateTimeValue(v)) return { dateRelative: [
36
+ if (require_utils.isRelativeDateTimeValue(v)) return { dateRelative: [
39
37
  v.anchor,
40
38
  v.offset,
41
39
  v.unit,
@@ -52,12 +50,12 @@ const datetimeRuleProcessorJsonLogic = (rule, options) => {
52
50
  case ">=": return { [dateOperationMap[operator]]: [fieldObject, renderValue(value)] };
53
51
  case "in":
54
52
  case "notIn": {
55
- const valueAsArray = (Array.isArray(value) ? value : (0, react_querybuilder.toArray)(value)).map(renderValue);
53
+ const valueAsArray = (Array.isArray(value) ? value : (0, _react_querybuilder_core.toArray)(value)).map(renderValue);
56
54
  return { [dateOperationMap[operator]]: [fieldObject, valueAsArray] };
57
55
  }
58
56
  case "between":
59
57
  case "notBetween": {
60
- const valueAsArray = (Array.isArray(value) ? value : (0, react_querybuilder.toArray)(value)).map(renderValue);
58
+ const valueAsArray = (Array.isArray(value) ? value : (0, _react_querybuilder_core.toArray)(value)).map(renderValue);
61
59
  if (valueAsArray.length < 2) return false;
62
60
  return { [dateOperationMap[operator]]: [
63
61
  valueAsArray[0],
@@ -66,463 +64,12 @@ const datetimeRuleProcessorJsonLogic = (rule, options) => {
66
64
  ] };
67
65
  }
68
66
  }
69
- return (0, react_querybuilder.defaultRuleProcessorJsonLogic)(rule, options);
67
+ return (0, _react_querybuilder_core.defaultRuleProcessorJsonLogic)(rule, options);
70
68
  };
71
69
  //#endregion
72
- //#region src/InheritedValueEditorContext.ts
73
- /**
74
- * Holds the value editor inherited from an outer (compat package) context provider,
75
- * captured _before_ {@link QueryBuilderDateTime} overrides it. Lets the date/time value
76
- * editor delegate non-date fields (and absolute date inputs) to the compat editor instead
77
- * of the bare default {@link react-querybuilder!ValueEditor ValueEditor}. `null` = none
78
- * inherited (fall back to default).
79
- */
80
- const InheritedValueEditorContext = (0, react.createContext)(null);
81
- /** Inherited (compat) value editor, or `null` if none. See {@link InheritedValueEditorContext}. */
82
- const useInheritedValueEditor = () => (0, react.useContext)(InheritedValueEditorContext);
83
- //#endregion
84
- //#region src/relativeDateTimeConstants.ts
85
- /**
86
- * Class name applied to the absolute/relative mode toggle button. Package-local (not part
87
- * of the core `standardClassnames`) to avoid coupling core to this extension.
88
- */
89
- const relativeDateTimeToggleClassName = "rule-value-dateTimeRelative-toggle";
90
- /** Default value applied when switching a rule to relative mode. */
91
- const defaultRelativeDateTimeValue = {
92
- mode: "relative",
93
- anchor: "now",
94
- offset: 0,
95
- unit: "day"
96
- };
97
- /** Default anchor (reference-point) options for the relative date/time editor. */
98
- const defaultRelativeDateTimeAnchors = [
99
- {
100
- name: "now",
101
- value: "now",
102
- label: "now"
103
- },
104
- {
105
- name: "startOfDay",
106
- value: "startOfDay",
107
- label: "start of day"
108
- },
109
- {
110
- name: "endOfDay",
111
- value: "endOfDay",
112
- label: "end of day"
113
- },
114
- {
115
- name: "startOfWeek",
116
- value: "startOfWeek",
117
- label: "start of week"
118
- },
119
- {
120
- name: "endOfWeek",
121
- value: "endOfWeek",
122
- label: "end of week"
123
- },
124
- {
125
- name: "startOfMonth",
126
- value: "startOfMonth",
127
- label: "start of month"
128
- },
129
- {
130
- name: "endOfMonth",
131
- value: "endOfMonth",
132
- label: "end of month"
133
- },
134
- {
135
- name: "startOfYear",
136
- value: "startOfYear",
137
- label: "start of year"
138
- },
139
- {
140
- name: "endOfYear",
141
- value: "endOfYear",
142
- label: "end of year"
143
- }
144
- ];
145
- /** Default unit options for the relative date/time editor. */
146
- const defaultRelativeDateTimeUnits = [
147
- {
148
- name: "minute",
149
- value: "minute",
150
- label: "minute(s)"
151
- },
152
- {
153
- name: "hour",
154
- value: "hour",
155
- label: "hour(s)"
156
- },
157
- {
158
- name: "day",
159
- value: "day",
160
- label: "day(s)"
161
- },
162
- {
163
- name: "week",
164
- value: "week",
165
- label: "week(s)"
166
- },
167
- {
168
- name: "month",
169
- value: "month",
170
- label: "month(s)"
171
- },
172
- {
173
- name: "year",
174
- value: "year",
175
- label: "year(s)"
176
- }
177
- ];
178
- /** Default labels/content for the absolute/relative mode toggle. */
179
- const defaultRelativeDateTimeToggleLabels = {
180
- label: "Toggle relative date/time",
181
- absoluteTitle: "Absolute date/time (click for relative)",
182
- relativeTitle: "Relative date/time (click for absolute)",
183
- absoluteContent: "",
184
- relativeContent: ""
185
- };
186
- //#endregion
187
- //#region src/relativeDateTimeModeControllers.tsx
188
- /**
189
- * Compact absolute/relative toggle rendered by {@link toggleModeController}. A
190
- * `role="switch"` button whose default glyph is supplied by CSS (keyed on
191
- * `aria-checked`); override via the `toggleLabels` config.
192
- *
193
- * @group Components
194
- */
195
- const RelativeDateTimeModeToggle = ({ isRelative, setMode, disabled, className, labels }) => {
196
- const onClick = react.useCallback(() => setMode(isRelative ? "absolute" : "relative"), [setMode, isRelative]);
197
- return /* @__PURE__ */ react.createElement("button", {
198
- type: "button",
199
- role: "switch",
200
- "aria-checked": isRelative,
201
- "aria-label": labels.label,
202
- title: isRelative ? labels.relativeTitle : labels.absoluteTitle,
203
- disabled,
204
- className: (0, react_querybuilder.clsx)(relativeDateTimeToggleClassName, className),
205
- onClick
206
- }, isRelative ? labels.relativeContent : labels.absoluteContent);
207
- };
208
- /**
209
- * Zero-config default {@link RelativeDateTimeModeController}: derives the mode from the
210
- * value shape and renders a compact toggle button to switch between absolute and
211
- * relative entry.
212
- */
213
- const toggleModeController = {
214
- isRelative: (props) => require_getDatetimeRuleProcessorTanStackDB.isRelativeDateTimeValue(props.value),
215
- ModeControl: RelativeDateTimeModeToggle
216
- };
217
- /**
218
- * Builds an operator-driven {@link RelativeDateTimeModeController} that derives the mode
219
- * from the rule's operator. Pass the operator name(s) (or a predicate) that should put the
220
- * editor in relative mode. No toggle is rendered — the operator selector is the mode
221
- * affordance.
222
- *
223
- * NOTE: the chosen operators only signal _mode_; the rule's value remains a
224
- * {@link RelativeDateTimeValue}. For these operators to export correctly, map each one to a
225
- * real comparison operator via `context.relativeOperatorMap` when calling `formatQuery`
226
- * (e.g. `{ relativeEq: '=' }`). See the documentation.
227
- */
228
- const createOperatorModeController = (relativeOperators) => ({ isRelative: (props) => typeof relativeOperators === "function" ? relativeOperators(props.operator) : relativeOperators.includes(props.operator) });
229
- /**
230
- * Appends the given `operators` to each field's `operators` list, so the operator-driven
231
- * controller (see {@link createOperatorModeController}) has an operator to switch into
232
- * relative mode. Fields without an explicit `operators` list fall back to the core
233
- * `defaultOperators`.
234
- */
235
- const withRelativeOperators = (fields, operators) => fields.map((field) => ({
236
- ...field,
237
- operators: [...field.operators ?? react_querybuilder.defaultOperators, ...operators]
238
- }));
239
- //#endregion
240
- //#region src/RelativeDateTimeConfigContext.tsx
241
- /**
242
- * Carries {@link RelativeDateTimeEditorConfig} to the {@link RelativeDateTimeValueEditor}.
243
- * Provided by {@link QueryBuilderDateTime}; defaults apply when no provider is present.
244
- */
245
- const RelativeDateTimeConfigContext = (0, react.createContext)({});
246
- /** Reads the relative date/time editor config from context, merged with defaults. */
247
- const useRelativeDateTimeConfig = () => {
248
- const config = (0, react.useContext)(RelativeDateTimeConfigContext);
249
- return (0, react.useMemo)(() => ({
250
- modeController: config.modeController ?? toggleModeController,
251
- anchors: config.anchors ?? defaultRelativeDateTimeAnchors,
252
- units: config.units ?? defaultRelativeDateTimeUnits,
253
- toggleLabels: {
254
- ...defaultRelativeDateTimeToggleLabels,
255
- ...config.toggleLabels
256
- },
257
- dateTimeAPI: config.dateTimeAPI ?? require_rqbDateTimeLibraryAPI_dayjs.rqbDateTimeLibraryAPI
258
- }), [config]);
259
- };
260
- //#endregion
261
- //#region src/RelativeDateTimeValueEditor.tsx
262
- const dummyPath = [];
263
- const dummyFieldData = {
264
- name: "",
265
- value: "",
266
- label: ""
267
- };
268
- /** Splits a value into the from/to pair used by between/notBetween, object-safe. */
269
- const toBetweenArray = (value) => Array.isArray(value) ? value : require_getDatetimeRuleProcessorTanStackDB.isRelativeDateTimeValue(value) ? [value] : (0, react_querybuilder.toArray)(value);
270
- /**
271
- * Renders a single absolute-or-relative date/time value: a mode affordance (per the
272
- * controller) plus either an absolute date input or anchor + signed offset + unit
273
- * selectors. Reused once per slot so between/notBetween can mix bounds (e.g. an absolute
274
- * "from" and a relative "to").
275
- */
276
- const RelativeDateTimeSingleValueEditor = ({ baseProps, value, onChange, absoluteOperator, config, SelectorComponent, NumericEditorComponent, valueListItemClassName, numericSchema }) => {
277
- const { schema, disabled, title, testID } = baseProps;
278
- const { modeController, anchors, units, toggleLabels } = config;
279
- const isRelative = modeController.isRelative({
280
- ...baseProps,
281
- value
282
- });
283
- const relValue = require_getDatetimeRuleProcessorTanStackDB.isRelativeDateTimeValue(value) ? value : defaultRelativeDateTimeValue;
284
- const handleSetMode = (0, react.useCallback)((mode) => onChange(mode === "relative" ? defaultRelativeDateTimeValue : ""), [onChange]);
285
- const handleChangeAnchor = (0, react.useCallback)((anchor) => onChange({
286
- ...relValue,
287
- anchor
288
- }), [onChange, relValue]);
289
- const handleChangeOffset = (0, react.useCallback)((offset) => onChange({
290
- ...relValue,
291
- offset: (0, react_querybuilder.parseNumber)(offset, { parseNumbers: true }) || 0
292
- }), [onChange, relValue]);
293
- const handleChangeUnit = (0, react.useCallback)((unit) => onChange({
294
- ...relValue,
295
- unit
296
- }), [onChange, relValue]);
297
- const { ModeControl } = modeController;
298
- return /* @__PURE__ */ react.createElement(react.Fragment, null, ModeControl && /* @__PURE__ */ react.createElement(ModeControl, {
299
- isRelative,
300
- setMode: handleSetMode,
301
- schema,
302
- disabled,
303
- className: valueListItemClassName,
304
- title,
305
- testID,
306
- labels: toggleLabels
307
- }), isRelative ? /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(SelectorComponent, {
308
- schema,
309
- testID,
310
- title,
311
- className: valueListItemClassName,
312
- handleOnChange: handleChangeAnchor,
313
- disabled,
314
- value: relValue.anchor,
315
- options: anchors,
316
- multiple: false,
317
- listsAsArrays: false,
318
- path: dummyPath,
319
- level: 0
320
- }), /* @__PURE__ */ react.createElement(NumericEditorComponent, {
321
- skipHook: true,
322
- testID,
323
- inputType: "number",
324
- title,
325
- className: valueListItemClassName,
326
- disabled,
327
- handleOnChange: handleChangeOffset,
328
- field: "",
329
- operator: "",
330
- value: relValue.offset,
331
- valueSource: "value",
332
- fieldData: dummyFieldData,
333
- schema: numericSchema,
334
- path: dummyPath,
335
- level: 0,
336
- rule: {
337
- field: "",
338
- operator: "=",
339
- value: relValue.offset
340
- }
341
- }), relValue.offset !== 0 && /* @__PURE__ */ react.createElement(SelectorComponent, {
342
- schema,
343
- testID,
344
- title,
345
- className: valueListItemClassName,
346
- handleOnChange: handleChangeUnit,
347
- disabled,
348
- value: relValue.unit,
349
- options: units,
350
- multiple: false,
351
- listsAsArrays: false,
352
- path: dummyPath,
353
- level: 0
354
- })) : /* @__PURE__ */ react.createElement(DateTimeValueEditor, {
355
- ...baseProps,
356
- operator: absoluteOperator,
357
- value,
358
- handleOnChange: onChange,
359
- className: react_querybuilder.standardClassnames.value
360
- }));
361
- };
362
- /**
363
- * Value editor with support for {@link RelativeDateTimeValue relative date/time values}
364
- * (e.g. "three months ago" or "the beginning of this year"). How the user switches
365
- * between absolute and relative modes is delegated to a pluggable
366
- * {@link RelativeDateTimeModeController} (default: a compact toggle), supplied via
367
- * {@link QueryBuilderDateTime}. In relative mode it renders anchor + signed offset + unit
368
- * selectors; the unit selector is hidden when the offset is `0`.
369
- *
370
- * For the `between`/`notBetween` operators it renders two independent value editors (each
371
- * with its own mode affordance) and stores the bounds as a two-element array, so the from
372
- * and to bounds can independently be absolute or relative.
373
- *
374
- * @group Components
375
- */
376
- const RelativeDateTimeValueEditor = (props) => {
377
- const { valueListItemClassName } = (0, react_querybuilder.useValueEditor)(props);
378
- const { className, value, handleOnChange, schema, operator, separator } = props;
379
- const { suppressStandardClassnames } = schema;
380
- const SelectorComponent = props.selectorComponent ?? schema.controls.valueSelector;
381
- const NumericEditorComponent = useInheritedValueEditor() ?? react_querybuilder.ValueEditor;
382
- const config = useRelativeDateTimeConfig();
383
- const numericSchema = (0, react.useMemo)(() => ({
384
- ...schema,
385
- parseNumbers: true
386
- }), [schema]);
387
- const outerClassname = (0, react.useMemo)(() => (0, react_querybuilder.clsx)(suppressStandardClassnames || react_querybuilder.standardClassnames.valueDateTimeRelative, className), [suppressStandardClassnames, className]);
388
- const isBetween = operator === "between" || operator === "notBetween";
389
- const valueAsArray = (0, react.useMemo)(() => toBetweenArray(value), [value]);
390
- const handleChangeBound = (0, react.useCallback)((index) => (boundValue) => {
391
- const next = [valueAsArray[0], valueAsArray[1]];
392
- next[index] = boundValue;
393
- handleOnChange(next);
394
- }, [valueAsArray, handleOnChange]);
395
- if (isBetween) return /* @__PURE__ */ react.createElement("span", { className: outerClassname }, /* @__PURE__ */ react.createElement(RelativeDateTimeSingleValueEditor, {
396
- baseProps: props,
397
- value: valueAsArray[0],
398
- onChange: handleChangeBound(0),
399
- absoluteOperator: "=",
400
- config,
401
- SelectorComponent,
402
- NumericEditorComponent,
403
- valueListItemClassName,
404
- numericSchema
405
- }), separator, /* @__PURE__ */ react.createElement(RelativeDateTimeSingleValueEditor, {
406
- baseProps: props,
407
- value: valueAsArray[1],
408
- onChange: handleChangeBound(1),
409
- absoluteOperator: "=",
410
- config,
411
- SelectorComponent,
412
- NumericEditorComponent,
413
- valueListItemClassName,
414
- numericSchema
415
- }));
416
- return /* @__PURE__ */ react.createElement("span", { className: outerClassname }, /* @__PURE__ */ react.createElement(RelativeDateTimeSingleValueEditor, {
417
- baseProps: props,
418
- value,
419
- onChange: handleOnChange,
420
- absoluteOperator: operator,
421
- config,
422
- SelectorComponent,
423
- NumericEditorComponent,
424
- valueListItemClassName,
425
- numericSchema
426
- }));
427
- };
428
- //#endregion
429
- //#region src/QueryBuilderDateTime.tsx
430
- /**
431
- * Whether a rule should use a date/time editor, based on either the coerced input
432
- * type (`date`/`datetime-local`) or a date-like `datatype` (`date`/`datetime`/`timestamp`).
433
- */
434
- const isDateTimeEditor = (props, inputTypeCoerced) => props.type === "text" && (inputTypeCoerced === "date" || inputTypeCoerced === "datetime-local") || /^(?:date|datetime|timestamp)\b/i.test(props.fieldData?.datatype);
435
- const pad2 = (n) => `${n}`.padStart(2, "0");
436
- /**
437
- * Formats a `Date` into the local value expected by a native `date`/`datetime-local`
438
- * input (library-agnostic; the date library only handles parsing/validation).
439
- */
440
- const formatDateInputValue = (d, withTime) => {
441
- const datePart = `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
442
- return withTime ? `${datePart}T${pad2(d.getHours())}:${pad2(d.getMinutes())}` : datePart;
443
- };
444
- /**
445
- * Renders the inherited (compat) editor when one is provided, otherwise the default
446
- * {@link react-querybuilder!ValueEditor ValueEditor}. The editor is received as a prop (rather
447
- * than read from context here) so the JSX element type stays prop-sourced and stable.
448
- */
449
- const FallbackValueEditor = ({ editor: Editor, ...props }) => Editor ? /* @__PURE__ */ react.createElement(Editor, props) : /* @__PURE__ */ react.createElement(react_querybuilder.ValueEditor, {
450
- ...props,
451
- skipHook: true
452
- });
453
- const DateTimeValueEditor = (props) => {
454
- const uVE = (0, react_querybuilder.useValueEditor)(props);
455
- const InheritedEditor = useInheritedValueEditor();
456
- const { dateTimeAPI } = useRelativeDateTimeConfig();
457
- const fallback = (p) => /* @__PURE__ */ react.createElement(FallbackValueEditor, {
458
- editor: InheritedEditor,
459
- ...p
460
- });
461
- if (!isDateTimeEditor(props, uVE.inputTypeCoerced)) return fallback(props);
462
- if (dateTimeAPI.isValid(props.value)) {
463
- const value = formatDateInputValue(dateTimeAPI.toDate(props.value), uVE.inputTypeCoerced !== "date");
464
- return fallback({
465
- ...props,
466
- value
467
- });
468
- }
469
- return fallback(props);
470
- };
471
- /**
472
- * Provider value editor: renders the relative-capable {@link RelativeDateTimeValueEditor}
473
- * for date/time fields and falls back to the inherited (compat) editor for everything else.
474
- */
475
- const QueryBuilderDateTimeValueEditor = (props) => {
476
- const uVE = (0, react_querybuilder.useValueEditor)(props);
477
- const InheritedEditor = useInheritedValueEditor();
478
- if (isDateTimeEditor(props, uVE.inputTypeCoerced)) return /* @__PURE__ */ react.createElement(RelativeDateTimeValueEditor, props);
479
- return /* @__PURE__ */ react.createElement(FallbackValueEditor, {
480
- editor: InheritedEditor,
481
- ...props
482
- });
483
- };
484
- const QueryBuilderDateTimeContext = (0, react_querybuilder.getCompatContextProvider)({ controlElements: { valueEditor: QueryBuilderDateTimeValueEditor } });
485
- /**
486
- * Context provider enabling date/time features for a wrapped
487
- * {@link react-querybuilder!QueryBuilder QueryBuilder}: renders the relative-capable
488
- * {@link RelativeDateTimeValueEditor} for date/time fields, and accepts optional
489
- * {@link RelativeDateTimeEditorConfig} props (mode controller, anchor/unit options, and
490
- * toggle labels). With no props it provides the zero-config toggle experience.
491
- *
492
- * @group Components
493
- */
494
- const QueryBuilderDateTime = ({ children, modeController, anchors, units, toggleLabels, dateTimeAPI }) => {
495
- const config = (0, react.useMemo)(() => ({
496
- modeController,
497
- anchors,
498
- units,
499
- toggleLabels,
500
- dateTimeAPI
501
- }), [
502
- modeController,
503
- anchors,
504
- units,
505
- toggleLabels,
506
- dateTimeAPI
507
- ]);
508
- const inheritedValueEditor = (0, react.useContext)(react_querybuilder.QueryBuilderContext).controlElements?.valueEditor ?? null;
509
- return /* @__PURE__ */ react.createElement(RelativeDateTimeConfigContext.Provider, { value: config }, /* @__PURE__ */ react.createElement(InheritedValueEditorContext.Provider, { value: inheritedValueEditor }, /* @__PURE__ */ react.createElement(QueryBuilderDateTimeContext, null, children)));
510
- };
511
- //#endregion
512
- exports.DateTimeValueEditor = DateTimeValueEditor;
513
- exports.QueryBuilderDateTime = QueryBuilderDateTime;
514
- exports.QueryBuilderDateTimeContext = QueryBuilderDateTimeContext;
515
- exports.RelativeDateTimeConfigContext = RelativeDateTimeConfigContext;
516
- exports.RelativeDateTimeModeToggle = RelativeDateTimeModeToggle;
517
- exports.RelativeDateTimeValueEditor = RelativeDateTimeValueEditor;
518
- exports.createOperatorModeController = createOperatorModeController;
519
70
  exports.datetimeRuleProcessorJsonLogic = datetimeRuleProcessorJsonLogic;
520
71
  exports.datetimeValueProcessorNL = require_getDatetimeRuleProcessorTanStackDB.datetimeValueProcessorNL;
521
72
  exports.defaultDateTimeNLOperatorMap = require_getDatetimeRuleProcessorTanStackDB.defaultDateTimeNLOperatorMap;
522
- exports.defaultRelativeDateTimeAnchors = defaultRelativeDateTimeAnchors;
523
- exports.defaultRelativeDateTimeToggleLabels = defaultRelativeDateTimeToggleLabels;
524
- exports.defaultRelativeDateTimeUnits = defaultRelativeDateTimeUnits;
525
- exports.defaultRelativeDateTimeValue = defaultRelativeDateTimeValue;
526
73
  exports.getDatetimeJsonLogicOperations = require_getDatetimeRuleProcessorTanStackDB.getDatetimeJsonLogicOperations;
527
74
  exports.getDatetimeRuleProcessorCEL = require_getDatetimeRuleProcessorTanStackDB.getDatetimeRuleProcessorCEL;
528
75
  exports.getDatetimeRuleProcessorCypher = require_getDatetimeRuleProcessorTanStackDB.getDatetimeRuleProcessorCypher;
@@ -546,9 +93,5 @@ exports.getDatetimeValueProcessorMSSQL = require_getDatetimeRuleProcessorTanStac
546
93
  exports.getDatetimeValueProcessorMySQL = require_getDatetimeRuleProcessorTanStackDB.getDatetimeValueProcessorMySQL;
547
94
  exports.getDatetimeValueProcessorOracle = require_getDatetimeRuleProcessorTanStackDB.getDatetimeValueProcessorOracle;
548
95
  exports.getDatetimeValueProcessorPostgreSQL = require_getDatetimeRuleProcessorTanStackDB.getDatetimeValueProcessorPostgreSQL;
549
- exports.relativeDateTimeToggleClassName = relativeDateTimeToggleClassName;
550
- exports.toggleModeController = toggleModeController;
551
- exports.useRelativeDateTimeConfig = useRelativeDateTimeConfig;
552
- exports.withRelativeOperators = withRelativeOperators;
553
96
 
554
97
  //# sourceMappingURL=react-querybuilder_datetime.cjs.development.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-querybuilder_datetime.cjs.development.js","names":["processIsDateField","resolveDatetimeOperator","isDateOnlyDatatype","isRelativeDateTimeValue","React","isRelativeDateTimeValue","defaultOperators","defaultDateTimeAPI","isRelativeDateTimeValue","React","standardClassnames","ValueEditor","ValueEditor","QueryBuilderContext"],"sources":["../../src/datetimeRuleProcessorJsonLogic.ts","../../src/InheritedValueEditorContext.ts","../../src/relativeDateTimeConstants.ts","../../src/relativeDateTimeModeControllers.tsx","../../src/RelativeDateTimeConfigContext.tsx","../../src/RelativeDateTimeValueEditor.tsx","../../src/QueryBuilderDateTime.tsx"],"sourcesContent":["import type { DefaultOperatorName, JsonLogicVar, RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorJsonLogic, toArray } from 'react-querybuilder';\nimport type { RQBJsonLogicDateRelative, RQBDateTimeJsonLogic } from './types';\nimport {\n isDateOnlyDatatype,\n isRelativeDateTimeValue,\n processIsDateField,\n resolveDatetimeOperator,\n} from './utils';\n\nconst dateOperationMap = {\n '!=': 'dateNotOn',\n '<': 'dateBefore',\n '<=': 'dateOnOrBefore',\n '=': 'dateOn',\n '>': 'dateAfter',\n '>=': 'dateOnOrAfter',\n between: 'dateBetween',\n in: 'dateIn',\n notBetween: 'dateNotBetween',\n notIn: 'dateNotIn',\n} as const satisfies Partial<Record<DefaultOperatorName, string>>;\n\n/**\n * Date/time rule processor for use by {@link @react-querybuilder/core!formatQuery formatQuery}\n * with the \"jsonlogic\" format.\n *\n * Note: Unlike other date/time rule processors from this library, this function does\n * not require a date/time library API. Instead, the date/time library API is used by\n * {@link getDatetimeJsonLogicOperations} during the evaluation process.\n */\nexport const datetimeRuleProcessorJsonLogic: RuleProcessor = (\n rule,\n options\n): RQBDateTimeJsonLogic => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n\n if (!processIsDateField(opts.context?.isDateField, rule, opts)) {\n return defaultRuleProcessorJsonLogic(rule, opts);\n }\n\n const { field, value, valueSource } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\n const valueIsField = valueSource === 'field';\n const fieldObject: JsonLogicVar = { var: field };\n const dateOnly = isDateOnlyDatatype(opts?.fieldData?.datatype);\n // Relative values stay \"live\": emit a `dateRelative` op resolved at evaluation time.\n // Field-source values are field names and render as `var` references.\n const renderValue = (v: unknown) => {\n if (valueIsField) return { var: `${v}` };\n if (isRelativeDateTimeValue(v)) {\n return {\n dateRelative: [v.anchor, v.offset, v.unit, dateOnly],\n } as RQBJsonLogicDateRelative;\n }\n return v as string;\n };\n\n switch (operator) {\n case '<':\n case '<=':\n case '=':\n case '!=':\n case '>':\n case '>=':\n return {\n [dateOperationMap[operator]]: [fieldObject, renderValue(value)],\n } as RQBDateTimeJsonLogic;\n\n case 'in':\n case 'notIn': {\n const valueAsArray = (Array.isArray(value) ? value : toArray(value)).map(renderValue);\n return { [dateOperationMap[operator]]: [fieldObject, valueAsArray] } as RQBDateTimeJsonLogic;\n }\n\n case 'between':\n case 'notBetween': {\n const valueAsArray = (Array.isArray(value) ? value : toArray(value)).map(renderValue);\n\n if (valueAsArray.length < 2) return false;\n\n return {\n [dateOperationMap[operator]]: [valueAsArray[0], fieldObject, valueAsArray[1]],\n } as RQBDateTimeJsonLogic;\n }\n }\n\n return defaultRuleProcessorJsonLogic(rule, options);\n};\n","import type { Context } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { ValueEditorProps } from 'react-querybuilder';\n\n/**\n * Holds the value editor inherited from an outer (compat package) context provider,\n * captured _before_ {@link QueryBuilderDateTime} overrides it. Lets the date/time value\n * editor delegate non-date fields (and absolute date inputs) to the compat editor instead\n * of the bare default {@link react-querybuilder!ValueEditor ValueEditor}. `null` = none\n * inherited (fall back to default).\n */\nexport const InheritedValueEditorContext: Context<React.ComponentType<ValueEditorProps> | null> =\n createContext<React.ComponentType<ValueEditorProps> | null>(null);\n\n/** Inherited (compat) value editor, or `null` if none. See {@link InheritedValueEditorContext}. */\nexport const useInheritedValueEditor = (): React.ComponentType<ValueEditorProps> | null =>\n useContext(InheritedValueEditorContext);\n","import type { FullOption } from 'react-querybuilder';\nimport type {\n RelativeDateTimeAnchor,\n RelativeDateTimeToggleLabels,\n RelativeDateTimeUnit,\n RelativeDateTimeValue,\n} from './types';\n\n/**\n * Class name applied to the absolute/relative mode toggle button. Package-local (not part\n * of the core `standardClassnames`) to avoid coupling core to this extension.\n */\nexport const relativeDateTimeToggleClassName = 'rule-value-dateTimeRelative-toggle';\n\n/** Default value applied when switching a rule to relative mode. */\nexport const defaultRelativeDateTimeValue: RelativeDateTimeValue = {\n mode: 'relative',\n anchor: 'now',\n offset: 0,\n unit: 'day',\n};\n\n/** Default anchor (reference-point) options for the relative date/time editor. */\nexport const defaultRelativeDateTimeAnchors: FullOption<RelativeDateTimeAnchor>[] = [\n { name: 'now', value: 'now', label: 'now' },\n { name: 'startOfDay', value: 'startOfDay', label: 'start of day' },\n { name: 'endOfDay', value: 'endOfDay', label: 'end of day' },\n { name: 'startOfWeek', value: 'startOfWeek', label: 'start of week' },\n { name: 'endOfWeek', value: 'endOfWeek', label: 'end of week' },\n { name: 'startOfMonth', value: 'startOfMonth', label: 'start of month' },\n { name: 'endOfMonth', value: 'endOfMonth', label: 'end of month' },\n { name: 'startOfYear', value: 'startOfYear', label: 'start of year' },\n { name: 'endOfYear', value: 'endOfYear', label: 'end of year' },\n];\n\n/** Default unit options for the relative date/time editor. */\nexport const defaultRelativeDateTimeUnits: FullOption<RelativeDateTimeUnit>[] = [\n { name: 'minute', value: 'minute', label: 'minute(s)' },\n { name: 'hour', value: 'hour', label: 'hour(s)' },\n { name: 'day', value: 'day', label: 'day(s)' },\n { name: 'week', value: 'week', label: 'week(s)' },\n { name: 'month', value: 'month', label: 'month(s)' },\n { name: 'year', value: 'year', label: 'year(s)' },\n];\n\n/** Default labels/content for the absolute/relative mode toggle. */\nexport const defaultRelativeDateTimeToggleLabels: Required<RelativeDateTimeToggleLabels> = {\n label: 'Toggle relative date/time',\n absoluteTitle: 'Absolute date/time (click for relative)',\n relativeTitle: 'Relative date/time (click for absolute)',\n // Empty by default; the CSS pseudo-element renders the glyph based on `aria-checked`.\n absoluteContent: '',\n relativeContent: '',\n};\n","import * as React from 'react';\nimport type { FullOperator } from 'react-querybuilder';\nimport { clsx, defaultOperators } from 'react-querybuilder';\nimport { relativeDateTimeToggleClassName } from './relativeDateTimeConstants';\nimport type { RelativeDateTimeModeController, RelativeDateTimeModeControlProps } from './types';\nimport { isRelativeDateTimeValue } from './utils';\n\n/**\n * Compact absolute/relative toggle rendered by {@link toggleModeController}. A\n * `role=\"switch\"` button whose default glyph is supplied by CSS (keyed on\n * `aria-checked`); override via the `toggleLabels` config.\n *\n * @group Components\n */\nexport const RelativeDateTimeModeToggle = ({\n isRelative,\n setMode,\n disabled,\n className,\n labels,\n}: RelativeDateTimeModeControlProps): React.JSX.Element => {\n const onClick = React.useCallback(\n () => setMode(isRelative ? 'absolute' : 'relative'),\n [setMode, isRelative]\n );\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isRelative}\n aria-label={labels.label}\n title={isRelative ? labels.relativeTitle : labels.absoluteTitle}\n disabled={disabled}\n className={clsx(relativeDateTimeToggleClassName, className)}\n onClick={onClick}>\n {isRelative ? labels.relativeContent : labels.absoluteContent}\n </button>\n );\n};\n\n/**\n * Zero-config default {@link RelativeDateTimeModeController}: derives the mode from the\n * value shape and renders a compact toggle button to switch between absolute and\n * relative entry.\n */\nexport const toggleModeController: RelativeDateTimeModeController = {\n isRelative: props => isRelativeDateTimeValue(props.value),\n ModeControl: RelativeDateTimeModeToggle,\n};\n\n/**\n * Builds an operator-driven {@link RelativeDateTimeModeController} that derives the mode\n * from the rule's operator. Pass the operator name(s) (or a predicate) that should put the\n * editor in relative mode. No toggle is rendered — the operator selector is the mode\n * affordance.\n *\n * NOTE: the chosen operators only signal _mode_; the rule's value remains a\n * {@link RelativeDateTimeValue}. For these operators to export correctly, map each one to a\n * real comparison operator via `context.relativeOperatorMap` when calling `formatQuery`\n * (e.g. `{ relativeEq: '=' }`). See the documentation.\n */\nexport const createOperatorModeController = (\n relativeOperators: string[] | ((operator: string) => boolean)\n): RelativeDateTimeModeController => ({\n isRelative: props =>\n typeof relativeOperators === 'function'\n ? relativeOperators(props.operator)\n : relativeOperators.includes(props.operator),\n});\n\ninterface FieldWithOperators {\n operators?: FullOperator[];\n [key: string]: unknown;\n}\n\n/**\n * Appends the given `operators` to each field's `operators` list, so the operator-driven\n * controller (see {@link createOperatorModeController}) has an operator to switch into\n * relative mode. Fields without an explicit `operators` list fall back to the core\n * `defaultOperators`.\n */\nexport const withRelativeOperators = <F extends FieldWithOperators>(\n fields: F[],\n operators: FullOperator[]\n): F[] =>\n fields.map(field => ({\n ...field,\n operators: [...(field.operators ?? (defaultOperators as FullOperator[])), ...operators],\n }));\n","import * as React from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { FullOption } from 'react-querybuilder';\nimport {\n defaultRelativeDateTimeAnchors,\n defaultRelativeDateTimeToggleLabels,\n defaultRelativeDateTimeUnits,\n} from './relativeDateTimeConstants';\nimport { toggleModeController } from './relativeDateTimeModeControllers';\nimport { rqbDateTimeLibraryAPI as defaultDateTimeAPI } from './rqbDateTimeLibraryAPI.dayjs';\nimport type {\n RelativeDateTimeAnchor,\n RelativeDateTimeEditorConfig,\n RelativeDateTimeModeController,\n RelativeDateTimeToggleLabels,\n RelativeDateTimeUnit,\n RQBDateTimeLibraryAPI,\n} from './types';\n\n/** Fully-resolved relative date/time editor config (no optional fields). */\nexport interface ResolvedRelativeDateTimeConfig {\n modeController: RelativeDateTimeModeController;\n anchors: FullOption<RelativeDateTimeAnchor>[];\n units: FullOption<RelativeDateTimeUnit>[];\n toggleLabels: Required<RelativeDateTimeToggleLabels>;\n dateTimeAPI: RQBDateTimeLibraryAPI;\n}\n\n/**\n * Carries {@link RelativeDateTimeEditorConfig} to the {@link RelativeDateTimeValueEditor}.\n * Provided by {@link QueryBuilderDateTime}; defaults apply when no provider is present.\n */\nexport const RelativeDateTimeConfigContext: React.Context<RelativeDateTimeEditorConfig> =\n createContext<RelativeDateTimeEditorConfig>({});\n\n/** Reads the relative date/time editor config from context, merged with defaults. */\nexport const useRelativeDateTimeConfig = (): ResolvedRelativeDateTimeConfig => {\n const config = useContext(RelativeDateTimeConfigContext);\n return useMemo(\n () => ({\n modeController: config.modeController ?? toggleModeController,\n anchors: config.anchors ?? defaultRelativeDateTimeAnchors,\n units: config.units ?? defaultRelativeDateTimeUnits,\n toggleLabels: { ...defaultRelativeDateTimeToggleLabels, ...config.toggleLabels },\n dateTimeAPI: config.dateTimeAPI ?? defaultDateTimeAPI,\n }),\n [config]\n );\n};\n","import * as React from 'react';\nimport { useCallback, useMemo } from 'react';\nimport type { FullField, Path, ValueEditorProps, ValueSelectorProps } from 'react-querybuilder';\nimport {\n clsx,\n parseNumber,\n standardClassnames,\n toArray,\n useValueEditor,\n ValueEditor,\n} from 'react-querybuilder';\nimport { useInheritedValueEditor } from './InheritedValueEditorContext';\nimport { DateTimeValueEditor } from './QueryBuilderDateTime';\nimport type { ResolvedRelativeDateTimeConfig } from './RelativeDateTimeConfigContext';\nimport { useRelativeDateTimeConfig } from './RelativeDateTimeConfigContext';\nimport { defaultRelativeDateTimeValue } from './relativeDateTimeConstants';\nimport type { RelativeDateTimeAnchor, RelativeDateTimeUnit, RelativeDateTimeValue } from './types';\nimport { isRelativeDateTimeValue } from './utils';\n\nconst dummyPath: Path = [];\nconst dummyFieldData: FullField = { name: '', value: '', label: '' };\n\n/** Splits a value into the from/to pair used by between/notBetween, object-safe. */\nconst toBetweenArray = (value: unknown): unknown[] =>\n Array.isArray(value) ? value : isRelativeDateTimeValue(value) ? [value] : toArray(value);\n\ninterface RelativeDateTimeSingleValueEditorProps {\n /** The original value editor props (for mode derivation and absolute rendering). */\n baseProps: ValueEditorProps;\n /** The value for this slot (the whole value, or one element of a between pair). */\n value: unknown;\n /** Emits a new value for this slot. */\n onChange: (value: unknown) => void;\n /** Operator passed to the absolute editor (forced to `=` for between slots). */\n absoluteOperator: string;\n config: ResolvedRelativeDateTimeConfig;\n SelectorComponent: React.ComponentType<ValueSelectorProps>;\n /** Themed numeric offset input: the inherited (compat) editor when present, else the default. */\n NumericEditorComponent: React.ComponentType<ValueEditorProps>;\n valueListItemClassName?: string;\n numericSchema: ValueEditorProps['schema'];\n}\n\n/**\n * Renders a single absolute-or-relative date/time value: a mode affordance (per the\n * controller) plus either an absolute date input or anchor + signed offset + unit\n * selectors. Reused once per slot so between/notBetween can mix bounds (e.g. an absolute\n * \"from\" and a relative \"to\").\n */\nconst RelativeDateTimeSingleValueEditor = ({\n baseProps,\n value,\n onChange,\n absoluteOperator,\n config,\n SelectorComponent,\n NumericEditorComponent,\n valueListItemClassName,\n numericSchema,\n}: RelativeDateTimeSingleValueEditorProps): React.JSX.Element => {\n const { schema, disabled, title, testID } = baseProps;\n const { modeController, anchors, units, toggleLabels } = config;\n\n const isRelative = modeController.isRelative({ ...baseProps, value });\n const relValue: RelativeDateTimeValue = isRelativeDateTimeValue(value)\n ? value\n : defaultRelativeDateTimeValue;\n\n const handleSetMode = useCallback(\n (mode: 'absolute' | 'relative') =>\n onChange(mode === 'relative' ? defaultRelativeDateTimeValue : ''),\n [onChange]\n );\n\n const handleChangeAnchor = useCallback(\n (anchor: string) => onChange({ ...relValue, anchor: anchor as RelativeDateTimeAnchor }),\n [onChange, relValue]\n );\n\n const handleChangeOffset = useCallback(\n (offset: unknown) =>\n onChange({\n ...relValue,\n offset: (parseNumber(offset, { parseNumbers: true }) as number) || 0,\n }),\n [onChange, relValue]\n );\n\n const handleChangeUnit = useCallback(\n (unit: string) => onChange({ ...relValue, unit: unit as RelativeDateTimeUnit }),\n [onChange, relValue]\n );\n\n const { ModeControl } = modeController;\n\n return (\n <React.Fragment>\n {ModeControl && (\n <ModeControl\n isRelative={isRelative}\n setMode={handleSetMode}\n schema={schema}\n disabled={disabled}\n className={valueListItemClassName}\n title={title}\n testID={testID}\n labels={toggleLabels}\n />\n )}\n {isRelative ? (\n <React.Fragment>\n <SelectorComponent\n schema={schema}\n testID={testID}\n title={title}\n className={valueListItemClassName}\n handleOnChange={handleChangeAnchor}\n disabled={disabled}\n value={relValue.anchor}\n options={anchors}\n multiple={false}\n listsAsArrays={false}\n path={dummyPath}\n level={0}\n />\n <NumericEditorComponent\n skipHook\n testID={testID}\n inputType=\"number\"\n title={title}\n className={valueListItemClassName}\n disabled={disabled}\n handleOnChange={handleChangeOffset}\n field={''}\n operator={''}\n value={relValue.offset}\n valueSource={'value'}\n fieldData={dummyFieldData}\n schema={numericSchema}\n path={dummyPath}\n level={0}\n rule={{ field: '', operator: '=', value: relValue.offset }}\n />\n {relValue.offset !== 0 && (\n <SelectorComponent\n schema={schema}\n testID={testID}\n title={title}\n className={valueListItemClassName}\n handleOnChange={handleChangeUnit}\n disabled={disabled}\n value={relValue.unit}\n options={units}\n multiple={false}\n listsAsArrays={false}\n path={dummyPath}\n level={0}\n />\n )}\n </React.Fragment>\n ) : (\n <DateTimeValueEditor\n {...baseProps}\n operator={absoluteOperator}\n value={value}\n handleOnChange={onChange}\n className={standardClassnames.value}\n />\n )}\n </React.Fragment>\n );\n};\n\n/**\n * Value editor with support for {@link RelativeDateTimeValue relative date/time values}\n * (e.g. \"three months ago\" or \"the beginning of this year\"). How the user switches\n * between absolute and relative modes is delegated to a pluggable\n * {@link RelativeDateTimeModeController} (default: a compact toggle), supplied via\n * {@link QueryBuilderDateTime}. In relative mode it renders anchor + signed offset + unit\n * selectors; the unit selector is hidden when the offset is `0`.\n *\n * For the `between`/`notBetween` operators it renders two independent value editors (each\n * with its own mode affordance) and stores the bounds as a two-element array, so the from\n * and to bounds can independently be absolute or relative.\n *\n * @group Components\n */\nexport const RelativeDateTimeValueEditor = (props: ValueEditorProps): React.JSX.Element => {\n const { valueListItemClassName } = useValueEditor(props);\n\n const { className, value, handleOnChange, schema, operator, separator } = props;\n const { suppressStandardClassnames } = schema;\n\n const SelectorComponent = props.selectorComponent ?? schema.controls.valueSelector;\n\n // Themed numeric offset input from the inherited (compat) editor when present, else default.\n const NumericEditorComponent = useInheritedValueEditor() ?? ValueEditor;\n\n const config = useRelativeDateTimeConfig();\n\n const numericSchema = useMemo(() => ({ ...schema, parseNumbers: true }), [schema]);\n\n const outerClassname = useMemo(\n () => clsx(suppressStandardClassnames || standardClassnames.valueDateTimeRelative, className),\n [suppressStandardClassnames, className]\n );\n\n const isBetween = operator === 'between' || operator === 'notBetween';\n\n // For between/notBetween, store the bounds as a two-element array. Relative values are\n // objects (which can't survive comma-joining), so the array is emitted directly,\n // regardless of `listsAsArrays`.\n const valueAsArray = useMemo(() => toBetweenArray(value), [value]);\n\n const handleChangeBound = useCallback(\n (index: number) => (boundValue: unknown) => {\n const next = [valueAsArray[0], valueAsArray[1]];\n next[index] = boundValue;\n handleOnChange(next);\n },\n [valueAsArray, handleOnChange]\n );\n\n if (isBetween) {\n return (\n <span className={outerClassname}>\n <RelativeDateTimeSingleValueEditor\n baseProps={props}\n value={valueAsArray[0]}\n onChange={handleChangeBound(0)}\n absoluteOperator=\"=\"\n config={config}\n SelectorComponent={SelectorComponent}\n NumericEditorComponent={NumericEditorComponent}\n valueListItemClassName={valueListItemClassName}\n numericSchema={numericSchema}\n />\n {separator}\n <RelativeDateTimeSingleValueEditor\n baseProps={props}\n value={valueAsArray[1]}\n onChange={handleChangeBound(1)}\n absoluteOperator=\"=\"\n config={config}\n SelectorComponent={SelectorComponent}\n NumericEditorComponent={NumericEditorComponent}\n valueListItemClassName={valueListItemClassName}\n numericSchema={numericSchema}\n />\n </span>\n );\n }\n\n return (\n <span className={outerClassname}>\n <RelativeDateTimeSingleValueEditor\n baseProps={props}\n value={value}\n onChange={handleOnChange}\n absoluteOperator={operator}\n config={config}\n SelectorComponent={SelectorComponent}\n NumericEditorComponent={NumericEditorComponent}\n valueListItemClassName={valueListItemClassName}\n numericSchema={numericSchema}\n />\n </span>\n );\n};\n","import * as React from 'react';\nimport { useContext, useMemo } from 'react';\nimport type { QueryBuilderContextProvider, ValueEditorProps } from 'react-querybuilder';\nimport {\n getCompatContextProvider,\n QueryBuilderContext,\n useValueEditor,\n ValueEditor,\n} from 'react-querybuilder';\nimport {\n InheritedValueEditorContext,\n useInheritedValueEditor,\n} from './InheritedValueEditorContext';\nimport {\n RelativeDateTimeConfigContext,\n useRelativeDateTimeConfig,\n} from './RelativeDateTimeConfigContext';\nimport { RelativeDateTimeValueEditor } from './RelativeDateTimeValueEditor';\nimport type { RelativeDateTimeEditorConfig } from './types';\n\n/**\n * Whether a rule should use a date/time editor, based on either the coerced input\n * type (`date`/`datetime-local`) or a date-like `datatype` (`date`/`datetime`/`timestamp`).\n */\nconst isDateTimeEditor = (props: ValueEditorProps, inputTypeCoerced: string | undefined): boolean =>\n (props.type === 'text' &&\n (inputTypeCoerced === 'date' || inputTypeCoerced === 'datetime-local')) ||\n /^(?:date|datetime|timestamp)\\b/i.test(props.fieldData?.datatype as string);\n\nconst pad2 = (n: number): string => `${n}`.padStart(2, '0');\n\n/**\n * Formats a `Date` into the local value expected by a native `date`/`datetime-local`\n * input (library-agnostic; the date library only handles parsing/validation).\n */\nconst formatDateInputValue = (d: Date, withTime: boolean): string => {\n const datePart = `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n return withTime ? `${datePart}T${pad2(d.getHours())}:${pad2(d.getMinutes())}` : datePart;\n};\n\n/**\n * Renders the inherited (compat) editor when one is provided, otherwise the default\n * {@link react-querybuilder!ValueEditor ValueEditor}. The editor is received as a prop (rather\n * than read from context here) so the JSX element type stays prop-sourced and stable.\n */\nconst FallbackValueEditor = ({\n editor: Editor,\n ...props\n}: ValueEditorProps & {\n editor: React.ComponentType<ValueEditorProps> | null;\n}): React.JSX.Element => (Editor ? <Editor {...props} /> : <ValueEditor {...props} skipHook />);\n\nexport const DateTimeValueEditor = (props: ValueEditorProps): React.JSX.Element => {\n const uVE = useValueEditor(props);\n const InheritedEditor = useInheritedValueEditor();\n const { dateTimeAPI } = useRelativeDateTimeConfig();\n\n // Non-date fields and unparseable values: delegate to the inherited (compat) editor when\n // present, otherwise the default editor.\n const fallback = (p: ValueEditorProps) => <FallbackValueEditor editor={InheritedEditor} {...p} />;\n\n if (!isDateTimeEditor(props, uVE.inputTypeCoerced)) {\n return fallback(props);\n }\n\n if (dateTimeAPI.isValid(props.value)) {\n const value = formatDateInputValue(\n dateTimeAPI.toDate(props.value),\n uVE.inputTypeCoerced !== 'date'\n );\n return fallback({ ...props, value });\n }\n\n return fallback(props);\n};\n\n/**\n * Provider value editor: renders the relative-capable {@link RelativeDateTimeValueEditor}\n * for date/time fields and falls back to the inherited (compat) editor for everything else.\n */\nconst QueryBuilderDateTimeValueEditor = (props: ValueEditorProps): React.JSX.Element => {\n const uVE = useValueEditor(props);\n const InheritedEditor = useInheritedValueEditor();\n\n if (isDateTimeEditor(props, uVE.inputTypeCoerced)) {\n return <RelativeDateTimeValueEditor {...props} />;\n }\n\n return <FallbackValueEditor editor={InheritedEditor} {...props} />;\n};\n\nexport const QueryBuilderDateTimeContext: QueryBuilderContextProvider = getCompatContextProvider({\n controlElements: { valueEditor: QueryBuilderDateTimeValueEditor },\n});\n\n/** Props for {@link QueryBuilderDateTime}: {@link RelativeDateTimeEditorConfig} plus children. */\nexport interface QueryBuilderDateTimeProps extends RelativeDateTimeEditorConfig {\n children?: React.ReactNode;\n}\n\n/**\n * Context provider enabling date/time features for a wrapped\n * {@link react-querybuilder!QueryBuilder QueryBuilder}: renders the relative-capable\n * {@link RelativeDateTimeValueEditor} for date/time fields, and accepts optional\n * {@link RelativeDateTimeEditorConfig} props (mode controller, anchor/unit options, and\n * toggle labels). With no props it provides the zero-config toggle experience.\n *\n * @group Components\n */\nexport const QueryBuilderDateTime = ({\n children,\n modeController,\n anchors,\n units,\n toggleLabels,\n dateTimeAPI,\n}: QueryBuilderDateTimeProps): React.JSX.Element => {\n const config = useMemo(\n (): RelativeDateTimeEditorConfig => ({\n modeController,\n anchors,\n units,\n toggleLabels,\n dateTimeAPI,\n }),\n [modeController, anchors, units, toggleLabels, dateTimeAPI]\n );\n\n // Capture the value editor inherited from any outer compat provider (e.g. QueryBuilderMaterial)\n // _before_ QueryBuilderDateTimeContext overrides it, so date/time editors can delegate to it.\n const inheritedValueEditor = (useContext(QueryBuilderContext).controlElements?.valueEditor ??\n null) as React.ComponentType<ValueEditorProps> | null;\n\n return (\n <RelativeDateTimeConfigContext.Provider value={config}>\n <InheritedValueEditorContext.Provider value={inheritedValueEditor}>\n <QueryBuilderDateTimeContext>{children}</QueryBuilderDateTimeContext>\n </InheritedValueEditorContext.Provider>\n </RelativeDateTimeConfigContext.Provider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"react-querybuilder_datetime.cjs.development.js","names":["processIsDateField","resolveDatetimeOperator","isDateOnlyDatatype","isRelativeDateTimeValue"],"sources":["../../src/datetimeRuleProcessorJsonLogic.ts"],"sourcesContent":["import type { DefaultOperatorName, JsonLogicVar, RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorJsonLogic, toArray } from '@react-querybuilder/core';\nimport type { RQBJsonLogicDateRelative, RQBDateTimeJsonLogic } from './types';\nimport {\n isDateOnlyDatatype,\n isRelativeDateTimeValue,\n processIsDateField,\n resolveDatetimeOperator,\n} from './utils';\n\nconst dateOperationMap = {\n '!=': 'dateNotOn',\n '<': 'dateBefore',\n '<=': 'dateOnOrBefore',\n '=': 'dateOn',\n '>': 'dateAfter',\n '>=': 'dateOnOrAfter',\n between: 'dateBetween',\n in: 'dateIn',\n notBetween: 'dateNotBetween',\n notIn: 'dateNotIn',\n} as const satisfies Partial<Record<DefaultOperatorName, string>>;\n\n/**\n * Date/time rule processor for use by {@link @react-querybuilder/core!formatQuery formatQuery}\n * with the \"jsonlogic\" format.\n *\n * Note: Unlike other date/time rule processors from this library, this function does\n * not require a date/time library API. Instead, the date/time library API is used by\n * {@link getDatetimeJsonLogicOperations} during the evaluation process.\n */\nexport const datetimeRuleProcessorJsonLogic: RuleProcessor = (\n rule,\n options\n): RQBDateTimeJsonLogic => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n\n if (!processIsDateField(opts.context?.isDateField, rule, opts)) {\n return defaultRuleProcessorJsonLogic(rule, opts);\n }\n\n const { field, value, valueSource } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\n const valueIsField = valueSource === 'field';\n const fieldObject: JsonLogicVar = { var: field };\n const dateOnly = isDateOnlyDatatype(opts?.fieldData?.datatype);\n // Relative values stay \"live\": emit a `dateRelative` op resolved at evaluation time.\n // Field-source values are field names and render as `var` references.\n const renderValue = (v: unknown) => {\n if (valueIsField) return { var: `${v}` };\n if (isRelativeDateTimeValue(v)) {\n return {\n dateRelative: [v.anchor, v.offset, v.unit, dateOnly],\n } as RQBJsonLogicDateRelative;\n }\n return v as string;\n };\n\n switch (operator) {\n case '<':\n case '<=':\n case '=':\n case '!=':\n case '>':\n case '>=':\n return {\n [dateOperationMap[operator]]: [fieldObject, renderValue(value)],\n } as RQBDateTimeJsonLogic;\n\n case 'in':\n case 'notIn': {\n const valueAsArray = (Array.isArray(value) ? value : toArray(value)).map(renderValue);\n return { [dateOperationMap[operator]]: [fieldObject, valueAsArray] } as RQBDateTimeJsonLogic;\n }\n\n case 'between':\n case 'notBetween': {\n const valueAsArray = (Array.isArray(value) ? value : toArray(value)).map(renderValue);\n\n if (valueAsArray.length < 2) return false;\n\n return {\n [dateOperationMap[operator]]: [valueAsArray[0], fieldObject, valueAsArray[1]],\n } as RQBDateTimeJsonLogic;\n }\n }\n\n return defaultRuleProcessorJsonLogic(rule, options);\n};\n"],"mappings":";;;;;AAUA,MAAM,mBAAmB;CACvB,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;CACL,KAAK;CACL,MAAM;CACN,SAAS;CACT,IAAI;CACJ,YAAY;CACZ,OAAO;AACT;;;;;;;;;AAUA,MAAa,kCACX,MACA,YACyB;CACzB,MAAM,OAAO,gDAA8C,CAAC;CAE5D,IAAI,CAACA,cAAAA,mBAAmB,KAAK,SAAS,aAAa,MAAM,IAAI,GAC3D,QAAA,GAAA,yBAAA,8BAAA,CAAqC,MAAM,IAAI;CAGjD,MAAM,EAAE,OAAO,OAAO,gBAAgB;CACtC,MAAM,WAAWC,cAAAA,wBAAwB,MAAM,IAAI;CACnD,MAAM,eAAe,gBAAgB;CACrC,MAAM,cAA4B,EAAE,KAAK,MAAM;CAC/C,MAAM,WAAWC,cAAAA,mBAAmB,MAAM,WAAW,QAAQ;CAG7D,MAAM,eAAe,MAAe;EAClC,IAAI,cAAc,OAAO,EAAE,KAAK,GAAG,IAAI;EACvC,IAAIC,cAAAA,wBAAwB,CAAC,GAC3B,OAAO,EACL,cAAc;GAAC,EAAE;GAAQ,EAAE;GAAQ,EAAE;GAAM;EAAQ,EACrD;EAEF,OAAO;CACT;CAEA,QAAQ,UAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,MACH,OAAO,GACJ,iBAAiB,YAAY,CAAC,aAAa,YAAY,KAAK,CAAC,EAChE;EAEF,KAAK;EACL,KAAK,SAAS;GACZ,MAAM,gBAAgB,MAAM,QAAQ,KAAK,IAAI,SAAA,GAAA,yBAAA,QAAA,CAAgB,KAAK,EAAA,CAAG,IAAI,WAAW;GACpF,OAAO,GAAG,iBAAiB,YAAY,CAAC,aAAa,YAAY,EAAE;EACrE;EAEA,KAAK;EACL,KAAK,cAAc;GACjB,MAAM,gBAAgB,MAAM,QAAQ,KAAK,IAAI,SAAA,GAAA,yBAAA,QAAA,CAAgB,KAAK,EAAA,CAAG,IAAI,WAAW;GAEpF,IAAI,aAAa,SAAS,GAAG,OAAO;GAEpC,OAAO,GACJ,iBAAiB,YAAY;IAAC,aAAa;IAAI;IAAa,aAAa;GAAE,EAC9E;EACF;CACF;CAEA,QAAA,GAAA,yBAAA,8BAAA,CAAqC,MAAM,OAAO;AACpD"}
@@ -1,5 +1,5 @@
1
- import { g as RQBJsonLogicDateTimeOperations, i as RQBDateTimeLibraryAPI } from "./types-XYMw0jFT.js";
2
- import { RuleProcessor, ValueProcessorByRule } from "react-querybuilder";
1
+ import { g as RQBJsonLogicDateTimeOperations, i as RQBDateTimeLibraryAPI } from "./types-Di8kFIXV.js";
2
+ import { RuleProcessor, ValueProcessorByRule } from "@react-querybuilder/core";
3
3
 
4
4
  //#region src/rqbDateTimeLibraryAPI.jsdate.d.ts
5
5
  /**