@servicetitan/dte-pdf-editor 1.34.0 → 1.36.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 (114) hide show
  1. package/README.md +28 -12
  2. package/dist/components/display-conditions/condition-row.d.ts.map +1 -1
  3. package/dist/components/display-conditions/condition-row.js +1 -1
  4. package/dist/components/display-conditions/condition-row.js.map +1 -1
  5. package/dist/components/field-config-panel/advanced-settings.d.ts.map +1 -1
  6. package/dist/components/field-config-panel/advanced-settings.js +20 -10
  7. package/dist/components/field-config-panel/advanced-settings.js.map +1 -1
  8. package/dist/components/field-config-panel/formula-generator.d.ts.map +1 -1
  9. package/dist/components/field-config-panel/formula-generator.js +2 -1
  10. package/dist/components/field-config-panel/formula-generator.js.map +1 -1
  11. package/dist/components/field-config-panel/formula-modal.d.ts.map +1 -1
  12. package/dist/components/field-config-panel/formula-modal.js +47 -6
  13. package/dist/components/field-config-panel/formula-modal.js.map +1 -1
  14. package/dist/components/field-config-panel/formula-workspace.d.ts +1 -0
  15. package/dist/components/field-config-panel/formula-workspace.d.ts.map +1 -1
  16. package/dist/components/field-config-panel/formula-workspace.js +10 -4
  17. package/dist/components/field-config-panel/formula-workspace.js.map +1 -1
  18. package/dist/components/field-config-panel/result-type-selector.d.ts.map +1 -1
  19. package/dist/components/field-config-panel/result-type-selector.js +1 -0
  20. package/dist/components/field-config-panel/result-type-selector.js.map +1 -1
  21. package/dist/components/pdf-view/pdf-view-calculated.d.ts +1 -0
  22. package/dist/components/pdf-view/pdf-view-calculated.d.ts.map +1 -1
  23. package/dist/components/pdf-view/pdf-view-calculated.js +20 -3
  24. package/dist/components/pdf-view/pdf-view-calculated.js.map +1 -1
  25. package/dist/components/pdf-view/pdf-view-fillable.d.ts.map +1 -1
  26. package/dist/components/pdf-view/pdf-view-fillable.js +5 -2
  27. package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
  28. package/dist/components/pdf-view/pdf-view.d.ts +6 -0
  29. package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
  30. package/dist/components/pdf-view/pdf-view.js +2 -2
  31. package/dist/components/pdf-view/pdf-view.js.map +1 -1
  32. package/dist/constants/calculated.constants.d.ts +2 -0
  33. package/dist/constants/calculated.constants.d.ts.map +1 -1
  34. package/dist/constants/calculated.constants.js +2 -0
  35. package/dist/constants/calculated.constants.js.map +1 -1
  36. package/dist/hooks/useFormulaEditor.d.ts +3 -0
  37. package/dist/hooks/useFormulaEditor.d.ts.map +1 -1
  38. package/dist/hooks/useFormulaEditor.js +43 -35
  39. package/dist/hooks/useFormulaEditor.js.map +1 -1
  40. package/dist/interface/types.d.ts +7 -1
  41. package/dist/interface/types.d.ts.map +1 -1
  42. package/dist/interface/types.js.map +1 -1
  43. package/dist/utils/conditions/schema-data-points.utils.d.ts.map +1 -1
  44. package/dist/utils/conditions/schema-data-points.utils.js +4 -1
  45. package/dist/utils/conditions/schema-data-points.utils.js.map +1 -1
  46. package/dist/utils/data-model/extract-fields.utils.d.ts.map +1 -1
  47. package/dist/utils/data-model/extract-fields.utils.js +11 -1
  48. package/dist/utils/data-model/extract-fields.utils.js.map +1 -1
  49. package/dist/utils/formula/caret.utils.js +4 -4
  50. package/dist/utils/formula/caret.utils.js.map +1 -1
  51. package/dist/utils/formula/dom.utils.js +2 -2
  52. package/dist/utils/formula/dom.utils.js.map +1 -1
  53. package/dist/utils/formula/evaluate-formula.utils.d.ts +10 -2
  54. package/dist/utils/formula/evaluate-formula.utils.d.ts.map +1 -1
  55. package/dist/utils/formula/evaluate-formula.utils.js +205 -4
  56. package/dist/utils/formula/evaluate-formula.utils.js.map +1 -1
  57. package/dist/utils/formula/expression.utils.d.ts +10 -9
  58. package/dist/utils/formula/expression.utils.d.ts.map +1 -1
  59. package/dist/utils/formula/expression.utils.js +39 -41
  60. package/dist/utils/formula/expression.utils.js.map +1 -1
  61. package/dist/utils/formula/format-calculated-result.utils.d.ts +1 -1
  62. package/dist/utils/formula/format-calculated-result.utils.d.ts.map +1 -1
  63. package/dist/utils/formula/format-calculated-result.utils.js +29 -8
  64. package/dist/utils/formula/format-calculated-result.utils.js.map +1 -1
  65. package/dist/utils/formula/index.d.ts +0 -2
  66. package/dist/utils/formula/index.d.ts.map +1 -1
  67. package/dist/utils/formula/index.js +0 -2
  68. package/dist/utils/formula/index.js.map +1 -1
  69. package/dist/utils/formula/validate-formula.utils.d.ts +1 -1
  70. package/dist/utils/formula/validate-formula.utils.d.ts.map +1 -1
  71. package/dist/utils/formula/validate-formula.utils.js +15 -1
  72. package/dist/utils/formula/validate-formula.utils.js.map +1 -1
  73. package/dist/utils/shared/date.utils.d.ts +2 -0
  74. package/dist/utils/shared/date.utils.d.ts.map +1 -0
  75. package/dist/utils/shared/date.utils.js +6 -0
  76. package/dist/utils/shared/date.utils.js.map +1 -0
  77. package/dist/utils/shared/index.d.ts +1 -0
  78. package/dist/utils/shared/index.d.ts.map +1 -1
  79. package/dist/utils/shared/index.js +1 -0
  80. package/dist/utils/shared/index.js.map +1 -1
  81. package/package.json +1 -1
  82. package/src/components/display-conditions/condition-row.tsx +1 -0
  83. package/src/components/field-config-panel/advanced-settings.tsx +103 -77
  84. package/src/components/field-config-panel/formula-generator.tsx +2 -1
  85. package/src/components/field-config-panel/formula-modal.tsx +46 -6
  86. package/src/components/field-config-panel/formula-workspace.tsx +21 -7
  87. package/src/components/field-config-panel/result-type-selector.tsx +1 -0
  88. package/src/components/pdf-view/pdf-view-calculated.tsx +20 -3
  89. package/src/components/pdf-view/pdf-view-fillable.tsx +6 -3
  90. package/src/components/pdf-view/pdf-view.tsx +8 -0
  91. package/src/constants/calculated.constants.ts +4 -0
  92. package/src/hooks/useFormulaEditor.ts +108 -97
  93. package/src/interface/types.ts +8 -1
  94. package/src/utils/conditions/schema-data-points.utils.ts +4 -1
  95. package/src/utils/data-model/extract-fields.utils.ts +13 -1
  96. package/src/utils/formula/caret.utils.ts +1 -1
  97. package/src/utils/formula/dom.utils.ts +1 -1
  98. package/src/utils/formula/evaluate-formula.utils.ts +271 -5
  99. package/src/utils/formula/expression.utils.ts +44 -47
  100. package/src/utils/formula/format-calculated-result.utils.ts +32 -10
  101. package/src/utils/formula/index.ts +0 -2
  102. package/src/utils/formula/validate-formula.utils.ts +24 -0
  103. package/src/utils/shared/date.utils.ts +6 -0
  104. package/src/utils/shared/index.ts +1 -0
  105. package/dist/utils/formula/referenced-paths.utils.d.ts +0 -7
  106. package/dist/utils/formula/referenced-paths.utils.d.ts.map +0 -1
  107. package/dist/utils/formula/referenced-paths.utils.js +0 -18
  108. package/dist/utils/formula/referenced-paths.utils.js.map +0 -1
  109. package/dist/utils/formula/serialize-formula.utils.d.ts +0 -14
  110. package/dist/utils/formula/serialize-formula.utils.d.ts.map +0 -1
  111. package/dist/utils/formula/serialize-formula.utils.js +0 -33
  112. package/dist/utils/formula/serialize-formula.utils.js.map +0 -1
  113. package/src/utils/formula/referenced-paths.utils.ts +0 -18
  114. package/src/utils/formula/serialize-formula.utils.ts +0 -40
@@ -20,6 +20,21 @@ export function valueToNumber(raw) {
20
20
  const n = Number(s);
21
21
  return Number.isNaN(n) ? 0 : n;
22
22
  }
23
+ function hasAllFieldValues(formula, data, dateFieldPaths) {
24
+ return formula.tokens.every((t) => {
25
+ if (t.type !== 'field') {
26
+ return true;
27
+ }
28
+ const raw = resolvePdfDataValues(data, t.path);
29
+ if (raw === '') {
30
+ return false;
31
+ }
32
+ if (dateFieldPaths === null || dateFieldPaths === void 0 ? void 0 : dateFieldPaths.has(t.path)) {
33
+ return !isNaN(new Date(raw).getTime());
34
+ }
35
+ return !isNaN(Number(raw.trim()));
36
+ });
37
+ }
23
38
  function resolveTokens(formula, data) {
24
39
  return formula.tokens.map((t) => {
25
40
  if (t.type === 'field') {
@@ -101,7 +116,6 @@ function evalResolvedTokens(tokens) {
101
116
  return tokens[0].value;
102
117
  }
103
118
  const list = [...tokens];
104
- // Resolve innermost parentheses first
105
119
  let idx = 0;
106
120
  while (idx < list.length) {
107
121
  if (list[idx].type === 'lparen') {
@@ -118,15 +132,202 @@ function evalResolvedTokens(tokens) {
118
132
  }
119
133
  return evalFlat(list);
120
134
  }
135
+ function isTypedValue(t) {
136
+ return 'kind' in t;
137
+ }
138
+ function parseDateValue(raw) {
139
+ const d = new Date(raw);
140
+ return isNaN(d.getTime()) ? NaN : d.getTime();
141
+ }
142
+ function toDateOnly(ms) {
143
+ const d = new Date(ms);
144
+ d.setUTCHours(0, 0, 0, 0);
145
+ return d;
146
+ }
147
+ function toDateKey(d) {
148
+ const y = d.getUTCFullYear();
149
+ const m = String(d.getUTCMonth() + 1).padStart(2, '0');
150
+ const day = String(d.getUTCDate()).padStart(2, '0');
151
+ return `${y}-${m}-${day}`;
152
+ }
153
+ function isWeekend(d) {
154
+ const day = d.getUTCDay();
155
+ return day === 0 || day === 6;
156
+ }
157
+ function buildHolidaySet(holidays) {
158
+ if (!(holidays === null || holidays === void 0 ? void 0 : holidays.length)) {
159
+ return new Set();
160
+ }
161
+ const set = new Set();
162
+ for (const h of holidays) {
163
+ const d = toDateOnly(new Date(h).getTime());
164
+ if (!isNaN(d.getTime())) {
165
+ set.add(toDateKey(d));
166
+ }
167
+ }
168
+ return set;
169
+ }
170
+ function isNonBusinessDay(d, holidaySet) {
171
+ return isWeekend(d) || (holidaySet.size > 0 && holidaySet.has(toDateKey(d)));
172
+ }
173
+ /**
174
+ * Add business days to a date (epoch ms), skipping weekends and holidays.
175
+ * Returns the resulting date as epoch ms.
176
+ */
177
+ function addBusinessDays(startMs, days, holidaySet) {
178
+ const result = toDateOnly(startMs);
179
+ if (!isFinite(result.getTime())) {
180
+ return result.getTime();
181
+ }
182
+ const intDays = Math.trunc(days);
183
+ if (intDays === 0) {
184
+ return result.getTime();
185
+ }
186
+ const direction = intDays > 0 ? 1 : -1;
187
+ let remaining = Math.abs(intDays);
188
+ while (remaining > 0) {
189
+ result.setUTCDate(result.getUTCDate() + direction);
190
+ if (!isNonBusinessDay(result, holidaySet)) {
191
+ remaining--;
192
+ }
193
+ }
194
+ return result.getTime();
195
+ }
196
+ /**
197
+ * Count business days between two dates (epoch ms), skipping weekends and holidays.
198
+ * Positive when `toMs` is after `fromMs`, negative otherwise.
199
+ */
200
+ function businessDayDiff(fromMs, toMs, holidaySet) {
201
+ const start = toDateOnly(fromMs);
202
+ const end = toDateOnly(toMs);
203
+ if (!isFinite(start.getTime()) || !isFinite(end.getTime())) {
204
+ return 0;
205
+ }
206
+ const direction = end.getTime() >= start.getTime() ? 1 : -1;
207
+ const cursor = new Date(start.getTime());
208
+ let count = 0;
209
+ while (toDateKey(cursor) !== toDateKey(end)) {
210
+ cursor.setUTCDate(cursor.getUTCDate() + direction);
211
+ if (!isNonBusinessDay(cursor, holidaySet)) {
212
+ count++;
213
+ }
214
+ }
215
+ return count * direction;
216
+ }
217
+ function resolveDateAwareTokens(formula, data, dateFieldPaths) {
218
+ return formula.tokens.map((t) => {
219
+ if (t.type === 'field') {
220
+ const raw = resolvePdfDataValues(data, t.path);
221
+ if (dateFieldPaths.has(t.path)) {
222
+ const ms = parseDateValue(raw);
223
+ return { kind: 'date', value: isNaN(ms) ? 0 : ms };
224
+ }
225
+ return { kind: 'number', value: valueToNumber(raw) };
226
+ }
227
+ if (t.type === 'number') {
228
+ return { kind: 'number', value: valueToNumber(t.value) };
229
+ }
230
+ return t;
231
+ });
232
+ }
233
+ /**
234
+ * Apply an operator to two typed values with date-aware, business-day semantics:
235
+ * date + number → add business days → date
236
+ * number + date → add business days → date
237
+ * date - number → sub business days → date
238
+ * date - date → business day diff → number
239
+ * number ± number → normal → number
240
+ */
241
+ function applyDateOp(a, op, b, holidaySet) {
242
+ if (a.kind === 'date' && b.kind === 'number') {
243
+ if (op === '+') {
244
+ return { kind: 'date', value: addBusinessDays(a.value, b.value, holidaySet) };
245
+ }
246
+ if (op === '-') {
247
+ return { kind: 'date', value: addBusinessDays(a.value, -b.value, holidaySet) };
248
+ }
249
+ }
250
+ if (a.kind === 'number' && b.kind === 'date' && op === '+') {
251
+ return { kind: 'date', value: addBusinessDays(b.value, a.value, holidaySet) };
252
+ }
253
+ if (a.kind === 'date' && b.kind === 'date' && op === '-') {
254
+ return { kind: 'number', value: businessDayDiff(a.value, b.value, holidaySet) };
255
+ }
256
+ return { kind: 'number', value: applyOp(a.value, op, b.value) };
257
+ }
258
+ function evalDateFlat(tokens, holidaySet) {
259
+ const list = [...tokens];
260
+ for (let i = 1; i < list.length - 1;) {
261
+ const t = list[i];
262
+ if ('type' in t && t.type === 'operator' && (t.value === '+' || t.value === '-')) {
263
+ const left = list[i - 1];
264
+ const right = list[i + 1];
265
+ if (isTypedValue(left) && isTypedValue(right)) {
266
+ const result = applyDateOp(left, t.value, right, holidaySet);
267
+ list.splice(i - 1, 3, result);
268
+ continue;
269
+ }
270
+ }
271
+ i += 2;
272
+ }
273
+ const single = list[0];
274
+ return isTypedValue(single) ? single : { kind: 'number', value: 0 };
275
+ }
276
+ function evalDateAwareTokens(tokens, holidaySet) {
277
+ if (tokens.length === 0) {
278
+ return { kind: 'number', value: 0 };
279
+ }
280
+ if (tokens.length === 1 && isTypedValue(tokens[0])) {
281
+ return tokens[0];
282
+ }
283
+ const list = [...tokens];
284
+ let idx = 0;
285
+ while (idx < list.length) {
286
+ if ('type' in list[idx] && list[idx].type === 'lparen') {
287
+ const close = findMatchingParen(list, idx);
288
+ if (close === -1) {
289
+ break;
290
+ }
291
+ const inner = list.slice(idx + 1, close);
292
+ const result = evalDateAwareTokens(inner, holidaySet);
293
+ list.splice(idx, close - idx + 1, result);
294
+ continue;
295
+ }
296
+ idx++;
297
+ }
298
+ return evalDateFlat(list, holidaySet);
299
+ }
300
+ /*
301
+ * ---------------------------------------------------------------------------
302
+ * Public API
303
+ * ---------------------------------------------------------------------------
304
+ */
121
305
  /**
122
306
  * Evaluate a structured formula with the given data.
123
307
  * Field tokens are resolved via resolvePdfDataValues; string values are converted to number.
124
- * Supports +, -, *, / and parentheses. Returns 0 when formula is empty or invalid.
308
+ * Supports +, -, *, / and parentheses.
309
+ *
310
+ * Returns `null` when the formula is empty **or** when any field token resolves
311
+ * to null / undefined / empty / non-numeric (non-date) — making the entire
312
+ * calculation blank instead of silently substituting 0.
313
+ *
314
+ * When `dateFieldPaths` is provided, date fields are resolved to epoch-ms and
315
+ * arithmetic follows business-day semantics — weekends and holidays are skipped
316
+ * when adding/subtracting days, and date diffs count only business days.
125
317
  */
126
- export function evaluateFormula(formula, data) {
318
+ export function evaluateFormula(formula, data, dateFieldPaths, holidays) {
127
319
  var _a;
128
320
  if (!((_a = formula === null || formula === void 0 ? void 0 : formula.tokens) === null || _a === void 0 ? void 0 : _a.length)) {
129
- return 0;
321
+ return null;
322
+ }
323
+ if (!hasAllFieldValues(formula, data, dateFieldPaths)) {
324
+ return null;
325
+ }
326
+ if (dateFieldPaths === null || dateFieldPaths === void 0 ? void 0 : dateFieldPaths.size) {
327
+ const resolved = resolveDateAwareTokens(formula, data, dateFieldPaths);
328
+ const holidaySet = buildHolidaySet(holidays);
329
+ const result = evalDateAwareTokens(resolved, holidaySet);
330
+ return result.value;
130
331
  }
131
332
  const resolved = resolveTokens(formula, data);
132
333
  return evalResolvedTokens(resolved);
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-formula.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/evaluate-formula.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate-formula.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/evaluate-formula.utils.ts"],"names":[],"mappings":"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"}
@@ -15,16 +15,17 @@ export declare function tokenizeExpression(expression: string): ExpressionPart[]
15
15
  * Invalid or unknown identifiers are skipped (or could be left as placeholder); only known paths become field tokens.
16
16
  */
17
17
  export declare function parseExpression(expression: string, validPaths: Set<string>, pathToLabel: Map<string, string>): FormulaToken[];
18
- export interface BackspaceBetweenFieldsResult {
19
- newExpression: string;
20
- newCaret: number;
18
+ export interface NormalizeMergeTagsResult {
19
+ normalized: string;
20
+ removed: {
21
+ start: number;
22
+ end: number;
23
+ } | null;
21
24
  }
22
25
  /**
23
- * If Backspace at caret deletes a space (or whitespace) that is between two field tokens,
24
- * returns the new expression and caret:
25
- * - If there is more than one space between the two fields: delete only one space.
26
- * - If there is exactly one space: remove the left field and the space.
27
- * Otherwise, returns null.
26
+ * When two merge tags (valid field paths) become adjacent with no separator,
27
+ * removes the LEFT tag so merge tags stay atomic. Returns the normalized
28
+ * expression and the removed range (for caret adjustment).
28
29
  */
29
- export declare function backspaceBetweenTwoFields(expression: string, caretIndex: number): BackspaceBetweenFieldsResult | null;
30
+ export declare function normalizeMergeTags(expression: string, validPaths: Set<string>): NormalizeMergeTagsResult;
30
31
  //# sourceMappingURL=expression.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAcjF;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAgBvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,YAAY,EAAE,CAyChB;AAED,MAAM,WAAW,4BAA4B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACnB,4BAA4B,GAAG,IAAI,CAsCrC"}
1
+ {"version":3,"file":"expression.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAcjF;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAgBvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,YAAY,EAAE,CAyChB;AAED,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,wBAAwB,CAqC1B"}
@@ -18,7 +18,7 @@ export function tokensToExpression(formula) {
18
18
  .replace(/\s+/g, ' ')
19
19
  .trim();
20
20
  }
21
- // Field paths may contain hyphens (e.g. fillable_recipient_uuid with UUIDs)
21
+ // Field paths may contain hyphens (e.g., fillable_recipient_uuid with UUIDs)
22
22
  const EXPRESSION_REGEX = /[A-Za-z_][A-Za-z0-9_.-]*|\d+(?:\.\d+)?|[()+\-*/]|\s+|./g;
23
23
  export function tokenizeExpression(expression) {
24
24
  const tokens = [];
@@ -82,48 +82,46 @@ export function parseExpression(expression, validPaths, pathToLabel) {
82
82
  return tokens;
83
83
  }
84
84
  /**
85
- * If Backspace at caret deletes a space (or whitespace) that is between two field tokens,
86
- * returns the new expression and caret:
87
- * - If there is more than one space between the two fields: delete only one space.
88
- * - If there is exactly one space: remove the left field and the space.
89
- * Otherwise, returns null.
85
+ * When two merge tags (valid field paths) become adjacent with no separator,
86
+ * removes the LEFT tag so merge tags stay atomic. Returns the normalized
87
+ * expression and the removed range (for caret adjustment).
90
88
  */
91
- export function backspaceBetweenTwoFields(expression, caretIndex) {
92
- if (caretIndex <= 0) {
93
- return null;
89
+ export function normalizeMergeTags(expression, validPaths) {
90
+ if (validPaths.size === 0) {
91
+ return { normalized: expression, removed: null };
94
92
  }
95
- const parts = tokenizeExpression(expression);
96
- let pos = 0;
97
- const withPos = [];
98
- for (const part of parts) {
99
- withPos.push({ part, start: pos, end: pos + part.value.length });
100
- pos += part.value.length;
101
- }
102
- const deleteIdx = caretIndex - 1;
103
- const spacePartIdx = withPos.findIndex(p => p.start <= deleteIdx && deleteIdx < p.end);
104
- if (spacePartIdx < 0) {
105
- return null;
106
- }
107
- const spacePart = withPos[spacePartIdx];
108
- if (spacePart.part.type !== 'text' || !/^\s+$/.test(spacePart.part.value)) {
109
- return null;
110
- }
111
- const prevIdx = spacePartIdx - 1;
112
- const nextIdx = spacePartIdx + 1;
113
- if (prevIdx < 0 || nextIdx >= withPos.length) {
114
- return null;
115
- }
116
- if (withPos[prevIdx].part.type !== 'field' || withPos[nextIdx].part.type !== 'field') {
117
- return null;
118
- }
119
- const spacePartLength = spacePart.part.value.length;
120
- if (spacePartLength > 1) {
121
- const newExpression = expression.slice(0, deleteIdx) + expression.slice(deleteIdx + 1);
122
- const newCaret = deleteIdx;
123
- return { newExpression, newCaret };
93
+ const pathsByLength = [...validPaths].sort((a, b) => b.length - a.length);
94
+ for (let i = 0; i < expression.length; i++) {
95
+ for (const path1 of pathsByLength) {
96
+ if (i + path1.length > expression.length) {
97
+ continue;
98
+ }
99
+ const slice1 = expression.slice(i, i + path1.length);
100
+ if (slice1 !== path1) {
101
+ continue;
102
+ }
103
+ const beforeFirst = expression[i - 1];
104
+ if (beforeFirst !== undefined && /[A-Za-z0-9_.-]/.test(beforeFirst)) {
105
+ continue;
106
+ }
107
+ const restStart = i + path1.length;
108
+ for (const path2 of pathsByLength) {
109
+ if (restStart + path2.length > expression.length) {
110
+ continue;
111
+ }
112
+ const slice2 = expression.slice(restStart, restStart + path2.length);
113
+ if (slice2 !== path2) {
114
+ continue;
115
+ }
116
+ const afterSecond = expression[restStart + path2.length];
117
+ if (afterSecond !== undefined && /[A-Za-z0-9_.-]/.test(afterSecond)) {
118
+ continue;
119
+ }
120
+ const normalized = expression.slice(0, i) + expression.slice(restStart);
121
+ return { normalized, removed: { start: i, end: restStart } };
122
+ }
123
+ }
124
124
  }
125
- const newExpression = expression.slice(0, withPos[prevIdx].start) + expression.slice(withPos[nextIdx].start);
126
- const newCaret = withPos[prevIdx].start;
127
- return { newExpression, newCaret };
125
+ return { normalized: expression, removed: null };
128
126
  }
129
127
  //# sourceMappingURL=expression.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/expression.utils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { CalculatedFieldFormat } from '../../interface/types';
2
2
  /**
3
3
  * Format a calculated formula result for display using advanced settings.
4
- * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent), and prefix/postfix.
4
+ * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
5
5
  */
6
6
  export declare function formatCalculatedResult(value: number, format: CalculatedFieldFormat | undefined): string;
7
7
  //# sourceMappingURL=format-calculated-result.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAsC9D;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAC1C,MAAM,CAiCR"}
1
+ {"version":3,"file":"format-calculated-result.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA8D9D;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,qBAAqB,GAAG,SAAS,GAC1C,MAAM,CA8BR"}
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_DATE_FORMAT } from '../../constants';
1
2
  function roundValue(value, decimals, mode) {
2
3
  const factor = 10 ** decimals;
3
4
  const scaled = value * factor;
@@ -24,27 +25,47 @@ function formatIntegerPart(s, thousandsSeparator, decimalSeparator) {
24
25
  }
25
26
  return parts.join(sep);
26
27
  }
28
+ const DATE_FORMAT_TOKENS = {
29
+ YYYY: d => String(d.getFullYear()),
30
+ YY: d => String(d.getFullYear()).slice(-2),
31
+ MMMM: d => d.toLocaleString('en-US', { month: 'long' }),
32
+ MMM: d => d.toLocaleString('en-US', { month: 'short' }),
33
+ MM: d => String(d.getMonth() + 1).padStart(2, '0'),
34
+ M: d => String(d.getMonth() + 1),
35
+ DD: d => String(d.getDate()).padStart(2, '0'),
36
+ D: d => String(d.getDate()),
37
+ };
38
+ const DATE_TOKEN_PATTERN = new RegExp(Object.keys(DATE_FORMAT_TOKENS).join('|'), 'g');
39
+ function formatDateValue(epochMs, dateFormat) {
40
+ const date = new Date(epochMs);
41
+ if (isNaN(date.getTime())) {
42
+ return '';
43
+ }
44
+ return dateFormat.replace(DATE_TOKEN_PATTERN, match => {
45
+ const fn = DATE_FORMAT_TOKENS[match];
46
+ return fn ? fn(date) : match;
47
+ });
48
+ }
27
49
  /**
28
50
  * Format a calculated formula result for display using advanced settings.
29
- * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent), and prefix/postfix.
51
+ * Applies rounding, decimal places, thousands/decimal separators, result type (number/currency/percent/date), and prefix/postfix.
30
52
  */
31
53
  export function formatCalculatedResult(value, format) {
54
+ var _a;
32
55
  if (format == null) {
33
56
  return String(value);
34
57
  }
35
- const { decimalSeparator, decimalSeparatorEnabled, decimals, postfixText, prefixText, resultType, roundingMode, thousandsSeparator, } = format;
36
- let num = value;
37
- if (resultType === 'percent') {
38
- num = value * 100;
58
+ if (format.resultType === 'date') {
59
+ return formatDateValue(value, (_a = format.dateFormat) !== null && _a !== void 0 ? _a : DEFAULT_DATE_FORMAT);
39
60
  }
40
- const rounded = roundValue(num, decimals, roundingMode);
61
+ const { decimalSeparator, decimalSeparatorEnabled, decimals, postfixText, prefixText, roundingMode, thousandsSeparator, } = format;
62
+ const rounded = roundValue(value, decimals, roundingMode);
41
63
  const fixed = rounded.toFixed(decimals);
42
64
  const [intPart, decPart] = fixed.split('.');
43
65
  const decimalSep = decimalSeparatorEnabled ? decimalSeparator : '.';
44
66
  const intFormatted = formatIntegerPart(intPart, thousandsSeparator, decimalSep);
45
67
  const decSuffix = decimals > 0 ? decimalSep + (decPart !== null && decPart !== void 0 ? decPart : '') : '';
46
68
  const numberStr = intFormatted + decSuffix;
47
- const suffix = resultType === 'percent' ? '%' : '';
48
- return `${prefixText}${numberStr}${suffix}${postfixText}`;
69
+ return `${prefixText}${numberStr}${postfixText}`;
49
70
  }
50
71
  //# sourceMappingURL=format-calculated-result.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CACf,KAAa,EACb,QAAgB,EAChB,IAA2C;IAE3C,MAAM,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,OAAO;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QACvC,KAAK,MAAM;YACP,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QACtC;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC3C,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CACtB,CAAS,EACT,kBAA2B,EAC3B,gBAA2B;IAE3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,yBAAyB;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,GAAG,KAAK,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAClC,KAAa,EACb,MAAyC;IAEzC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,EACF,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,GACrB,GAAG,MAAM,CAAC;IAEX,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnD,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"format-calculated-result.utils.js","sourceRoot":"","sources":["../../../src/utils/formula/format-calculated-result.utils.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,6 @@ export * from './evaluate-formula.utils';
4
4
  export * from './expression.utils';
5
5
  export * from './format-calculated-result.utils';
6
6
  export * from './formula-types';
7
- export * from './referenced-paths.utils';
8
7
  export * from './render-formula.utils';
9
- export * from './serialize-formula.utils';
10
8
  export * from './validate-formula.utils';
11
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
@@ -4,8 +4,6 @@ export * from './evaluate-formula.utils';
4
4
  export * from './expression.utils';
5
5
  export * from './format-calculated-result.utils';
6
6
  export * from './formula-types';
7
- export * from './referenced-paths.utils';
8
7
  export * from './render-formula.utils';
9
- export * from './serialize-formula.utils';
10
8
  export * from './validate-formula.utils';
11
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/formula/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC"}
@@ -7,5 +7,5 @@ export interface FormulaValidationResult {
7
7
  * Validates a structured formula.
8
8
  * Rules: not empty, valid operator placement, balanced parentheses, supported operators only, all field paths exist.
9
9
  */
10
- export declare function validateFormula(formula: StructuredFormula | undefined | null, validPaths: Set<string>): FormulaValidationResult;
10
+ export declare function validateFormula(formula: StructuredFormula | undefined | null, validPaths: Set<string>, knownDateFields?: Set<string>): FormulaValidationResult;
11
11
  //# sourceMappingURL=validate-formula.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-formula.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/validate-formula.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,EAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,uBAAuB,CA0EzB"}
1
+ {"version":3,"file":"validate-formula.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/formula/validate-formula.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,EAC7C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,uBAAuB,CAgGzB"}
@@ -1,3 +1,4 @@
1
+ import { MAX_DATE_CALC_DAYS } from '../../constants';
1
2
  function isOperatorToken(t) {
2
3
  return t.type === 'operator';
3
4
  }
@@ -8,7 +9,7 @@ function isOperandToken(t) {
8
9
  * Validates a structured formula.
9
10
  * Rules: not empty, valid operator placement, balanced parentheses, supported operators only, all field paths exist.
10
11
  */
11
- export function validateFormula(formula, validPaths) {
12
+ export function validateFormula(formula, validPaths, knownDateFields) {
12
13
  var _a;
13
14
  const errors = [];
14
15
  if (!((_a = formula === null || formula === void 0 ? void 0 : formula.tokens) === null || _a === void 0 ? void 0 : _a.length)) {
@@ -78,6 +79,19 @@ export function validateFormula(formula, validPaths) {
78
79
  if (last && (last.type === 'operator' || last.type === 'lparen')) {
79
80
  errors.push('Formula must end with an operand or closing parenthesis');
80
81
  }
82
+ if (knownDateFields === null || knownDateFields === void 0 ? void 0 : knownDateFields.size) {
83
+ const hasDateField = tokens.some(t => t.type === 'field' && knownDateFields.has(t.path));
84
+ if (hasDateField) {
85
+ const hasMultiplyOrDivide = tokens.some(t => t.type === 'operator' && (t.value === '*' || t.value === '/'));
86
+ if (hasMultiplyOrDivide) {
87
+ errors.push('Multiply (*) and divide (/) operators cannot be used with date fields. Only +, -, and parentheses are allowed.');
88
+ }
89
+ const hasLargeNumber = tokens.some(t => t.type === 'number' && Math.abs(Number(t.value)) > MAX_DATE_CALC_DAYS);
90
+ if (hasLargeNumber) {
91
+ errors.push(`Number of days cannot exceed ${MAX_DATE_CALC_DAYS} in date calculations.`);
92
+ }
93
+ }
94
+ }
81
95
  return {
82
96
  valid: errors.length === 0,
83
97
  errors,